重庆理工大学毕业论文 基于单片机的酒精浓度测试系统设计
这两个端口由单片机控制读写和数据的接收,由于本方案LCD1602显示数据,所以只用到了读的功能。使能端E则是控制LCD1602是否运行接P2.5,如果是高电平,LCD1602则激活启动,当为低电平时则保持待机状态。D0—D7,并行数据输入/输出引脚,用来接收的P0的8个I/O口[15]。因为接P0口,P0口在单片机中作为输出口时,输出能力较弱,应该接4.7K—10K的上拉电阻。如图3.7
图3.7 P0口的上拉电阻
3.5 报警设计
当酒精浓度到了设定的值就需要发出警报提醒检测人员超出了检测设定值,来方便的判定是否酒后酒后驾车,所以可以使用LED灯加上一个蜂鸣器来完成声光报警。在单片机电路中由于单片机的输出能力较弱驱动蜂鸣器可能会出现声音较小或不出声的情况,所以需要增设一个三极管放大电路,使输出增强。而声光报警电路最好使用并联方式,以防一条电路损坏倒是报警系统完全不能工作,而并联凡是即使一条电路损坏于另一条电路并不影响。如图3.8
16
重庆理工大学毕业论文 基于单片机的酒精浓度测试系统设计
图3.8 声光报警电路
3.6 小结
这一章具体完成了每一个功能的设计,以及在仿真中如何达到的。通过对需要进行的功能的思考,不断完善电路的设计。在仿真中对键盘的控制是比较好实现的,因为本设计的键盘是独立式的,仅仅控制酒精浓度设定值的增减,但是编程中却必须结合MQ-3酒精浓度传感器的相应比例,当1V电压减少时,就有200ppm的降低来设计,不能不根据实际情况来编写程序。LCD1602的控制就需要根据显示的数据需求来完成,这一点可以根据查LCD的指令功能表来完成。需要注意的是虽然设计中的声光报警电路十分简单,但是在仿真时就能发现其实报警输出的低电平信号并不是不变的,而是在变化,这样就会造成蜂鸣器的间隙性启动。所以在这其中很多问题都能在仿真中发现,并且想办法解决。
17
重庆理工大学毕业论文 基于单片机的酒精浓度测试系统设计
4 软件设计
4.1软件介绍
Keil软件是我常用的单片机编程软件,它不但可以进行汇编的编程也可以进行C的编程。由于在学校学习的基本上是C语言的使用,所以Keil的编程对于我比较有优势。而且Keil自带丰富的数据库,很多头文件是可以在这里面找到的,相较于自己编写能节约时间,当然要使用特别的功能也是可以自己编写后再加入数据库。在该程序中也可以将编译成功的文件生成.HEX文件,方便进行仿真和测试。
Proteus软件是我使用的仿真测试软件,该软件里有各种元件和单片机的外围器件。在该软件中可以自己进行原理图布局,使各个元件能够紧凑整齐的分布,一目了然的观察到各个模块进行工作的状态。可以实时进行检查,通过自带的万能表等工具了解到线路和仪器工作的状态和数据。通过在单片机中拷入.HEX文件,上电即可进行实验仿真。对于其中出现的结果可以在断电后立即进行修改再测试。而且对于该实验中没有的仪器也可以通过自己设计封装,最后达到想要的结果。
4.2 主程序模块
主程序主要实现将各个模块连接,并检测和显示数据,如图4.1
图4.1 主程序流程图
18
重庆理工大学毕业论文 基于单片机的酒精浓度测试系统设计
4.3 A/D转换模块
数模转换的主要功能就是将传感器送过来的电信号转换成MCU能够读取的数字信号,使得MCU能够处理传感器感应到的酒精浓度。ADC0832的转换流程如下图4.2
图4.2 ADC0832的转换流程
在进行工作时芯片的CLK口需要连接单片机的P2.3口,只有通过单片机的P2.3口,来自MCU的时钟信号向芯片输入脉冲,CS接P2.4,并在开始工作时输入低电平,直至工作结束。DO和DI连接到一根线上,DO和DI端口使用的都是DI端口的信号,DI端输入通道的信号即功能选择信号由此传送过去[16]。在第一个时钟脉冲的下沉之前DI端是有要求的,必须让DI端表现高低平,否则不能发出启示信号。在第二、三个脉冲下沉之前DI端有重要的做药,DI端此时需要通过输入的数据来选择通道的功能,不然没有办法清楚分出选用的功能[17]。
4.4 按键输入模块
本方案通过两个按键来控制设定值的增减,对MCU发出指令并在LCD上显示。按键查询式的流程图见下图4.3
19
重庆理工大学毕业论文 基于单片机的酒精浓度测试系统设计
图4.3 按键查询式的流程图
按键分别接P1.2和P1.3,由于P1端口自带上拉电阻,所以不需要像P0那样接上上拉电阻进行电压放大[17]。
4.5 液晶显示模块
液晶显示模块主要用来显示当前测量酒精浓度和预期设置的报警上限,由于显示简单直接接P0获得数据显示。LCD1602流程如下图4.4
20