基于单片机的温湿度控制的毕业论文_第1页
基于单片机的温湿度控制的毕业论文_第2页
基于单片机的温湿度控制的毕业论文_第3页
基于单片机的温湿度控制的毕业论文_第4页
基于单片机的温湿度控制的毕业论文_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、传感器性能说明参数条件MinTypMax单位湿度分辨率111%RH8Bit重复性±1%RH精度25℃±4%RH0-50℃±5%RH互换性可完全互换量程范围0℃3090%RH25℃2090%RH50℃2080%RH响应时间1/e(63%)25℃,1m/s空气61015S迟滞±1%RH长期稳定性典型值±1%RH/yr温度分辨率111℃888Bit重复性±1℃精度±1±2℃量程范围050℃响应时间1/e(63%)630S

2、接口说明建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻

3、电源引脚DHT11的供电电压为3-5.5V。传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。

4、串行接口(单线双向)DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。1.

通讯过程如图1所示

图1总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。

图2

总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。数字0信号表示方法如图4所示

数字1信号表示方法.如图5所示

5、测量分辨率测量分辨率分别为8bit(温度)、8bit(湿度)。

6、电气特性VDD=5V,T=25℃,除非特殊标注参数条件mintypmax单位供电DC355.5V供电电流测量0.52.5mA平均0.21mA待机100150uA采样周期秒1次

注:采样周期间隔不得低于1秒钟。

2.2.3复位电路设计STC89C51的复位输入引脚RST为单片机提供了初始化的手段,可以使程序从指定处开始执行,在STC89C51的时钟电路工作后,只要RST引脚上出现超过两个机器周期以上的高电平时,即可产生复位的操作,只要RST保持高电平,则STC89C51循环复位,只有当RET由高电平变成低电平以后,STC89C51才从0000H地址开始执行程序,本系统采用按键复位方式的复位电路。图3-3复位电路2.2.4外部晶振时钟电路设计STC89C51的时钟可以由两种方式产生,一种是内部方式,利用芯片内部的振荡电路;另外一种为外部方式,本论文根据实际需要和简便,采用内部振荡方式,MCS-51内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端,这个放大器与作为反馈元件的片外晶体或陶瓷谐振器一起构成了一个自激振荡器。STC89C51虽然有内部振荡电路,但要形成时钟,必须外接元件,所以实际构成的振荡时钟电路,外接晶振以及电容C1和C2构成了并联谐振电路接在放大器的反馈回路中,对接电容的值虽然没有严格的要求,但电容的大小会影响振荡频率的高低,振荡器的稳定性,起振的快速性和温度的稳定性。晶振的频率可在1.2MHZ~12MHZ之间任选,电容C1和C2的典型值在20pf~100pf之间选择,由于本系统用到定时器,为了方便计算,采用了12MHZ的晶振,采用电容选择30pf。图3-4晶振电路的设计2.2.5键盘及读数原理抢答器输入信号由八个小按键控制与单片机的P1口连接,当有按键按下的时候,就产生了有效地输入信号。根据P1口按键输入的高低电平,判断是哪个按键按下,并执行相应的操作。键盘是人与微机打交道的主要设备,按键的读取容易引起误动作。可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动。图3-5键盘电路设计LED液晶显示部分显示器LCD1602特点与简介液晶显示器的有以下特点:1.液晶显示屏是以若干个5X8或5X11点阵块组成的显示字符群。每个点阵块为一个字符位,字符间距和行距都为一个点的宽度。2.主控制驱动电路为HD44780(HITACHI)及其他公司全兼容电路,如SED1278(SEIKOEPSON),KS0066(SAMSUNG),NJU6408(NERJAPANRADIO)。3.具有字符发生器ROM可显示192种字符(160个5X7点阵字符和32个5X10点阵字符,见附录3。4.具有64个字节的自定义字符RAM,可自定义8个5X8点阵字符或4个5X11点阵字符。5.具有80个字节的RAM。7.模块结构紧凑,轻巧,装配容易。8.单+5V电源供电(宽温型需要一个-7V的电源供电)。9.低功耗,长寿命,高可靠性。LCD1602的引脚功能说明如表2-8。二、显示电路与单片机的连接就时钟而言,通常采用LCD或LED显示,对LED来说AT89C52本身设有专门的液晶驱动电路,LED结构简单,体积小,功耗低,响应速度快,寿命长,可靠性也高,等优点,而且亮度也高,价格也便宜,但是本时钟设计要一个很直观的显示效果,LED就会除了8段的显示,位选也要占用大量的资源,不易控制。如果选用LCD的话,显示就比较直观,占用的硬件资源就相对少些。而且对我们研究学习,不在于便宜,是我们要学到更多的知识,本设计采用1602显示,其与单片机的连接如图2-9[4]。图2-9单片机与LCD1602的连接图表2-8LCD1602的引脚功能说明引脚号符号状态功能1Vss电源地2Vdd+5V逻辑电源3V0液晶驱动电源4RS输入寄存器1数据,0命令5R/W输入读写操作选择1读,0写6E输入是能信号7DB0三态数据总线8DB1三态数据总线9DB2三态数据总线10DB3三态数据总线11DB4三态数据总线12DB5三态数据总线13DB6三态数据总线14DB7三态数据总线15A输入上两行使能信号16K输入下两行使能信号指示灯的设计报警电路设计采用三极管的锁存原理,当P10为低电平时,三极管导通,蜂鸣器响三、软件设计系统单片机代码采用C语言编写,以KeiluVision4为开发环境。系统软件实现的功能:1)通过LCD显示温湿度值;2)比较监测到的温湿度值和报警设置值,发现超限则蜂鸣器报警提示;3)根据相应的温湿度值控制温湿度调节系统运行。根据温湿度监控系统功能,系统软件流程图如图8所示。3.1总程序流程图:图3.1主程序流程图3.2温湿度处理 图3.2温度控制处理流程图3.3按键处理子程序图3.3按键控制流程图图3.4设置按键流程图参考文献[1]丁元杰.《单片微机的原理与应用》.机械工业出版社[2]童诗白,华成英,模拟电子技术基础,高等教育出版社[3]赵娜,赵刚,于珍珠等.基于51单片机的温度测量系统[J].高等教育出版社[4]胡辉,王晓,戴永茂,陈光军。MCS-51单片机原理及工程应用[M]。国防工业出版社附录1:原理图附录2:PCB图附录3:程序源代码#include<reg52.h>#include"DHT11.C"#include"LCD1602.H"#defineucharunsignedchar#defineuintunsignedintsbitkey=P3^0;sbitjia=P3^1;sbitjian=P3^2;sbitbeep=P1^0;sbitled1=P1^1;sbitled2=P1^2;sbitled3=P1^3;sbitled4=P1^4;ucharflag;charht=50,lt=20,hh=50,lh=20;/************************************延时子程序 延时时间(xms*1)ms*************************************/voiddelayms(uintxms){ uintx,y; for(x=xms;x>0;x--) for(y=110;y>0;y--);}voidbeep1() //闹钟响{ beep=0; delayms(80); beep=1;}voidbeeps() //闹钟检测{ if(U8T_data_H>ht) //大于上限温度闹钟响 { led1=0; //灯亮 beep1(); } if(U8T_data_H<=ht) //小于上限温度不响 { beep=1; led1=1; } if(U8T_data_H<lt) //小于下限温度闹钟响 { led2=0; beep1(); } if(U8T_data_H>=lt) { beep=1; led2=1; } if(U8RH_data_H>hh) //大于上限湿度闹钟响 { led3=0; beep1(); } if(U8RH_data_H<=hh) { beep=1; led3=1; } if(U8RH_data_H<lh) //小于下限湿度闹钟响 { led4=0; beep1(); } if(U8RH_data_H>=lh) { beep=1; led4=1; }}voiddisplay(ucharadd,ucharnum) //重新赋值显示{ ucharshi,ge; shi=num/10; ge=num%10; WRITE_LCD1602_COM(add); WRITE_LCD1602_DAT(LCD1602_Table[shi]); WRITE_LCD1602_DAT(LCD1602_Table[ge]);}voidkeys() //按键扫描设定限制值{ unsignedchari;if(key==0) //检测key按下{ delayms(5); { if(key==0) { flag++; while(!key); if(flag==1) { WRITE_LCD1602_COM(0x01); //清屏 WRITE_LCD1602_COM(0x80); for(i=0;i<5;i++) //显示温度湿度提示界面 { WRITE_LCD1602_DAT(DIS1[i]); } WRITE_LCD1602_DAT(0xDF); WRITE_LCD1602_DAT(0x43); WRITE_LCD1602_COM(0x80+9); for(i=0;i<5;i++) { WRITE_LCD1602_DAT(DIS2[i]); } WRITE_LCD1602_DAT(0xDF); WRITE_LCD1602_DAT(0x43); WRITE_LCD1602_COM(0x80+0x40); for(i=0;i<15;i++) { WRITE_LCD1602_DAT(DIS3[i]); } display(0x80+3,ht); display(0x80+12,lt); display(0x80+0x40+3,hh); display(0x80+0x40+12,lh); } if(flag==2) { WRITE_LCD1602_COM(0x80+3); WRITE_LCD1602_COM(0x0f); } if(flag==3) { WRITE_LCD1602_COM(0x80+12); WRITE_LCD1602_COM(0x0f); } if(flag==4) { WRITE_LCD1602_COM(0x80+0x40+3); WRITE_LCD1602_COM(0x0f); } if(flag==5) { WRITE_LCD1602_COM(0x80+0x40+12); WRITE_LCD1602_COM(0x0f); } if(flag==6) //最后返回主页面 { flag=0; WRITE_LCD1602_COM(0x01);//清屏 WRITE_LCD1602_COM(0x0c); } } } } if(flag!=0) { //按下jia增加 if(jia==0) { delayms(5); if(jia==0) { while(!jia); if(flag==2) { ht++; if(ht==50) ht=0; display(0x80+3,ht); WRITE_LCD1602_COM(0x0c); } if(flag==3) { lt++; if(lt==50) lt=0; display(0x80+12,lt); WRITE_LCD1602_COM(0x0c); } if(flag==4) { hh++; if(hh==50) hh=0; display(0x80+0x40+3,hh); WRITE_LCD1602_COM(0x0c); } if(flag==5) { lh++; if(lh==50) lh=0; display(0x80+0x40+12,lh); WRITE_LCD1602_COM(0x0c); } } } if(jian==0) { delayms(5); if(jian==0) { while(!jian); if(flag==2) { ht--; if(ht==-1) ht=50; display(0x80+3,ht); WRITE_LCD1602_COM(0x0c); } if(flag==3) { lt--; if(lt==-1) lt=50; display(0x80+12,lt); WRITE_LCD1602_COM(0x0c); } if(flag==4) { hh--; if(hh==-1) hh=50; display(0x80+0x40+3,hh); WRITE_LCD1602_COM(0x0c); } if(flag==5) { lh--; if(lh==-1) lh=50; display(0x80+0x40+12,lh); WRITE_LCD1602_COM(0x0c); } } } }}voidMain_display() //提取dht11的值并显示{ WRITE_LCD1602_COM(0x80+12); WRITE_LCD1602_DAT(LCD1602_Table[U8T_data_H/10]); WRITE_LCD1602_DAT(LCD1602_Table[U8T_data_H%10]); WRITE_LCD1602_DAT(0xDF); WRITE_LCD1602_DAT(0x43); WRITE_LCD1602_COM(0x80+0x40+11); WRITE_LCD1602_DAT(LCD1602_Table[U8RH_data_H/10]); WRITE_LCD1602_DAT(LCD1602_Table[U8RH_data_H%10]); WRITE_LCD1602_DAT(0x25); WRITE_LCD1602_DAT(0x52); WRITE_LCD1602_DAT(0x48); }voidmain(){ unsignedchari; init_1602(); RH();beep=1; led1=1; led2=1; led3=1; led4=1; flag=0; while(1) { keys(); //按键检测 if(flag==0) { RH(); WRITE_LCD1602_COM(0x80); //显示初始界面 for(i=0;i<12;i++) WRITE_LCD1602_DAT(DIS_TEM[i]); WRITE_LCD1602_COM(0x80+0x40); for(i=0;i<9;i++) WRITE_LCD1602_DAT(DIS_HUM[i]); Main_display(); delayms(100); beeps(); } } } DHT程序部分typedefunsignedcharU8;typedefunsignedintU16;sbitDHT1_IO=P2^0;U8U8FLAG,U8temp;U8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;U8U8comdata;voidDelay(U16z){ U8x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voidDelay_10us(void){U8i;i--;i--;i--;i--;i--;i--;}voidCOM(void){U8i;for(i=0;i<8;i++) { U8FLAG=2; while((!DHT1_IO)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0; if(DHT1_IO)U8temp=1; U8FLAG=2; while((DHT1_IO)&&U8FLAG++); if(U8FLAG==1)break; U8comdata<<=1; U8comdata|=U8temp;} }voidRH(void){staticU16dat1;staticU16dat2;DHT1_IO=0;Delay(34);DHT1_IO=1;Delay_10us();Delay_10us();Delay_10us();Delay_10us();DHT1_IO=1; if(!DHT1_IO){ U8FLAG=2; while((!DHT1_IO)&&U8FLAG++); U8FLAG=2; while((DHT1_IO)&&U8FLAG++); COM(); U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; DHT1_IO=1; U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp) { U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; dat1=dat1*4+U

温馨提示

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

评论

0/150

提交评论