电子信息科学与技术专业毕业论文基于单片机的温湿度检测报警仪的设计(有pcb实物图)_第1页
电子信息科学与技术专业毕业论文基于单片机的温湿度检测报警仪的设计(有pcb实物图)_第2页
电子信息科学与技术专业毕业论文基于单片机的温湿度检测报警仪的设计(有pcb实物图)_第3页
电子信息科学与技术专业毕业论文基于单片机的温湿度检测报警仪的设计(有pcb实物图)_第4页
电子信息科学与技术专业毕业论文基于单片机的温湿度检测报警仪的设计(有pcb实物图)_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于单片机的温湿度检测报警仪摘要:随着社会科技的发展进步,温度、湿度和人类的生产生活的关系越来越密切。由此本文给出了一种温湿度的检测报警仪设计。系统采用了数字集成温湿度传感器Am2301作为测温湿度的器件,以STC89C52单片机为核心控制温湿度读取、LCD液晶显示,以及超限报警。该设计具有操作方便,控制灵活等优点。关键词:温湿度传感器Am2301 单片STC89C52 LCD显示Detection and alarm device of temperature and humidity based on MCUAbstract: With the development and progress of social science and technology, the relationship between temperature, humidity and the production of human life is getting closer and closer. This paper gives the design of a temperature and humidity alarm detector. The system uses sensor Am2301 to measure temperature and humidity. STC89C52 microcontroller is the core to control temperature; humidity and reading LCD as well as alarm. The design has the advantages of convenient operation, flexible control. Keywords: Am2301 STC89C52 LCD 目 录1.绪论11.1研究背景及现状12.系统设计方案12.1系统框架12.2器件选择22.2.1温湿度传感器的选择22.2.2显示模块的选择33.硬件设计33.1单片机最小系统33.2温湿度测量电路43.2.1 Am2301简介43.2.2 Am2301与单片机接口电路53.3 LCD液晶显示电路53.4按键电路64.软件设计64.1系统程序流程图64.2温湿度读取模块74.2.1单总线通信74.2.2温湿度读取模块程序流程图104.3按键扫描子程序流程图114.4报警子程序流程图125.设计测试125.1硬件调试125.2软件调试12致谢13参考文献13附录141.绪论1.1研究背景及现状温度、湿度和人类的农业生产、居家生活有着密切的关系,同时也是工业生产中基本的工艺参数。在农业大棚种植中农作物的生长对温度范围有一定的要求。并且随着人们生活水平的不断提高,人们更多关注自己的生活环境,而空气中温湿度高低对人体的健康、舒适度和情绪都有直接的影响。在现代社会科技工业领域内许多农业生产和工业工艺上都需要对环境的温湿度进行精确控制。当下传统的温湿度测量系统设计中,大多通过热敏电阻或热电偶和湿敏电容把温度和湿度分开来测量。温度传感器一般采用热电阻、热电偶等模拟器件,湿度传感器常采用电容式器件且需要用定时器搭建振荡电路。它们都必须要A/D转换,可能还要额外加补偿电路,这样就会遇到多点测量和信号调理电路的误差等问题。不适宜应用在测量点多和精确度要求高的情况。所以本文给出了使用高可靠性、精度、稳定的传感器Am2301的温湿度测量设计方案。2.系统设计方案2.1系统框架系统通过温湿度传感器对环境的温湿度进行测量,通过STC89C52单片机对采集到的数据进行处理。其中实时的环境温湿度状况用由LCD显示。其中LCD还显示了温湿度的报警上下限,并且可以通过按键自由设定温度湿度报警的范围,当测得环境的温湿度超过所设定的上下限时,系统报警部分就会发出报警。系统框图如图1所示。复位电路时钟振荡单片机STC89C52温湿度模块按 键显示与报警模块图1系统框图2.2器件选择2.2.1温湿度测量器件的选择(1)采用单独的温度和湿度传感器温度传感器有输出模拟信号的热电阻传感器和输出数字信号的DS18B20等。热敏电阻测温元件是根据测温元件的电阻随温度增加、减少而变化的特性而制成。像铂、铜、镍等热电阻现在应用较多,其主要的特点是测量范围大、便于远距离测量。DS18B20是输出数字信号的一总线式的温度传感器。它适合于各种环境的温度测量,像测温类产品或环境温度控制、工业制造设备等。它工作在3V5.5V电压范围内,封装形式多样,从而使系统设计比较方便、灵活,设定的分辨率存储在ROM中,掉电后自动保存。HS1100/HS1101传感器,测量时把它当作电容来使用,其电容量与所测空气湿度成正比。相对湿度从1%变到100%RH,电容大小由十几pF变到两百pF,误差小于2%RH;响应时间小于5S。(2)采用数字化集成的AM2301传感器AM2301传感器是一种数字输出的温湿度传感器器件,已校准。它应用数字模块采集技术,能够确保产品有高的可靠性和稳定性。传感器里面有一个测湿度元件(电容式)和一个测温(热电阻)元件。它具有品质好,抗扰能力、性价比高的优点。每个Am2301传感器都被精确校准过。校准系数储存在其内存中,传感器工作时要调用这些系数检测信号。单总线接口,系统简易快捷。其体积小、功耗低,可以达到二十米以下的传输距离。综合比较(1)与(2)而言,方案(2)优点更多,集成度高、可靠性高,更加简单易使用且成本不高于方案(1)。所以采用方案(2)。2.2.2显示器件的选择(1)采用LCD显示它具有较大的可视化面积,显示效果好,抗干扰能力强,使用显示简单,可以节约中断软件资源,其缺点是需要一定空间存储字模信息。(2)采用数码管显示用LED亮的几段组成的图形来显示数字,数码管由发光二极管排列组合成七段字型构成。半导体数码管分为共阳和共阴极数码管,共阴极数码管即七个条形发光二极管的阴极连在一起接地。当共阴极数码管的某一阳极接高电平时,对应二极管就被点亮,由字形设置某几段LED发光。由于本系统需要显示的内容多且要显示一些特殊字符如等于号、百分号、字母等,数码管无法显示,故选用LCD显示。3.硬件设计3.1单片机最小系统图2 单片机最小系统图单片机复位是整个系统运行工作的第一步,它使整个芯片回到初始默认的状态。STC89C52单片机的RESET引脚完成其复位动作,当此引脚有连续超过24个振荡周期的高电平时间后,单片机就会进入芯片内部的复位状态,而且在RESET引脚转为低电平之前,一直在此状态下等待,然后再去检查EA引脚的状态,若其电平值为高则执行芯片RAM中的程序,若电平值为低即执行外部存储器内程序。单片机复位后,P0 P3 输出电平值为高;SP寄存器为07H;其它寄存器全部清0;不影响RAM状态。复位用上电复位的方法:上电后,电容电压不能突变,VCC通过复位电容(10F电解电容)给单片机复位脚施加持续约超过24个振荡周期的5V高电平,同时,通过10K电阻向电容器反向充电,使复位脚电压逐渐降低。经约10毫秒后RESET脚变为0V,单片机即可以正常工作。单片机系统里必须含有晶振振荡器,晶振是单片机工作的动力,相当于人体的心脏,晶振与STC89C52内部震荡电路相结合产生其工作所需的时钟频率。18、19脚上所接的两个电容为晶振的负载电容,分别接在晶振的两端,它会影响晶振的谐振频率和输出幅度。3.2温湿度测量电路3.2.1 Am2301简介Am2301是一种已校准,输出数字信号的单总线接口的温湿度传感器,它包括一个电容式测湿和一个热敏电阻元件,且和一个性能良好的8位MCU相连接。每个Am2301传感器都被精确校准过。校准系数储存在其内存中,传感器工作时要调用这些系数检测信号。单总线接口,系统简易快捷。其体积小、功耗低,可以达到二十米以下的传输距离,这使其应用范围变得很广泛以及可以应用到一些特殊场合。它的封装形式为3针单排引脚,外接三个引线。图3 Am2301实物图3.2.2 Am2301与单片机接口电路STC89C52Am2301GNDVCCVCC123图4 Am2301与单片机接口电路图3中1脚(红线)接VCC,3脚(黑线)接GND。2脚(黄线)通过接单片机的P24脚,上拉电阻为5K。串行数据线(黄线)用于单片机与 Am2301之间的通信,传输的数据格式采用一总线格式,一次通信需5ms左右,数据传输长度为40个二进制位,高位的先输出。3.3 LCD液晶显示电路图5 LCD液晶显示电路LCD接在P1口,使能控制端通过一个排阻接在P0口。3.4按键电路图6按键电路图4.软件设计4.1系统程序流程图Y开始初始化设置初始化定时器并开始定时中断入口读取一次温湿度数据并显示中断返回YN初始化LCD定时是否到两秒报警和按键检测图7 系统主程序流程图和中断服务子程序流程图4.2温湿度读取模块4.2.1单总线通信单片机(主机)发送一次起始信号后, Am2301(DHT)从低功耗转换到快速运行模式,等待单片机起始信号结束后,Am2301发送响应信号,输出40个二进制的数据,并采集信号一次。图8 单总线通信时序图空闲时总线电平值为高,通信开始时单片机把总线拉低500us左右后释放总线,延时20-40us后单片机开始检测AM2301的响应信号。传感器的响应信号是一个80us左右的低电平,之后传感器将总线的电平拉高80us左右后就将进入信号数据传输。图9 读取数据前单总线初始化时序图80us的高电平后就是传输的有效数据位,每1个二进制位数据都是由一个低电平间隔和一个持续的高电平构成。低电平间隔是一个50us左右的低电平,它代表有效数据位的开始,之后的高电平时间长度决定数据位所代表的数值,持续时间长的高电平代表1,持续时间短的高电平代表0。共40个二进制位,当最后1个二进制位信号数据传送结束后,传感器将总线电平值再拉低50us,然后释放总线,由上拉电阻将其拉高。图10 单总线读”1”时序图图11 单总线读”0”时序图4.2.2温湿度读取模块程序流程图传感器上电初试化读取设备发送起始信号释放总线等待传感器响应信号有信号读取设备连续读取40位数据更新温度值等待固定采集周期固定采集时间到?YNY数据校验正确NYN图12 温湿度读取模块程序流程图4.3按键扫描子程序流程图Key1功能选择键按下NKey2温湿度加键按下Y设定的温湿度值加1YNKey3温湿度减键设定的温湿度值减1N系统初始化图13 按键扫描子程序流程图4.4报警子程序流程图系统初始化读取温湿度值更新温湿度值是否超过温湿度限制正常显示温度执行温度报警函数图14报警子程序流程图5.设计测试5.1硬件调试本系统的硬件电路包括单片机最小系统,Am2301,LCD液晶显示,按键电路,报警电路。先对照原理图与 PCB图检查电路有没有连接错误,其次用万用表查看是否有虚焊、短路、断路,电源有没有接反,对地是否短路,极性电容、二极管是否焊反,芯片是否按照 PCB图的顺序正确放置,查看焊接是否牢固。刚上电测试时发现液晶没有任何显示,于是到程序中找错误但是怎么也找不到,最后上网查资料才知道是液晶的滑变没有调好,滑变调节之后,系统成功显示温湿度。5.2软件调试在刚开始上电运行时,发现一上电蜂鸣器就发出报警声过一会才不响,检查得是由于am2301读取周期为两秒,且其上电后要等待 1s 左右时间来越过它的不稳定状态。此期间读取出来的温度值不在设定范围内所以会报警。之后过了两秒单片机温度接收到读取的温度在所设定的范围内所以停止报警。在调试设定温度功能按键时,按下加温湿度上限或减温湿度下限时光标会跑到下一位,效果不好,于是检查程序,最后加了一个光标回位语句解决了问题。致 谢 参考文献1 陈杰,黄鸿.传感器与检测技术(第二版)M.北京:高等教育出版社,2010.2 丁元杰.单片微机原理及应用(第三版)M北京:机械工业出版社,2004.3 阎 石.数字电子技术基础(第四版)M北京:高等教育出版社,1998.4 谭浩强.C语言程序设计(第三版)M北京:高等教育出版社,2005.5 班杰.大棚温湿度自动检测报警系统OL.百度文库,2010.6 济南联诚创发科技有限公司.DHT21(AM2301)规格说明书OL.百度文库,2010.附录1.主板PCB图2.系统实物图4.程序清单#include typedef unsigned char U8; /无符号8位整型变量typedef unsigned int U16; /无符号16位整型变量#define uchar unsigned char#define uint unsigned intuint wtest,rtest;/位定义温湿度大小uchar wsw,wgw,wxw,rsw,rgw,rxw;#define LCD P1sbit beep=P27;/位定义报警sbit xuanze=P20;/位定义功能选择按键sbit up=P21;/位定义上下限加sbit down=P22;/位定义上下限减int wh=30,wl=5,sh=70,sl=20,whh=0,wll=0,shh=0,sll=0;/初始上下限值uchar i,num=0;/定义变量uchar timecount;/定义中断次数sbit P3_7 = P24;位定义串行数据线sbit led= P25 ;/位定义读取温湿度周期U8 U8FLAG;U8 U8temp;U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;U8 U8comdata;void delay1(uint z) uint x,y; for (x=z;x0;x-) for(y=110;y0;y-);void Delay(U16 j) U8 i; for(;j0;j-) for(i=0;i27;i+); void Delay_10us(void) U8 i; i=i-6; /* LCD部分*/sbit rs=P00;sbit rw=P01;sbit E=P02;uchar tmp5=T=;uchar tmp6=RH=;uchar code tab1=H;uchar code tab2=L;void write_com(uchar com)/LCD写地址函数 rs=0; rw=0; E=1; LCD=com; delay1(5); E=0; void write_data(uchar dat)/LCD写数据函数 rs=1; rw=0; E=1; LCD=dat; delay1(5); E=0;void init_lcd()/LCD初始化函数 write_com(0x38);/16*2显示,5*7点阵,8位数据 write_com(0x0c);/设置为显示开,关光标,不闪烁 write_com(0x06);/写操作后,AC自动加1 write_com(0x01); /LCD清屏write_com(0x80+0x00);/LCD第一行第0个位置起显示Hwrite_data(tab10);write_com(0x80+0x04);/LCD第一行第5个位置起显示Lwrite_data(tab20);write_com(0x80+8);/LCD第一行第8个位置起显示Hwrite_data(tab10);write_com(0x80+12);/LCD第一行第11个位置起显示Lwrite_data(tab20); write_com(0x80+0X40);/LCD第二行开始出显示T= for(i=0;i2;i+) write_data(tmp5i); write_com(0x80+0X40+0x08);/LCD第二行开始出显示RH= for(i=0;i3;i+) write_data(tmp6i); /以下是温湿度度的上限和下限初始化显示部分write_com(0x80+0x00+1); write_data(+); write_data(wh/10+0x30); write_data(wh%10+0x30); write_com(0x80+0x00+5); write_data(+); write_data(wl/10+0x30); write_data(wl%10+0x30); write_com(0x80+0x00+9); write_data(sh/10+0x30); write_data(sh%10+0x30); write_data(%); write_com(0x80+0x00+13); write_data(sl/10+0x30); write_data(sl%10+0x30); write_data(%); void COM(void) U8 i; for(i=0;i8;i+) U8FLAG=2; while(!P3_7)&U8FLAG+);Delay_10us();Delay_10us();Delay_10us(); U8temp=0; if(P3_7)U8temp=1; U8FLAG=2; while(P3_7)&U8FLAG+);/253*4u/超时则跳出for循环 if(U8FLAG=1)break; /判断数据位是0还是1 / 如果高电平高过预定0高电平值则数据位为 1 U8comdata=0)/如果上限值为正whh=0;/计数清零 write_com(0x80+0x00+1); write_data(+);/显示正号 write_com(0x80+0x00+2); write_data(wh/10+0x30);/显示上限温度值的十位 write_data(wh%10+0x30);/显示上限温度值的个位 if(wh=0)/如果下限温度值为正 wll=0;/计数清零 write_com(0x80+0x00+5); / 显示正号 write_data(+);/ write_com(0x80+0x00+6); write_data(wl/10+0x30);/显示下限温度值的十位 write_data(wl%10+0x30);/显示下限温度值的个位 if(wl=0)/如果上限温度值为正write_com(0x80+0x00+1); /显示正号write_data(+);write_com(0x80+0x00+2); write_data(wh/10+0x30);/显示上限温度值的十位write_data(wh%10+0x30);/显示上限温度值的个位if(wh=0)/如果下限温度值为正 write_com(0x80+0x00+5); write_data(+);/显示正号 write_com(0x80+0x00+6); write_data(wl/10+0x30);/显示下限温度值的十位 write_data(wl%10+0x30);/显示下限温度值的个位if(wl=wh*10)|(wtest=sh*10)|(rtest=上限温湿度值(TH)或=下限温湿度值(TL) beep=0; els

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论