酒精溶度检测仪毕业设计论文_第1页
酒精溶度检测仪毕业设计论文_第2页
酒精溶度检测仪毕业设计论文_第3页
酒精溶度检测仪毕业设计论文_第4页
酒精溶度检测仪毕业设计论文_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录TOC\o"1-2"\h\z\u1前言 11.1选题的依据及意义 11.2研究概况及发展趋势综述 22基于单片机酒精溶度测试系统的组成及原理 32.1系统设计规定 32.2系统功能 33基于单片机酒精溶度测试系统的硬件设计 53.1系统总体电路设计及工作原理 53.2酒精浓度转换电路设计 53.389C52单片机系统 83.4AD采样电路的设计 163.5液晶显示模块 183.5声光报警模块 194基于单片机酒精溶度测试系统的软件设计 204.1编译语言的选择 204.2软件功能分析 204.3主程序模块 215系统调试 325.1系统硬件调试 325.2系统软件调试 34总结 36参考文献 37致谢 38附录 39附录一原理图 39附录二PCB图 41附录三实物图 43附录四程序清单 441前言1.1选题的依据及意义根据WHO数据,全球2023年的人均纯酒精消费量为6.2L,其中欧洲地区人均达11.9L,美洲地区人均为8.7L。俄罗斯及其周边的东欧国家酒精消费量最高,另一方面为欧洲其他国家。在人均国民生产总值(GDP)低于7000美元的低收入国家,酒精消费量与人均GDP相关,GDP越高酒精消费量越高。而随着我国近年来高速发展的经济水平和居民生活水平,酒精消费量亦呈直线上升趋势,随之而来的是由于饮酒而导致的一系列社会问题。例如酒后驾驶导致的交通意外。当酒精在人体血液内达成一定浓度时,麻痹神经,导致大脑反映迟缓,肢体不受控制等症状。人对外界的反映能力及控制能力就会下降,解决紧急情况的能力也随之下降。对于酒后驾车者而言,其血液中酒精含量越高,发生撞车的几率越大。而根据世界卫组织的事故调查,大约50%—69%的交通事故与酒后驾驶有关,酒后驾驶已经被列为车祸致死的重要因素。在中国,每年由于酒后驾车引发的交通事故达数万起,其危害触目惊心,已成为交通事故的第一大“杀手”。为了实现对人权的尊重,对生命的关爱,使更多人的生命权、健康权及幸福美满的家庭能得到更好的保护,需要设计一智能仪器可以检测驾驶员体内酒精含量。目前全世界绝大多数国家都采用呼气酒精测试仪对驾驶人员进行现场检测,以拟定被测量者体内酒精含量的多少,以保证驾驶员的生命财产安全。酒精检测仪的设计与使用有着不可替代的作用,也有着相称的前景和意义。 1.2研究概况及发展趋势综述受20世纪信息技术的快速发展的影响,传感技术逐渐走向成熟,在生活生产中的得到了广泛的应用。由于传感器在各个领域都有着举足轻重的作用,因此,高精度,高可靠性,微型化,微功耗无源化和智能数字化成为其发展方向。为检查醉驾,警察经常使用一种便携式的酒精呼吸检测仪,通过检测驾驶者呼出的气体判断驾驶者是否饮酒。而目前使用的酒精呼吸检测仪只能初步显示驾驶员是否饮酒,有醉驾嫌疑的驾驶员还需要接受血检,以拟定其体内酒精含量是否超标。为简化其流程,英国内政部已推出一种超级酒精呼吸检测仪,能根据体温、呼吸频率等情况,当场判断出驾驶者体内的酒精含量。由此可见,高精度,高可靠性与微型化是酒精浓度检测仪的重要发展方向。至今为止,对气体中酒精含量进行检测的设备有燃料电池型(电化学)、半导体型、红外线型、气体色谱分析型和比色型五种类型。但由于价格和使用方便的因素,目前(截止2023年10月)常用的只有燃料电池型(电化学型)和半导体型两种。燃料电池是当前全世界都在广泛研究的环保型能源,它可以直接把可燃气体转变成电能,而不产生污染,酒精传感器只是燃料电池的一个分支。燃料电池酒精传感器采用贵金属白金作为电极,在燃烧室内充满特种催化剂,使进入燃烧室内的酒精充足燃烧转变为电能,也就是在两个电极上产生电压,电能消耗在外接负载上,此电压与进入燃烧室内气体的酒精浓度成正比。与半导体型相比,燃料电池型呼气酒精测试仪具有稳定性好,精度高,抗干扰性好的优点。但是由于燃料电池酒精传感器的结构规定非常精密,制造难度相称大,目前(2023年)只有美国、英国、德国等少数几个国家可以生产,加上材料成本高,因此价格相称昂贵,是半导体酒精传感器的几十倍。2基于单片机酒精溶度测试系统的组成及原理2.1系统设计规定设计一个基于单片机的酒精浓度检测系统,检测结果用LED或LCD显示器显示。基于STC89C52单片机,MQ-3酒精浓度传感器,本设计设计一种具有检测及超限报警功能的酒精浓度测试系统。具体技术规定如下:1、设计51单片机最小系统电路;2、设计LCD显示电路;3、设计信号采集转换电路;4、设计实时时钟电路;5、设计声光报警电路。2.2系统功能本设计采用自动检测技术和计算机技术,对人呼出的酒精气体的质量浓度进行自动测量、自动显示、声光报警,并给出数字提醒。电路结构重要由酒精传感器、测量电路、模数转换电路、单片机、驱动显示器、声光报警电路等部分组成,系统框图如图2.1所示。具体的工作过程是:呼出气体中的酒精质量浓度信号经酒敏传感器转换为0~5V的电压信号,并且该电压信号的大小与气体中的酒精质量浓度大小成正比,通过A/D转换后传送给单片机,经单片机内部的一些运算,比较程序处理后输出给LCD显示和声光报警电路进行报警。设计中选用由美国ATMEL公司生产的STC89C52作为智能检测装置的核心器件,STC89C52的P1口与AD0804的8位输出端相连,用来接受转换好的8位数据;P0口与LCD现实模块相连,有内部程序来控制各引脚电平,使LCD显示器能做出相应的显示;P2口与声光报警模块相连,用来执行报警等操作。被测环境被测环境气敏传感器A/D转换电路STC89C52键盘声光报警液晶显示图2.1硬件方案总体框图本课题分为两部分:硬件设计部分和软件设计部分。硬件部分为运用MQ3气敏传感器测量空气中酒精浓度,并转换为电压信号经A/D转换后传给单片机系统,由单片机及其外围电路进行信号的解决,显示浓度值以及超阈值声光报警。软件部分用C语言进行编程,程序采用模块化设计思想。各个子程序的功能相对独立,便于调试和修改。而硬件电路又大体可分为单片机小系统电路、A/D转换电路、声光报警电路、LCD显示电路,各部分电路的设计及原理将会在硬件电路设计部分具体介绍;程序的设计使用C语言编程。其模块框图如图2.2所示。键值扫描模块声光报警模块LCD显示模块中断服务模块AD采样程序模块主程序键值扫描模块声光报警模块LCD显示模块中断服务模块AD采样程序模块主程序图2.2系统程序模块框图3基于单片机酒精溶度测试系统的硬件设计3.1系统总体电路设计及工作原理根据自动检测系统的组成结构,该酒精溶度检测仪应当包含酒精气体传感器、信号解决电路和执行指示机构等部分。对于酒精气体传感器,只要是一般性的还原性气体传感器都可以使用,本设计考虑酒精浓度是由传感器把非电量转换为电量,传感器输出的是0-5伏的电压值并且电压值稳定,外部干扰小等。因此,可以直接把传感器输出电压值通过ADC0804采集数据送入单片机进行解决。酒精浓度监测仪的硬件电路设计重要涉及:传感器测量电路、89C51单片机系统、A/D转换电路、声光报警电路、LCD显示电路。酒精浓度监测仪硬件模块电路框图如图3.1。酒精浓度测试系统的硬件设计酒精浓度测试系统的硬件设计声光报警LCD显示声光报警LCD显示单片机控制A/D转换信号采集图3.1硬件模块电路框图3.2酒精浓度转换电路设计由于本系统直接测量的是呼气中的酒精浓度,再转换为血液中的酒精含量浓度,故采用气敏传感器。考虑到周边空气中的气体成分也许影响传感器测量的准确性,所以传感器只能对酒精气体敏感,对其他气体不敏感,故选用MQ3型气敏传感器。其有很高的灵敏度、良好的选择性、长期的使用寿命和可靠的稳定性。MQ3型气敏传感器由微型Al2O3,陶瓷管和SnO2敏感层、测量电极和加热器构成的敏感元件固定在塑料或不锈钢的腔体内,加热器为气敏元件的工作提供了必要的工作条件。传感器的标准回路有两部分组成。其一为加热回路,其二为信号输出回路,它可以准确反映传感器表面电阻值的变化。传感器的表面电阻RS的变化,是通过与其串联的负载电阻RL上的有效电压信号VRL输出面获得的。两者之间的关系表述为:RS/RL=(VC-VRL)/VRL,其中VC为回路电压为10V。负载电阻RL可调为0.5-200K。加热电压Uh为5v。上述这些参数使得传感器输出电压为0-5V。MQ3型气敏传感器的结构和外形、标准回路、传感器阻值变化率与酒精浓度、外界温度的关系图如图3.2所示,传感器集成模块电路如图3.3所示。为了使测量的精度达成最高,误差最小,需要找到合适的温度,一般在测量前需将传感器预热20s。图3.2传感器电路、结构及关系图图3.3MQ-3传感器电路原理图为了更好地使用酒精传感器MQ-3,现将MQ-3的标准工作条件和环境条件进行介绍,如表一和表二所示表一酒精传感器MQ-3标准工作条件符号参数名称技术条件备注Vc回路电路10VACORDCVh加热电压5VACORDCRL负载电阻可调0.5~200KRh加热器电阻33Ω±5%室温Ph加热功耗<800Mw表二酒精传感器MQ-3的环境条件符号参数名称技术条件备注Tao使用温度—20℃~50℃推荐使用范围20ppm~1000ppm乙醇Tas储存温度—20℃~70℃Ra相对湿度≦95%RHO2氧气溶度21%±1%(标注条件)不得小于18%氧气溶度会影响灵敏度MQ-3的灵敏度特性曲线如图3.4所示。图3.4MQ-3灵敏度特性曲线3.389C52单片机系统单片机是一种集成电路芯片,采用超大规模技术把具有数据解决能力(如算术运算,逻辑运算、数据传送、中断解决)的微解决器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),也许还涉及定期计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个虽小然而完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完毕程序设计者事先规定的任务。3.51单片机的片内结构如图3.5所示。它把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。按功能划分,它有如下功能部件组成:⑴微解决器(CPU)。⑵数据存储器(RAM)。⑶程序存储器(ROM/EPROM)。⑷4个8位并行I/O口(P0口、P1口、P2口、P3口)。⑸一个串行口。⑹2个16位定期器、计数器。⑹2个16位定期器、计数器。PSENPSEN88EOCXTAL1CPU(运算器)(控制器)数据存储器RAMP0P2程序存储器ROM/EPROMP1串行口定期器/计数器中断系统特殊功能寄存器(SFR)P3ALEEAIN7….I0XTAL288RESET图3.551单片机片内结构⑺中断系统。⑻特殊功能寄存器(SER)。上述功能部件都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。但CPU对各种功能部件的控制是采用特殊功能寄存器的集中控制方式。下面对框图2-1中各功能部件作一简朴介绍:1、中央解决器CPUCPU是单片机的核心部件,它通常由运算器、控制器和中断电路等器件组成。CPU进行算术运算和逻辑操作的字长有4位、8位、16位和32位之分,字长越长运算速度越快,数据解决能力也越强。2、存储器在单片机内部,ROM和RAM存储器是分开制造的。通常,ROM存储器容量较大,RAM存储器的容量较小,这是单片机用于控制的一大特点。(1)ROM存储器ROM存储器一般为1-64K字节,用于存放应用程序,故又称为程序存储器。(2)RAM存储器通常,单片机片内RAM存储器容量为64-256字节,最多可达48K字节。RAM存储器重要用来存放实时数据或作为通用寄存器、数据堆栈和数据缓冲器之用。3、中断系统中断系统是为使CPU具有对单片机外部或内部随机发生的事件的实时解决而设立的。中断系统由5个中断请求源,2个中断优先级。5个中断请求源为:(1)——外部中断0请求,由引脚输入,中断请求标志位为IE0。(2)——外部中断1请求,由引脚输入,中断请求标志位为IE1。(3)定期器/计数器T0溢出中断请求,中断请求标志为TF0。(4)定期器/计数器T1溢出中断请求,中断请求标志为TF1。(5)串行口中断请求,中断请求标志为TI或RI。如表三和四所示,中断请求标志位分别由特殊功能寄存器TCON和SCON的相应为锁存。IT0——选择外部中断请求为跳沿触发方式或电平触发方式的控制位。IT0=0,为电平触发方式,引脚上低电平有效。IT0=1,为跳沿触发方式,引脚上的电平从高到低的负跳变有效。IT1——选择外部中断请求为跳沿触发方式或电平触发方式,其意义和IT0类似。IE0——外部中断0的中断请求标志位。IE1——外部中断1的中断请求标志位。TF0——定期器/计数器T0溢出中断请求标志位。当启动T0计数后,定期器/计数器T0从初值开始加1计数,当最高位产生溢出时,由硬件置”1”TF1——定期器/计数器T1溢出中断请求标志位,功能和TF0类似。TR0——当为“1“时,定期器/计数器T0开始计数。TR1——功能和TR0类似。表三TCON中的中断请求标志位TCONTF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8DH8BH8AH89H88HTI——串行口的发送中断请求标志位。RI——串行口接受中断请求标志位。表四SCON中的中断请求标志位SCONTIRI位地址99H98H如表五,IE中各位功能如下:EA——中断允许总控制位EA=0,CPU屏蔽所有的中断请求,EA=1,CPU开放所有中断。ES——串行口中断允许位ES=0,严禁串口中断,ES=1,允许串口中断。ET1——定期器/计数器T1的溢出中断允许位ET1=0,严禁T1中断,ET1=1,允许T1中断。EX1——外部中断1中断允许位EX1=0,严禁外部中断1中断,EX1=1,允许外部中断1中断。ET0——定期器/计数器T0的溢出中断允许位,功能与ET1类似EX0——外部中断0中断允许位,功能与EX1类似表五IE的中断允许控制位IEEAESET1EX1ET0EX0位地址AFHACHABHAAHA9HA8H如表六,IP中各位功能如下:PS——串行口中断优先级控制位PS=1,串行口中断定义为高优先级中断,PS=0,串行口定义为低优先级中断。PT1——定期器T1中断优先级控制位PT1=1,定期器T1定义为高优先级中断,PT1=0,定期器T1定义为低优先级中断。PX1——外部中断1中断优先级控制位PX1=1,外部中断1定义为高优先级中断,PX1=0,外部中断1定义为低优先级中断。PT0——定期器T0中断优先级控制位,功能与PT1类似。PX0——外部中断1中断优先级控制位,功能与PX1类似。表六中断优先级寄存器IPIPPSPT1PX1PT0PX0位地址BCHBBHBAHB9HB8H4、定期器/计数器单片机内有两组16位定期/计数器,分别为定期器0与定期器1,两者可独立操作,各自拥有一个中断向量。定期器输入信号源为振荡器除以12的频率,而计数器输入信号源为外部引脚T0与T1,除此之外计时与计数是不分的。定期/计数器具有4种工作方式。如表4-5是工作方式寄存器TMOD。各位功能说明:GATE——门控位GATE=0,仅由运营控制位TRX(X=0,1)=1来启动定期/计数器运营。GATE=1,由TRX(X=0,1)=1和外中断引脚(或)上的高电平共同来启动定期/计数器运营。M1,M0——工作方式选择位C/——计数器模式和定期器模式选择位C/=0,为定期器模式,C/=1,为计数器模式,计数器对外部输入引脚T0或T1的外部脉冲计数。表七工作方式寄存器TMODT1方式字段T0方式字段GATEC/M1M0GATEC/M1M0如表八是定期/计数控制寄存器TCON,对各位进行如下说明;TF1,TF0——T1,T0计数溢出标志位,功能在中断系统中已说明。TR1,TR0——计数运营控制位其余在中断系统中已作说明。表八定期/计数控制寄存器TCONTF1TR1TF0TR0IE1IT1IE0IT0在这个设计中,运用了方式一和二。以下介绍这两种方式。方式一:当M1、M0为01时,定期/计数器工作与方式一,这时方式一为16位的计数器,由THX作高位和TLX作低位构成。有关控制位前面已讲述。方式二:当M1、M2为10时,定期/计数器工作在方式二。其特点:自动恢复初值的8位定期/计数器,THX作为常数缓冲器,当TLX计数溢出时,在置1溢出标志TFX的同时,还自动的将THX中的常数送至TLX,使TLX从初值开始重新计数。这种工作方式可以省去用户软件中重装初值的程序,简化初值计算,可以相称精确拟定定期时间。5、I/O接口和特殊功能部件I/O接口电路有串行和并行两种。串行I/O用于串行通信,它可以把单片机内部的并行8位数据(8位机)变成串行数据向外传送,也可以串行接受外部送来的数据并把它们变成并行数据送给CPU解决。并行I/O口电路可以使单片机和存储器或外设之间并行地传送8位数据(8位机)。通常,特殊功能部件涉及:定期器、计数器、A/D、D/A、DMA通道和系统时钟等电路。定期器、计数器用于产生定期脉冲,以实现单片机的定期控制;A/D和D/A转换器用于模拟量和数字量之间的互相转换,以完毕实时数据的采集和控制,DMA通道可以使单片机和外设之间实现数据的快速传送。总之,某一单片机内部究竟涉及哪些特殊功能部件以及特殊功能部件的数量是和它的型号有关的。单片机是整个系统的核心,对系统起监督、管理、控制作用,并进行复杂的信号解决,产生测试信号及控制整个检测过程。所以在选择单片机时,参考了以下标准。(1)运营速度。单片机运营速度一般和系统匹配即可。(2)存储空间。单片机内部存储器容量,外部可以扩展的存储器(涉及I/0Fl)空间(3)单片机内部资源。单片机内部存储资源越多,系统外接的部件就越少,这可提高系统的许多技术指标。(4)可用性。指单片机是否能很容易地开发和运用,具体涉及是否有合适的开发工具,是否适合于大批量生产、性能价格比,是否有充足的资源,是否有现成的技术资源等。(5)特殊功能。一般指可靠性、功耗、掉电保护、故障监视等。从硬件角度来看,与MCS-51指令完全兼容的新一代AT89CXX系列机,比在片外加EPROM才干相称的8031单片机抗干扰性能强,与87C51单片机技能相称,但功耗小。程序修改直接用+5V或+12V电源擦除,更显方便、并且其工作电压放宽至2.7V-6V,因而受电压波动的影响更小,并且4K的程序存储器完全能满足单片机系统的软件规定,故AT89C51单片机是构造本检测系统的更抱负的选择。3.3.289C51芯片介绍掌握MCS-51单片机,应一方面了解MCS-51的引脚,熟悉并牢记各引脚的功能,MCS-51系列中各种型号芯片的引脚是互相兼容的。制作工艺为HMOS的MCS-51的单片机都采用40只引脚的双列直插封装方式,如图3.5所示。图3.5STC89C52芯片管脚图40只引脚按其功能来分,可分为如下3类:⑴电源及时钟引脚:Vcc、Vss、XTAL1、XTAL2。电源引脚接入单片机的工作电源。Vcc接+5V电源,Vss接地。时钟引脚XTAL1、XTAL2外接晶体与片内的反相放大器构成了1个晶体振荡器,它为单片机提供了时钟控制信号。2个时钟引脚也可外接独立的晶体振荡器。XTAL1接外部的一个引脚。该引脚内部是一个反相放大器的输入端。这个反相放大器构成了片内振荡器。假如采用外接晶体振荡器时,此引脚接地。XTAL2接外部晶体的另一端,在该引脚内部接至内部反相放大器的输出端。若采用外部时钟振荡器时,该引脚接受时钟振荡器的信号,即把此信号直接接到内部时钟发生器的输入端。⑵控制引脚:、ALE、、RESET(RST)。此类引脚提供控制信号,有的还具有复用功能。①RST/VPD引脚:RESET(RST)是复位信号输入端,高电平有效。当单片机运营时,在此引脚加上连续时间大于2个机器周期(24个振荡周期)的高电平时,就可以完毕复位操作。在单片机工作时,此引脚应为≤0.5V低电平。VPD为本引脚的第二功能,即备用电源的输入。当主电源发生故障,减少到某一规定值的低电平时,将+5V电源自动接入RST端,为内部RAM提供备用电源,以保证片内RAM的信息不丢失,从而使单片机在复位后能正常进行。②ALE/引脚:ALE引脚输出为地址锁存允许信号,当单片机上电正常工作后ALE引脚不断输出正脉冲信号。当单片机访问外部存储器时,ALE输出信号的负跳沿用于单片机发出的低8位地址经外部锁存器锁存的锁存控制信号。即使不访问外部锁存器,ALE端仍有正脉冲信号输出,此频率为时钟振荡器频率的1/6。为该引脚的第二功能。在对片内EPROM型单片机编程写入时,此引脚作为编程脉冲输入端。③引脚:程序存储器允许输出控制端。在单片机访问外部程序存储器时,此引脚输出脉冲负跳沿作为读外部程序存储器的选通信号。此引脚接外部程序存储器的OE(输出允许端)。④/VPP引脚:功能为片内程序存储器选择控制端。当引脚为高电平时,单片机访问片内程序存储器,但在PC值超过0FFFH时,即超过片内程序存储器的4KB地址范围时将自动转向执行外部程序存储器内的程序。当引脚为低时,单片机只访问外部程序存储器,不管是否有内部程序存储器。⑶I/O口引脚:P0、P1、P2、P3,为四个8位I/O口的外部引脚。P0口、P1口、P2口、P3口是3个8位准双向的I/O口,各口线在片内均有固定的上拉电阻。当这3个准双向I/O口作输入口使用时,要向该口先写1,此外准双向口I/O口无高阻的“浮空”状态。由于单片机具有体积小、质量轻、价格便宜、耗电少等突出特点,所以本系统采用89C51单片机,硬件设计电路图如图1所示。89C51内部有4KB的EPROM,128字节的RAM,所以一般都要根据所需存储容量的大小来扩展ROM和RAM。本电路接高电平,没有扩展片外ROM和RAM。3.4AD采样电路的设计所谓A/D转换器就是模拟/数字转换器(ADC),是将输入的模拟信号转换成数字信号。信号输入端可以是传感器或转换器的输出,而ADC的数字信号也也许提供应微解决器,以便广泛地应用。CS、RD、WR是数字控制输入端,满足标准TTL逻辑电平。其中CS和WR用来控制A/D转换的启动信号。CS、RD用来读A/D转换的结果,当它们同时为低电平时,输出数据锁存器DB0~DB7各端上出现8位并行二进制数码。ADC0801~0805片内有时钟电路,只要在外部“CLKI”和“CLKR”两端外接一对电阻电容即可产生A/D转换所规定的时钟,其振荡频率为fCLK≈1/1.1RC。其典型应用参数为:R=10K,C=150PF,fCLK≈640KHZ,转换速度为100μs。若采用外部时钟,则外部fCLK可从CLKI端送入,此时不接R、C。允许的时钟频率范围为100KHZ~1460KHZ。INTR是转换结束信号输出端,输出跳转为低电平表达本次转换已经完毕,可作为微解决器的中断或查询信号。假如将CS和WR端与INTR端相连,则ADC0804就处在自动循环转换状态。CS=0时,允许进行A/D转换。WR由低跳高时A/D转换开始,8位逐次比较需8×8=64个时钟周期,再加上控制逻辑操作,一次转换需要66~73个时钟周期。在典型应用fCLK=640KHZ时,转换时间约为103μs~114μs。当fCLK超过640KHZ,转换精度下降,超过极限值1460KHZ时便不能正常工作。被转换的电压信号从VIN(+)和VIN(-)输入,允许此信号是差动的或不共地的电压信号。假如输入电压VIN的变化范围从0V到Vmax,则芯片的VIN(-)端接地,输入电压加到VIN(+)引脚。由于该芯片允许差动输入,在共模输入电压允许的情况下,输入电压范围可以从非零伏开始,即Vmin至Vmas。此时芯片的VIN(-)端应当接入等于Vmin的恒值电码坟上,而输入电压VIN仍然加到VIN(+)引脚上。A/D转换器一般都有这两个引脚。模拟地AGND和数字地DGND分别设立引入端,使数字电路的地电流不影响模拟信号回路,以防止寄生耦合导致的干扰。参考电压VREF/2可以由外部电路供应从“VREF/2”端直接送入,VREF/2端电压值应是输入电压范围的一半所以输入电压的范围可以通过调整VREF/2引脚处的电压加以改变,转换器的零点无调整。3.4.1ADC0804接口电路设计现以程序查询方式为例,说明ADC0804在数据采集系统中的应用,采集数据时,一方面微解决器执行一条传送指令,在该指令执行过程中,微解决器在控制总线的同时产生CS1、WR1低电平信号,启动A/D转换器工作,ADC0804经100μs后将输入模拟信号转换为数字信号存在输出锁存器中,并在INTR端产生低电平表达转换结束,并告知微解决器可来取数。当微解决器通过总线查询到INTR为低电平时,立即执行输入指令,以产生CS、RD2低电平信号到ADC0804相应引脚,将数据取出并存入存储器中。整个数据采集过程,由微解决器有序地执行若干指令来完毕。ADC0804是8位全MOS中速A/D转换器、它是逐次逼近式A/D转换器,片内有三态数据输出锁存器,可以和单片机直接接口。单通道输入,转换时间大约为100us。ADC0804转换时序是:当CS=0许可进行A/D转换。WR由低到高时,A/D开始转换,一次转换一共需要66~73个时钟周期。CS与WR同时有效时启动A/D转换,转换结束产生INTR信号(低电平有效),可供查询或者中断信号。在CS和RD的控制下可以读取数据结果。AD转换电路如图3.6所示。图3.6ADC0804模数转换电路图3.5液晶显示模块LCD1602字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16×1,16×2,20×2和40×2行等的液晶显示模块,模块组件内部重要由LCD显示屏、控制器、列驱动器和偏压产生电路构成。其硬件原理图见图3.7。图3.7液晶显示原理图3.5声光报警模块本设计采用蜂鸣器和发光二级管进行报警,当测量的溶度值超过阈值是,蜂鸣器和二极管发生相应的变换。其原理为:当P2.1、P2.2或P2.3口为低电平时,发光二极管点亮,为高电平时熄灭,P2.4为高电平时,蜂鸣器响,为低电平时不响。具体接法如图3.8.图3.8声光报警原理图4基于单片机酒精溶度测试系统的软件设计系统软件采用C语言,在WindowsXP环境下采用KeiluVision2进行编写,对STC89C52进行编程以实现各项功能。在整个软件的设计过程中,使用了模块化的结构设计思想使得程序具有灵活可变的特点并且具有较强的可移植性,为系统的二次开发及类似系统的开发提供了极大的便利。4.1编译语言的选择对于单片机的开发应用中,逐渐引入了高级语言,C语言就是其中的一种。汇编语言的可控性较高级语言来说更具优越性。程序编写语言比较常见的有C语言、汇编语言。汇编语言的机器代码生成效率高,控制性好,但就是移植性不高。C语言编写的程序比用汇编编写的程序更符合人们的思考习惯。尚有很多解决器都支持C编译器,这样意味着解决器也能不久上手。且具有良好的模块化、容易阅读、维护等优点,且编写的模块程序易于移植。基于C语言和汇编语言的优缺陷,本系统采用C语言编写方法。软件编写的主体思绪是将系统按功能模块化划分,然后根据模块要实现的功能来写各个子程序。整个软件程序的编写采用查询方式编写的。4.2软件功能分析系统程序重要完毕A/D转换、液晶显示、声光报警、时钟等功能。软件对酒精传感器的测量信号进行A/D转换,将测量数值与规定标准进行比较后判断饮酒限度,对不同的酒精浓度调用相应的显示、报警程序。系统初始化后,当酒精传感器MQ-3对气体酒精进行采集,然后当检测到酒精气味时,气体传感器MQ-3两个电极端A-B间电阻将变小,相应与气体传感器负载电阻的分压将变大。由于ADC0804的模拟输入端VIN(+)与负载电阻的一端用导线连在了一起。所以单片机在启动测试模数转换芯片之前要选择通道0,写入模数转换芯片,并将用作查询的单片机引脚P3.3置位,然后启动对通道IN0端输入的采集电压信号作模数转换,等待转换的结束。运用单片机丰富的I/O口可以采用查询方式来检测模数转换是否结束,当单片机引脚P3.3为1时转换未结束等待,当查询到P3.3为0时表达模数转换已经结束,可以开始读取数据了。单片机通过I/O口与模数转换芯片的数据输出口相连读取转换后的数据。读取后的数据送到数据存储器单元中,通过单片机作相应的解决,即要将该电压值转换为酒精浓度值,然后解决后的数据转换成三位十进制BCD码用液晶显示。4.3主程序模块主程序实现的功能:与硬件相结合实现酒精浓度检测系统的各个功能。酒精溶度传感器将检测到的信号转变为电压信号,通过数据线传送给AD的6脚接受,单片机通过控制AD的CS和WR的高低电平来控制其何时开始转换,数据转换需要一定的时间,单片机可以通过判断AD的5脚来拟定数据是否转换完,也可以通过延时来等待其转换完,转换完的数据传送给单片机的P1口,单片机通过写指令来选定液晶的显示模式,液晶分为上下两行,上一行的地址为0x80+,下一行的地址为0x80+0x40+,液晶数据线接通单片机的P0口,单片机将AD转换完的数据传送给液晶显示,同时与设定的阈值相比较,超过阈值则报警。重要是检测与显示,门限调整与显示,检测数据显示功能子函数的调用。系统主程序流程图见图4.1。

开始开始初始化MCU初始化MCU信号采集信号采集AD转换AD转换NN总开关K是否按下?总开关K是否按下?YY显示系统预热时间显示系统预热时间Y,flag=0Y,flag=0显示系统信息显示系统信息NN开关K2是否按下?并判断标志位flag?开关K2是否按下?并判断标志位flag?Y,flag=1Y,flag=1显示检测值和实时时钟显示检测值和实时时钟NN开关K0,K1是否按下?开关K0,K1是否按下?YY调整阈值调整阈值图4.1主程序流程图4.3.1A(1)模数转换模块的重要功能就是将经放大器放大的模拟电压信号转化为MCU可以解决的数字信号,并传送给MCU,由于酒精传感器的采集信号较大,不需要放大器进行放大,直接进行模数转换。采用ADC0804其操作时序如图4.2。图4.2AD0804操作时序图(2)TLC549转换的流程图见下图4.3开始开始CS=0,WR=0延时CS=1,WR=1延时10msCS=0,RD=0赋值给advalCS=1,RD=1返回图4.3数模转换流程图所谓A/D转换器就是模拟/数字转换器(ADC),是将输入的模拟信号转换成数字信号。信号输入端可以是传感器或转换器的输出,而ADC的数字信号也也许提供应微解决器,以便广泛地应用。CS、RD、WR是数字控制输入端,满足标准TTL逻辑电平。其中CS和WR用来控制A/D转换的启动信号。CS、RD用来读A/D转换的结果,当它们同时为低电平时,输出数据锁存器DB0~DB7各端上出现8位并行二进制数码。ADC0801~0805片内有时钟电路,只要在外部“CLKI”和“CLKR”两端外接一对电阻电容即可产生A/D转换所规定的时钟,其振荡频率为fCLK≈1/1.1RC。其典型应用参数为:R=10K,C=150PF,fCLK≈640KHZ,转换速度为100μs。若采用外部时钟,则外部fCLK可从CLKI端送入,此时不接R、C。允许的时钟频率范围为100KHZ~1460KHZ。INTR是转换结束信号输出端,输出跳转为低电平表达本次转换已经完毕,可作为微解决器的中断或查询信号。假如将CS和WR端与INTR端相连,则ADC0804就处在自动循环转换状态。CS=0时,允许进行A/D转换。WR由低跳高时A/D转换开始,8位逐次比较需8×8=64个时钟周期,再加上控制逻辑操作,一次转换需要66~73个时钟周期。在典型应用fCLK=640KHZ时,转换时间约为103μs~114μs。当fCLK超过640KHZ,转换精度下降,超过极限值1460KHZ时便不能正常工作。被转换的电压信号从VIN(+)和VIN(-)输入,允许此信号是差动的或不共地的电压信号。假如输入电压VIN的变化范围从0V到Vmax,则芯片的VIN(-)端接地,输入电压加到VIN(+)引脚。由于该芯片允许差动输入,在共模输入电压允许的情况下,输入电压范围可以从非零伏开始,即Vmin至Vmas。此时芯片的VIN(-)端应当接入等于Vmin的恒值电码坟上,而输入电压VIN仍然加到VIN(+)引脚上。A/D转换器一般都有这两个引脚。模拟地AGND和数字地DGND分别设立引入端,使数字电路的地电流不影响模拟信号回路,以防止寄生耦合导致的干扰。参考电压VREF/2可以由外部电路供应从“VREF/2”4.3.2按键输入模块按键时显现人机对话的一个控制按钮,通过按键的操作,对系统进行发送操作指令,后经与MCU串行通信,然后在液晶上显示。(1)数字按键查询式的流程图见下图4.4。开始开始NY按键按下?按键按下?调用延时程序调用延时程序N按键释放?按键释放?Y调整阈值调整阈值返回返回图4.4数字按键查询式的流程图按键的四个键分别接P2.0,P3.0,P3.1,P3.2,由于P2口、P3口具有上拉电阻,所以不再需要加上拉电阻进行电流的放大。(2)确认按键查询方式的流程图见图4.5。开始开始按键按下?调用延时子程序按键是否释放?执行相应的程序NNYYNNYY图4.5确认按键查询方式流程图4.3.3液晶显示输出模块LCD1602模块在本系统中重要起着开界面数字显示,以及各控制效果的显示。采用直接访问方式。液晶显示的操作流程图见下图4.6。开始开始Y读状态字读状态字忙?忙?N传送地址指令码传送地址指令码写指令代码、显示数据读显示数据写指令代码、显示数据读显示数据返回返回图4.6液晶显示流程图液晶显示D0到D7口接P0.0到P0.7,单独使用一个口,为了避免数据的干扰,由于P0口没有上拉电阻,所以需要一个排阻进行电流的扩大.4.3.4报警模块此模块为单片机的输出模块,将实际测量值与阈值相比较,发光二级管和蜂鸣器做出相应的反映,具体流程图如图4.7。开始有键按下否?开始有键按下否?调整阈值将测量值与阈值进行比较测量值<阈值—90阈值—90<测量值<阈值测量值>阈值黄、红灯不亮,报警器不想黄灯亮,红灯不亮,报警器不响黄灯不亮,红灯亮,报警器响返回NYAD转换子程序图4.7报警模块流程图4.3.5时钟模块本次毕设用单片机内部的定期器1作为系统时钟,初始时间可以自己设定,然后通过单片机送给液晶显示,其具体软件流程图如图4.8。开始开始启动总中断和定期器1中断,设定定期器初值执行其他程序定期器时间是否已到?执行相应的中断服务程序将时、分、秒值送到液晶显示返回NY图4.8系统时钟模块流程图4.3.6预热模块MQ3酒精传感器是气敏传感器,其具有很高的灵敏度、良好的选择性、长期的使用寿命和可靠的稳定性。为了使测量的精度达成最高,误差最小,需要找到合适的温度,一般在测量前需将传感器预热20秒钟,采用单片机定期器0进行时间控制,其具体程序流程图如图4.9。开始开始开总中断和定期器0中断,给定期器0赋初值判断t1是否等于14?执行中断服务程序将预热时间送液晶显示返回NY图4.9酒精传感器预热时间流程图5系统调试本次设计是硬件、软件结合型的,一般这种情况下调试应当是软硬件交叉进行的,但一般情况下先保证硬件电路的对的性,再进行软件总体调试,以下是硬件调试过程,为了提高调试的准确性和高效性,在本次调试过程中使用的是分模块调试的思想。5.1系统硬件调试先做出PCB板,焊接前应对整个电路板进行检查。一方面,用万用表对印制的电路板线路进行检查,该过程是在焊接元器件之前的必要工作,重要是检查印制的电路板线路是否有断路的情况,假如检查没有问题,则可以对元器件进行焊接。焊接前对电阻、电容的量值要进行测量、筛选,选择与电路中参数值一致的元器件,在选择芯片时,要注意芯片与设计规定的型号、规格和安装是否一致。在焊接时,应将印制的电路板认真对照原理图,查看元器件的引脚焊接是否对的。电路板焊接完毕后,需要对每个元器件的引脚逐个进行检查,一方面是检查有没有引脚虚焊或与其他信号线短路,另一方面是对器件引脚功能的再检查,查看设计是否对的。检查电路焊接没有问题后,则可以进行上电测试。上电测试是调试的关键部分,按照系统方案设计的模块化思想,应当分模块测试系统。一方面还是应当测试电源部分,系统上电以后,测试各个电源端口和器件的电源部分是否工作正常,同时应注意系统中有无器件过热情况,假如有的话,也许是相应的器件损坏或电路中有短路,需要认真检查之后再加电。假如没有问题,则可以进行功能的检测。5.1.1AD采样模块的调试AD采样电路的调试看似简朴,其实不然,特别在一些细节上没注意的话也许影响整个电路,在调试中就碰到了这样的事。当焊好电路后,检查了各脚和线均以连通,上电后,当输入为一个定值时,采样转换值不断变化且没有规律,不知道为什么。但检查电路,发现没有虚焊,且与电路原理图同样,就是这个问题使得进度推迟了,后来没办法了就问了一下老师,通过老师的分析,再检查发现是电路原理图画错了,AD的8位数据线接反了,就是其高低位刚好接反了;通过修改后再上电发现能正常工作了。这个问题非常容易被人忽视,但这却是十分重要的一步。5.1.2传感器模块调试传感器模块电路的调试很重要,由于这为系统的前端电路,此电路不正常的话,后面的就没意义了。在调试过程中也碰到了一些问题,当焊此电路时,输出端得接地电阻用了一个20K的定值电阻,上电后发现电压变化不明显,则想到了用放大器,由于要进行差分放大,则使得放大电路有点复杂,焊好后发现输出基本不变,放大器有问题,但后来找了好久都没找到因素,则要另想办法,此时把输出端得接地电阻换成用了一个变阻器,然后上电调试,发现当电阻为3.5K时输出电压可由1.4V变化到4.1V,能达成近3V的压差,变化范围明显。接下来就是要找出酒精浓度和电压的关系,在调试时用了多个不同浓度的酒精气体样品,从小到大,依次用气敏传感器检测,并记录相应的电压值,从而找出记录样品的浓度和电压值之间的关系,一方面根据查找的资料选择8个合适的浓度值,多次测量电压值,再取平均值作为最后电压值,把个标准区间范围定下来,如表九所示。(其中测量用的酒精溶液是用无水乙醇和纯净水按体积比来配制的,单位mL/mL表达的是1mL酒精溶液中含酒精的体积。)表九样品相应电压值样品浓度C(mL/mL)V1V2V3V40.4184.023.984.084.034.030.3753.683.543.603.613.610.3333.193.203.173.223.200.1672.762.742.732.742.740.1002.332.352.342.302.330.0331.741.701.751.731.730.0201.471.421.431.461.450.0100.760.740.760.730.75在计算时决定将在每两个社区间内的电压值与酒精浓度之间的关系当作线性解决,即每段社区间相应着一个线性映射关系,如表十所示。表十浓度与电压线性映射关系电压值区间(V)浓度转换关系3.61~4.10C=0.11*V-0.0223.20~2.74C=0.35*V-0.7892.74~2.33C=0.17*V-0.2962.33~1.73C=0.11*V-0.1561.73~1.45C=0.046*V-0.0471.45~0.75C=0.014*V拟定关系后,就是要显示酒精浓度值,但由于显示值是无符号整型,其最大为65535,由于受到类型的范围限制,决定电压只放大10倍(即只取两位数),浓度转换关系式中的系数放大两倍(即只取三位),这样浓度值的大小才不会超过类型的最大值了。5.1.3液晶模块调试调试液晶时应注意的是,由于液晶的内部显示操作需要一定的时间,因此假如单片机在对1602液晶写操作时不进行读忙操作,就应当延时足够的时间(可用延时函数)以让液晶内部可以接受命令或数据,否则会让液晶无法工作或者工作不正常。此外对于V0管脚,作为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,因此可通过一个电位器实现对其的电压调整,前文提到,将其调节到0.3~0.4V时对比度效果最佳。5.2系统软件调试打开KeiluVision2软件,将写好的调试程序代码在计算机上输入、汇编、修改、产生代码,形成输入输出口实验.HEX文献。打开MicrocontrmllerISPSoftware软件,在菜单options选项中选择selectdevice,在弹出的窗口中选择器件AT89C52,并选ByteMode点击OK。初始化器件后,将通过编译生成的,HEX十六进制文献下载到单片机。电路连接好,并将调试程序代码(注释电压到酒精浓度转换关系代码)烧写到AT89S51单片机上后,接上+5V电源开始调试。先进行每一个模块程序的调试,看看单一的模块程序能不能实现出来,假如不能实现出来,就进行程序和电路图的检查,查出问题所在,从而进行修改。当每一个模块程序的调试能实现出来,在把整个程序导入,进行整体调试。在调试中,对酒精浓度数据采集,不能循环采集数据。每测一次,能对酒精浓度是否超标进行检查,超标的话声光模块会进行报警。然而再也不能进行下次数据采集检查,必须重启电源才干进行下一次检查。经对程序的检查,看出没有数据采集的循环部分,对程序修改后,能实现数据连续检查功能了。系统时钟不能正常显示,经检查发现没有把相应的程序放入中断服务程序里面,修改之后就能正常显示。总结目前,随着人们的生活水平的提高,私家车的数量也越来越多,从而引发的交通是事故也急剧增长,其中大部分是由于酒后驾车,所以具有民用价值的便携式酒精浓度检测仪的研制受到了人们的高度重视。设计可以满足生活需要,携带方便的便携式酒精浓度检测仪迫在眉睫。针对目前的现状,该系统设计遵守体积小,质量轻,性价比高的原则。便携式酒精浓度检测仪的设计重要分为硬件设计和软件设计。根据设计前对该系统所要实现功能的规定,综合考虑我们采用STC89C52单片机为控制核心。MQ-3传感器属于金属半导体电阻式传感器,灵敏度高,响应速度快,可反复性使用。当传感器的敏感部分吸附有酒精分子时,表面的导电电子比例就会发生变化,从而其表面电阻会随着被测酒精气体浓度的不同而发生相应的变化,且这种变化是可逆的,可反复使用。MQ-3接上一定阻值的负载电阻,即可构成对酒精气体浓度的检测部分。负载电阻的分压值即相应着一个酒精气体的浓度值,只需对该分压值采样,就可得到要测酒精气体浓度值的信号。将该信号通过A/D转换,将模拟信号转化为数字信号。转换后的数字信号由单片机作相应的数据解决,得到3位BCD码并将3位送液晶显示。对超标酒精浓度进行声光报警。软件是用C语言相编写的,具有很好的编写语言的优点,具有很好的可控性、模块化和移植性。编写的思绪就是模块化的思想,将系统的各个功能进行划分,然后对各个模块进行设计。本系统的重要模块为传感检测、A/D转换、声光报警、液晶显示和时钟设立。一方面要了解系统所要实现的功能;另一方面根据功能去选择相应的硬件资源;再次将一个大的系统进行模块化划分,然后逐个去攻破。最后把所有模块进行优化整合,便得到了一个完整的系统。基于这样的思绪,完毕了便携式酒精浓度检测仪的基本设计。同时由于本设计是采用在proteus上进行仿真,在keil软件上进行编程,最后两者联调,实现设计任务,但在仿真是无法实现酒精浓度的测试,因此本设计采用滑动变阻器模拟传感器检测酒精浓度时输出的模拟信号,经ADC0804转换输入单片机,从而从液晶显示上显示出来。通过对本次毕业设计,我学习了很多在大学漏掉的知识,让我在以后的工作中,更加的得心应手。这不仅仅是一次简朴的毕业考察,而是对我们四年大学所学得知识的总结参考文献[1]王幸之.AT89系列单片机原理与接口技术[M].北京:北京航空航天大学出版社,2023[2]郑学坚,周斌.微型计算机原理及应用[M].北京:清华大学出版社,2023[3]DesignandConstructionofaMicrocontrollerBasedTranscranialMagneticStimulator,M.Burunkaya;2023[4]纪宗南.单片机外围器件使用手册—输入通道器件分册[M].北京:北京航空航天大学出版社,2023[5]郑义,陈俊.用AT89C52和TLC1543实现数据采集系统[J].电子世界,2023(12),第3期:P24~P25[6]Microcontrollerbaseddigitallycontrolledultrasonicmotordrivesystem,GungorBal;ErdalBekiroglu;RamazanBayindir;HasanUzel《JournalofElectroceramics》,20233/4:P15~P19[7]卢丽君.基于TLC1543的单片机多路采样监测系统的设计[J].仪器仪表与分析监测,2023,(04),第5期:P5~P7[8]何希才.传感器技术与应用[M].北京:北京航空航天大学出版社,2023[9]赵晓安.MCS-51单片机原理及应用.天津:天津大学出版社,2023[10]何立民.从Cygnal80C51F看8位单片机发展之路.单片机与嵌入式系统应用,2023年,第5期:[11]Selfadaptivediagnosisoftoolwearwithamicrocontroller,ErkkiJantunen;EeroVaajoensuu《JournalofIntelligentManufacturing》,2023.2,P23~P27[12]DesignandRealizationofaMicrocontrollerBasedE-TestStripApplicationDevice,BaharCelik;NihalFatmaGuler;InanGuler《Instrumentationscience&technology》,2023(6),P11~P16致谢本论文是在老师的悉心指导下完毕的。刘老师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的崇高师德,严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力对我影响深远。不仅使我树立了远大的学术目的、掌握了基本的研究方法,还使我明白了许多待人接物与为人处世的道理。本论文从选题到完毕,每一步都是在刘老师的指导下完毕的,倾注了刘老师大量的心血。在此,谨向刘老师表达崇高的敬意和衷心的感谢!对于系里领导的关心和实验室的老师们的辛勤,给我们提供了实验室这样一个良好的设计环境表达深深地感谢。在四年的学习期间,曾得到很多班级同学的关心和帮助,在此表达深深的感谢。没有他们的帮助和支持是没有办法完毕我的毕业论文的,同窗之间的友谊永远长存。我的毕业课题是基于单片机酒精浓度测试系统的设计,是一个实际的小工程。作为一个本科生,我对实际的工程设计结识不够,经验局限性,难免在设计的整体框架中,有很多的细节没有考虑。我们的指导老师——刘清平老师并没有指责,而是给予我们鼓励和很多宝贵的建议,并且悉心引导,给予我们一个比较清楚的设计思绪。我们沿着这条经验之路,不断地尝试摸索,慢慢地也掌握了设计的基本流程和思考的方法。我们碰到了很多的难题,比如硬件器件的选择,功能的实现等。然而这样的问题并不是我一个能所能解决的,幸运的是有我们的指导老师的悉心指导和小组搭档的全心帮助,所以一个个看似复杂的问题便迎刃而解。最后我还要再次深深地感谢系里各位领导及刘老师,正是基于他们的悉心指点和大家的全心的帮助,我才干比较顺利地完毕毕业设计。在此,向他们表达由衷的感谢。附录附录一原理图附录二PCB图附录三实物图附录四程序清单/***************************************************该程序为酒精溶度测试系统的源程序,采用模块化进行编程,整个软件程序的编写采用查询式方式编写的***************************************************/#include<reg51.h>#include<intrins.h>//包含_nop_()函数#defineuintunsignedint#defineucharunsignedcharsbitRS=P3^5;//寄存器选择位,将RS位定义为P3.5引脚sbitRW=P2^6;//读写选择位,将RW位定义为P2.6引脚sbitE=P3^4;//使能信号位,将E位定义为P3.4引脚sbitBF=P0^7;//忙碌标志位,,将BF位定义为P0.7引脚sbitadrd=P3^7;//IO口定义,AD的使能端定义sbitadwr=P3^6;sbitadcs=P3^3;sbitK=P2^0;//电路总开关sbitK0=P3^0;//减少酒精溶度门限值sbitK1=P3^1;//升高酒精溶度门限值sbitK2=P3^2;//控制液晶显示翻页sbitD1=P2^4;//绿灯,系统正常工作sbitD2=P2^3;//黄灯,酒精溶度偏高sbitD3=P2^2;//红灯,酒精溶度超过门限值sbitFMQ=P2^1;//超过门限值时报警unsignedcharcodedigit[]={""};//定义字符数组显示数字unsignedcharcodestring0[]={"Preheat"};//定义字符数组显示提醒信息unsignedcharcodestring1[]={"080411liangzw"};//定义字符数组显示提醒信息unsignedcharcodestring2[]={"080414liumeiwen"};//定义字符数组显示提醒信息unsignedcharcodestring4[]={"Value:"};//定义字符数组显示提醒信息unsignedcharcodestring5[]={":"};//定义字符数组显示提醒信息unsignedcharadval;//AD数据采集变量unsignedcharset_value=120;//设定酒精溶度的门限值unsignedcharflag=0,t1=0,t2=0,time=20;//flag建立标志位、tt构成定期器1s次数、time为预热倒计时时间unsignedchari,j,k,m,n;//定义变量i、j、k、m指向字符串数组元素unsignedcharvalue;//定义变量,储存检测结果unsignedcharA1,A2,A3;//分别储存门限值的个位、十位和百位数字unsignedcharB1,B2;//分别储存预热时间的个位和十位unsignedcharC1,C2,C3;//分别储存采集的个位、十位和百位数字unsignedcharshi,fen,miao;//分别储存时间的时、分、秒unsignedcharE1,E2,F1,F2,G1,G2;//分别储存时分秒的前、后位/*****************************************************函数功能:延时1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒***************************************************/voiddelay1ms(){unsignedcharx,y;for(x=0;x<10;x++)for(y=0;y<33;y++);}/*****************************************************函数功能:延时若干毫秒入口参数:n***************************************************/voiddelay(unsignedcharn){unsignedcharz;for(z=0;z<n;z++)delay1ms();}/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙*****************************************************/unsignedcharBusyTest(void){bitresult;RS=0;RW=1;//根据规定,RS为低电平,RW为高电平时,可以读状态E=1;//E=1,才允许读写_nop_();//空操作_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反映时间result=BF;//将忙碌标志电平赋给resultE=0;//将E恢复低电平returnresult;}/*****************************************************函数功能:将模式设立指令或显示地址写入液晶模块入口参数:dictate*****************************************************/voidWriteInstruction(unsignedchardictate){while(BusyTest()==1);//假如忙就等待RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0;//E置低电平,写指令时,E为高脉冲,//就是让E从0到1发生正跳变,所以应先置"0"_nop_();_nop_();//空操作两个机器周期,给硬件反映时间P0=dictate;//将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反映时间E=1;//E置高电平_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反映时间E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:指定字符显示的实际地址入口参数:x*****************************************************/voidWriteAddress(unsignedcharx){WriteInstruction(x|0x80);//显示位置的拟定方法规定为"80H+地址码x"}/*****************************************************函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)*****************************************************/voidWriteData(unsignedchary){while(BusyTest()==1);RS=1;RW=0;//RS为高电平,RW为低电平时,可以写入数据E=0;//E置低电平,写指令时,E为高脉冲,就是让E从0到1发生正跳变,所以应先置"0"P0=y;//将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反映时间E=1;//E置高电平_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反映时间E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:对LCD的显示模式进行初始化设立*****************************************************/voidLcdInitiate(void){delay(5);//延时15ms,初次写指令时应给LCD一段较长的反映时间WriteInstruction(0x38);//显示模式设立:16×2显示,5×7点阵,8位数据接口delay(5);//延时5ms,给硬件一点反映时间WriteInstruction(0x38);delay(5);WriteInstruction(0x38);//连续三次,保证初始化成功delay(5);WriteInstruction(0x0c);//显示模式设立:显示开,无光标,光标不闪烁delay(5);WriteInstruction(0x06);//显示模式设立:光标右移,字符不移delay(5);WriteInstruction(0x01);//清屏幕指令,将以前的显示内容清除delay(5);}/****************************************************函数功能:对采集信号进行模数转换有助于MCU对数字信号的解决****************************************************/voidAD(){adcs=0;//选通ADCSadwr=0; //AD写入(随便写个什么都行,重要是为了启动AD转换)_nop_();_nop_();adwr=1;adcs=1;//关闭ADCSdelay(10);adcs=0;//选通ADCSadrd=0;//AD读使能adval=P1; //AD数据口和P1口相连,将P1口的数据赋给变量advaladrd=1;adcs=1;//关闭ADCSadwr=0;}/***************************************************函数功能:将测量值与阈值相比较后进行相应的报警发光二级管为低电平亮,蜂鸣器为高电平响***************************************************/voidbaojing(){if(value<set_value-80||value==set_value-80){D2=1;//黄灯不亮D3=1;//红灯不亮FMQ=0;//蜂鸣器不响}if(value>set_value-80&&value<set_value){ D2=0;//黄灯亮D3=1;//红灯不亮FMQ=0;//蜂鸣器不响}if(value==set_value||value>set_value){D2=1;//黄灯不亮D3=0;//红灯亮FMQ=1;//蜂鸣器响}}/***************************************************函数功能:通过按键来改变阈值设定注意消除按键抖动***************************************************/voidkeyscan(void){if(K0==0||K1==0){if(K0==0){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论