1、河南理工大学本科课程设计报告摘要随着我国经济的发展,人民生活水平的提高,人们对环境问题及健康问题日益重视,室内空气品质(IAQ)状况受到越来越多的关注。人的一生中有三分之二的时间是在居室内度过的。本文研究的室内便携式智能空气品质监测仪是以室内空气中有毒有害气体的监测监控为背景,是以STC工公司的一款8位超低功耗单片机STC90C51为控制核心,能够实现对室内温度,湿度,VOC气体的实时采集处理、显示、报警等功能。仪器采用锂电池供电,具有良好的便携性和通用性,并且使用LCD1602点阵式液晶屏显示菜单,有良好的人机对话界面。同时设计了声光报警系统,实现在参数超标时及时的报警。室内智能空气品质监测
2、仪体积小,功耗低,操作简单,适合应用于家庭和社区的医疗健康保健,能够实时知道室内空气的质量。关键词:STC90C51,室内空气品质,LCD显示,温湿度,VOC气体目录1 概述31.1 前言31.2 设计的意义32 系统总体方案及硬件设计42.1系统总体方案42.2 功能设定42.3 系统硬件结构及原理42.4 1STC90C51主要性能参数52.5时钟电路模块62.6复位电路模块62.7模数转换电路设计72.8声光报警电路设计72.9按键电路设计82.10电路电源设计82.11本章小结93 软件设计103.1系统主程序模块103.2 AD转换模块113.3 液晶显示模块113.4 声光报警模块
3、113.5按键模块113.6本章小结124 Proteus软件仿真145课程设计体会15参考文献16附1 源程序代码17附2 系统原理图28 1 概述1.1 前言气体传感器测定甲醛成为近年来甲醛检测研究的新热点。早在1983年,压电类甲醛传感器就已问世。这种传感器可以不需要对样品进行任何处理就可以测定,但易受水分子的影响而使晶体震动频率发生漂移,故基本无实用性。为适应室内空气甲醛现场快速检测的要求,目前已开发出不少甲醛快速测定仪,这些仪器可直接在现场测定甲醛浓度,操作方便,适用于室内和公共场所空气中甲醛浓度的现场测定,也适用于环境测试舱法测定木质板材中的甲醛释放量。但这些仪器的工作原理、响应性
4、能、适应范围等都不同。1.2 设计的意义 空气质量的好坏反映了空气污染程度,它是依据空气中污染物浓度的高低来判断的。来自固定和流动污染源的人为污染物排放大小是影响空气质量的最主要因素之一。空气质量检测种类包括装修污染、办公室内空气检测、作业场所有害物质检测、食堂油烟检测、锅炉大气及工业窑炉检测及工厂排放工业废气检测。当今,人类正面临“煤烟污染”、“光化学烟雾污染”之后,又出现了“室内空气污染”为主的第三次环境污染。美国专家检测发现,在室内空气中存在500多种挥发性有机物,其中致癌物质就有20多种,致病病毒200多种。危害较大的主要有:氡、甲醛、苯、氨以及酯、三氯乙烯等。大量触目惊心的事实证实,
5、室内空气污染已成为危害人类健康的“隐形杀手”,也成为全世界各国共同关注的问题。据统计,全球近一半的人处于室内空气污染中,室内环境污染已经引起35.7%的呼吸道疾病,22%的慢性肺病和15%的气管炎、支气管炎和肺癌。本课题主要研究设计基于量化检测的“空气质量检测仪”系统,此系统旨在实现室内空气温度、湿度、有害气体的预警监测,有利于进行全方位的评价室内空气质量,为人类营造一个健康的室内生存空间。空气质量检测仪体积小,功耗低,操作简单,适合应用于家庭和社区的医疗健康保健,能够实时知道室内空气的质量。 2 系统总体方案及硬件设计2.1系统总体方案本设计集VOC气体及温湿度监测,显示与报警于一体,利用M
6、CU进行数据采集保证了前台数据的及时、准确,有利于进行全方位的评价。仪器采用锂电池供电,具有良好的便携性和通用性,并且使用LCD点阵式液晶屏显示菜单,有良好的人机对话界面。总体方案结构图如下:图1 系统总体结构框图2.2 功能设定1. 显示部分采用LCD1602显示屏,循环显示各项测量值的上下限及实际浓度、实际温度、湿度。并在按键选择情况下连续显示一个测量值的变化。2. 当有害气体浓度超出安全范围时进行声光报警。3. 按键操作可进行测量值范围的调整,及手动和自动测量的转换。2.3 系统硬件结构及原理本文研究的室内便携式智能空气品质监测仪是以STC工公司的一款8位超低功耗单片机STC90C51为
7、控制核心。室内空气中有害气体通过传感器输出一个与气体浓度相对应的电压信号,该信号经过A/D转换电路按一定得采样频率将模拟信号转换为数字信号送入单片机进行数据采集以便进行显示处理,温湿传感器直接与单片机相连。单片机对采样值进行数字处理后驱动液晶显示器分别显示出被测室内空气中的VOC气体浓度值及温湿度。若被测室内空气中VOC气体的浓度有超过国家标准或设定的危险值或温湿度超出设定范围时报警电路对应的发出声光报警信号。2.4 1STC90C51主要性能参数1、与MCS.51产品指令系统完全兼容2、4k字节在系统编程(ISP)Flash闪速存储器3、1000次擦写周期4、4.0-5.5V的工作电压范围5
8、、全境态工作模式:0Hz-33MHz6、三级程序加密锁7、1288字节内部RAM8、32个可编程IO口线9、2个16位定时器计数器10、6个中断源11、全双工串行UART通道12、低功耗空闲和掉电模式13、中断可从空闲模唤醒系统14、看门狗(wDT)及双数据指针15、掉电标识和快速编程特性16、灵活的在线系统编程STC90C51芯片管脚如图2-2。 图2 STC90C51引脚布置2.5时钟电路模块时钟电路由一个晶体振荡器12MHZ和两个30pF的瓷片电容组成。时钟电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。单片机本身就如一个复杂的同步时序电路,为了保
9、证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地工作。其电路如图2-3所示: 图 3 时钟电路模块2.6复位电路模块复位电路是使单片机的CPU或系统中的其他部件处于某一确定的初始状态,并从这状态开始工作,除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位电路以重新启动。本设计采用的是按键复位电路。其电路如图2-4所示:图 4 复位电路模块2.7模数转换电路设计气体传感器出来的信号是模拟信号,而微处理器STC90C51只能处理数字信号,故需要对模拟信号信号进行转换,将其转换为处理器能识别的数字信号,由于测试电路出来的模拟电压变化范围在0
10、5V,故选择性价比比较合适的ADC0809进行模数转换。图 5 ADC0809管脚示意图ADC0809与单片机及VOC传感器的接线方式如图2-6:图 6 ADC0809接线原理图2.8声光报警电路设计为了使本系统对室内空气品质的监测更为直观,采用了如图2-7由2个发光二极管和一个蜂鸣器构成的声光报警电路。其中VOC气体含量超标时双灯闪烁蜂鸣器报警,温度超标时D1灯亮蜂鸣器报警,湿度超标时D2灯亮蜂鸣器报警。图 7 声光报警电路2.9按键电路设计考虑到整个测量系统中不同环境对气体浓度及温湿度范围要求不同,故设置了按键功能,用于实现测量范围的调整,参考单片机引脚使用情况,共设置五个独立按键如图2-
11、8,实现功能为设定键可进行设定的进入与退出,同时可实现三种范围的切换,另设左右移位键、上下调值键各两个,与此同时考虑到用户可能需要在一定时间内连续测量一种量,故设计了上调键的第二功能:当只有上调键按下时完成显示的自动与手动的切换以实现良好的人机对话。图 8 按键电路2.10电路电源设计本设计采用集成稳压器7805,C29、C30分别为输入端和输出端滤波电容,D1为续流二极管。当输出电流较大时,7805应配上散热板。电源电路如图2-9所示:图 9 电源电路2.11本章小结本章首先介绍了便携式室内空气质量监测仪的硬件结构以及系统功能,该仪器以8位单片机STC90C51作为控制核心,设计并构建了系统
12、的硬件平台,完成了有毒气体浓度信号的采集转换电路、液晶显示电路、声光报警电路等的设计。该仪器能够实现有毒气体浓度信号和温湿度信号采集与显示及超标声光报警等功能。本章重点介绍了信号采集模拟电路和以主控制器为中心的数字电路的设计与工作原理。首先讨论了有毒气体采集模块中传感器选择问题,最后讨论了系统的外围接口电路模块,包括液晶显示,声光报警等,实现了各外围接口电路模块与STC90C51的硬件接口设计。这一章比较具体的说明了系统硬件设计的内容,通过模块化的设计思想,把一个复杂的单片机系统按照功能划分成一个个单独的电路模型,分别进行设计,最后在集成到一起。这种方法对于设计复杂的单片机系统很有效。大大提高
13、系统设计的效率与质量。 3 软件设计3.1系统主程序模块YNYNNYNY进入设定功能按键调整函数手自动切换函数设置完成进入切换功能自动显示开始初始化DHT11传感器数据采集延时、报警函数VOC浓度显示湿度显示温度显示VOC传感器数据采集延时、报警函数延时、报警函数 由主程序流程图可以看出,软件要实现的主要功能是实现对传感器信号的数据采集,然后进行数据的计算、分析、送液晶进行显示及报警功能。程序开始时,对系统进行初始化。完成初始化后,CPU等待传感器传入信号及AD转换结束,从而完成当前监测参数的正确显示。 图 10 主程序流程图3.2 AD转换模块AD完成转换需要一定的时间,AD应用中我们可以有
14、两种方法来:1.中断查询法,AD完成模数转换后会向中断输出端输出一个中断请求信号,告诉CPU转换已经完成,CPU可以读取数据。2.延时等待法,设定一定的时间让CPU处于等待状态,此时间足够AD完成转换,过了等待时间CPU再去读取数据。综合考虑各方面的因素,本研究采用第一种方法:延时等待法。所用的芯片为AD0809,根据所需的要求。3.3 液晶显示模块本设计所用的显示器件为1602液晶面板,该液晶能显示32个字符,满足显示要求。1602液晶与CPU是并口通信,由单片机的P2.5、P2.6、P2.7引脚来控制1602的读写数据命令功能,单片机P0口传输数据到1602进行显示。系统上电LCD初始化,
15、液晶显示首先需要要按照时序给定显示地址,然后传送数据。上电后液晶显示开始循环显示三个被测量的范围和测量结果。3.4 声光报警模块声音报警采用的是蜂鸣器,光报警是通过6个发光二极管来显示,3个绿色和三个红色的,当毒气含量没超标时显示绿色,超标时显示红色并启动蜂鸣器,报警子程序执行之前,设定的报警阈值存放在两个变量中,传感器输入AD转换值后,调用比较程序,小于阈值则执行显示程序,若大于阈值进行声光报警。3.5按键模块本设计设定按键功能为调整测量数据的安全范围并可进行手动和自动的切换考虑到实现按键功能所用按键数目不多及单片机引脚数量决定选用五个独立式按键,其中设定键用于进入和退出上下限的调整,上下左
16、右四个键在设定键被按下的情况下可以对数值进行调整;同时,当设定键未按下且上调键被按下时进入上调键的第二功能,实现用户手动控制和自动控制的切换。已满足用户对环境条件检测要求的不同,实现良好的人机交流。3.6本章小结在这一章里对室内便携式只能空气品质监测仪的软件设计进行了较详细的介绍。软件采用了模块化设计的思路,以单片机高级语言C51编程。在本章开始给出了主程序结构流程图,然后分别对各个子模块的软件流程进行介绍。4 Proteus软件仿真作为一个设计性的题目,需要在实际电路中检验电路设计和程序编制的正确性。按照设计的硬件电路图焊接好电路,焊接的导线尽量不要冗长。对系统软件编写完成之后,可以利用Ke
17、il C51仿真软件进行仿真运行调试。在具体的调试过程中,采取以下方法进行调试:在Keil C51编译环境中编写、编译软件模块,进行软件仿真调试,对功能模块的软件仿真。通过Keil C51的调试窗口观察各个寄存器、变量以及并行口输出的结果,监测软件模块运行的状态,在调试过程中不断地调整修改系统的软件程序,使系统实现预定功能。调试过程中单步运行和断点运行调试只能验证程序正确与否,而不能确定定时精度、CPU的实时响应等问题,故在单步和断点调试之后,又进行了连续调试。待全部完成后,应反复运行调试多次,对系统的稳定性和操作是否符合原始设计要求、安排的操作是否合理等都要进行详细的观察,必要时作适当的修正
18、。调试完成后将程序导入protues中进行仿真,观察系统运行结果。仿真结果如下: 图 11 proteus 仿真5课程设计体会通过这次课程设计,对我个人而言,凝聚了许多努力和汗水,也经受住了严峻的考验。这是是我第一次接触传感器的使用,对我来说这是一个全新的任务。由于基础过于薄弱,专业知识有限,浮躁的心理让我一开始举步维艰,满脑子想的就是放弃。 万事开头难,从研究课题,搜集材料,到正式投入设计,我花费了很多时间和精力。对于这次全新的设计,老师给了我很大的自由空间,可以充分发挥自己的创造思维。但是,对于很多新的尝试,我还是有所拘束。可能是性格使然吧,每当遇到问题,设计处于混沌状态时,烦躁焦虑接踵而
19、来,让我迷失了方向。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在本次课程设计中,提高了自己搜资料的能力。由于平常对这种设计接触的很少,在设计格式上花了很多时间,但通过这次设计,为以后的毕业设计奠定了基础。参考文献1 余永权单片机原理及应用M北京:电子工业出版社,1998.12 2 余锡存、曹国华单片机原理及接口技术M第二版西安:西安电子科技大学出版社,2007.12 3 诸邦田电子电路实用抗干扰技术M北京:人民邮电出版社,1994.54
20、曲喜新电子元件材料手册M北京:电子工业出版社,1989.45 汪吉鹏、马云峰微机原理与接口技术M北京:高等教育出版社,2001.76 田崴电工技术(电工学1)M北京:高等教育出版社,2010.127 孙立功电子技术(电工学2)M北京:高等教育出版社,2010.128 马玉春串行通信协议的研究及应用J计算机应用研究20049 胡汉才单片机原理及其接口技术M清华大学出版社,199610 楼然苗,李光飞51系列单片机设计实例M北京航空航天大学出版社,200311 赵亮,侯国锐单片机C语言编程与实例M人民邮电出版社,200312 张毅刚单片机原理及应用M北京:高等教育出版社,200313 何立民单片机
21、与嵌入式系统应用M北京航空航天出版社,200314谭浩强C程序设计(第三版)M清华大学出版社,200515清源科技Protel 99 SE电路原理图与PCB设计及仿真M机械工业出版社,2007附1 源程序代码#include#include#define uchar unsigned char#define uint unsigned int#define Data P0 /数据端口/*1602管脚定义*/sbit RS=P26;sbit RW=P25;sbit E=P27;/*AD管脚定义*/sbit STA=P30;sbit OE=P31;sbit EOC=P32;sbit CLK=P33
22、;/*按键管脚定义*/sbit key_U=P20;sbit key_D=P21;sbit key_L=P22;sbit key_R=P23;sbit key_S=P24;/*报警用管脚*/sbit beep=P34;sbit led1=P35;sbit led2=P36;unsigned char num=0;/记录设定键按下次数unsigned char k_flag=0;/记录设置键按下次数(用于调用)unsigned char wei=0;/光标位置unsigned char c_num=0;/记录切换键按下次数unsigned char c_flag=0;/记录切换键按下次数(用于调
23、用)unsigned char voc_ad;/AD读取数据unsigned char flag;/DHT11函数用到/*/sbit DHT=P37;uchar WEN1=wen:16.00-28.00; /温度第一行数据uchar WEN2= 00.00 ; /温度第二行数据uchar SHI1=shi:30.00-70.00; /湿度第一行数据uchar SHI2= 00.00 ; /湿度第二行数据uchar VOC1=voc:0.00-2.70 ; /湿度第一行数据uchar VOC2= 0.00 ; /湿度第二行数据unsigned char shiZ,shiX,wenZ,wenX,c
24、heck;unsigned char tr_shiZ,tr_shiX,tr_wenZ,tr_wenX;/*延时*/void delay_1ms(uint x) uchar i; while(x-) for(i=0;i1; /*12MHz频率*/while(-uscnt); /*1602显示*/*写命令*/void lcd_write_com(uchar c) delay_1ms(5);/操作前短暂延时,保证信号稳定 E=0; RS=0; RW=0; _nop_(); E=1; Data=c; E=0; /*写数据*/void lcd_write_dat(uchar c) delay_1ms(5
25、); /操作前短暂延时,保证信号稳定 E=0; RS=1; RW=0; _nop_(); E=1; Data=c; E=0; RS=0; /*LCD初始化*/void lcd_init() delay_1ms(15); lcd_write_com(0x38); /display mode lcd_write_com(0x38); /display mode lcd_write_com(0x38); /display mode lcd_write_com(0x06); /显示光标移动位置 lcd_write_com(0x0c); /显示开及光标设置 lcd_write_com(0x01); /显
26、示清屏 /*显示单个字符*/void ShowChar(uchar pos,uchar c) unsigned char p; if (pos=0x10) p=pos+0xb0; /是第二行则命令代码高4位为0xc else p=pos+0x80; /是第二行则命令代码高4位为0x8 lcd_write_com(p);/写命令 lcd_write_dat(c); /写数据 /*显示字符串*/void ShowString (uchar line,char *ptr) unsigned char l,*p; p=ptr; l=line4; while(*p)!=0) ShowChar(l+,*(
27、p); p+; /*温度显示函数*/void WENdisp(void) ShowString(0,WEN1);_nop_(); ShowString(1,WEN2); /*湿度显示函数*/void SHIdisp(void) ShowString(0,SHI1); _nop_(); ShowString(1,SHI2); /*VOC调用的显示函数*/void VOCdisp(void) ShowString(0,VOC1); _nop_(); ShowString(1,VOC2); /*报警用函数*/void Beep(unsigned char i,j)/i用于确定亮灯方式,j用于确定蜂鸣
28、器是否报警 unsigned char m; led1=led2=1; for(m=0; mvoc_h) Beep(1,1); else Beep(0,0); void wen_warning() unsigned char wen_t; unsigned char wen_h; unsigned char wen_l; wen_t=(0+WEN26)*10+(0+WEN27); wen_l=(0+WEN14)*10+(0+WEN15); wen_h=(0+WEN110)*10+(0+WEN111);if(wen_twen_h|wen_tshi_h|shi_tshi_l) Beep(3,1);
29、 else Beep(0,0); /*按键*/*进入设定功能*/unsigned char key_set(void) if(key_S=0) delay_1ms(10); if(key_S=0) while(!key_S); num+; k_flag=num%4; else k_flag=num%4; else k_flag=num%4; return k_flag; /*调整数据*/unsigned char key_adddec(unsigned char dat) if(key_U=0) delay_1ms(10); if(key_U=0) while(!key_U); if(dat0
30、) dat-; else dat=0; return dat; /*左右移位*/unsigned char key_LR() if(key_L=0) delay_1ms(10);if(key_L=0) while(!key_L); if(wei=0) wei=3; else wei-; if(key_R=0) delay_1ms(10);if(key_R=0) while(!key_R); if(wei=3) wei=0; else wei+; return wei; /*主函数调用的按键函数*/void set_updn_dat(void) while(key_set() unsigned
31、j=key_LR(); if(key_set()=1) switch(j0) case 1:j=2;break; case 0:j=0;break; VOCdisp(); VOC1j+9=key_adddec(VOC1j+9); lcd_write_com(0x80+j+9); lcd_write_dat(VOC1j+9); else if(key_set()=2) switch(j) case 2:j=6;break; case 3:j=7;break; WENdisp(); WEN1j+4=key_adddec(WEN1j+4); lcd_write_com(0x80+j+4); lcd_
32、write_dat(WEN1j+4); else if(key_set()=3) switch(j) case 2:j=6;break; case 3:j=7;break; SHIdisp(); SHI1j+4=key_adddec(SHI1j+4); lcd_write_com(0x80+j+4); lcd_write_dat(SHI1j+4); /*AD转换函数*/void AD() STA=0; OE=0;STA=1; /启动AD转换 _nop_();STA=0; while(EOC=1); OE=1; voc_ad=P1; /*数据处理*/void VOC() AD();VOC26=0
33、+voc_ad/51;VOC28=0+voc_ad%51*10/51; VOC29=0+voc_ad%51*10%51*10/51; /*切换程序*/void change(void) while(!key_set() & key_change() unsigned k=key_change(); switch(k) case 1: VOC(); VOCdisp();voc_warning();break; case 2: DHT11(); WENdisp();wen_warning();break; case 3: DHT11(); SHIdisp();shi_warning();break;