首页 基于单片机的酒精浓度测试仪毕业设计(已处理)

基于单片机的酒精浓度测试仪毕业设计(已处理)

举报
开通vip

基于单片机的酒精浓度测试仪毕业设计(已处理)基于单片机的酒精浓度测试仪毕业设计(已处理) 基于单片机的酒精浓度测试仪毕业设计 基于单片机的酒精浓度测试仪毕业设计 摘要 本设计实现了对不同浓度酒精的检测和显示,通过适当改进可以用于检测酒后驾车。本文用STC12C5A16AD单片机与MQ-3型气体传感器实现了对酒精浓度的测量,并对测量数据进行显示,同时利用二极管简单显示浓度的高低,在设计允许值时发出报警。 论文主要研究了(1)硬件方面,MQ-3气体传感器技术参数的检测和将它接入到酒精浓度检测模块中;将模拟电压信号放大驱动发光二极管点亮报警;将采集到的模...

基于单片机的酒精浓度测试仪毕业设计(已处理)
基于单片机的酒精浓度测试仪毕业MATCH_ word word文档格式规范word作业纸小票打印word模板word简历模板免费word简历 _1714394412905_2(已处理) 基于单片机的酒精浓度测试仪毕业设计 基于单片机的酒精浓度测试仪毕业设计 摘要 本设计实现了对不同浓度酒精的 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 和显示,通过适当改进可以用于检测酒后驾车。本文用STC12C5A16AD单片机与MQ-3型气体传感器实现了对酒精浓度的测量,并对测量数据进行显示,同时利用二极管简单显示浓度的高低,在设计允许值时发出报警。 论文主要研究了(1)硬件方面,MQ-3气体传感器技术参数的检测和将它接入到酒精浓度检测模块中;将模拟电压信号放大驱动发光二极管点亮报警;将采集到的模拟电压信号通过单片机控制经A/D转换,得到数字电压信号;用于显示浓度的数码管显示模块。(2)软件方面,主要研究了电压到浓度的线性转换和最终浓度值的数码管显示。(3)对设计的传感器进行了标定。设计的传感器对酒精气体反应灵敏,能在有效范围内测量它的浓度值。并且在检测低浓度酒精时误差较小,最大误差为8.2%满足设计要求。 关键词:MQ-3气体传感器,A/D转换,STC12C5A16AD单片机 目录 第一章 绪论 3 第二章 总体设计 4 2.1 设计任务 4 2.2 设计要求 4 第三章 硬件设计 5 3.1 硬件设计原理 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 5 3.2 乙醇信号检测及调理电路 6 3.2.1 MQ-3主要技术指标 6 3.2.2 MQ-3结构、外形、测试电路 6 3.2.3 MQ-3传感器调理电路 8 3.3 单片机模块 9 3.3.1 STC12C5A16AD的功能特性 10 3.3.2 STC12C5A16AD的引脚说明 11 3.3.3 单片机系统原理图 12 3.4、显示电路 13 3.4.1 LCD1602显示模块技术参数 13 3.4.2 LCD1602显示模块功能 13 3.4.3 LCD1602显示器工作原理 14 3.5 阈值存储 15 3.6 供电及程序下载电路 16 第四章 软件设计 17 第五章 Protel硬件开发软件 18 5.1 Protel软件组成 18 5.2 PCB板设计 19 第六章 总结与展望 22 6.1 设计结果 22 6.2 设计体会与展望 22 参考文献 23 附录一 24 附录二 25 附录三 26 致谢 37 第一章 绪论 从工厂企业到居民家庭,酒精泄露的检测、监控以及对酒后驾车的监测对 居民的人身和财产安全都是十分重要且必不可少的。同时,随着我国经济的高速 发展,人民的生活水平迅速提高,越来越多的人有了自己的私家车,酒后驾车是导 致交通事故的一个主要因素,资料显示,我国近几年发生的重大交通事故中,有将 近三分之一是由酒后驾车引起的。由于人们安全意识增强,对环境安全性和生活舒适性要求的提高,为了防止机动车辆驾驶人员酒后驾车,现场实时对人体呼气中酒精含量的检测已日益受到重视,酒精浓度测试仪逐渐得到广泛应用。此外,酒精测试仪也可应用于食品加工、酿酒等需要监控空气中酒精浓度的场合。如今,气体传感器向低功耗、多功能、集成化方向的发展,因此,酒精浓度测试仪具有十分广阔的现实市场和潜在的市场要求。 本设计基于STC12C5A16AD单片机设计的酒精气体浓度探测仪,可用来检测酒精气体浓度,酒精气体浓度测试仪在生产生活中有重要的应用,比如,在一些环境要求严格的生产车间,用这种酒精浓度探测仪,可随时检测车间内的酒精气体浓度,当酒精气体浓度高于允许限定值时,发出警报,提醒人们及时通风换气,做到安全生产,此酒精测试仪经过再一步的改进可以使用到酒后驾驶测试上面去,利用该测试仪来告诫驾驶员请勿酒后驾驶。 在这次的设计中,利用了MQ-3型酒精的传感器通过对空气中的酒精浓度测试转换成0~5V的模拟量电压进行输出,把这个0~5V的电压传送到STC12C5A16AD内部自带的A/D转换模块中去,通过模拟量模块的转换输出一个8位0~255的数据给单片机的P1口,再通过单片机进行一些软件程序的处理显示在LCD的液晶上面。 第二章 总体设计 2.1 设计任务 本研究设计的酒精浓度测试仪是一款实用性强、安全可靠的气体乙醇浓度检测工具,采用高精度MQ-3乙醇气体传感器对空气中的乙醇浓度进行检测,利用宏晶公司高性能低成本单片机STC12C5A16AD对检测信号进行A/D转换和处理,最后通过液晶屏显示输出。本研究设计的酒精浓度测试仪还具有醉酒阀值设定功能,可以根据法律法规或用户需要设定修改醉酒阀值,并进行保存,根据信号的传输可初步设计其系统设计方框图如图2-1。 图2-1 系统设计方框图 2.2 设计要求 1 传感器MQ-3的电压模拟输出范围为0~5V; 2 STC12C5A16AD芯片为52内核8位单片机,内部集成了10位多路A/D转换模块; 3 单片机STC12C5A16AD工作频率为12MHz; 4 LCD显示器用1KΩ的电阻分压使其清晰显示,消除“鬼影”。 第三章 硬件设计 3.1 硬件设计原理分析 本硬件由四部分组成:单片机模块,酒精传感器模块,显示模块,存储模块。本系统由单片机STC12C5A16AD控制,其直接控制两个模块:阀值存储模块将与酒精传感器采集到并输送到单片机控制处理后的数字信号相比较,LCD显示模块可以将经过单片机处理过的酒精气体浓度具体量化值显示出来,其硬件系统原理图如图3-1所示。MQ-3乙醇气体传感器输出信号经信号调理电路处理,输出随乙醇浓度变化的电压信号,该电压信号送入单片机系统,经A/D转换,与设定的醉酒阀值进行比较,并显示或报警。 图3-1 酒精浓度测试仪方框图 3.2 乙醇信号检测及调理电路 MQ-3乙醇气体传感器可以应用用于机动车驾驶人员及其他严禁酒后作业人员的现场检测,也用于其他场所乙醇蒸汽的检测。其技术特点为: 对乙醇蒸汽有很高的灵敏度和良好的选择性 快速的响应恢复特性 长期的寿命和可靠的稳定性 简单的驱动回路 3.2.1 MQ-3主要技术指标 3.2.2 MQ-3结构、外形、测试电路 MQ-3气敏元件的结构和外形如图3-2所示, 由微型Al2O3陶瓷管、SnO2敏感层,测量电极和加热器构成的敏感元件固定在塑料或不锈钢制成的腔体内,加热器为气敏元件提供了必要的工作条件。封装好的气敏元件有6只针状管脚, 其中4个用于信号取出,2个用于提供加热电流,表3-3对各个部件进行了详细的 描述。 图3-2 MQ-3气敏元件的结构外形图 表3-3 MQ-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-4 MQ-3乙醇气体传感器灵敏度曲线 3.2.3 MQ-3传感器调理电路 MQ-3乙醇气体传感器及其调理电路原理如图3-5所示。其外形如图3-6所示。经过调理,检测信号由电阻值转变成电压值,便于后续电路进行A/D转换和处理。 图3-5 传感器及调理模块原理图 图3-6 MQ-3传感器模块外形图 该传感器模块具有如下特点,方便与单片机系统接口组成检测仪器。 具有信号输出指示。 双路信号输出(模拟量输出及TTL电平输出) TTL输出有效信号为低电平。 当输出低电平时信号灯亮,可直接接单片机模拟量输出0~5V电压,浓度越高电压越高。 3.3 单片机模块 STC12C5A16AD是宏晶科技生产的新一代8051单片机,包含有中央处理器(CPU)、程序存储器(FLASH)、数据存储器(SRAM)、定时/计数器、UART串口、串口2、I/O接口、高速A/D转换、SPI接口、PCA、看门狗及片内R/C振荡器和外部晶振振荡等模块,几乎包含了数据采集和控制中所需的所有单元模块。 STC12C5A16S2单片机相比传统C51功能更加强大,有些特殊功能寄存器被扩展为专用的特殊寄存器。其引脚图和内部结构如图3-7所示: 图3-7 STC12C5A16AD单片机管脚图 3.3.1 STC12C5A16AD的功能特性 (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个),复位后为准双向口/弱上拉(普通8051 I/O口)可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不超过100mA。 3.3.2 STC12C5A16AD的引脚说明 单片机采用40引脚的双列直插封装方式。图3-7为引脚排列图,40条引脚说明如下: 1)主电源引脚Vss和Vcc 2)外接晶振引脚XTAL1和XTAL2 3)控制或与其它电源复用引脚RST,ALE和NA 4)输入/输出引脚P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,P3.0~P3.7 (1)P0口(P0.0~P0.7)是一个漏极开路型准双向I/O口。在访问外部存储器时,它是分时多路转换的地址低8位和数据总线,在访问期间激活了内部的上拉电阻。 (2)P1口(P1.0~P1.7)是带内部上拉电阻的8位双向I/O口。在EPROM编程和程序验证时,它接收低8位地址。 (3)P2口(P2.0~P2.7)是一个带内部上拉电阻的8位双向I/O口。在访问外部存储器时,它送出高8位地址。在对EFROM编程和程序验证期间,它接收高8 位地址。 (4)P3口(P3.0~P3.7)是一个带内部上拉电阻的8位双向I/O口。在访问外部存储器时,它送出高8位地址。在对EFROM编程和程序验证期间,它接收高8位地址。 3.3.3 单片机系统原理图 该芯片为52内核8位单片机,内部集成了10位多路A/D转换模块,适用于常用检测电路。由STC12C5A16AD组成的单片机系统原理图如图3-8所示。图中AOUT为MQ-3传感器模块输出的检测电压信号,送入ADC7端口进行处理,DOUT为传感器模块输出的数字电平信号,该信号可以根据乙醇气体浓度直接输出报警信号,报警阈值通过模块上的电位器进行调节。 图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.1 LCD1602显示模块技术参数 1 显示容量:16×2个字符; 2 芯片工作电压:4.5~5.5V; 3 最佳工作电压:5.0V; 4 最佳工作电流:2.0Mv; 5 字符尺寸:2.95×4.35mm。 3.4.2 LCD1602显示模块功能 LCD1602显示模块具体功能可见表3-9。 表3-9 LCD1602引脚,符号功能说明 引脚 标号 状态 说明 GND 1接地 VDD 2电源(5V) VO3液晶显示偏压信号,液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度) RS 4 输入 寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 R/W 5 输入 读/写信号,高电平1时进行读操作,低电平0时进行写操作 E 6 输入 使能信号,下降沿使能,下降沿能触发锁存数据 DB0~DB7 7~14 三态 数据总线,进行数据输出 BLA 15 输入 背光电源(5V) BLK 16 输入 背光接地 3.4.3 LCD1602显示器工作原理 LCD1602有11个控制指令,见表3-10。其中,DDRAM:显示数据RAM,用来寄存待显示的字符代码;CGROM:字符发生存储器;CGRAM:用户自定义的字符图形RAM。 表3-10 LCD1602控制指令表 指令 功能 清屏 清DDRAM和AC值 归位 AC0,光标、画面回HOME位 输入方式设置 设置光标、画面移动方式 显示开关控制 设置显示、光标及闪烁开、关 光标、画面位移 光标、画面移动,不影响DDRAM 功能设置 工作方式设置(初始化指令) CGRAM地址设置 设置CGRAM地址。A5~A00~3FH DDRAM地址设置 DDRAM地址设置 读BF和AC值 读忙标志BF和和地址计数器AC值 写数据 数据写入DDRAM或CGRAM 读数据 从DDRAM或CGRAM数据读出 1602液晶模块内部的字符发生存储器(CGROM已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文 假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”,具体寄存器的选择控制表3-11有操作说明。 因为LCD1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。 表3-11 LCD1602寄存器选择控制表 RS R/W 操作说明 0 0 写入指令寄存器(清除屏等) 0 1 忙标志以及读取位址计数(DB0~DB6)值 1 0 写入数据寄存器(显示各字型等) 1 1 从数据寄存器读取数据 与单片机接口电路如图3-12所示。其中J2的3脚为背光引脚,R9和R10电阻用于调节背光亮度。J2的4、5、6引脚分别接液晶的RS、E/W和E控制引脚,J2的7?14引脚为数据引脚。 图3-12 LCD与单片机接口电路 3.5 阈值存储 醉酒阈值存储在EEPROM芯片AT24C04中,并可以通过 “增加”、“减少”按键调节并保存。AT24C04是IIC接口的EEPROM芯片,可以用于掉电不易失数据的存储。其电路如图3-13所示。图中A0、A1和A2为芯片的地址引脚,一般接地即可。SCL和SDA为AT24C04和单片机IIC通信的时钟线和数据线。 图3-13 EEPROM存储电路 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设计和信号完整性分析,在此基础上Protel 99SE又增加了一些新的功能,用户使用更加方便灵活。Protel的功能十分强大,在电子电路设计领域占有极其重要的地位。它以其强大功能和实用性,逐渐获得广大硬件设计人员的青睐,是目前众多EDA设计软件中用户最多的产品之一。 5.1 Protel软件组成 Protel软件主要由电路原理图设计模块、印制电路板设计模块(PCB设计模块)、电路信号仿真模块和PLD逻辑器件设计模块等组成,各模块具有强大的功能,可以很好的实现电路设计与分析。 1 原理图设计模块(Schematic模块) 电路原理图是表示电气产品或电路工作原理的重要技术文件,电路原理图主要由代表各种电子器件的图形符号、线路和结点组成。图4.1所示为一张电路原理图。该原理图是由Schematic模块设计完成的。Schematic模块具有如下功能:丰富而灵活的编辑功能、在线库编辑及完善的库管理功能、强大的设计自动化功能、支持层次化设计功能等。 2 印制电路板设计模块(PCB设计模块) 印制电路板(PCB)制板图是由电路原理图到制作电路板的桥梁。设计了电路原理图后,需要根据原理图生设计成印制电路板的制板图,然后在根据制板图制作具体的电路板。印制电路板设计模块具有如下主要功能和特点:可完成复杂印制电路板(PCB)的设计;方便而又灵活的编辑功能;强大的设计自动化功能;在线式库编辑及完善的库管理;完备的输出系统等。 3 电路信号仿真模块 电路信号仿真模块是一个功能强大的数字/模拟混合信号电路仿真器,能提供连续的模拟信号和离散的数字信号仿真。它运行在Protel的EDA/Client集成环境下,与Protel Advanced Schematic原理图输入程序协同工作,作为Advanced Schematic的扩展,为用户提供了一个完整的从设计到验证仿真设计环境。 在Protel中进行仿真,只需从仿真用元器件库中放置所需的元器件,连接好原理图,加上激励源,然后单击防真按钮即可自动开始。 5.2 PCB板设计 1 定元件的封装 ? 打开网络表(可以利用一些编辑器辅助编辑),将所有封装浏览一遍,确保所有元件的封装都正确无误并且元件库中包含所有元件的封装,网络表中所有信息全部大写,一面载入出问题,或PCB BOM不连续。 ? 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 元件全部采用公司统一元件库中的封装。 ? ???元件库中不存在的封装,应自己建立元器件库。 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.在平行线间插入接地的隔离线。 C.减少布线层与地平面的距离 ? 屏蔽保护 图5-2 屏蔽保护 对应地线回路规则,实际上也是为了尽量减小信号的回路面积,多用于一些比较重要的信号,如时钟信号,同步信号;对一些特别重要,频率特别高的信号,应该考虑采用铜轴电缆屏蔽结构设计,即将所布的线上下左右用地线隔离,而且还要考虑好如何有效的让屏蔽地与实际地平面有效结合。 ? 走线方向控制规则 相邻层的走线方向成正交结构,避免将不同的信号线在相邻层走成同一方向,以减少不必要的层间窜扰;当由于板结构限制(如某些背板)难以避免出现该情况,特别是信号速率较高时,应考虑用地平面隔离各布线层,用地信号线隔离各信号线。 ? 电源与地线层的完整性规则 对于导通孔密集的区域,要注意避免孔在电源和地层的挖空区域相互连接,形成对平面层的分割,从而破坏平面层的完整性,并进而导致信号线在地层 的回路面积增大。 第六章 总结与展望 6.1 设计结果 本次设计的酒精浓度检测系统,通过设计相关的硬件电路及进行相应的软件调试,最后实现了实时检测酒精浓度,并的在LCD1602上显示的目的。设计出的电路,完全符合本次实验的设计要求,通过按键可以实现调整门限值,对于检测到的酒精浓度高于设定门限值时,会显示实时酒精浓度值,系统会自动实现灯光报警功能,具体工作图见附录2。 6.2 设计体会与展望 此次酒精测试仪的设计参考了一些网上搜集来得资料,主要是软件方面,在硬件设计上还是花费了一些时间,尤其是对EEPROM的操作上,自上单片机课程以来对于外部访问,尤其是地址操作很不习惯也不熟悉,所以在操作上存在一定的困难。在硬件上对于单片机选型也是一门学问,这次课题设计中必须要用到的两样东西是ADC和串口,那么ATMEL公司的AT89C51系列的单片机不具备自带ADC功能,必须外接ADC0809如此一来在硬件的设计上又增加了新的难度,为了简化电路,提高成功率我选择了STC系列单片机具体型号为STC12C5A16AD,此型号单片机自带8位高速ADC经过软件编程设计即可派上用场,这样大大减轻了设计压力。在一开始的设计电路时本来准备把阀值设定成一个定值输入烧进单片机的程序里,可是后来经过翻阅各种书刊发现各种环境下的阀值是不同的,所以决定用 AT24C02来存储阀值,并可以通过两个升降按键来自行调节阀值。 在本次毕业设计中学到的知识,我将它们发挥到其他的学习中去,也将在今后的学习中不断的提高和完善;而在此期间发现的不足,我将努力改善,通过学习实践等方式不断提高,克服那些知识障碍,以求在今后的学习过程中获得更大的进步! 参考文献 [1] 张福学.《现代传感器电路》.中国计量出版社,2000. [2] 万隆, 巴奉丽.《单片机原理及应用技术》.清华大学出版社,2010. [3] 李琳,李爱传.《酒精浓度测试仪的设计》.黑龙江信息科技.2011.04. [4] 汤竟南,沈国琴.《51单片机C语言开发与实例》.人民邮电出版社.2008. [5] 赵春雨.《基于STC单片机的矿用智能甲烷传感器的开发与研究》.自动化应用.2011.07 [6] 雷伏容,张小林,崔浩.《51单片机常用模块设计查询手册》.清华大学出版社,2010. [7] 冉伟刚.《气体酒精浓度监测报警器》. 农业网络信息.2011.10. [8] 吴桂秀.《传感器应用制作入门》.浙江科学技术出版社.2004. 附录一 附录二 附录三 #include "2402.h" void DELAYunsigned int t whilet!0 t--; void IICStartvoid SCL0;DELAY1;SDA1; SCL1; DELAY1;SDA0; DELAY1;SCL0; void IICStopvoid SDA0;SCL1; DELAY1;SDA1; DELAY1;SCL0; void SEND0void SDA0; SCL1; DELAY1; SCL0; void SEND1void SDA1; DELAY1; SCL1; DELAY1; SCL0; bit Check_Ackvoid unsigned char errtime250; DELAY1; SCL1; DELAY1; CYSDA; whileCY errtime--;CYSDA; if !errtimeIICStop; return 1; DELAY1; SCL0;return 0; void Write_byteunsigned char dat unsigned char i; fori0;i8;i++ ifdati&0x80 SEND1; else SEND0; unsigned char Read_bytevoid unsigned char i,temp0; fori0;i8;i++ SDA1;SCL1;DELAY1;ifSDA1 temptemp1; temptemp|0x01; else temptemp1; SCL0; return temp; unsigned char rdeepromunsigned char addr unsigned char temp0; bit flag0; IICStart; Write_byte0xa0;Check_Ack; Write_byteaddr; Check_Ack; IICStart; Write_byte0xa1; Check_Ack; tempRead_byte; SEND1; IICStop; return temp; void wrteepromunsigned char addr,unsigned char dat IICStart; Write_byte0xa0; Check_Ack; Write_byteaddr; Check_Ack; Write_bytedat; Check_Ack; IICStop; #include "1602.h" #include "math.h" void delay int i,j; fori0; i10; i++ forj0; j2; j++ ; uchar Convertuchar In_Date /* uchar i, Out_Date 0, temp 0; fori0; i8; i++ temp In_Date i & 0x01;Out_Date | temp 7 - i; return Out_Date; */ return In_Date; void enableuchar del P0 Convertdel; RS 0; RW 0; E 0; delay; E 1; delay; void writeuchar del P0 Convertdel; RS 1; RW 0; E 0; delay; E 1; delay; void L1602_initvoid enable0x01; enable0x38; enable0x0c; enable0x06; enable0xd0; void L1602_charuchar hang,uchar lie,char sign uchar a; ifhang 1 a 0x80; ifhang 2 a 0xc0; a a + lie - 1; enablea; writesign; void L1602_stringuchar hang,uchar lie,uchar *p uchar a; ifhang 1 a 0x80; ifhang 2 a 0xc0; a a + lie - 1; enablea; while1 if*p '\0' break; write*p; p++; //显示整型的温湿度数据用,共占用4位,其中一位符号位 void L1602_intuchar hang, uchar lie, int num uint temp; uint gewei,shiwei,baiwei,sign; //首先将4位清空 L1602_charhang, lie+0, ' ';L1602_charhang, lie+1, ' ';L1602_charhang, lie+2, ' ';L1602_charhang, lie+3, ' ';if num 0 sign 0; else sign 1; temp absnum; baiwei temp / 100; temp temp - baiwei*100; shiwei temp / 10; gewei temp - shiwei*10; num absnum; if num100 if sign 1 // 负数 L1602_charhang, lie, '-'; L1602_charhang, lie+1, baiwei+48;L1602_charhang, lie+2, shiwei+48;L1602_charhang, lie+3, gewei+48; else if num10 if sign 1 L1602_charhang, lie+1, '-'; L1602_charhang, lie+2, shiwei+48;L1602_charhang, lie+3, gewei+48; else if sign 1 L1602_charhang, lie+2, '-'; L1602_charhang, lie+3, gewei+48; #include "reg52.H" #include "STC12c5A.h" #include "1602.h" #include "2402.h" #define uchar unsigned char #define uint unsigned int //声明常量 #define ALCH 80 //醉驾标准80mg/L //K_MG_MV和K_ZERO为传感器校准系数,要根据每个MQ-3模块校准 #define K_MG_MV 160/66 //传感器灵敏度系数,每毫克/L对应的10毫伏 数 #define K_ZERO 15 //传感器零点漂移,约130mV //定义按键 sbit Key_Up P3^6; sbit Key_Down P3^7; //定义LED报警灯 sbit Led_Warn1 P3^4; sbit Led_Warn2 P3^5; //定义乙醇传感器TTL电平输出引脚 sbit DOUT P1^4; //定义标识 volatile bit FlagStartAL 0; //开始转换标志 volatile bit FlagKeyPress 0; //有键弹起标志 //全局变量定义 uchar Threshold;//酒精浓度上限报警值 uint ALCounter; //酒精转换计时器 longALValue; //酒精测量值 float ALtemp; //计算临时变量 uint keyvalue, keyUp, keyDown; //键值 char * pSave;//EEPROM存盘用指针 //函数声明 void Data_Init; void Timer0_Init; void Port_Init; void ADC_Init; uchar GetADVal; void KeyProcessuint ; //数据初始化 void Data_Init ALCounter 0; ALValue 0; Led_Warn1 1; Led_Warn2 2; keyvalue 0; keyUp 1; keyDown 1; //定时器0初始化,中断时间约2毫秒 //计算:晶振11.0592MHz,定时器时钟11059200/12921600,每毫秒922个脉 冲 //16位定时器初值65536-1844636920xf8cc void Timer0_Init ET0 1; //允许定时器0中断 TMOD 1; //定时器工作方式选择 TL0 0xcc; // TH0 0xf8; //定时器赋予初值,大约为2毫秒中断1次 TR0 1; //启动定时器 //定时器0中断 void Timer0_ISR void interrupt 1 using 0 TL0 0xcc; TH0 0xf8; //定时器赋予初值 //每1秒钟启动一次AD转换 ALCounter ++; if ALCounter 500 FlagStartAL 1; ALCounter 0; void Port_Init P1M0 0x80; //10000000,P1.7作为AD输入 P1M1 0x80; // void ADC_Init uint i; P1ASF 0x80; //设P1.7为AD输入 ADC_RES 0; //清先前的结果 ADC_CONTR|0x80; //POWER1,打开ADC电源 fori5000;i0;i-- ; //延时 ADC_CONTR ADC_CONTR&0xE0; //1110,0000 清ADC_FLAG,ADC_START位和 低3位 ADC_CONTR ADC_CONTR&0xf8|0x07; //设置当前通道号为P1.7 fori2500;i0;i-- ; //延时 //进行AD转换,得到当前酒精值 uchar GetADVal uint i; ADC_CONTR&0xf7; fori250;i0;i--;//待输入电压稳定后开始转换 //ADC_RES 0; ADC_CONTR | 0x08; //ADC_Start1, 启动转换 whileADC_CONTR&0x100; //等待转换结束ADC_FLAG1 ADC_CONTR&0xe7;//清ADC_FLAG和ADC_START位,停止转换 return ADC_RES; //存入设定值 void Save_Setting pSave char *&Threshold;//地址低位对应低8位,高位对应高8位 wrteeprom0, *pSave; //存醉酒阈值低8位 DELAY300; pSave ++; wrteeprom1, *pSave; //存醉酒阈值高8位 DELAY300; //载入设定值 void Load_Setting pSave char *&Threshold; *pSave++ rdeeprom0; *pSave rdeeprom1; if Threshold255||Threshold0 Threshold 80; //按键处理程序,参数为键值,1为Up键,2为Down键 void KeyProcessuint num switch num case 1: if Threshold255 Threshold++; break; case 2: if Threshold1 Threshold--; break; default: break; L1602_int2,9,Threshold; Save_Setting; void main uint i,j; EA 0; Data_Init; //数据初始化 Timer0_Init;//定时器0初始化 Port_Init; //端口初始化 ADC_Init;//ADC初始化 EA 1; L1602_init; L1602_string1,1,"Welcome to ALCT! "; L1602_string2,1,"Designed by AAA "; //延时 for i0;i1000;i++ for j0;j1000;j++ ; //清屏 L1602_string1,1," "; L1602_string2,1," "; L1602_string1,1,"Alcohol: mg/L"; L1602_string2,1,"Thresho: mg/L"; //载入设定值 Load_Setting; L1602_int2,9,Threshold; while1 //如果FlagStartAL标志置位,则进行AD转换 if FlagStartAL 1 //酒精浓度换算,50mg/L62.5ppm,传感器灵敏度应事先校准 ALValue 500 * GetADVal / 256; //8位ADC,首先得到电压值,单位10 毫伏 ALValue ALValue - K_ZERO; //首先减去零点漂移,一般是130mV if ALValue 0 ALValue 0; ALValue ALValue * K_MG_MV; //将mV转变成mg/L,K_MG_MV系数需要 校准 L1602_int1,9,ALValue; if ALValue Threshold Led_Warn1 0; //超过阈值,则 Led_Warn1灯 报警,否则报警灯灭。 else Led_Warn1 1; FlagStartAL 0; //查询乙醇传感器TTL电平,该指示灯为传感器模块报警 if DOUT 0 Led_Warn2 0; elseLed_Warn2 1; //键盘查询,在弹起时响应 if Key_Up&&keyUp0 FlagKeyPress 1; keyvalue 1; else if Key_Down&&keyDown0 FlagKeyPress 1; keyvalue 2; if FlagKeyPress 1 KeyProcesskeyvalue; FlagKeyPress 0; if !Key_Up keyUp 0; else keyUp 1; if !Key_Down keyDown 0; else keyDown 1; DELAY100; 致谢 非常感谢陈杰老师能在百忙之中抽空给予我本次论文的悉心指导,从定题到解决论文之中的难题到最后的论文完成,陈杰老师总是不厌其烦的给我讲解不懂之处以及提出论文之中的不足。这次论文从定题到定稿其中有不少曲折,我真心感谢陈杰老师的耐心和支持,不断的给我鼓励,并提出板子的不足,使我能有进一步改进设计的正确方向。 这次论文完全是在陈老师的指导下完成的。所以我要借助这次机会衷心祝愿陈老师的事业能蒸蒸日上!
本文档为【基于单片机的酒精浓度测试仪毕业设计(已处理)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_597436
暂无简介~
格式:doc
大小:62KB
软件:Word
页数:0
分类:企业经营
上传时间:2017-10-15
浏览量:29