1、摘 要一氧化碳检测仪是一种用于公共场所及室内具有检测及超限报警功能的仪器。其设计方案基于AT89C52单片机,选择瑞士蒙吧波公司的CO/CF-1000一氧化碳传感器。系统将传感器的标准信号通过AD0832为核心的A/D转换电路调理后,经由单片机进行数据处理,最后由LCD显示一氧化碳浓度值。文中详细介绍了数据采集子系统、数据处理过程以及数据显示子系统和报警电路的设计方法和过程。系统对于采样地点超出规定的一氧化碳容许浓度时采用三极管驱动的单音频报警电路提醒监测人员。同时,操作人员对于具体报警点的上限值可以通过单片机编程进行设置。另外,该系统对浓度信号进行了信号补偿等处理,减少了测量误差,因此,具有
2、较高的测量精度,而且结构简单,性能优良。关键词:一氧化碳检测;单片机;数据采集处理系统目 录1 前言11.1一氧化碳的危害11.2一氧化碳检测仪的种类11.3课题的背景和意义22 检测仪系统总体设计33 一氧化碳检测仪硬件设计43.1硬件结构设计43.2硬件选择与设计43.2.1 MCU的选择与设计43.2.2单片机最小系统的实现63.2.3数据采集系统的选择与设计83.2.4模数转换的选择与设计93.2.5按键选择与设计103.2.6外围扩充存储器的选择与设计113.2.7时钟芯片选择与设计123.2.8上拉电阻的选择与设计133.2.9液晶显示器选择与设计143.2.10报警电路选择与设计
3、163.3硬件设计主电路图174 软件设计184.1软件设计结构的设计184.2主程序模块的设计184.3模数转换模块的设计194.4按键模块的设计204.5时钟模块的设计214.6液晶显示模块的设计225 系统仿真23结论27致谢28附录29参考文献301 前言1.1一氧化碳的特性及危害一氧化碳是无色、无臭、无味、有毒的气体,熔点199,沸点191.5。标准状况下气体密度为l.25g/L,和空气密度(标准状况下1.293g/L)相差很小,这也是容易发生煤气中毒的因素之一。一氧化碳分子中碳元素的化合价是2价,能进一步被氧比成4价,从而使一氧化碳具有可燃性和还原性,一氧化碳能够在空气中或氧气中燃
4、烧,生成二氧化碳。一氧化碳中毒(carbon monoxide poisoning),亦称煤气中毒。一氧化碳是无色、无臭、无味的气体,故易于忽略而致中毒。常见于家庭居室通风差的情况下,煤炉产生的煤气或液化气管道漏气或工业生产煤气以及矿井中的一氧化碳吸入而致中毒。中毒原理:一氧化碳会与肺部的血红蛋白结合,造成机体缺氧。一是轻度中毒。患者可出现头痛、头晕、失眠、视物模糊、耳鸣、恶心、呕吐、全身乏力、心动过速、短暂昏厥。血中碳氧血红蛋白含量达10%-20%。二是中度中毒。除上述症状加重外,口唇、指甲、皮肤粘膜出现樱桃红色,多汗,血压先升高后降低,心率加速,心律失常,烦躁,一时性感觉和运动分离(即尚有
5、思维,但不能行动)。症状继续加重,可出现嗜睡、昏迷。血中碳氧血红蛋白约在30%-40%。经及时抢救,可较快清醒,一般无并发症和后遗症。三是重度中毒。患者迅速进入昏迷状态。初期四肢肌张力增加,或有阵发性强直性痉挛;晚期肌张力显著降低,患者面色苍白或青紫,血压下降,瞳孔散大,最后因呼吸麻痹而死亡。经抢救存活者可有严重合并症及后遗症。一氧化碳的后遗症。中、重度中毒病人有神经衰弱、震颤麻痹、偏瘫、偏盲、失语、吞咽困难、智力障碍、中毒性精神病。部分患者可发生继发性脑病。1.2 一氧化碳检测仪的种类目前,市场上一氧化碳检测仪的种类是多种多样,目前应用得较为广泛的是热催化监测方式,但由于多种可热性气体都能催
6、化氧化燃烧,导致检测精度下降,另外,采用这种方式的检测仪体积和功率都较大,不便于随身携带,本设计提出的一种采用点调制非光红外(NDIR)气体成分分析技术检测一氧化碳气体的方法,该方法提高了检测精度,大大降低了检测仪的尺度和功耗,延长了电池供给时间,体积和功耗的有效降低。1.3课题的背景和意义在当今社会发展中,现代化的发展给人类带了很大的方便,但与此同时,人生安全越来越受到人们的重视,一氧化碳在工业领域所给我们带来的方便不言而喻,但它对人体的危害也是显而易见的。所以我们设计一款基于单片机控制的一氧化碳检测仪,对一氧化碳进行检测,为人们提供了安全的保障。2 一氧化碳检测仪系统总体设计本论文主要完成
7、一氧化碳检测仪软件和硬件仿真设计,设计内容包括:A/D转换器程序、控制程序、超标报警、键盘检测、数据显示等。本系统采用单片机为控制核心,以实现一氧化碳检测仪的基本控制功能。系统主要功能内容包括:数据处理、时间设置、开始测量、超标报警、键盘检测、自动休眠,仪器若不进行测量操作,5分钟后自动进入休眠模式,以降低电源消耗。本系统设计采用功能模块化的设计思想,系统主要分为总体方案设计、硬件和软件的设计三大部分。根据任务书上的要求进行综合分析,总设计方案分为以下几个步骤:(1)硬件系统电路的设计;(2)软件系统主程序及其相关子程序的编写;(3)系统电路及软件的调试;(4)结论。3 一氧化碳检测仪硬件设计
8、3.1硬件结构设计硬件设计部分主要包括:单片机、A/D转换器、时钟芯片、LCD、外围扩展数据RAM等芯片的选择;硬件主电路设计、数据采集、模数转换电路设计、液晶显示电路设计、外围扩充存储器接口电路、时钟电路、复位电路、键盘接口电路等功能模块电路设计。硬件结构框图3-1。图3-1 硬件结构框图3.2硬件选择和设计3.2.1 AT89C52单片机的选择本系统采用AT89C52单片机。而目前世界上较为著名的8位单片机的生产厂家和主要机型如下:美国Intel公司:MCS51系列及其增强型系列;美国Motorola公司:6801系列和6805系列;美国Atmel公司:89C51等单片机;美国Zilog公
9、司:Z8系列及SUPER8;美国Fairchild公司:F8系列和3870系列;美国Rockwell公司:6500/1系列;美国TI(德克萨司仪器仪表)公司:TMS7000系列;NS(美国国家半导体)公司:NS8070系列等等。尽管单片机的品种很多,但是在我国使用最多的还是Intel公司的MCS52系列单片机和美国Atmel公司的89C52单片机。MCS51系列单片机包括三个基本型8031、8051、8751。本系统采用AT89C52单片机为控制核心。而相比之下52型功能更为强大,ROM和RAM存储空间更大,52还兼容51指令系统。基于本系统设计内容的需要,综合考虑后,我们选择单片机ATME公
10、司的AT89C52为控制核心;主要基于考虑AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8KB的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM)、6个中断源;时钟频率024MHz;器件采用高密度、非易失性存储技术生产,并兼容标准MCS-51指令系统,功能强大。AT89C52是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含8K bytes的可反复擦写的只读程序存储器(PEROM)和256K bytes的随机存取数据存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容
11、,片内置通用8位中央处理器和FLASH存储单元,功能强大,AT89C52单片机适合于许多较为复杂控制应用场合。图3-2 引脚图主要性能参数:与MCS-51产品指令和引脚完全兼容;8K字节可重擦写FLASH闪存存储器;1000次写/擦循环;时钟频率:0Hz24MHz;三级加密存储器;256字节内部RAM;32个可编程I/O口线;3个16位定时/计数器;6个中断源;可编程串行UART通道。3.2.2单片机最小系统的设计采用AT89C52来设计一个单片机系统能运行起来的需求最小的系统,电路图见图3-3:图3-3 单片机最小系统图上图的最小单片机系统包含有晶振电路和复位电路,AT89C52芯片组成。(
12、1)晶振电路晶振电路在各种指令的微操作在时间上有严格的次序,这种微操作的时间次序称作时序, AT89C52的时钟产生方式有两种,一种是内部时钟方式,一种是外部时钟方式。本系统中采用了内部时钟方式,为了尽量降低功耗的原则。电路图见图3-4。图3-4 晶振电路图在89C52单片机的内部有一个震荡电路,只要在单片机的XTAL1和XTAL2引脚外接石英晶体(简称晶振)就构成了自激振荡器并在单片机内部产生时钟脉冲信号,图中电容器C1和C2稳定频率和快速起振,晶振CRY选择的是12MHz。(2)复位电路复位的意义复位电路在单片机工作中仍然是不可缺少的主要部件中,单片机工作时必须处于一种确定的状态。端口线电
13、平和输入输出状态不确定可能使外围设备误动作,导致严重事故的发生;内部一些控制寄存器(专用寄存器)内容不确定可能导致定时器溢出、程序尚未开始就要中断及串口乱传向外设发送数据。复位电路原理 图3-5 上电复位电路图本设计中复位电路采用的是上电复位与手动复位电路,开关未按下是上电复位电路,上电复位电路在上电的瞬间,由于电容上的电压不能突变,电容处于充电(导通)状态,故RST脚的电压与VCC相同。随着电容的充电,RST脚上的电压才慢慢下降。选择合理的充电常数,就能保证在开关按下时是RST端有两个机器周期以上的高电平从而使AT89C52内部复位。开关按下时是按键手动复位电路,RST端通过电阻与VCC电源
14、接通,通过电阻的分压就可以实现单片机的复位。电路图见图3-6: 图3-6 复位电路图3.2.3数据采集系统的选择与设计(1)一氧化碳传感器的选择:一氧化碳传感器选用CO/CF-1000探头组成,如下表3-1。表3-1 传感器参数名称一氧化碳传感器 CO/CF-1000测量范围0 - 1 000 ppm输 出10020nA/ppm分辨率0.05 ppm响应时间 (T 90)50 seconds湿度范围15-90 %RH(非凝结)最大零点漂移(20to 40)10 ppm长期漂移2% /每月推荐负载值10线性度输出线性(2)从传感器过来的电压信号,必须采集,滤波,放大,转换才能被MCU识别和处理。
15、由于假若每一路都设置放大、滤波等器件,那么成本会很大,所以信号的采集一般用多路模拟通路进行选择。然而选择多路模拟开关时必须考虑以下的几个因素:通道数量、切换速度、开关电阻和器件的封装形式。总之数据采集与硬件的选择有很大的关系。(3)测量电路测量电路由CO/CF-1000一氧化碳传感器、ADC0832组成。当空气被内部的采样系统接收后,产生一个与一氧化碳浓度成正比的电压信号,该电压信号经ADC0832与AT89C52单片机相连,在显示器上显示出一氧化碳的浓度值,当超过国家规定的标准时报警。3.2.4模数转换器的选择与简介(1)由于ADC0832模数转换器具有8位分辨率、双通道A/D转换、输入输出
16、电平与TTL/CMOS相兼容、5V电源供电时输入电压在05V之间、工作频率为250KHZ 、转换时间为32微秒、一般功耗仅为15MW等优点,适合本系统的应用,所以我们采用ADC0832为模数转换器件。电路图见图3-7如下:图3-7 模数转换电路图(2)ADC0832 具有以下特点:8位分辨率;双通道A/D转换;输入输出电平与TTL/CMOS相兼容;5V电源供电时输入电压在05V之间;工作频率为250KHZ,转换时间为32S;一般功耗仅为15mW;8P、14PDIP(双列直插)、PICC 多种封装;商用级芯片温宽为0到+70,工业级芯片温宽为40到+85;芯片接口说明:CS_片选使能,低电平芯片
17、使能;CH0模拟输入通道0,或作为IN+/-使用;CH1模拟输入通道1,或作为IN+/-使用;GND芯片参考0电位(地);DI数据信号输入,选择通道控制;DO数据信号输出,转换数据输出;CLK芯片时钟输入;Vcc/REF电源输入及参考电压输入(复用)。单片机对ADC0832的控制原理:正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,CLK和DO/DI的电平可任意。当要进行A/D转换时,先将C
18、S使能端置于低电平并且保持低电平直到转换完全结束。同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。(3)测量量程由于ADC0832模数转换器的位数为8位,所以ADC0832模数转换器的精度为:10ppm/256=0.039ppm。3.2.5按键选择与简介(1)本系统选择独立式按键。键盘分为:独立式和矩阵式两类,每一类按其编码方法又可以分为编码和非编码两种。本系统具有人机对话功能,该功能即能随时发出各种控制命令和数据输入以及和LCD连接显示运行状态和运行结果。由于本系统只有UP、DOWN、OK、CANCEL4个控制命令,所需按键较少,所以本系
19、统选择独立式按键。电路图见图3-8。图3-8 按键电路图(2)独立式按键是直接用I/O口线构成的单个按键电路。每个独立式按键占有一根I/O口线。各根I/O口线之间不会相互影响。在此电路中,按键输入部采用低电平有效,上拉电阻保证了按键断开时,I/O口线有确定的高电平,(AT89C52.P1口内部接有上拉电阻)所以就不需要再外接上拉电阻。(3)键盘抖动的消除:抖动的消除大致可以分为硬件削抖和软件削抖。硬件削抖是采用硬件电路的方法对键盘的按下抖动及释放抖动进行削抖,经过削抖电路后使按键的电平信号只有两种稳定状态。3.2.6外围扩充存储器的选择由于考虑AT89C52单片机具有8KB的程序存储器(ROM
20、),256B的数据存储器(RAM),由于考虑到本系统的数据处理与存储所需的容量,现在需要扩充存储器的容量。在应用中要保存一些参数和状态,本系统选用AT24C128存储器。电路图见图3-9。 图3-9 外围扩充存储电路图3.2.7时钟芯片选择与设计在本系统,我们选择了DS1302时钟芯片。因为此系统需要记录测量发生的时间,所以需要时钟芯片来记录不同时间的监测数据,因此我们在系统中加入了时钟芯片。(1)我们时钟电路选择的芯片是DS1302,其内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机通信。而通信时,仅需要3个口线:RES(复位),I/O数据线,SCLK(串行时钟)。时钟/
21、RAM的读/写数据以一字节或多达31字节的字符组方式通信。(2)DS1302主要性能有:时钟能计算2100年之前的秒、分、时、日、日期、星期、月、年的能力,还有闰年的调整能力;读/写时钟或RAM数据时,有单字节和多字节传送两种方式,与DS1202/TTL兼容。(3)DS1302引脚概述:X1,X2;振荡源,外接32.768KHZ晶振;SCLK:串行时钟输入端。见表3-2。寄存器名命令字取值范围各位内容写操作读操作765430秒寄存器80H81H0059CH10SECSEC时寄存器84H85H0112 002312/24010/(A/P)HRHR日寄存器86H87H0128,29、30、3100
22、10DATEDATE月寄存器88H89H011200010MMONTH周寄存器8AH8BH01070000DAY年寄存器8CH8DH019910YEARYEAR保护寄存器8EH8FHWP0000慢充电寄存器90H91HTCSTCSTCSTCSDSDSRSRS时钟突发寄存器BEHBFH表3-2 时钟控制字对照表(4)DS1302数据输入/输出时序数据输入是在输入写命令字的8个SCLK周期之后,在接下来的8个SCLK周期中的每个脉冲的上升沿输入数据,数据从0位开始。如果有额外的SCLK周期,它们将被忽略。图3-10 时钟电路图数据输出是在输出命令字的8个SCLK周期之后,在接下来的8个SCLK周期
23、中的每个脉冲的下降沿输出数据,数据从0位开始。需要注意的是,第一个数据位在命令字节的最后一位之后的第一个下降沿被输出。只要RST保持高电平,如果有额外的SCLK周期,将重新发送数据字节,即多字节传送。其电路图见图3-10。3.2.8上拉电阻的选择在主电路图中接在P0口处有一个排阻RP1,由于P0口没有内接上拉电阻,为了为P0口外接线路有确定的高电平,所以要接上排阻RP1,以确保有P0口有稳定的电平。电路连接图见图3-11。 图3-11 上拉电阻电路图3.2.9液晶显示器选择我们选用了AMPIRE128X64液晶显示模块,是由于本系统要有显示装置完成显示功能,显示器最好能够显示数据、图形,考虑到
24、同种LCD显示器的屏幕越大体积越大,功耗越大的特点,该型号显示器消耗电量比较低,可以满足系统要求。该类液晶显示模块采用动态的液晶驱动,可用5V供电。AMPIRE128X64液晶共有22个引脚。如表3-3所示。表3-3 引脚说明表管脚名称管 脚 定 义/CSA片选1/CSB片选2VSS数字地VDD逻辑电源+5VV0对比度调节R/S指令数据通道R/W读写选择E使能选择DB0-DB7数据线CS1片选1CS2片选2/RES复位信号VEE液晶驱动电源LED+LED背光正电源LED-LED接地端AMPIRE128X64液晶显示模块与计算机的接口电路有两种方式。分为直接访问方式和间接控制方式。直接访问方式是
25、把液晶模块作为存储器或I/O设备直接接在单片机的总线上,单片机以访问存储器或I/O设备的方式操作液晶显示模块的工作。间接控制方式则不使用单片机的数据系统,而是利用它的I/O口来实与显示模块的联系。即将液晶显示模块的数据线与单片机的Pl口连接作为数据总线,另外三根时序控制信号线通常利用单片机的P3口中未被使用的I/O口来控制。这种访问方式不占用存储器空间,它的接口电路与时序无关,其时序完全靠软件编程实现。本系统采用间接控制方式。液晶显示电路连接原理图见图下: (2)LCD按其显示方式通常可以分为断式、点字符式、点阵式等。还有黑白、多灰度、彩色显示等。字符显示:字符显示比较复杂,一个字符由16x8
26、点阵组成,即要找到和显示屏是某几个位置对应的RAM区的字节,再使不同的位置为“1”其他的为“0”;为“1”的点亮,为“0”的不亮,这样就显示出一个字符。汉字显示:汉字显示和字符显示的原理差不多,就是一个汉字一般采用图形方式,事先从微机中用字模软件提取要显示的汉字的点阵码,每个汉字占32B,分为两部分,各16B。根据在LCD上开始显示的行列号及每行的列数就可以找出显示RAM的对应地址,送上汉字要显示的第一字节,以此类推,最后送完32B,这样汉字就显示出来了。系统的液晶显示字体和字母的显示就是按照上述的原理显示的,点阵码是用字模软件在相同的设置区域找出的。然后把提取的点阵码放入编写的LCD软件程序
27、里。(3)阵码获取过程简介:首先,打开软件,然后新建文件,因为汉字占32B所以设置其为高度和宽度16x16。取模方式选择C51格式在文字输入区输入汉字,在点阵区生成点阵码,例如在文字输入区输入“欢”字,其点阵码生成如下:图3-13 点阵生成截图3.2.10报警电路的选择图3-14 单频音报警电路图图3-14 报警电路接线图在单片机应用系统中,一般的工作状态可以通过指示灯或数码显示来指示,供操作人员参考,了解系统的工作状况。但对于紧急状态,比如系统检测到的错误状态等,往往还需要有某种更能引人注意,及时采取措施,往往还需要有某种更能引人注意,提起警觉的报警信号。这种报警信号通常有三种类型:一是闪光
28、报警,因为闪动的指示灯更能提醒人们注意;二是鸣音报警,发出特定的音响,作用于人的听觉器官,易于引起和加强警觉;三是语音报警,不仅能起到报警作用,还能直接给出警报种类的信息。其中,前两种报警装置因硬件结构简单,软件编程方便,常常在单片机应用系统中使用;而语音报警虽然警报信息较直接,但硬件成本高,结构较复杂。单频音报警实现单频音报警的接口电路比较简单,其发音元件通常可采用压电蜂鸣器,当在蜂鸣器两引脚上加315V直流工作电压,就能产生3kHZ左右的蜂鸣振荡音响。压电式蜂鸣器,约需10mA的驱动电流,可在某端口接上一只三极管和电阻组成的驱动电路来驱动,如图3-14所示。在图3-14中,P1.0接三极管
29、基极输入端,当P1.0输出高电平“1”时,三极管导通,蜂鸣器的通电而发音,当P1.0输出低电平“0”时,三极管截止,蜂鸣器停止发音。3.3 硬件设计主电路图,见附录一。4软件设计4.1软件设计结构软件设计部分主要包括:主程.序/子程序流程的设计、功能模块程序的编写、软/硬件结合调试与演示。主要包括以下功能模块:51驱动、检测、液晶显示、时钟、键盘、模数软换,软件结构框图4-1。系统初始化、按键扫描显示选择菜单测量相关设置数据处理串行通信对软件进行处理 图4-1 软件结构框图4.2主程序模块的设计主程序实现的功能:与硬件相结合实现便携式一氧化碳检测仪的各个功能。主要是检测与显示,时间调整与显示,
30、数据存储,功能子函数的调用,见图4-2。开 始初始化CPU初始化时钟初始化LED屏显示开机画面显示时间显示主菜单读 键图4-2 主程序流程图检测主程序程序见附录二。4.3模数转换的设计(1)模数转换模块的主要功能就是将经放大器放大的模拟电压信号转化为MCU能够处理的数字信号,并传送给单片机。(2)ADC0832转换的流程图见下图4-3。开始使能芯片产生时钟信号输入通道控制字读取2字节数据字节数据校正送入指定寄存器结束图4-3数转换流程图(3)ADC0832程序见附录三。4.4按键模块的设计(1)按键时显现人机对话的一个控制按钮,通过按键的操作,对系统进行发送操作指令,后经与MCU串行通信,然后
31、在液晶上显示。(2)按键查询式的流程图见下图:图4-4 按键查询式的流程图(3)按键程序见附录四。4.5时钟模块的设计(1)DS1302模块主要是用于设置时间和与MCU通信经LCD显示时间。(2)时钟模块操作流程图见下图:开始初始化保护寄存器操作向DS写入字节数据向DS读取字节数据开始图4-5 时钟模块操作流程图(3)时钟程序见附录五。4.6液晶显示模块的设计(1) LCD模块在本系统中主要起着开界面汉字显示,以及各控制效果的显示。采用直接访问方式。液晶显示的操作流程图见下图4-6。 图4-6 液晶显示的操作流程图(2)液晶程序见附录六。5 系统仿真ProteusISIS是英国Labcente
32、r公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:(1)实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。(2)支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。(3)提供软件调试功能。在硬
33、件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。(4)具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。本章介绍Proteus ISIS软件的工作环境和一些基本操作。图5-1 ISIS 6 Professional图标进入Proteus ISIS:双击桌面上的ISIS 6 Professional图标(见图5-1)或者单击屏幕左下方的“开始”“程序”“Proteus 6 Profe
34、ssional”“ISIS 6 Professional”,出现如图5-2所示屏幕,表明进入Proteus ISIS集成环境。工作界面:Proteus ISIS的工作界面是一种标准的Windows界面,如图5-2所示。包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。图5-2 工作界面完成了本系统的硬件设计和软件设计后,对其进行了总体调试并且仿真运行,使用的是proteus软件,当硬件设计和软件设计都完成的时候就可以看到虚拟的基于单片机的低功耗计数系统的运行,以下为仿真效果:(1)编译结束,添加H
35、EX文件到仿真图中运行,本系统主界面显示图如图5-3所示。 图5-3 主界面显示图(2)系统接下来显示,4个基如本操作功能,“”为该操作显示项,图5-4。图5-4 功能界面(3)选择“开始”,单击“OK”键,便有下面测量选择界面,如图5-5。 图5-5 测量选择界面(4)再按“OK”,则显示检测数据,范围0-10ppm。如图5-6。图5-6 测量界面显示图(5)4个功能的操作和演示是相同的,以下为“时间设置”显示图,如图5-7。 图5-7 当前时间显示图(6)小结:本系统原先打算设计“开始”、“ 时间设置”、“ 数据存储”“通讯设置”等4个基本功能,后由于条件所限,并未做出全部的功能,但这次的
36、毕业设计,收获还是很多的。今后我会进一步进完善该系统。结论本一氧化碳检测仪的设计体积小,质量轻,性价比高。主要分为硬件设计和软件设计。基本实现了设计前对该系统所要求实现的功能。软件是基于C语言编写的,具有很好的可控性、模块化和移植性。编写的思路以模块化思想,将系统的各个功能进行划分,然后对各个模块进行设计。本系统的主要模块为一氧化碳检测、A/D转换、液晶显示和时钟设置。软件与硬件相结合的仿真演示出了一氧化碳检测仪主要的工作情况。但由于是电信号模拟,和真实一氧化碳检测有一定区别,而且所学知识有限,本系统实现的功能不是很健全,但在设计过程中让自己学会了很多。致谢本论文是在殷强老师的悉心指导下完成的
37、。从选题到完成,每一步都是在强老师的指导下完成的,倾注了殷老师大量的心血。在此,谨向强老师表示崇高的敬意和衷心的感谢。 我的毕业课题是便携式一氧化碳检测仪的设计,是一个实际的小工程。作为一个自考本科的学生,我对实际的工程设计认识不够,经验不足,难免在设计的整体框架中,有很多的细节没有考虑。但老师给予我鼓励和很多宝贵的建议,并且悉心引导,给予我一个比较清晰的设计思路,帮助我解决了许多设计上的困难。最后还要感谢在百忙之中进行论文评审的老师们,对论文的不足之处敬请批评点。附录一 硬件设计图附录二 检测主程序程序#include /调用外函数/#include #include #include #i
38、nclude #include #include /*初始化CPU*/void init_cpu() /初始化cPu EA=1;TR0=1;TR1=1;TMOD=0x11;TH1=0x3c;TL1=0xb0;/*void time1(void) interrupt 3 using 1 TH1=(65536-50000)/256;TL1=(65536-50000)%256; keyval=P1; * /初始化CPU结束/void main_menu_initial() /LCD主菜单初始化./main1_menu0.menu_count=4; /有4个菜单项./main1_menu0.displ
39、ay=measurearray; /定义一个”开始测量“数组/main1_menu0.subs=NULL; main1_menu0.children_menus=measure_menu;/当前菜单子菜单的指针main1_menu0.parent_menus=NULL;void measure_menu_initial() /“开始测量”菜单设置/ measure_menu0.menu_count=2; measure_menu0.display=qr; /开始测量函数, 确认. measure_menu0.subs=start_measure_function; /开始测量函数 measur
40、e_menu0.children_menus=NULL; measure_menu0.parent_menus=main1_menu; measure_menu1.menu_count=2; measure_menu1.display=qx; /开始测量函数, 取消. measure_menu1.subs=NULL; measure_menu1.children_menus=NULL; measure_menu1.parent_menus=main1_menu; /还有void store_menu_initial()、void time_menu_initial()/void led_men
41、u_pro() max_item=menu_led-menu_count;switch(keyval)case 0: break;case 1: /向上键.if(user_choosen=0)user_choosen=max_item;shuaxin=1;user_choosen-;break; /“向上”“向下”“确认”“取消”键/if(shuaxin)/是否需要刷新LCD标志位. Clr_Scr(); shuaxin=0;led_menu_show();v oid led_menu_show()uchar n;max_item=menu_led-menu_count;if (max_ite
42、m=4) /菜单项为3则表示为主菜单.for(n=0;n4;n+) draw_bmp(n*2,20,96,0,menu_ledn.display);select_item(user_choosen); /标记出当前菜单项.elseswitch(temp_choosen) case 0:draw_bmp(0,20,96,0,measurearray); /“开始测量”数组/break; default:break;for(n=0;nmax_item;n+)draw_bmp(n+1)*2,20,32,0,menu_ledn.display);select_item(user_choosen+1); void select_item(uchar n)draw_bmp(n*2,2,16,0,curflag); void start_measure_function(void) /开始测量函数/main_Menu();/*-主函数-*/main() init_cpu(); Init_Clock(); init_lcd(); Disp_Img(FirstPage);delay(2000); /延时/ClockMsg(); Refresh()