酒精浓度检测仪设计
6.系统总体设计
6.1 硬件总体框图
MQ-3传感器模块 A/D转换模块
MCU控制中心 LCD显示模块 报警电路与待机指示灯电路 按键
23
酒精浓度检测仪设计
6.2 程序流程图
开始 检测按键k1与k2是否按下 k1与k2未按下 标志数flag为初始值1 k2按下 标志数flag置一 k1按下 标志数flag置零 执行待机程序,液晶显示简易计时,不检测和不显示酒精浓度 执行酒精浓度的实时检测,显示和报警 24
酒精浓度检测仪设计
6.3 硬件调试
在制作实物时有忘记连接、虚焊、飞线以及连接错误等情况,好在都成功检查了出来并改善了。目前硬件工作正常。
制作过程中最严重的问题是将液晶的数据口与P0口连接错误,完全倒置连接。考虑到P0口与液晶数据口连接处布线密集,飞线难度大,最后既定,将8根数据线剪断,再焊上两排排针,用杜邦线连接,最后效果很好。
硬件的连接已经在前面各节中详细介绍,此处不再赘述。电路原理图和实物照片参见附录一和附录二。
6.4 软件调试
本设计所用编译软件时keil。
各模块的软件设计已经在前面各节中介绍,这里主要介绍下标志数的应用,按键消抖和松手检测,定时器和定时器中断,主要谈及它们的原理以及软件实现过程。
6.4.1 标志数的应用(主函数运行待机程序还是检测程序的判断)
为了能让主函数分清是执行执行待机程序还是检测程序报警程序,引进标志
数flag。
当flag为1时执行待机程序: while(flag==1) {
……待机程序…… }
当flag为0时执行检测报警程序: while(flag==0) {
……检测报警程序…… }
25
酒精浓度检测仪设计
在初始化函数中先将flag置一: flag=1;
上电后则进入待机状态。
按键k1后使flag置零,执行检测报警程序。按键k2后使flag置零,又执行待机程序。
值得注意的是要在执行待机程序或检测报警程序前,执行待机程序的程序尾部,以及执行检测报警程序的程序尾部多加入按键检测程序:
if(k1==0) //按键检测 { }
if(k2==0) //按键检测 { }
delay(5); //消抖 if(k2==0)
flag=1;
delay(5); //消抖 if(k1==0) flag=0;
while(!k1); //松手检测
while(!k2); //松手检测
这样就可以重新设置flag,再执行完待机程序或检测报警程序后,判断接下来要执行什么程序。
6.4.2 按键的消抖与松手检测的程序实现
为什么要消抖?主要在手刚刚按下轻触开关时,会有抖动,有抖动时,程序会快速跑走,这样有可能等同于按了两下或多下按键的效果。
消抖原理:在检测到按键后,立刻延时约五毫秒,即延时消抖,这样就过了抖动时间,之后手的按键力度是非常稳定的。注意延时结束后立马在检测下按键是否还按下,以免因其它抖动误判。程序如下。
26

