《CO气体浓度监测仪设计单片机原理与接口技术课程设计报告书.doc》由会员分享,可在线阅读,更多相关《CO气体浓度监测仪设计单片机原理与接口技术课程设计报告书.doc(44页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、.I/44辽辽宁宁工工业业大大学学单片机原理与接口技术单片机原理与接口技术课程设计(论文)课程设计(论文)题目:题目:COCO气体浓度监测仪设计气体浓度监测仪设计院(系院(系):电气工程学院电气工程学院专业班级:专业班级:学学号:号:学生:学生:指导教师指导教师:(签字)起止时间:起止时间:2012013 3.06.24-201.06.24-2013 3.07.07.1212.II/44课程设计(论文)任务与评语课程设计(论文)任务与评语院(系):电气工程学院教研室:.III/44学 号学生专业班级课程设计(论文)题目CO气体浓度监测仪设计课程设计(论文)任务该监测仪主要用于公共场所与某些车间
2、空气中 CO 浓度的监测,检测标准是:CO 浓度小时均值应低于 3mg/m3,日均值应低于 4mg/m3。.设计任务:设计任务:1.CPU 最小系统设计(包括 CPU 选择,晶振电路,复位电路)2.传感器选择以与模拟量检测电路设计3.人机对话接口电路设计(要求强弱电隔离)4.程序流程图设计机程序清单编写技术参数:技术参数:1CO 浓度小时均值应低于 3mg/m3,日均值应低于 4mg/m3。2工作电源 220V设计要求设计要求:1、分析系统功能,选择合适的单片机与传感器,模拟量输入电路设计等;2、应用专业绘图软件绘制硬件电路图和软件流程图;3、按规定格式,撰写、打印设计说明书一份,其中程序开发
3、要有详细的软件设计说明,详细阐述系统的工作过程,字数应在 4000 字以上。进度计划第 1 天查阅收集资料第 2 天总体设计方案的确定第 3-4 天CPU 最小系统设计第 5 天传感器选择以与模拟量检测电路设计第 6 天人机对话接口电路设计第 7 天程序流程图设计第 8 天软件编写与调试第 9 天设计说明书完成第 10 天答辩指导教师评语与成绩平时:论文质量:答辩:总成绩:指导教师签字:年月日.IV/44注:成绩:平时20%论文质量60%答辩20%以百分制计算摘 要本系统利用 51 单片机做核心控制模块,利用 MQ-7 一氧化碳传感器探测一氧化碳。实时监控多处一氧化碳浓度变化,如果某处一氧化碳
4、浓度过高,系统将发出声音报警,并显示报警传感器,提醒人们与时抢险。本系统可用于家庭环境,也适用于工业环境。由于单片机成本低廉,自动控制功能比较强大,运行稳定,环境适应性好,所以本系统采用单片机做控制的核心元件。MQ-7 一氧化碳传感器对一氧化碳的灵敏度高;长寿命,低成本;简单的驱动电路即可。因此,很适用于家庭的一氧化碳检测。数码管能清晰的显示报警的房间,即使在光线较暗时,所以选用数码管做显示模块。关键词:一氧化碳;单片机;检测;报警.V/44目 录目录 V第 1 章 绪论 11.1 CO 浓度监测仪研究概况 11.2 本文研究容 2第 2 章 CPU 最小系统设计 22.1 CO 气体浓度监测
5、仪总体设计方案 22.2 CPU 的选择 42.3 时钟电路设计 92.4 复位电路设计 102.5 单片机最小系统设计 11第 3 章 CO 浓度监测仪输入输出电路设计 123.1 CO 传感器的选择 123.2 运算放大器选择 143.3 A/D 转换电路 153.4 声光报警电路 163.5 显示电路 17第 4 章 软件设计 194.1 流程图设计 194.2 程序编写 204.2.1 主程序 204.2.2 调零子程序 234.2.3 显示子程序 254.2.4 报警子程序 274.2.5 中断取值子程序 27第 5 章 软件仿真 31第 6 章 课程设计总结 34参考文献 36.V
6、I/44附录硬件原理图 37.1/44第 1 章 绪论1.1 CO 浓度监测仪研究概况燃气(人工煤气、天然气、液化石油气)的普与,提高了生产效率、市民的生活质量,但在使用燃气的过程中,因燃气泄漏、废气等原因造成的燃气爆炸、中毒等意外事故时有发生,给人们的生命和财产安全带来了严重的威胁,因此安全使用燃气一直是燃气主管部门工作的重中之重。CO 浓度监测仪能有效监测环境中可燃气体或毒性气体 CO 的浓度,一旦其浓度超出报警限定值,就能发出声光报警信号,并且能自动开启排风扇把燃气排出室外,甚至能通过联动装置自动切断燃气供应防止燃气继续泄漏,起到安全防的作用。但监测仪选用得是否合理,直接关系到其功能的充
7、分发挥。该设计所研究的 CO 浓度监测仪正是应这种要求而开发的。一氧化碳是一种无色、无味的气体,它与血液中的血红素结合的能力是氧的240 倍,它与血红素形成稳定的络合物,使血红蛋白丧失了输送氧气的能力,从而导致组织低氧症,甚至死亡。一氧化碳浓度的高低是评价空气质量好坏的重要指标之一,也是工厂、煤矿井下是否发生自燃火灾的重要标志之一。为了保证人们身体健康和环境洁净,世界各国都纷纷致力于防止空气污染的产生监测仪是否灵敏可靠关系到人身财产安全,因此监测仪属于强制检定的计量器具。目前大多数报警器用户都使用汽油或液化气等超过以上高浓度的易挥发可.2/44燃气体对报警器进行检测,若报警即判断监测仪正常。这
8、样做虽然省缺了购买可燃气体标准物质的麻烦和费用,但实际上达不到保证安全的目的,从而形成重大安全隐患,有时还会造成报警器检测元件中毒。如果使用标准气体检测报警器,就能保证人身安全,同时杜绝报警器检测探头中毒现象。1.2 本文研究容本文所设计的数字气体报警器采用单片机 AT89C51,其价格便宜,易于产品化。本设计能将置于测试环境中的气体传感器输出的模拟电压通过 A/D 转换器送入单片机 AT89C51 中进行处理并通过数码管显示,通过设置报警值,当检测到的浓度达到或者超过设定值时,用单片机控制发光二极管发光报警,同时打开喇叭发出声音报警,来达到报警的目的,并通过外接排风扇与电磁阀对其进行程控,以
9、防事故的发生。而当系统出现故障时,黄色 LED亮启,便于用户与时对报警器进行维修。系统以 MQ-7 气体传感器和 AT89C51 单片机为核心,设计气体泄漏报警器。实现:1准确测量周围环境中的可燃性气体、有毒有害气体的泄漏;2实现系统各个模块的功能控制;3实现单片机编程语言系统的控制与传感器电路的控制。4研究单片机各接口的作用与功能;5了解 MQ-7 气体传感器的具体功能;6实现对基本报警电路的控制。第 2 章 CPU 最小系统设计2.1 CO 气体浓度监测仪总体设计方案单片机应用系统的结构分三个层次:.3/44(1)单片机:通常指应用系统主处理机,即所选择的单片机器件。(2)单片机系统:指按
10、照单片机的技术要求和嵌入对象的资源要求而构成的基本系统,如时钟电路、复位电路和扩展存储器等与单片机构成了单片机系统。(3)单片机应用系统:能满足嵌入对象要求的全部电路系统。在单片机系统的基础上加上面向对象的接口电路,如前向通道、后向通道、人机交互通道(键盘、显示器、打印机等)和串行通行口(RS232)以与应用程序等。以此理解,一氧化碳报警器同样具有单片机应用系统的三个层次。其中以AT89C51 单片机为核心构成单片机系统。在此系统中,检测信号进入单片机进行运算处理。为了更好的理清设计思路,将整个系统细分为三部分加以设计说明。整个报警器由三个部分组成,分为三大模块:浓度检测模块、主控模块和报警模
11、块。在本次设计中,使用的核心器件是单片机和一氧化碳传感器。为了保重整个系统可靠的运行,设计中必须明确三大部分的实际联系:以单片机为中心,其他各大模块一一展开。其中,浓度检测与显示模块所实现的功能是将房间中的一氧化碳浓度值转换成为单片机能够处理的数字信号,并且浓度值显示出来:主控模块以单片机为主,对其他模块的运行进行控制;报警模块是此系统的外部电路,它的功能是实现报警。系统框图如图 2-1 所示。单片机转换显示报警声音报警传感器.4/44图 2-1 总体框图2.2 CPU 的选择数据处理过程是主要由 AT89C51 单片机等芯片完成的。AT89C51 是一种带4K 字节的闪烁可编程可擦除只读存储
12、器(FPEROM-Flash Programmable andErasable Read Only Memory)的低电压,高性能 CMOS8 位微处理器,俗称单片机。其中包括 128 字节部 RAM,32 个 I/O 口线,2 个 16 位定时/计数器,一个 5 向量两级中断结构,一个全双工串行通信口,片振荡器与时钟电路。同时,AT89C51 降至 0Hz 的静态逻辑操作,并支持两种可选的节电工作模式26。空闲方式体制 CPU 的工作,但允许 RAM,定时/计数器,串行通信口与中断系统继续工作。掉电方式保存 RAM 中的容,但振荡器体制工作并禁止其他所有不见工作直到下一个硬件复位。单片机的可
13、擦除只读存储器可以反复擦除 100 次。该器件采用 ATMEL 高密AD.5/44度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器。AT89C51 单片机为很多嵌入式控制系统提供了一种灵活性高且廉价的方案。AT89C51 单片机管脚图如图 2-2 所示EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0
14、435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10U189C51.6/44图 2-2 AT89C51 单片机管脚图引脚功能说明如下:VCC:电源电压GND:地P0口:P0口是一组8 位漏极开路型双向I/O口,也即地址/数据总线复用。作为输出口用时,每位能吸收电流的方式驱动8个TTL 逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活部上拉电阻。在Flash 编程时,P0口接受指令字节,而在
15、程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1口:P1是一个带部上拉电阻的8 位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过部的上拉电阻把端口拉到高电平,此时可作输入口。作为输入口使用时,因为部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash 编程和程序校验期间,P1接受低8 位地址。.7/44P2口:P2是一个带有部上拉电阻的8 位双向I/O 口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过部的上拉电阻把端口拉到高电平,此时可作输入口。作为输入口使用时,因为部存在上拉
16、电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位四肢的外部数据存储器(例如执行MOVX DPTR指令)时,P2口送出高8 位地址数据,在访问8 位地址的外部数据存储器(例如执行MOVXRI 指令)时,P2口线上的容(也即特殊功能寄存器(SFR)区中R2 寄存器的容),在整个访问期间不改变。Flash编程和程序校验时,P2也接收高位地址和其他控制信号。P3口:P3是一个带有部上拉电阻的8位双向I/O口,P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过部的上拉电阻把端口拉到高电平,此时可作输入口。作为输入口使用时,因为部存在上拉
17、电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。P3 口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是,每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期.8/44间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(S
18、FR)区中的8EH单元D0位置位,可禁止ALE操作。该位置,只有一条MOVX和MOVC指令ALE 才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。PSEN:程序存储允许输出是外部程序存储器的读选通型号,当89C51由外部存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有效的PSEN信号不出现。EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000HFFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时部会锁存EA端状态。如EA端为高电平(接VCC端),
19、CPU则执行部程序存储器中的指令。Flash存储器编程时,该引脚加上+12v的编程允许电源VPP,当然这必须是该器件使用12v编程电压VPP。XTAL1:振荡器反相放大器与部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端。89C51 中有一个用于构成部振荡器的高增益反相放大器,引脚 XTAL1 和 XTAL2 分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或瓷谐振器一起构成自激振荡器,外接石英晶体或瓷谐振器与电容 C1、C2 接在放大器的反馈回路中构成并联振荡电路。对电容 C1、C2 虽没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的
20、稳定性、起振的难易程度与温度稳定性,如果使用石.9/44英晶体,我们推荐电容使用 30Pf10Pf,而如使用瓷谐振器建议选择 40Pf10Pf。用户也可以采用外部时钟。这种情况下,外部时钟脉冲接到 XTAL 端,即部时钟发生器的输入端 XTAL 则悬空。2.3 时钟电路设计单片机工作时,从取指令到译码再进行微操作,必须在时钟信号控制下才能有序地进行,时钟电路就是为单片机工作提供基本时钟的。单片机的时钟信号通常有两种产生方式:部时钟方式和外部时钟方式。本课题采用部时钟方式。在单片机 XTAL1 和 XTAL2 引脚上跨接上一个晶振和两个稳频电容,可以与单片机片的电路构成一个稳定的自激振荡器。晶振
21、频率取 12 MHz。外接电容的作用是对振荡器进行频率微调,使振荡信号频率与晶振频率一致,同时起到稳定频率的作用,本课题选用 33pF 的电容。易知:本单片机最小系统的振荡周期=1/(12MHz)=1/12us,时钟周期=1/6us,机器周期=1us。.10/44图 2-3 时钟电路原理图2.4 复位电路设计无论是在单片机刚开始接上电源时,还是运行过程中发生故障都需要复位。复位电路用于将单片机部各电路的状态恢复到一个确定的初始值,并从这个状态开始工作。单片机的复位条件:必须使其 RST 引脚上持续出现两个(或以上)机器周期的高电平。单片机的复位形式:上电复位、按键复位。本课题采用按键复位。在单
22、片机启动 0.1S 后,电容 C 两端的电压持续充电为 5V,这是时候 10K 电阻两端的电压接近于 0V,RST 处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在 0.1S,从 5V 释放到变为了 1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K 电阻两端的电压为 3.5V,甚至更大,所以 RST 引脚又接收到高电平。单片机系统自动复位。R2100+5VC21ufBR11k.11/44图 2-4 复位电路原理图2.5 单片机最小系统设计单片机的最
23、小系统是由组成单片机系统必需的一些元件构成的,除了单片机之外,还需要包括电源供电电路、时钟电路、复位电路。图 2-5 单片机最小系统原理图EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10U189C51C133pC233pX1CRYSTALR2100+5VC21ufBR11k+5V
24、.12/44第 3 章 CO 浓度监测仪输入输出电路设计3.1 CO 传感器的选择选择一氧化碳传感器主要考虑以下的性能指标:(1)输入和输出之间成比例,直线性好、灵敏度高、分辨力强、测量围宽。(2)滞后、漂移误差小(3)动态特性好(4)功耗小(5)时间老化特性优良(6)与被测体匹配良好,既不因接入传感器而使得被测对象受到影响,受被测量之外的影响小。(7)体积小、重量轻、价格低廉。(8)故障率低,易于校准和维护。(9)由于传感元件的输出信号一边比较小,为了便于能够驱动控制电路,在传感器电路中还应该包括放大器。鉴于以上选择要点,本文中用到的传感器必须具备良好的测量效果、功耗小、动态特性良好和体积小
25、、重量轻、价格低廉等几个主要特性。为此我们选择了MQ-7 系列传感器。半导体一氧化碳传感器MQ-7所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。采用高低温循环检测方式低温(1.5V 加热)检测一氧化碳,传.13/44感器的电导率随空气中一氧化碳气体浓度增加而增大,高温(5.0V 加热)清洗低温时吸附的杂散气体。使用简单的电路即可将电导率的变化,转换为与该气体浓度相对应的输出信号。MQ-7 气体传感器对一氧化碳的灵敏度高,这种传感器可检测多种含一氧化碳的气体,是一款适合多种应用的低成本传感器。主要特点与应用:对一氧化碳的高灵敏度。长寿命,低成本。简单的驱动电路即可 家用气体泄漏
26、报警器 工业用一氧化碳报警器 便携式气体检测器MQ-7 气敏元件的结构和外形如图 3-1 所示,由微型 Al2O3 瓷管、SnO2 敏感层,测量电极和加热器构成的敏感元件固定在塑料或不锈钢制成的腔体,为了改善传感器的选择性,传感器气室用活性炭过滤层与外界隔开。加热器为气敏元件提供了必要的工作条件。封装好的气敏元件有 6 只针状管脚,其中 4 个用于信号取出,2 个用于提供加热电流。.14/44图 3-1 MQ-7 实物图3.2 运算放大器选择由于气体传感器输出的电压值过低,无法直接使用 A/D 读取,必须要加入放大电路,对电压放大然后再经过 A/D 读取。在此,选择 LM358 作为运算放大器
27、。LM358 部包括有两个独立的、高增益、部频率补偿的双运算放大器,适合于电源电压围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。它的使用围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合。LM358具备以下特性:部频率补偿;直流电压增益高(约100dB);单位增益频带宽(约1MHz);电源电压围宽:单电源(3-30V)、双电源(1.5-15V);低功耗电流,适合于电池供电;低输入偏流,低输入失调电压和失调电流;共模输入电压围宽,包括接地;差模输入电压围宽,等于电源电压围;输出电压摆幅大(0 至Vcc-1.5V)。.15/44图
28、 3-2 运算放大器电路原理图3.3 A/D 转换电路为了方便与 AT89C5 单片机的,本系统采用 AD0809 模数转换芯片对采集到的气体信息进行数模转换。其分辨率为 8 位,不必进行零点和满度调整,且具有高阻抗斩波稳定比较器,8 个通道的多路开关可直接存取 8 个单端模拟信号中的一个。利用单片机启动 AD0809 转换器,转换结束后再由 AD0809 向 AT89C51发出中断请求信号,CPU 响应中断请求。通过对译码器的读操作,读取转换结果并送到被测量的响应存储区。再重新选择被测量,并再次启动 AD0809 转换器转换后中断返回。AD0809 与单片机 AT89C51 连线线路如图 3
29、-3 所示。.16/44图 3-3 AD0809 与单片机 AT89C51 连线线路3.4 声光报警电路系统的声,光报警电路由发光二极管和低电压蜂鸣器构成,分别由 PIC 单片机的 2 个端口控制。发光二极管 LED 具有体积小,抗冲击和抗震性能好,可靠性高,寿命长,工作电压低,功耗小,响应速度快等优点,常用于显示系统的工作状态,有益于控制系统的设计和维护。当该部分工作时,整机的工作电流将增加为未报警状态时的电流的数倍,消耗的功率会比较大,因此采用了分时供电的方法,通过单片机控制该部分电源的通断,即质量浓度达到报警时才给其供电;另外,用单片机输出的周期脉冲报警信号控制振荡器的启停,用振荡器输出
30、信号控制蜂鸣器和发光二极管,振荡器可以用 TTL 门电路构成的多谐振荡器。采用这 2种方法可降低该部分的电路的功耗。设计中,LED 发光二极管的工作电流为.17/445-20mA,最大不超过 50mA,否则会烧坏器件。为了获得良好的发光效果,LED工作电流控制在 10-15mA 较为合理。在图 3-4 中所示电路中,D 口得 RD4,RD5,RD6,RD7,接声,光报警电路,其中 D 口的 RD5-RD7 分别接质量浓度过高,相等,过低的 LED。当气体检测仪检测质量浓度低于设定值时,绿灯亮;当气体质量浓度达到某一定值时,黄灯亮;当高于设定值时,红灯亮并发出警报信号。图 3-4 声光报警电路原
31、理图3.5 显示电路在该设计中,LED 显示器的显示方法采用动态显示。LED 动态显示的基本做法在于分时轮流选通数码管的公共端,使得各数码管轮流导通,在选通相应的 LED 后,即在显示字段上得到显示字形码。这种方式不但能提高数码管的发光效率,并且由于各个数码管的字段线是并联使用的,从而大大简化了硬件线路。本设计中处理结果采用 4 位 LED 显示,首次显示气体类别,后 3 位显示气体浓度。逐位轮流点亮各个 LED,每一位保持 1ms,在 10-20ms之再一次点亮,重复不止。这样利用人的视觉停留,好像 4 位 LED 同时点.18/44亮一样。图 3-5 显示电路原理图.19/44第 4 章
32、软件设计4.1 流程图设计图4-1 软件流程图.20/444.2 程序编写4.2.1 主程序整个程序一共使用了两个中断,一个外部中断即 INT0 中断,一个定时/计数器中断即 IT0 中断.这两个中断各有其作用,INT0 中断是用来判断 A/D 转换器ADC0809 对模拟信号的转换是否完成,当 A/D 转换结束后,ADC0809 发出结束EOC(高电平)信号,该信号可供单片机查询,也可反相后作为向单片机发出中断信号,而本设计正是用的这个方法,使得程序进入中断取值程序.而程序中所用到的IT0 中断,是为产生一个周期为 2S 的方波而设计的,其作用是为看门狗产生喂狗子信号.具体程序如下:ORG
33、00HJMPSTART;主程序入口地址ORG03HJMPINTO;外中断 INTO 入口ORG0BHJMPITOP;定时器 0 中断入口ORG 0100HSTART:MOV IE,#10000001B;INT0 中断使能MOV IP,#00000001B;INT0 中断优先.21/44MOV TCON,#00000000B;设置 INT0 为电平触发MOV SCON,#00000000B;串行口发送,接收标志位请 0MOV SP,#60H;设堆栈指针MOV TMOD,#01H;设置 T0 为方式 1CALL PT0M0HERE:AJMP HERE;自身跳转PT0M0:MOV TL0,#0CH;
34、T0 中断服务程序,T0 重新置初值MOV TH0,#0FEHSETB TR0;启动 T0SETB ET0;允许 T0 中断SETB EA;CPU 开中断RETITOP:MOV TL0,#0CH;T0 中断服务程序,T0 置初值MOV TH0,0FEHCPL P1.0;P1.0 状态取反RETIACALLLED;调用 LED 自检子程序MOV 33H,#00H;设置中断完成标志为 0MOV DPTR,#0FEFFH;ADC0809 的端口地址.22/44MOVX DPTR,A;使 BUS 为高阻抗,令 ADC0809开始转换WAIT:MOV A,33H;等待 A/D 转换完成信号JNZ INT
35、OKJMP WAIT;未完成则跳回等待INTOK:MOV A,32H;将最新的浓度值存入累加器中,(若 A/D 未工作,则 A=0)JNZL1MOV A,30HJMP L2L1:MOV 30H,31HMOV A,31H;将新浓度载入累加器L2:CALL BCD;调用 BCD 码调整程序CALL DISP;显示当前浓度CALL ADZERO;调用零点调整子程序CALL ALARM;调用判断报警程序CALL BCDCALL DISP;调用显示子程序CLR A;清除累加器值.23/44JMP START;返回在主程序通过对 33H 中数值的判断断定 A/D 是否转换完成,当 33H 中为 1时,转换
36、完成,程序调用调零、报警、显示模块对输入数据进行处理。4.2.2 调零子程序由于未知问题,可能造成送入单片机中显示的模拟电压量与真实电压存在区别,这种误差可以通过在中断处理中对 A/D 转换的数值加上一个调整值来解决。这样,我们就能根据实际情况来对报警器输出的数值进行控制,使其记数更加精确,使用更方便。我们可以利用对端口的电平高低来判断是否需要进行调零处理,故可将按键开关接于端口 P2.2.若开关按下,则说明有调零需要,于是进入调零处理程序;若开关没有按下,则说明没有调零需要,系统进入下一步.通过设置一个按键,既可保证程序顺利进行,又方便用户使用.具体程序如下:ADZERO:CALL DELA
37、YP2.2,JMP1;判断调零按钮是否按下,没按则跳 JMP1.JMP1:RET通过对 P2.2 位的判断来分辨是否有调零请求,若有则跳入调零模式,调零模式中程序如下:LOOP1:CALL DELAY.24/44JNB P2.2,$;消除抖动延时MOV A,40H;将调零预设值 40H 送入CLR C;清除进位标志SUBB A,#01H;调零值减 1JNC LOOP2;未借位则跳 LOOP2MOV A,#05H;有借位则重设调零值为 5LOOP2:MOV 40H,A;将调零值送回 40H 保存MOV A,R3;将当前浓度值送入 AJZ XENDDEC A;当前浓度值减 1(响应调整变化)XEN
38、D1:MOV 30H,A;送回 30H 保存MOV 31H,A;送回 31H 保存CALL BCD;调用 BCD 码调整CALL DISP;调用显示子程序JMP LOOPXEND:MOV A,#63HJMP XEND1进入调零模式后,若有按键则,LED 数码管示数响应按键变化。若 3 秒无任何按键,则退出调零模式返回主程序。.25/444.2.3 显示子程序因为通过 A/D 转换进入单片机 8051 的浓度值以十六进制存在,为了让 LED显示需要转换为 BCD 码,其 BCD 码转换程序如下:BCD:MOV 55H,#00H;存放 BCD 转换中的百位数MOV 56H,#00H;存放 BCD
39、转换中的十位数CLR C;清除进位标志为下面的 SUBB 准备MOV R2,#00H;清除 R2CHAN:SUBB A,#64H;减 100JC CHAN1;不能减,转INC R1;百位值JMP CHAN;循环判断百位CHAN1:ADD A,#64H;还原百位数CLR C;清除进位标志为下面的 SUBB 准备CHAN2:SUBB A,#0AH;减 10JC CHAN3;不够减,跳INC R2;够减十位加 1JMP CHAN2;重复减 10CHAN3:ADD A,#0AH;还原十位数MOV 60H,R2;把十位数放 60H 中MOV 61H,A;把个位数放 61H 中RET这样把转换成的 BCD
40、 码,个位存于 61H 中,十位存入 60H 中,再编写显示模块如下:DISP:MOV R7,#03HMOV R0,#60HLED1:MOV A,R0MOV DPTR,#TABLELED2:MOVC A,A+DPTRMOV SBUF,AJNB TI,$CLR TIINC R0DJNZ R7,LED1RET.26/44将数值送入到 LED 显示74LS164 驱动数码管的过程:在单片机应用系统中,显示器显示常用两种方法:静态显示和动态扫描显示。所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的 I/O 接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,
41、直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中 CPU 的开销小。可以提供单独锁存的 I/O 接口电路很多,这里以常用的串并转换电路 74LS164 为例,介绍一种常用静态显示电路,以使大家对静态显示有一定的了解。MCS-51 单片机串行口方式 0 为移位寄存器方式,外接 3 片 74LS164 作为 3 位LED 显示器的静态显示接口,把 8031 的 RXD 作为数据输出线,TXD 作为移位时钟脉冲。74LS164 为 TTL 单向 8 位移位寄存器,可实现串行输入,并行输出。其中 A、B(第 1、2 脚)为串行数据输入端,2 个引脚按逻辑与运算规律输入信号,共一个输入
42、信号时可并接。T(第 8 脚)为时钟输入端,可连接到串行口的 TXD端。每一个时钟信号的上升沿加到 T 端时,移位寄存器移一位,8 个时钟脉冲过后,8 位二进制数全部移入 74LS164 中。R(第 9 脚)为复位端,当 R=0 时,移位寄存器各位复 0,只有当 R=1 时,时钟脉冲才起作用。Q1Q8(第 3-6 和 10-13引脚)并行输出端分别接 LED 显示器的 hga 各段对应的引脚上。在给出了 8 个脉冲后,最先进入 74LS164 的第一个数据到达了最高位,然后再来一个脉冲会有什么发生呢?再来一个脉冲,第一个脉冲就会从最高位移出,搞清了这一点,下面让我们来看电路,3 片 7LS16
43、4 首尾相串,而时钟端则接在一起,这样,当输入8 个脉冲时,从单片机 RXD 端输出的数据就进入到了第一片 74LS164 中了,而当第二个 8 个脉冲到来后,这个数据就进入了第二片 74LS164,而新的数据则进入了第一片 74LS164,这样,当第六个 8 个脉冲完成后,首次送出的数据被送到了最左面的 164 中,其他数据依次出现在第一、二、三片 74LS164 中。由于本设计采用的是机械按键,与地线想连,按键按下,输入为低电平,释放按键则输入为高电平。实际上,机械式按键的落片存在着轻微的弹跳现象其时间由操作员按键的动作所确定,为了确保 CPU 对按键的一次闭合仅做一次处理,必须去除抖动,
44、一般通过调用子程序延时来解决,在键的稳定闭合或释放时才读出键的状态,具体程序如下:DELAY:MOVR 5,#60设定 30 毫秒D1:MOV R6,#248;设定 0.5 毫秒DJNZ R6,$DJNZ R5,D1RET.27/44因为石英晶体为 12MHZ,一个机器周期为 1 微秒,这样如上程序可达到延时30 毫秒的目的。4.2.4 报警子程序本设计采用了声光报警,当探测器探测的浓度超过报警设定值时就会同时产生音乐报警和灯光报警,此时红灯亮启,喇叭发出音乐,而正常时,喇叭关闭,红灯关闭,而显示正常的绿色LED亮启,本设计为了安全起见,还设置了事故处理装置,即出现危险使,探测器除了报警外,还
45、会使排气扇的阀门打开,对室进行排气,以免产生气体爆炸或是中毒.具体程序如下ALARM:MOV A,30H;将当前浓度值送如累加器CLR C;清除进位标志SUBB A,50H;与预警值进行判断JNC GOOD1;若无借位,则当前浓度值高于或者等于预警值,跳 GOOD1 报警SETB P1.6;关闭声光报警SETB P1.7CLR P2.3;关闭排气阀门SETB P1.5;关闭黄色 LEDCLR P1.4;打开绿色 LED(显示正常)RETGOOD1:CLR P1.6;打开声光报警(危险报警)CLR P1.7CLR P2.3;打开排气阀门SETB P1.5;关闭黄色 LEDSETB P1.4;关闭
46、绿色 LED(显示不正常?RET4.2.5 中断取值子程序从硬件电路图可以看出,A/D0809 的 INTR 端通过反相器与单片机的外部中断 INT0 相连,由 A/D0809 的管脚功能可知,当 A/D 开始转换送入的模拟电压时,INTR 端为低电平,转换完成后,INTR 端变成高电平,通过反相器变成低电平使单片机 89C51 产生外部中断,进入中断处理程序:;*.28/44INTO:PUSH ACC;将累加器值压入堆栈保存PUSH PSW;将 PSW 值压入堆栈保存MOVX A,DPTR;将 A/D 转换好的值送入累加器MOV 32H,A;将A/D读得的值存入32H保存CLR CSUBB
47、A,51H;判断获得的电压是否小于1V(50)JNC OK1MOV 32H,#00H;当前 A/D 转换的电压小于 1V,则 A/D 转换得的示数为 00JMP EMP1OK1:MOV A,32HCALL ADJUST;调用 ADJUST 将其调整为浓度对应的 16 进制CALL ADDD;调用 ADDD 将其与调零预设值相加,得到调整后的 16 进制MOV 31H,A;将调整后的值送入 31H 保存EMP1:MOV IE,#10000000B;关闭 INT0 中断使能,关闭中断POP PSW;至堆栈取回 PSW 值POP ACC;至堆栈取回 ACC 值MOV 33H,#01H;中断完成,设置
48、完成标记 33H为 1RETI;*;调整相加子程序;*ADJUST:CLR CSUBB A,#32H;将 A/D 转换的值减 50 再除 10乘 5 可得当前浓度的 16 进制值MOV B,#0AHDIV ABMOV B,#05HMUL AB.29/44RETADDD:ADD A,40HTABLE:DB 0C0H,0F9H,0A4H,0B0H,99HDB 92H,82H,0F8H,80H,90HEND在中断处理过程中,因为 A/D0809 在模拟电压为 15V 时送入单片机的数值为 50250,为了使示数在 099 间变化,编写数值转换程序如下:ADJUST:CLR CSUBB A,#32H;
49、将 A/D 转换的值减 50 再除 10 乘 5 可得当前浓度的 16 进制值MOV B,#0AHDIV ABMOV B,#05HMUL ABRET.30/44.31/44第 5 章 软件仿真硬件原理图见附录。为了检测电路设计和软件设计是否正确,采用 Proteus 软件进行仿真。Proteus 软件具有独特的单片机协同仿真功能(VSM):支持主流的 CPU 类型:如 ARM7、8051/52、AVR、PIC10/12、PIC16、PIC18、PIC24、dsPIC33、HC11、BasicStamp、8086、MSP430 等,CPU 类型随着版本升级还在继续增加,如即将支持 CORTEX、
50、DSP 处理器;支持通用外设模型:如字符 LCD 模块、图形 LCD 模块、LED 点阵、LED 七段显示模块、键盘/按键、直流/步进/伺服电机、RS232 虚拟终端、电子温度计等等,其 COMPIM(COM 口物理接口模型)还可以使仿真电路通过 PC 机串口和外部电路实现双向异步串行通信;实时仿真:支持 UART/USART/EUSARTs 仿真、中断仿真、SPI/I2C 仿真、MSSP 仿真、PSP 仿真、RTC 仿真、ADC 仿真、CCP/ECCP 仿真;编译与调试:支持单片机汇编语言的编辑/编译/源码级仿真,带 8051、AVR、PIC 的汇编编译器,也可以与第三方集成编译环境(如 I