基于51单片机的酒精浓度测试系统方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
第1章绪论 1
1.1 课题选题依据和制作意义 1
1.2 国外研究成果的概述 1
1.3 研究此课题的途径 2
1.4 此设计的构成和容 2
第2章系统的工作原理与结构 3
2.1 工作原理 3
2.2 结构框图 4
2.3 酒精浓度检测仪的整体结构组成 4
第3章检测仪的硬件设计 4
3.1 单片机的选择 4
3.2 酒精浓度检测的设计 6
3.2.1 MQ-3气敏传感器的结构和外形 7
3.2.2 MQ-3灵敏度特性曲线 8
3.2.3 MQ-3的标准工作条件和环境条件 8 3.2.4酒精浓度信号的采集 9
3.3 模数转换电路的设计 10
3.3.1 ADC0809的特点 10
3.3.2 模数转换电路 10
3.4 按键设定阈值及阈值存储电路的设计 11 3.5 液晶接口电路的设计 11
3.6 声光报警电路的设计 12
3.7 单片机与PC机串口通讯 13
3.8 晶振电路的设计 13
3.9 复位电路的设计 14
3.10 附加功能电路的设计 14
第4章检测仪的整体原理图和实物图 15
第5章检测仪的软件实现 16
5.1 A/D转换的软件实现 16
5.2 阈值设定及显示的软件控制 17
5.3 整体软件控制流程 18
第6章检测仪的软件功能调试 20
6.1 按键修改酒精阈值程序 20
6.2 模数转换测试 20
6.3 液晶显示程序设计 21
6.4 声光报警测试 24
6.5 整体功能调试程序 24
第7章结论 25
参考文献 26
致谢 27
附录 28
附录A:全局变量头文件和延时模块 28
附录B:AD转化模块 30
附录C:24c08存储模块 31
附录D:LCD显示模块 35
附录E:主函数 41
第1章绪论
1.1 选题的依据和课题的意义
早在人类文明曙光初露之时,各大文明古国的酒文化就已萌芽。
数千年来,酒作为影响最广的一种饮品,与众多历史事件纠缠,也在各国各时期的文艺作品中经常出现。
过度饮酒已经造成了躯体或者精神的损害,并会带来不良的社会后果,如果饮酒时间和量达到一定的程度,饮酒者会无法控制自己的行为。
适当饮酒,可以使人心情愉悦、保持活力。
如果过度饮酒,那则会毁坏自己的身体。
现在人均拥有私家车的比例越来越高,汽车已经成为现代人不可缺少的交通工具。
但是,伴随而来的是各种各样的交通事故,尤其是酒驾,给自己和别人的生命财产带来了严重的威胁,也同样给家人带来了痛苦。
所以说在家中备一个酒精检测仪,在每次驾车之前测试一下,这是对家庭对社会对他人负责的体现。
亦或者企业杜宇酒精泄露的检测、监控。
这对保护员工、居民的人生安全是必不可少的。
所以,酒精浓度检测仪拥有极大的市场前景和需求
1.2 国外研究概况
在这个信息技术急速发展的20世纪,传感技术渐渐完善,并且在人们的生活中有着完美的体现。
正因为传感器在众多领域中都有着不可或缺的作用,所以,高准确率,高稳定性,小型化,低能耗和智能数字化成了它转变的趋势,警察经常使用一种便于携带的酒精测试仪,它通过驾驶员呼出的气体从而来确定驾驶员是否饮酒,更甚者能依据体温、呼吸频率等众多情况,当场作出驾驶员喝酒后身体里的酒精含量。
因此可见,高准确度、高稳定性、小型化以及低能耗的酒精浓度测试仪是今后发展的必然趋势。
迄今为止,共有五种类型可以对气体中酒精含量进行检测,分别是燃料电池型、半导体型、红外线型、气体色谱分析型和比色型,但是为了使用方便所以目前使用的只有燃料电池型和半导体型。
当今世界最为广泛研究的环保型能源就是燃料电池,它可以把可燃气体转化为电能却不产生污染。
燃料电池的一个分支就是就是酒精传感器。
以白金为电极的燃料电池酒精传感器,在满是特种催化剂的燃烧室,可以使进入燃烧室的酒精充分燃烧使之成为电能,换句话说就是产生电压在两个电极上,在外接负载上消耗电能。
这个电压正比于计入燃烧室的气体的酒精浓度。
相比于半导体,此种酒精测试仪具备了稳定性好、准确率高、抗干扰能力好的优点。
但是此种传感器的结构要求非常精确,因此制造难度比较大,此前只有美国、英国、德国此类少数几个国家能够产出,再加上材料成本就高,结果此种测试仪价格非常昂贵。
1.3 课题研究方法
(1)文献索引法:利用学校图书馆资料和文献及通过网络查询相关资料对本课题有足够深的了解,为本设计的具体模块电路做好理论准备。
(2)调查法:与身边的同学和朋友进行交流,充分考虑本设计实现的功能,尽可能完善该设计的功能。
(3)对比分析法:把此传感器与市面上想通产品进行一次比较,检验此种酒精测试仪的不足之处以及可以加以优化的部分,加以改进。
1.4 设计构成及研究容
本文设计的测试仪是用起敏传感器的,属于半导体,此传感器在根本上是一个可起变电阻,在两端加上一个固定的电压,在阻值进行线性变化时说明所处环境的酒精浓度升高,继而可以把酒精浓度变为电压。
此检测仪以C51单片机和气敏传感器为核心,并且具有声光报警以及LCD显示功能。
根据不同环境下检测,可以改变不同的阈值,超过了而定阈值便可以声光报警,提醒有危害。
采用C语言来实现其软件功能。
本设计只要包括以下容:
(1)主控芯片的选择;在此设计中选择了C51系列单片机,熟悉C51系列芯片怎样控制外围硬件电路。
(2)酒精浓度检测模块的设计;用酒精传感器来检测酒精浓度,充分理解该传感器器的工作原理,制作数据采集模块来协同完成数据的采集。
(3)A/D转换模块的设计;转换器的选择,把采集的酒精浓度的模拟信号进行转换之后发送到单片机来进行存储、处理。
(4)键盘模块的设计;使用键盘来设立酒精浓度的阈值在不同的环境里面。
(5)声光报警模块的设计;超过设定的阈值直观地给予警示。
(6)液晶显示模块的设计;准确显示出检测到的数据。
(7)各个硬件模块电路衔接。
(8)PCB的布板、元件焊接及功能调试。
第2章系统的工作原理与结构
2.1 工作原理
酒精浓度检测仪可以测试在不同地方的酒精浓度,而且可以显示出当时检测出来的结果。
我设计的这个检测仪除了有这个功能之外,还可以随意调整酒精浓度的阈值,用来区别不同条件下酒精的安全限值,同时具有声光报警功能。
主要由酒精传感器、单片机、LCD显示、键盘模块以及声光报警部分组成。
酒精传感器完成数据的采集,把测试出来的酒精浓度转变为电信号,之后传递给模数转换器,经过转换后,把得到的数字信号传递给单片机中,大年纪对输入的数字信号来进行分析模拟,然后把最终的结果用显示器显示出来。
并且同时和键盘设定的酒精阈值来对比,一旦所处地方的酒精浓度超过界限,那么单片机会发出声音或者LED闪烁来提示,以提示危害、
2.2 结构框图
硬件系统结构框图如下图2-1所示
图2-1 系统结构框图
2.3 智能酒精浓度检测仪的整体结构特点
本文设计的智能酒精浓度检测仪具有如下特点:
(1)系统是基于控制核心为单片机的数据采集系统,外围电路是以LCD和键盘为基础的显示和响应电路,无需任何其他辅助工具,使用者可以借助协同工作,完成数据的采集、存储、计算、分析等过程。
(2)系统具有低功耗、小型化、高性价比、灵敏度高等特点。
(3)以使用者携带角度出发,系统基于键盘来调控酒精浓度的阀值,配合单片机的控制,从而达到了人机相互操作、界面友好的成果。
(4)软件系统采用C语言进行编写,在兼顾实时性处理的同时,也方便了对数据的处理。
第3章检测仪的硬件设计
3.1 单片机的选择
MCS-51单片机是美国Intel公司于1980年推出的一款相当成功的产品,该系列或其兼容的单片机仍是应用的主流产品之一,该系列单片机主要包括8031,8051,8751和89C51等通用产品。
本次设计选用的是STC89C52单片机,STC89C52是低功耗、高性能的CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用宏晶高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统上可编程,亦适于常规编器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
STC89C52具有以下标准功能:8字节的Flash,256字节的RAM,32位的I/O口线,看门狗定时器,2个数据指针,3个16位定时器/计数器,1个6向量2级中断结构,全双工串行口,片晶振及时钟电路。
除此,STC89C52可降至0Hz
静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,容被保存,振荡器被冻结。
控制核心为STC89C52单片机,用来提高IO口的利用率,凭借扩展一片8255芯片来实现液晶显示的功能。
单片机的IO口控制图如下图3-1-1所示
图3-1-1 STC89C52的接口控制图
P0口用于接收模数转换的输出,P2.0用于模数转换的时钟控制,8255的扩展通过P2.1,P2.2,P2.5口来控制,P2.3用于作为模数转换的使能控制,P2.6,P2.7口用于模拟I2C 连接外部存储芯片AT24C08,P3.3口为外部中断控制口,它可以用来控制酒精阈值,通过单片机控制8255来实现液晶显示模块的功能。
8255芯片的引脚控制图如图3-1-2所示:
图3-1-2 8255的引脚控制图
8255芯片是一种典型的可编程通用并行接口芯片,用来扩展单片机的端口,它具有3个8位的并行口,有三位工作方式,可作为单片与各种外部设备连接的接口电路。
CS:片选信号线,当该引脚为低电平时,8255被选中,允许8255与CPU通讯。
RESET:复位输入线,当该引脚为高电平时,部寄存器被清除,所有I/O口均被置成输入方式。
A0、A1:地址输入线。
当A0A1=00时,PA口被选中;
当A0A1=01时,PB口被选中;
当A0A1=10时,PC口被选中;
当A0A1=11时,控制寄存器被选中。
3.2 酒精浓度检测的设计
此设计的成功与否在于此设计酒精浓度检测是否准确,其中最重要的是酒精的检测依靠去实现信息的采集。
设计中选用灵敏度高、稳定性好的MQ-3气敏传感器,该传感器对乙醇蒸汽有很高的灵敏度和良好的选择性,快速的响应和恢复特性,长期的寿命和可靠的稳定性,以及简单的驱动电路。
它的工作原理是在确定的环境条件下,环境中的酒精浓度变化将会引起电阻值的变化,且这两种变化存在着线性关系。
3.2.1 MQ-3气敏传感器的结构和外形
MQ-3气敏元件的结构和外形如图3-2-1所示
图3-2-1 MQ3气敏元件结构外形图
在上图中,由微型AL2O3陶瓷管、SnO2敏感层,测量电极和加热器构成的敏感元件固定在塑料或不锈钢制成的腔管,加热器为敏感元件提供必要的工作条件。
封装好的气敏元件有6只针状管脚,其中4只用于信号提取,2只用于提供加热电流。
3.2.2 MQ-3灵敏度特性曲线
图 3-2-2 MQ-3气敏元件的灵敏度特性曲线
在图3-2-2中给出了MQ-3气敏元件的灵敏度曲线,其中:温度20℃;相对湿度:65%;氧气浓度:21%; RL:200kΩ. Rs:气敏元件在不同气体、不同浓度时的电阻值。
R0:气敏元件在洁净空气中的电阻值。
3.2.3 MQ-3的标准工作条件和环境条件
图3-2-3 MQ-3气敏传感器阻值变化率与酒精浓度、外界温度的关系
为了更好地使用酒精传感器MQ-3,现将MQ-3的标准工作条件和环境条件进行介绍,分别如表3-2-1和表3-2-2所示:
表3-2-1 工作条件
符号参数名称技术条件备注
VC 回路电压≤15V AC or DC
VH 加热电压 5.0V±0.2V AC or DC
RL 负载电阻可调
RH 加热电阻 31Ω±3Ω室温
PH 加热功耗≤900mW
表3-2-2 环境条件
符号参数名称技术条件备注
Tao 使用温度 -10℃~50℃
Tas 储存温度 -20℃~70℃
RH 相对湿度<95%RH
O2 氧气浓度 21%(标准条件)氧气浓度会影响灵敏度特性最小值大于2%
3.2.4 酒精浓度信号的采集
详细的酒精浓度采集电路见下图3-2-4所示:
图3-2-4 酒精浓度采集电路
在上图中传感器将环境中的酒精浓度转化电压信号,在第4引脚直接输出电压信号模拟量,该模拟量将送到模数转换,通过单片机控制最终得出环境中酒精的含量,同时可以通过对电位器WR1的调节来改变输出的灵敏度。
3.3 模数转换电路的设计
此设计用的是单一的电源+5V,所以酒精浓度的电压信号也在0~5V之间,而且转换的速度应该要快一点,在此我们选用典型的8位逐次逼近型A/D转换器ADC0809.
3.3.1 ADC0809的特点
该转换器具有如下特点:
(1)分辨率为8位;
(2)转换时间为100us;
(3)很容易与微处理器连接;
(4)无须零位或者满量程调整;
(5)带有锁存控制逻辑的8通道多路转换开关,便于选择8路中的任一路进行转换;(6)带锁存器的三态数据输出。
3.3.2 模数转换电路
具体模数转换电路见图3-2-1所示
图3-2-1 模数转换
在该检测仪的设计中只用到两路通道,即通道IN0和IN1.分别为酒精浓度的电压模拟信号和电压比较器LM393的基准电压信号,D0~D7为由酒精浓度引起而产生的电压数字量输出,结果将送至单片机进行分析和处理。
3.4 按键设定阈值及阈值存储电路的设计
为了在不用环境中完成酒精浓度的检测和监控,所以要调整仪器酒精浓度数值来符合工作需求。
并且为了节省消耗的硬件资源,于是在此通过外部中断的按键操作来改变酒精浓度的不同阀值,外部中断电路见下图3-4-1所示
图3-4-1 外部中断按键电路
添加了阈值存储电路,既可以准确的看出详细设定的酒精浓度值,又能用来与刚检查出的酒精浓度做一个比较,增强了直观性。
于此选用了AT24C08作为存储器件,用单片机的P2.6,P2.7口模拟I2C与之通信,从而完成数据的读写操作。
相应的电路如图3-4-2所示
图3-4-2 AT24C08存储电路
3.5 液晶接口电路的设计
酒精浓度的显示采用1602液晶,LCD1602可显示两行英文字符,且带ASCII字符库。
LCD1602
模块部可完成显示扫描,单片机只要向LCD1602发送命令和显示容的ASCII码。
具体的接口电路见图3-5所示
图3-5 液晶接口电路图
控制信号RS、R/W和E分别由单片机控制8255的PA4,PA5,PA6口实现,要显示的信息通过调用数据处理程序传到8255的PB口。
3.6 声光报警电路的设计
当酒精浓度超过所设定标准时,通过控制单片机的P3.3口的电平来实现警报功能。
其电路见图3-6所示
图3-6 声光报警电路
如上图所示,酒精浓度超过设定的阀值时,给单片机的P3.3口低电平,则三极管导通,同时蜂鸣器工作,发光二极管也亮。
否则,单片机的P3.3口维持在高电平,三极管截止,蜂鸣器不工作,二极管也不发光。
3.7 单片机与PC机串口通讯
"串行通信”是系统之间用一根数据信号线,数据在这根数据线上一位一位地进行传输,每一位数据都占据一个固定的时间长度。
目前个人的PC机上都有这种接口(COM1,COM2),即RS-232口。
电脑的RS-232口共9根线,在简单的应用中,需要三根线即可完成通信,分别是第2脚RXD,第3脚TXD,第5脚GND.串行通信与单片机之间的接口:由于串行通信的电平逻辑定义是+15V (高电平1),-15V(低电平0),而单片机中分别用5V,0V来表示高电平1,低电平0.它们之间必须通过电平转换才能完成通信。
最常用的是MAX32电路,该连接图见图3-7所示
图3-7 串口通信电路
单片机串口通信原理:51系列单片机部集成了两个同名不同地址的串口缓冲区SBUF,一个是发送缓冲区,一个是接收缓冲区。
发送数据时MCU将数据写到发送SBUF,接收到的数据自动放到接收SBUF,无需程序指定。
串口发送和接收事件发生时,由硬件标志来通知处理器,RI 为接收事件发生标志,TI为发送完成标志,"1”为事件发生。
在串口中断打开的条件下,两者任意一种情况发生都会引起中断,单片机程序可以根据RI=1和TI=1进行相应的处理。
本检测仪需要用串口线将程序下载到单片机中,以对之进行初始化过程。
3.8 晶振电路的设计
本系统采用的是12MHZ的晶振,其电路图如图3-8所示:
图3-8 晶振电路图
XTAL1:振荡器反相放大器和部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。
3.9 复位电路的设计
单片机的复位电路如图3-9示:
图3-9 复位电路图
RST:复位输入。
晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出96个晶振周期的高电平。
特殊寄存器AUXR上的DISRT0位可以使此功能无效。
DISRT0默认状态下,复位高电平有效。
3.10 附加功能电路的设计
由于酒精浓度的检测在很大程度上受到温度的影响,为了更直观地测出不同环境中酒精的含量,这里增加一个温度传感器,以对应不同温度下酒精传感器所对应的线性关系。
DS18B02数字温度计DALLAS公司生产的单总线器件,具有线路简单、体积小的特点。
实际应用中不需要外部任何器件即可实现测温,测量温度围在-5~+125。
C之间,数字温度计的分辨率可以从9位到12位选择,且部有上、下限告警设置,使用非常方便。
数字温度计接口的电
路图如3-10所示
图3-10 DS18B02电路
P17为数字信号输入/输出端,将程序下载至单片机,开机运行,用手触摸DS18B02温度传感器,液晶上将会显示当时所处环境的温度值。
第4章检测仪的整体原理图和实物图
智能酒精检测仪的整体原理图见4-1所示
图4-1 整体原理图
酒精检测模块实物图如图4-2所示
图4-2 酒精检测模块实物图
智能酒精检测仪的实物图见4-3所示
图4-3 酒精检测仪的实物图
第5章检测仪的软件实现
5.1 A/D转换的软件实现
A/D转换的软件控制流程如图5-1所示
图5-1 AD转换流程控制
A/D转换的启动必须依靠下降沿触发,在START置低后延时一段时间(约10ms)转换才正式开始.转换过程中的所需输入时钟允许围为10KHZ~1280KHZ,在本次设计中选用500KHZ,通过定时器产生,转换完成后得到的数字量即为由酒精传感器检测到环境中的酒精含量而产生的电压值,调用数据处理程序从而可得到酒精浓度的真实值.
5.2 阈值设定及显示的软件控制
酒精浓度的阈值设定及显示的具体软件控制流程如图5-2所示
图5-2 酒精浓度的阈值设定及LCD显示的软件控制流程
当系统进行完初始化后,该检测仪在将检测到的酒精浓度进行A/D转换的同时,还在时刻检测有无外部中断的响应,一旦有按键按下,将会根据按键按下的次数选择酒精浓度表中的酒精浓度值,而且这个值将会立刻被保存于外部存储单元(AT24C08),以便与监测到的环境中的酒精浓度进行比较,完成接下来的声光报警功能.
5.3 整体软件控制流程
本酒精检测仪的软件流程图见图5-3所示
图5-3 软件方案总体流程图
该仪器软件程序主要使用C语言编写,采用了模块化结构程序设计方法,包括主程序、中断程序等。
系统在开机或者复位后,首先进行初始化、自检,然后进入中断等待,A/D转换,液晶显示三个状态,最终根据所得结果判断是否执行声光报警。
中断子程序包括预设阀值、数据存储、信息显示等操作,在进行阀值判断时用到了LM393电压比较器,程序的绝大部分时间处在数据处理上,而STC89C52单片机在一次处理数据的时间约为6us,故总体的平均功耗低。
第6章检测仪的软件功能调试
本检测仪的软件功能通过方便灵活、移植性好的C语言编程来实现,采用分模块化程序设计思想,对不同模块分别进行调试后,最后再进行整合调试。
总体说来包括6个模块,即:按键设置阀值模块、模数转换模块、液晶显示模块、声光报警模块、存储模块、延时模块。
6.1 按键修改酒精阈值程序
下面这段程序是用来设置酒精浓度的阈值的,检测仪只要处在工作状态中,不停地扫描按键,一旦检测有按键按下,通过检测按下的次数调用酒精浓度值数组就可知道酒精浓度设在哪个阈值。
那么只要阈值在没修改前,检测仪实时检测的酒精浓度值就会跟该值进行比对,超过界限蜂鸣器将会就会发出响声,同时蜂鸣器旁边的灯会亮。
经测试,虽然整个反应过程慢了点,但是效果还是符合预定的思路。
程序6-1:
Static unsigned char set_Value=6;
void INTER0(void) interrupt 0
{
set_Value++;
I2c_Write_Char(DEV_24c08ID,0x00,set_Value);
if(set_Value>20)
set_Value=0;
}
6.2 模数转换测试
酒精浓度模拟量的输入端选择为0通道,先得对ADC0809的初始化,初始化完后,进行酒精浓度的监测、分析、运算和处理,最终结果通过单片机控制8255输至液晶上显示出来,同时这个值还将与所设定的阈值进行比对以判断是否超标。
下面是关于A/D转化的模块化程序(程序6-2).
程序6-2:
uchar AD_Convert(void)
{
Start=LOW;
delay(2);
Start=HIGH;
delay(2);
Start=LOW;
while(!EOC);
OE=HIGH;
temp=P0;
return temp;
}
6.3 液晶显示程序设计
这里所使用的是LCD1602液晶,可显示两行字符,每行16个字符。
以下是对其的初始化程序,为了达到实时正确显示所需要的信息,我们将对检测仪的液晶显示模块进行单独的测试。
要想1602液晶正常显示,得对其进行写命令操作和写数据操作,以下的程序可以在液晶的第一行显示"My college!”.
程序6-3:
#include<reg51.h>
#include <INTRINS.H>
#include "ABSACC.H"
#define a8255_PA XBYTE[0xD1FF] /*PA口地址*/
#define a8255_PB XBYTE[0xD2FF] /*PB口地址*/
#define a8255_PC XBYTE[0xD5FF] /*PC口地址*/
#define a8255_CON XBYTE[0xD7FF] /*控制字地址*/
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={"My collge!"};
void delay(int ms)
{
int i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*遇忙等待函数*/
void WaitForEnable(void)
{
_nop_();
_nop_();
while(a8255_PA&0x40); //1忙
a8255_PA=0xbf; //10111111
}
/*写命令*/
void write_(uchar )
{ a8255_CON=0x80;
WaitForEnable( );
a8255_PA=0x8f; //10001111
a8255_PB=;
delay(2);
a8255_PA=0xcf; //11001111
delay(2);
a8255_PA=0x8f; //10001111
}
/***********写数据函数*************/ void write_data(uchar dat)
{
a8255_CON=0x80;
WaitForEnable();
a8255_PA=0x9f; //10011111
a8255_PB=dat;
delay(2);
a8255_PA=0xdf; //11011111
delay(2);
a8255_PA=0x9f;
}
/***************LCD1602初始化*****************/
void lcdinit (void)
{
a8255_PA=0xff;
a8255_CON=0x80;
a8255_PA=0x9f;
write_(0x38);
write_(0x0f); //00001111 开显示,开光标,不闪烁
write_(0x06); //00000111 指针加1
write_(0x01); //清屏
write_(0x80);
//write_(0x80);
}
void main( )
{ int num;
lcdinit();
for(num=0;num<10;num++)
{
write_data(table[num]);
delay(20);
}
while(1);
}
6.4 声光报警测试
为了达到设定的要求,酒精浓度超过阀值时,由单片机控制实现声光报警功能,给单片机的P3.3口一个低电平,蜂鸣器就会响,灯会亮。
以下是相应的模块程序。
程序6-4:
Sbit Beep=P3^3;
if(j>=set_Value)
{
Beep=0;
delay_ms(200);
Beep=1;
delay_ms(20);
}
6.5 整体功能调试程序
本设计采用模块化程序设计结构,方便调试,易于查错,可移植性强。
详细的模块程序请查看相应的附录,该检测仪的整体功能实现即由每个模块的分工协作来实现。
将程序在Keil 编译器中编译成功后,生成HEX文件,然后将程序烧录到单片机中,上电即可进行工作了。
上电后该酒精检测仪将按照初始化的程序进行工作,酒精浓度阈值为当初设定的,超过阈值则会产生报警。
一旦有设定酒精浓度阈值的按键按下,并且检测按键按下的次数,则酒精浓度的阈值即被重新设定,在没被下一次设定前,实时检测的酒精浓度将与它进行比较,超过该界限值即报警,同时酒精浓度值一直将会显示出来。
第7章结论
经过近半年时间的不断查找资料、设计原理图、布板、焊接以及软、硬件调试,该检测仪基本实现了既定的功能。
可以进行酒精浓度阈值设定、声光报警、以及酒精浓度的显示,不过整个检测仪的反应速率相对较慢,经分析可能与单片机的处理的位数、环境的温度有关,因为环境的温度会对酒精传感器的灵敏度造成很大的影响,但酒精传感器良好的稳定性和选择性使得检测仪抗干扰性很强。
结构简单、体积小、携带方便等优点相信会使它具有很好的市场前景。
总之,虽然在这过程当中遇到过很多阻碍,比如原理图中有些元件设置不对导致没有导入PCB工程中,还有部分因为封装问题导致生成的PCB出现错误,不过有了这些错误同时让自己对知识有了更深一层的了解,培养了自己独立思考问题、解决问题的能力。