xx本科生毕业设计(论文)
unsigned char Getkeyboard(void) {
unsigned char number = 0; unsigned char i;
//行输入低电平
ROW1=ROW2=ROW3=0;
//如果列输出不全为高,则说明有键按下 if ((COL1!=1)||(COL2!=1)||(COL3!=1)||(COL4!=1)) {
//输入011 ROW1=0; ROW2=ROW3=1; for (i=0;i<30;i++); if (COL1==0) return 1; else if (COL2==0) return 2; else if (COL3==0) return 3; else if (COL4==0) return 4; //输入101 ROW2=0; ROW1=ROW3=1; for (i=0;i<30;i++); if (COL1==0) return 5; else if (COL2==0) return 6; else if (COL3==0) return 7; else if (COL4==0) return 8; //输入110 ROW3=0; ROW1=ROW2=1; for (i=0;i<30;i++); if (COL1==0) return 9; else if (COL2==0) return 10; else if (COL3==0) return 11;
第 31 页 共 61 页
xx本科生毕业设计(论文)
}
else if (COL4==0) return 12; //没有检测到列低电平 return 99; } return 99;
第 32 页 共 61 页
xx本科生毕业设计(论文)
5 系统调试
5.1 数据采集调试
压力传感器的数据采集是压力检测系统的关键部分。压力的采集使用电阻应变式压力传感器,将传感器接到相应的端口,观察采集的压力是否正常。由应变片的形变,使得电阻值也随之改变,输出变化后的电压值,经过放大,输送给单片机。从而显示当前的压力大小。分别用已知质量的砝码,物体放置在压力托盘上,观察液晶显示,判断误差是否在可控范围内。如表5.1所示。
表5.1 数据采集结果记录表
序号 1 2 3 4 5 6 7 8 9 10 11 12
被测物体质量(kg)
0.1 0.2 0.5 1.0 1.5 2.0 3.0 4.0 5.0 6.0 7.0 8.0
测量结果(kg)
0.092 0.191 0.490 0.990 1.489 1.988 2.988 3.987 4.986 5.985 6.984 7.984
绝对误差(kg)
-0.008 -0.009 -0.010 -0.010 -0.011 -0.012 -0.012 -0.013 -0.014 -0.015 -0.016 -0.016
引用误差(%)
-0.08 -0.09 -0.10 -0.10 -0.11 -0.12 -0.12 -0.13 -0.14 -0.15 -0.16 -0.16
“测量结果”是用单片机在A/D芯片输出端读取到的转换结果。由结果我们可以看到,使用24位A/D芯片HX711后,本系统的数据采集精度较高,与实际数据偏差值较小。由测量数据与真值,在被测物体质量在较小时,测量结果误差较小,被测物体质量越大,测量误差越大。被测物体质量在0.1~2.0kg时,精度达到9.6g;被测物体质量在2.0~6.0kg时,精度达到12.75g;被测物体在6.0~10kg时,精度达到15.7g。求得该系统精度大概为12g左右,基本满足设计要求。 5.2 数据统计分析调试
连续放置物体于托盘上,按手动存储即可将当前被测物体的实时压力值,保存到系统。存储次数不要超过八次,按键选择数据统计分析功能。程序即调用相应的子程序,开始运行处理数据。计算均值,最值,中位数,众数。首先要将存储后的数据按从小到大排序。均值的计算即将所存储的数据相加求平均值。最值即选中排序后的数组直接读取,输出显示最大(小)值。中位数即选择排序后的中间的数输出,若为奇数个,则从小到大排序后的中间的数即为中位数;若为偶数个,排序后中间的两个数求平均值即为所求中位数。众数求法依次将一个数据与后面的数据进行比较,找出相同的数据,出现次数最多的数据显示输出,显示出现次数,和原数据大小。若有两个数据出现次数相同(出现次数大于1次),则将两个数据全部显示输出。经调试各按键均能准确进行系统
第 33 页 共 61 页
xx本科生毕业设计(论文)
功能选择,各功能也可以实现。 5.3 声光报警调试
程序中已经设定阈值为9.999kg,进入系统主界面后,显示当前阈值为9.999kg,按阈值重设键,界面切换到阈值重设状态,再按左右键选择想要修改的数字,接着按加减键将阈值设为用户想要的值,比如设“2.000kg“,然后放置物体当达到2.000kg时,声光报警模块启动,蜂鸣器发声,LED点亮,则报警调试成功。 5.4 软件调试
在软件调试中,需要先分模块调试软件中的各个子程序,确保每个模块都能正常工作的情况下,再去调试整个软件系统。如果直接调试整个系统,一旦其中某个模块出现问题将会很难发现问题的源头,这将会影响整个系统的调试效率。 1. ADC数据采集程序模块
本系统中,采用ADC模块HX711来获取压力传感器的电压及电流信息。数据采集的精准度将直接影响整个系统的工作精度。进入中断,等待ADC转换结束。定义压力时使用long型,在调试过程中,发现压力只能调到4.23kg左右,再调大就显示乱码,在检查错误发现,是long型的范围不够,数据溢出,将压力修改为UNSIGNED LONG型。 2. 显示模块程序
12864为该系统的液晶,还液晶在KEIL 0XFD编程时有个漏洞,有些汉字不能显示。为了解决问题,上网搜索,找到方法。①下个晓奇工作室出的补丁。②用十六进制编辑软件如HexEdit打开c51.exe,搜索80FBFD,改为80FBFF即可。采用第一种方法,很好解决了问题。将显示模块函数从整个程序中单独取出,进行软件独立调试。在程序中设定LCD显示不同的字符数据,运行程序,观察LCD是否按程序的设定来显示字符,若不是,则重新检查程序编写是否正确,调整程序然后继续检测,直至LCD显示结果符合预定值。 3. 按键交互单元
将按键模块独立出来,给每个按键设定不同的功能,使用LCD显示其按键值,运行程序,按下按键并观察LCD的显示结果是否正常,是否与程序设定的按键值一致,若不一致则调试程序直至按键结果符合预定值。 5.5 实物展示
本系统硬件最终实物图如下图5.1所示。
第 34 页 共 61 页
xx本科生毕业设计(论文)
图5.1 整体系统实物
以下是系统主要模块的详细特写图。如下图5.2所示。
(a)数据采集模块 (b)单片机系统 (c)矩阵键盘模块
图5.2 系统主要模块特写图
系统开机后,会进入主菜单界面,如下图5.3所示。
第 35 页 共 61 页