




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要本设计实现了对不同浓度酒精的检测和显示,通过适当改良可以用于检测酒后驾车。本文用STC12C5A16AD单片机与MQ-3论文主要研究了〔1〕硬件方面,MQ-3气体传感器技术参数的检测和将它接入到酒精浓度检测模块中;将模拟电压信号放大驱动发光二极管点亮报警;将采集到的模拟电压信号通过单片机控制经A/D转换,得到数字电压信号;用于显示浓度的数码管显示模块。〔2〕软件方面,主要研究了电压到浓度的线性转换和最终浓度值的数码管显示。〔3〕对设计的传感器进行了标定。设计的传感器对酒精气体反响灵敏,能在有效范围内测量它的浓度值。并且在检测低浓度酒精时误差较小,最大误差为%满足设计要求。关键词:MQ-3气体传感器,A/D转换,STC12C5A16AD目录第一章绪论3第二章总体设计42.1设计任务42.2设计要求4第三章硬件设计53.1硬件设计原理分析53.2乙醇信号检测及调理电路63.2.1MQ-3主要技术指标63.2.2MQ-3结构、外形、测试电路63.2.3MQ-3传感器调理电路83.3单片机模块93.3.1STC12C5A16AD的功能特性103.3.2STC12C5A16AD的引脚说明113.3.3单片机系统原理图12、显示电路133.4.1LCD1602显示模块技术参数133.4.2LCD1602显示模块功能133.4.3LCD1602显示器工作原理143.5阈值存储153.6供电及程序下载电路16第四章软件设计17第五章Protel硬件开发软件185.1Protel软件组成185.2PCB板设计19第六章总结与展望226.1设计结果226.2设计体会与展望22参考文献23附录一24附录二25附录三26致谢37第一章绪论从工厂企业到居民家庭,酒精泄露的检测、监控以及对酒后驾车的监测对居民的人身和财产平安都是十分重要且必不可少的。同时,随着我国经济的高速开展,人民的生活水平迅速提高,越来越多的人有了自己的私家车,酒后驾车是导致交通事故的一个主要因素,资料显示,我国近几年发生的重大交通事故中,有将近三分之一是由酒后驾车引起的。由于人们平安意识增强,对环境平安性和生活舒适性要求的提高,为了防止机动车辆驾驶人员酒后驾车,现场实时对人体呼气中酒精含量的检测已日益受到重视,酒精浓度测试仪逐渐得到广泛应用。此外,酒精测试仪也可应用于食品加工、酿酒等需要监控空气中酒精浓度的场合。如今,气体传感器向低功耗、多功能、集成化方向的开展,因此,酒精浓度测试仪具有十分广阔的现实市场和潜在的市场要求。本设计基于STC12C5A16AD在这次的设计中,利用了MQ-3型酒精的传感器通过对空气中的酒精浓度测试转换成0~5V的模拟量电压进行输出,把这个0~5V的电压传送到STC12C5A16AD内部自带的A/D转换模块中去,通过模拟量模块的转换输出一个8位0~255的数据给单片机的P1口,再通过单片机进行一些软件程序的处理显示在LCD第二章总体设计设计任务本研究设计的酒精浓度测试仪是一款实用性强、平安可靠的气体乙醇浓度检测工具,采用高精度MQ-3乙醇气体传感器对空气中的乙醇浓度进行检测,利用宏晶公司高性能低本钱单片机STC12C5A传感器传感器模拟输出单片机LCD显示输出控制输出图2-1系统设计方框图设计要求1)传感器MQ-3的电压模拟输出范围为0~5V;2)STC12C5A3)单片机STC12C5A4)LCD显示器用1KΩ的电阻分压使其清晰显示,消除“鬼影〞。第三章硬件设计3.1硬件设计原理分析本硬件由四局部组成:单片机模块,酒精传感器模块,显示模块,存储模块。本系统由单片机STC12C5A图3-1酒精浓度测试仪方框图3.2乙醇信号检测及调理电路MQ-3乙醇气体传感器可以应用用于机动车驾驶人员及其他严禁酒后作业人员的现场检测,也用于其他场所乙醇蒸汽的检测。其技术特点为:对乙醇蒸汽有很高的灵敏度和良好的选择性快速的响应恢复特性长期的寿命和可靠的稳定性简单的驱动回路3.2.1MQ-3主要技术指标MQ-3结构、外形、测试电路MQ-3气敏元件的结构和外形如图3-2所示,由微型Al2O3陶瓷管、SnO2敏感层,测量电极和加热器构成的敏感元件固定在塑料或不锈钢制成的腔体内,加热器为气敏元件提供了必要的工作条件。封装好的气敏元件有6只针状管脚,其中4个用于信号取出,2个用于提供加热电流,表3-3对各个部件进行了详细的描述。图3-2MQ-3气敏元件的结构外形图表3-3MQ-3气敏元件的组成材料表部件材料1气体敏感层二氧化锡2电极金〔Au〕3测量电极引线铂〔Pt〕4加热器镍铬合金〔Ni-Cr〕5陶瓷管三氧化二铝6防爆网100目双层不锈钢〔SUB316〕7卡环镀镍铜材〔Ni-Cu〕8基座胶木9针状管脚镀镍铜材〔Ni-Cu〕MQ-3乙醇气体传感器灵敏度曲线如图3-4所示,其传感原理为气敏电阻的输出阻值随乙醇气体等浓度变化而变化。图3-4MQ-3乙醇气体传感器灵敏度曲线3.2.3MQ-3传感器调理电路MQ-3乙醇气体传感器及其调理电路原理如图3-5所示。其外形如图3-6所示。经过调理,检测信号由电阻值转变成电压值,便于后续电路进行A/D转换和处理。图3-5传感器及调理模块原理图图3-6MQ-3传感器模块外形图该传感器模块具有如下特点,方便与单片机系统接口组成检测仪器。具有信号输出指示。双路信号输出〔模拟量输出及TTL电平输出〕TTL输出有效信号为低电平。(当输出低电平时信号灯亮,可直接接单片机)模拟量输出0~5V电压,浓度越高电压越高。3.3单片机模块STC12C5A16AD是宏晶科技生产的新一代8051单片机,包含有中央处理器〔CPU〕、程序存储器〔FLASH〕、数据存储器〔SRAM〕、定时/计数器、UART串口、串口2、I/O接口、高速A/D转换、SPI接口、PCA、看门狗及片内R/CSTC12C5A16S2单片机相比传统C51图3-7STC12C5A16AD单片机管脚图3.3.1STC12C5A16AD的功能特性〔1〕高速:1个时钟/机器周期,增强型8051内核,速度比普通8051快8~12倍。〔2〕宽电压:3.3~5.5V。〔3〕增加外部掉电检测电路,可在掉电时及时将数据保存进EEPROM,正常工作时无需操作EEP。〔4〕增加第二复位功能脚,〔高可靠复位,可调复位门槛电压,频率小于12Hz,无需此功能〕。〔5〕低功耗设计:空闲模式〔可由任意一个中断唤醒〕;掉电模式〔可由外部中断唤醒〕,可支持下降沿/上升沿和远程唤醒。〔6〕工作频率:0~35MHz,相当于普通8051:0~4205MHz。〔7〕时钟:外部晶体或内部RC振荡器可选,在ISP下载编程用户程序时设置。〔8〕8/16/20/32/40/48/52/56/60/62K字节片内FLASH程序存储器,擦写次数10万次以上。〔9〕1280字节片内RAM数据存储器。〔10〕芯片内EEPROM功能,擦写次数10万次以上。〔11〕ISP/IAP,在系统可编程/在在应用可编程,无需编程器/仿真器。〔12〕8通道,10位高速ADC,高速可达25万次/秒,2位PWM还可当2路D/A使用。〔13〕2通道捕获/比拟单元〔PWM/PCA/CCP〕,也可用来再实现2个定时器或2个外部中断〔支持上升沿/下降沿中断〕。〔14〕4个16位定时器,兼容8051的定时器T1/T0,2路PCA实现2个定时器。〔15〕可编程时钟输出功能,T0在P3.4输出时钟,T1在P3.5输出时钟,BRT在P1.0输出时钟。〔16〕硬件看门口〔WDT〕。〔17〕高速SPI串行通信端口。〔18〕全双异步串行口〔UART〕,兼容普通8051串口。〔19〕先进的指令集结构,兼容普通8051指令集,有硬件乘法/除法指令。〔20〕通用I/O口〔37/40/44个〕,复位后为准双向口/弱上拉〔普通8051I/O口〕可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可到达20mA,但整个芯片最大不超过100mA。3.3.2STC12C5A16AD的引脚说明单片机采用40引脚的双列直插封装方式。图3-7为引脚排列图,40条引脚说明如下:1〕主电源引脚Vss和Vcc2〕外接晶振引脚XTAL1和XTAL23〕控制或与其它电源复用引脚RST,ALE和NA4〕~~~~〔1〕P0口~P0.7〕是一个漏极开路型准双向I/O口。在访问外部存储器时,它是分时多路转换的地址(低8位)和数据总线,在访问期间激活了内部的上拉电阻。〔2〕~P1.7〕是带内部上拉电阻的8位双向I/O口。在EPROM编程和程序验证时,它接收低8位地址。〔3〕~P2.7〕是一个带内部上拉电阻的8位双向I/O口。在访问外部存储器时,它送出高8位地址。在对EFROM编程和程序验证期间,它接收高8位地址。〔4〕~P3.7〕是一个带内部上拉电阻的8位双向I/O口。在访问外部存储器时,它送出高8位地址。在对EFROM编程和程序验证期间,它接收高8位地址。3.3.3单片机系统原理图该芯片为52内核8位单片机,内部集成了10位多路A/D转换模块,适用于常用检测电路。由STC12C5A16AD组成的单片机系统原理图如图3-8图3-8单片机系统原理图图3-8中,按键K2和K3为醉酒阈值调整键,其中K2为“增加〞,K3为“减小〞按键。L2和L3为报警指示灯,分别可以进行酒后和醉酒两级报警。3.4、显示电路1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。主要功能有:40通道点阵LCD驱动;可选择当作行驱动或列驱动;输出能产生20×2个LCD驱动波形输入接受控制器送出的串行数据和控制信号,偏压;通过单片机控制将所测的频率信号读书显示出来。3.4.1LCD1602显示模块技术参数(1)显示容量:16×2个字符;(2)芯片工作电压:4.5~5.5V;(3)最正确工作电压:5.0V;Mv;×。3.4.2LCD1602显示模块功能LCD1602显示模块具体功能可见表3-9。表3-9LCD1602引脚,符号功能说明引脚标号状态说明GND1接地VDD2电源〔5V〕VO3液晶显示偏压信号,液晶显示器比照度调整端,接正电源时比照度最弱,接地电源时比照度最高〔比照度过高时会产生“鬼影〞,使用时可以通过一个10K的电位器调整比照度〕RS4输入存放器选择,高电平1时选择数据存放器、低电平0时选择指令存放器。R/W5输入读/写信号,高电平1时进行读操作,低电平0时进行写操作E6输入使能信号,下降沿使能,下降沿能触发锁存数据DB0~DB77~14三态数据总线,进行数据输出BLA15输入背光电源〔5V〕BLK16输入背光接地3.4.3LCD1602显示器工作原理LCD1602有11个控制指令,见表3-10。其中,DDRAM:显示数据RAM,用来存放待显示的字符代码;CGROM:字符发生存储器;CGRAM:用户自定义的字符图形RAM。表3-10LCD1602控制指令表指令功能清屏清DDRAM和AC值归位AC=0,光标、画面回HOME位输入方式设置设置光标、画面移动方式显示开关控制设置显示、光标及闪烁开、关光标、画面位移光标、画面移动,不影响DDRAM功能设置工作方式设置〔初始化指令〕CGRAM地址设置设置CGRAM地址。A5~A0=0~3FHDDRAM地址设置DDRAM地址设置读BF和AC值读忙标志BF和和地址计数器AC值写数据数据写入DDRAM或CGRAM读数据从DDRAM或CGRAM数据读出1602液晶模块内部的字符发生存储器〔CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比方大写的英文字母“A〞的代码是01000001B〔41H〕,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A〞,具体存放器的选择控制表3-11有操作说明。因为LCD1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。表3-11LCD1602存放器选择控制表RSR/W操作说明00写入指令存放器〔去除屏等〕01忙标志以及读取位址计数〔DB0~DB6〕值10写入数据存放器〔显示各字型等〕11从数据存放器读取数据与单片机接口电路如图3-12所示。其中J2的3脚为背光引脚,R9和R10电阻用于调节背光亮度。J2的4、5、6引脚分别接液晶的RS、E/W和E控制引脚,J2的7—14引脚为数据引脚。图3-12LCD与单片机接口电路3.5阈值存储醉酒阈值存储在EEPROM芯片AT24C04中,并可以通过“增加〞、“减少〞按键调节并保存。AT24C04是IIC接口的EEPROM芯片,可以用于掉电不易失数据的存储。其电路如图3-13所示。图中A0、A1和A2为芯片的地址引脚,一般接地即可。SCL和SDA为AT24C04和单片机IIC通信的时钟线和数据线。图3-13EEPROM存储电路3.6供电及程序下载电路本设计采用USB接口供电,电源电压5V。同时,USB接口通过内含PL2303芯片的转换电路对单片机进行程序编写。其电路原理如图10所示。图10供电及程序下载电路第四章软件设计本设计软件主程序流程图如图4-1所示。当检测到酒精气味时,气体传感器MQ-3两个电极端A-B间电阻将变小,对应与气体传感器负载电阻的分压将变大,输出电压也将变大。图4-1主程序流程图第五章Protel硬件开发软件Protel是目前国内最流行的通用EDA软件,它是将电路原理图设计、PCB板图设计、电路仿真和PLD设计等多个实用工具软件组合后构成的EDA工作平台,是第一个将EDA软件设计成基于Windows的普及型产品。它集成了软件界面、仿真功能和PLD设计和信号完整性分析,在此根底上Protel99SE又增加了一些新的功能,用户使用更加方便灵活。Protel的功能十分强大,在电子电路设计领域占有极其重要的地位。它以其强大功能和实用性,逐渐获得广阔硬件设计人员的青睐,是目前众多EDA设计软件中用户最多的产品之一。5.1Protel软件组成Protel软件主要由电路原理图设计模块、印制电路板设计模块〔PCB设计模块〕、电路信号仿真模块和PLD逻辑器件设计模块等组成,各模块具有强大的功能,可以很好的实现电路设计与分析。(1)原理图设计模块〔Schematic模块〕电路原理图是表示电气产品或电路工作原理的重要技术文件,电路原理图主要由代表各种电子器件的图形符号、线路和结点组成。图所示为一张电路原理图。该原理图是由Schematic模块设计完成的。Schematic模块具有如下功能:丰富而灵活的编辑功能、在线库编辑及完善的库管理功能、强大的设计自动化功能、支持层次化设计功能等。(2)印制电路板设计模块〔PCB设计模块〕印制电路板〔PCB〕制板图是由电路原理图到制作电路板的桥梁。设计了电路原理图后,需要根据原理图生设计成印制电路板的制板图,然后在根据制板图制作具体的电路板。印制电路板设计模块具有如下主要功能和特点:可完成复杂印制电路板〔PCB〕的设计;方便而又灵活的编辑功能;强大的设计自动化功能;在线式库编辑及完善的库管理;完备的输出系统等。(3)电路信号仿真模块电路信号仿真模块是一个功能强大的数字/模拟混合信号电路仿真器,能提供连续的模拟信号和离散的数字信号仿真。它运行在Protel的EDA/Client集成环境下,与ProtelAdvancedSchematic原理图输入程序协同工作,作为AdvancedSchematic的扩展,为用户提供了一个完整的从设计到验证仿真设计环境。在Protel中进行仿真,只需从仿真用元器件库中放置所需的元器件,连接好原理图,加上鼓励源,然后单击防真按钮即可自动开始。5.2PCB板设计(1)定元件的封装①翻开网络表〔可以利用一些编辑器辅助编辑〕,将所有封装浏览一遍,确保所有元件的封装都正确无误并且元件库中包含所有元件的封装,网络表中所有信息全部大写,一面载入出问题,或PCBBOM不连续。②标准元件全部采用公司统一元件库中的封装。③④⑥⑤元件库中不存在的封装,应自己建立元器件库。(2)建立PCB板框①根据PCB结构图,或相应的模板建立PCB文件,包括安装孔、禁布区等相关信息。②尺寸标注。在钻孔层中应标明PCB的精确结构,且不可以形成封闭尺寸标注。(3)载入网络表①载入网表并排除所有载入问题,具体请看《PROTEL技术大全》。其他软件载入问题有很多相似之处,可以借鉴。②如果使用PROTEL,网表须载入两次以上〔没有任何提示信息〕才可以确认载入无误。(4)布局①首先要确定参考点。一般参考点都设置在左边和底边的边框线的交点〔或延长线的交点〕上或印制板的插件的第一个焊盘。②一但参考点确定以后,元件布局、布线均以此参考点为准。布局推荐使用25MIL网格。③根据要求先将所有有定位要求的元件固定并锁定。④布局的根本原那么A.遵循先难后易、先大后小的原那么。B.布局可以参考硬件工程师提供的原理图和大致的布局,根据信号流向规律放置主要原器件。C.总的连线尽可能的短,关键信号线最短。D.强信号、弱信号、高电压信号和弱电压信号要完全分开。E.高频元件间隔要充分。F.模拟信号、数字信号分开。⑤相同结构电路局部应尽可能采取对称布局。⑥按照均匀分布、重心平衡、版面美观的标准来优化布局。(5)PCB设计遵循的规那么①地线回路规那么:图5-1地线回路规那么环路最小规那么,即信号线与其回路构成的环面积要尽可能小,环面积要尽可能小,环面积越小,对外的辐射越少,接收外界的干扰也越小。针对这一规那么,在地平面分割时,要考虑到地平面与重要信号走线的分布,防止由于地平面开槽等带来的问题;在双层板设计中,在为电源留下足够空间的情况下,应该将留下的局部用参考地填充,且增加一些必要的过孔,将双面信号有效连接起来,对一些关键信号尽量采用地线隔离,对一些频率较高的设计,需特别考虑其地平面信号回路问题,建议采用多层板为宜。②窜扰控制窜扰〔CrossTalk〕是指PCB上不同网络之间因较长的平行布线引起的相互干扰,主要是由于平行线间的分布电容和分布电感的作用。克服窜扰的主要措施是:A.加大平行布线的间距,遵循3W规那么。B.在平行线间插入接地的隔离线。③屏蔽保护图5-2屏蔽保护对应地线回路规那么,实际上也是为了尽量减小信号的回路面积,多用于一些比拟重要的信号,如时钟信号,同步信号;对一些特别重要,频率特别高的信号,应该考虑采用铜轴电缆屏蔽结构设计,即将所布的线上下左右用地线隔离,而且还要考虑好如何有效的让屏蔽地与实际地平面有效结合。④走线方向控制规那么相邻层的走线方向成正交结构,防止将不同的信号线在相邻层走成同一方向,以减少不必要的层间窜扰;当由于板结构限制〔如某些背板〕难以防止出现该情况,特别是信号速率较高时,应考虑用地平面隔离各布线层,用地信号线隔离各信号线。⑤电源与地线层的完整性规那么对于导通孔密集的区域,要注意防止孔在电源和地层的挖空区域相互连接,形成对平面层的分割,从而破坏平面层的完整性,并进而导致信号线在地层的回路面积增大。第六章总结与展望6.1设计结果本次设计的酒精浓度检测系统,通过设计相关的硬件电路及进行相应的软件调试,最后实现了实时检测酒精浓度,并的在LCD1602上显示的目的。设计出的电路,完全符合本次实验的设计要求,通过按键可以实现调整门限值,对于检测到的酒精浓度高于设定门限值时,会显示实时酒精浓度值,系统会自动实现灯光报警功能,具体工作图见附录2。6.2设计体会与展望此次酒精测试仪的设计参考了一些网上搜集来得资料,主要是软件方面,在硬件设计上还是花费了一些时间,尤其是对EEPROM的操作上,自上单片机课程以来对于外部访问,尤其是地址操作很不习惯也不熟悉,所以在操作上存在一定的困难。在硬件上对于单片机选型也是一门学问,这次课题设计中必须要用到的两样东西是ADC和串口,那么ATMEL公司的AT89C51系列的单片机不具备自带ADC功能,必须外接ADC0809如此一来在硬件的设计上又增加了新的难度,为了简化电路,提高成功率我选择了STC系列单片机具体型号为STC12C5A16AD,此型号单片机自带8位高速ADC经过软件编程设计即可派上用场,这样大大减轻了设计压力。在一开始的设计电路时本来准备把阀值设定成一个定值输入烧进单片机的程序里,可是后来经过翻阅各种书刊发现各种环境下的阀值是不同的,所以决定用AT24C02来存储阀值,并可以通过两个升降按键来自行调节阀值。在本次毕业设计中学到的知识,我将它们发挥到其他的学习中去,也将在今后的学习中不断的提高和完善;而在此期间发现的缺乏,我将努力改善,通过学习实践等方式不断提高,克服那些知识障碍,以求在今后的学习过程中获得更大的进步!参考文献[1]张福学.《现代传感器电路》.中国计量出版社,2000.[2]万隆,巴奉丽.《单片机原理及应用技术》.清华大学出版社,2023.[3]李琳,李爱传.《酒精浓度测试仪的设计》.黑龙江信息科技.2023.04.[4]汤竟南,沈国琴.《51单片机C语言开发与实例》.人民邮电出版社.2023.[6]雷伏容,张小林,崔浩.《51单片机常用模块设计查询手册》.清华大学出版社,2023.[7]冉伟刚.《气体酒精浓度监测报警器》.农业网络信息.2023.10.[8]吴桂秀.《传感器应用制作入门》.浙江科学技术出版社.2004.附录一附录二附录三#include"2402.h"voidDELAY(unsignedintt){ while(t!=0) t--;}voidIICStart(void){SCL=0; DELAY(1);SDA=1;SCL=1;DELAY(1);SDA=0;DELAY(1);SCL=0;}voidIICStop(void){ SDA=0;SCL=1;DELAY(1);SDA=1;DELAY(1);SCL=0; }voidSEND0(void){ SDA=0; SCL=1; DELAY(1); SCL=0;}voidSEND1(void){ SDA=1; DELAY(1); SCL=1; DELAY(1); SCL=0;}bitCheck_Ack(void){unsignedcharerrtime=250;DELAY(1);SCL=1;DELAY(1);CY=SDA;while(CY){errtime--;CY=SDA;if(!errtime){IICStop();return1;}}DELAY(1);SCL=0;return0;}voidWrite_byte(unsignedchardat){unsignedchari; for(i=0;i<8;i++) { if((dat<<i)&0x80) SEND1(); else SEND0(); }}unsignedcharRead_byte(void){ unsignedchari,temp=0; for(i=0;i<8;i++) {SDA=1; SCL=1; DELAY(1); if(SDA==1) { temp=temp<<1; temp=temp|0x01; } else temp=temp<<1; SCL=0; } returntemp;}unsignedcharrdeeprom(unsignedcharaddr){unsignedchartemp=0; bitflag=0; IICStart(); Write_byte(0xa0);Check_Ack(); Write_byte(addr); Check_Ack(); IICStart(); Write_byte(0xa1); Check_Ack(); temp=Read_byte(); SEND1(); IICStop(); returntemp;}voidwrteeprom(unsignedcharaddr,unsignedchardat){ IICStart(); Write_byte(0xa0); Check_Ack(); Write_byte(addr); Check_Ack(); Write_byte(dat); Check_Ack(); IICStop();}#include"1602.h"#include"math.h"voiddelay(){ inti,j; for(i=0;i<=10;i++) for(j=0;j<=2;j++);}ucharConvert(ucharIn_Date){ /*uchari,Out_Date=0,temp=0;for(i=0;i<8;i++){temp=(In_Date>>i)&0x01;Out_Date|=(temp<<(7-i));}returnOut_Date;*/ returnIn_Date;}voidenable(uchardel){ P0=Convert(del); RS=0; RW=0; E=0; delay(); E=1; delay();}voidwrite(uchardel){ P0=Convert(del); RS=1; RW=0; E=0; delay(); E=1; delay();}voidL1602_init(void){ enable(0x01); enable(0x38); enable(0x0c); enable(0x06); enable(0xd0);}voidL1602_char(ucharhang,ucharlie,charsign){ uchara; if(hang==1)a=0x80; if(hang==2)a=0xc0; a=a+lie-1; enable(a); write(sign);}voidL1602_string(ucharhang,ucharlie,uchar*p){ uchara; if(hang==1)a=0x80; if(hang==2)a=0xc0; a=a+lie-1; enable(a); while(1) { if(*p=='\0')break; write(*p); p++; }}//显示整型的温湿度数据用,共占用4位,其中一位符号位voidL1602_int(ucharhang,ucharlie,intnum){uinttemp;uintgewei,shiwei,baiwei,sign;//首先将4位清空L1602_char(hang,lie+0,'');L1602_char(hang,lie+1,'');L1602_char(hang,lie+2,'');L1602_char(hang,lie+3,'');if(num>=0){sign=0;}else{sign=1;}temp=abs(num);baiwei=temp/100;temp=temp-baiwei*100;shiwei=temp/10;gewei=temp-shiwei*10;num=abs(num);if(num>=100){if(sign==1)//负数 { L1602_char(hang,lie,'-'); }L1602_char(hang,lie+1,baiwei+48); L1602_char(hang,lie+2,shiwei+48); L1602_char(hang,lie+3,gewei+48);}elseif(num>=10){if(sign==1) { L1602_char(hang,lie+1,'-'); } L1602_char(hang,lie+2,shiwei+48);L1602_char(hang,lie+3,gewei+48);}else{if(sign==1) { L1602_char(hang,lie+2,'-'); }L1602_char(hang,lie+3,gewei+48);}}#include"reg52.H"#include"STC12c5A.h"#include"1602.h"#include"2402.h"#defineucharunsignedchar#defineuintunsignedint//声明常量#defineALCH80//醉驾标准80mg/L//K_MG_MV和K_ZERO为传感器校准系数,要根据每个MQ-3模块校准#defineK_MG_MV160/66//传感器灵敏度系数,每毫克/L对应的10毫伏数#defineK_ZERO15//传感器零点漂移,约130mV//定义按键sbitKey_Up=P3^6;sbitKey_Down=P3^7;//定义LED报警灯sbitLed_Warn1=P3^4;sbitLed_Warn2=P3^5;//定义乙醇传感器TTL电平输出引脚sbitDOUT=P1^4;//定义标识volatilebitFlagStartAL=0;//开始转换标志volatilebitFlagKeyPress=0;//有键弹起标志//全局变量定义ucharThreshold; //酒精浓度上限报警值uintALCounter;//酒精转换计时器longALValue;//酒精测量值floatALtemp;//计算临时变量uintkeyvalue,keyUp,keyDown;//键值char*pSave;//EEPROM存盘用指针//函数声明voidData_Init();voidTimer0_Init();voidPort_Init();voidADC_Init();ucharGetADVal();voidKeyProcess(uint);//数据初始化voidData_Init(){ALCounter=0;ALValue=0;Led_Warn1=1;Led_Warn2=2;keyvalue=0;keyUp=1;keyDown=1;}//定时器0初始化,中断时间约2毫秒//计算:晶振11.0592MHz,定时器时钟11059200/12=921600,每毫秒922个脉冲//16位定时器初值65536-1844=63692=0xf8ccvoidTimer0_Init(){ET0=1;//允许定时器0中断TMOD=1;//定时器工作方式选择TL0=0xcc;//TH0=0xf8;//定时器赋予初值,大约为2毫秒中断1次TR0=1;//启动定时器}//定时器0中断voidTimer0_ISR(void)interrupt1using0{TL0=0xcc;TH0=0xf8;//定时器赋予初值//每1秒钟启动一次AD转换ALCounter++;if(ALCounter>=500){FlagStartAL=1;ALCounter=0;}}voidPort_Init(){P1M1=0x80;//}voidADC_Init(){uinti;ADC_RES=0;//清先前的结果ADC_CONTR|=0x80; //POWER=1,翻开ADC电源for(i=5000;i>0;i--);//延时ADC_CONTR=ADC_CONTR&0xE0;//1110,0000清ADC_FLAG,ADC_START位和低3位for(i=2500;i>0;i--);//延时}//进行AD转换,得到当前酒精值ucharGetADVal(){uinti;ADC_CONTR&=0xf7;for(i=250;i>0;i--);//待输入电压稳定后开始转换//ADC_RES=0;ADC_CONTR|=0x08;//ADC_Start=1,启动转换while((ADC_CONTR&0x10)==0);//等待转换结束ADC_FLAG=1ADC_CONTR&=0xe7; //清ADC_FLAG和ADC_START位,停止转换returnADC_RES;}//存入设定值voidSave_Setting(){pSave=(char*)&Threshold; //地址低位对应低8位,高位对应高8位wrteeprom(0,*pSave); //存醉酒阈值低8位DELAY(300);pSave++;wrteeprom(1,*pSave); //存醉酒阈值高8位DELAY(300);}//载入设定值voidLoad_Setting(){pSave=(char*)&Threshold;*pSave++=rdeeprom(0);*pSave=rdeeprom(1);if((Threshold>=255)||(Threshold<0))Threshold=80;}//按键处理程序,参数为键值,1为Up键,2为Down键voidKeyPro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械设计 第5章 螺纹连接和螺旋传动学习课件
- 《祝福》教学设计 2023-2024学年统编版高中语文必修下册
- 2025至2030年中国布制灯罩数据监测研究报告
- 二零二五年花卉养护与花店售后服务合同
- 二零二五年度厨师与甜品店老板合作开发合同
- 2025年度旅游景区委托经营管理公司协议
- 第16课《我的叔叔于勒》教学设计2024-2025学年统编版语文九年级上册
- 二零二五年度南宁市事业单位财务会计人员聘用协议书
- 2025年度服装企业环保材料研发与应用用工合同
- 二零二五年度施工安全文明施工风险评估协议
- 《煤制油技术》课程标准(煤化工技术)
- 膝关节僵硬个案护理
- 高速公路服务区管理系统搭建
- 2024年中国华能澜沧江水电股份有限公司招聘笔试参考题库含答案解析
- 《民间皮影》课程标准
- 2024年江苏食品药品职业技术学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- 国内新能源汽车在共享经济领域的应用与前景
- 大庆油田环境保护与可持续发展
- 电气设备维修
- 森林专业扑火队培训课件
- 外研版三年级起点四年级(下册)英语集体备课教(学)案
评论
0/150
提交评论