基于DHT11的温度检测_第1页
基于DHT11的温度检测_第2页
基于DHT11的温度检测_第3页
基于DHT11的温度检测_第4页
基于DHT11的温度检测_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、西安邮电大学温度测控与报警系统课程设计报告书系部名称:自动化学院学生姓名:专业名称:测控技术与仪器班级:1001班时间:2013年4月8日至2013年4月19日温湿度测控与报警系统设计一、设计要求:以DHT11作为温度传感器,进行环境温湿度测试。将结果显示在数码管或液晶屏上。同时,设定温度上下限,当温度越限即报警。二、设计方案分析1、方案设计:显示部分控制部分温度收集部分报警部分2、背景知识介绍:(1)控制部分控制部分是采纳单片机STC89C52。STC89C52简介STC89C52是一种带8K字节闪耀可编程可檫除只读储存器的低电压,高性能COMOS8的微办理器,俗称单片机。该器件采纳ATME

2、L搞密度非易失储存器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。单片机总控制电路以以下图复位操作复位操作有上电自动复位相按键手动复位两种方式。上电自动复位是经过外面复位电路的电容充电来实现的,其电路如图所示。这佯,只要电源Vcc的上升时间不超出1ms,即能够实现自动上电复位,即接通电源就成了系统的复位初始化。按键手动复位有电平方式和脉冲方式两种。此中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图(b)所示;而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的,其电路以以下图所示:(a)上电复位(b)按键电平复位(c)按键脉冲复位上述电路图中的电阻、电

3、容参数适用于6MHz晶振,能保证复位信号高电平连续时间大于2个机器周期。本系统的复位电路采纳上电复位方式。(2)丈量部分丈量部分我们采纳DHT11温度传感器。1归纳:DHT11是广州奥松有限公司生产的一款湿温度一体化的数字传感器。该传感器包含一个电阻式测湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。经过单片机等微办理器简单的电路连接即能够及时的收集当地湿度和温度。DHT11与单片机之间能采纳简单的单总线进行通信,不过需要一个I/O口。传感器内部湿度和温度数据40Bit的数据一次性传给单片机,数据采纳校验和方式进行校验,有效的保证数据传输的正确性。DHT11功耗很低,5V电源电压下

4、,工作平均最大电流0.5mA。性能指标和特征以下:工作电压范围:工作电流:均匀0.5mA湿度丈量范围:2090RH温度丈量范围:050湿度分辨率:1RH8位温度分辨率:18位采样周期:1S单总线结构与TTL兼容(5V)2管脚摆列以下:3应用电路连接说明DHT11数字湿温度传感器连接方法极为简单。第一脚接电源正,第四脚接电源地端。数据端为第二脚。可直接接主机(单片机)的I/O口。为提升稳固性,建议在数据端和电源正之间接一只4.7K的上拉电阻。第三脚为空脚,此管脚悬空不用。引脚说明:Vcc正电源Dout输出NC空脚GND地4DHT11数据结构DHT11数字湿温度传感器采纳单总线数据格式。即,单个数

5、据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)构成。数据分小数部分和整数部分,具体格式在下边说明。一次完好的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和校验和数据为前四个字节相加。传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分创办理。假如,某次从传感器中读取以下5Byte数据:byte4byte3byte2byte1byte00010110100000000000111000000000001001001整数小数整数小数校验和湿度温度校验和由以

6、上数据即可获取湿度和温度的值,计算方法:humi(湿度)=byte4.byte3=45.0(RH)temp(温度)=byte2.byte1=28.0()jiaoyan(校验)=byte4+byte3+byte2+byte1=73(=humi+temp)(校验正确)注意:DHT11一次通信时间最大3ms,主机连续采样间隔建议不小于100ms。5DHT11的传输时序5.1DHT11开始发送数据流程主机发送开始信号后,延时等候20us-40us后读取DH11T的回应信号,读取总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高,准备发送数据,每一bit数据都以低电平开始,

7、格式见下边图示。假如读取响应信号为高电平,则DHT11没有响应,请检查线路能否连接正常。5.2主机复位信号和DHT11响应信号5.3数字0信号表示方法5.4数字1信号表示方法(3)显示部分1602采纳标准的16脚接口,此中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时能够经过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平常选择数据寄存器、低电平常选择指令寄存器。第5脚:RW为读写信号线,高电平常进行读操作,低电平常进行写操作。当RS和RW共同为低电平常能够写入指

8、令也许显示位置,当RS为低电平RW为高电平常能够读忙信号,当RS为高电平RW为低电平常能够写入数据。第6脚:E端为使能端,当E端由高电平跳变为低电平常,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第1516脚:空脚1602液晶模块内部的字符发生储存器(CGROM)已经储存了160个不一样的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比方大写的英文字母“A”的代码是01000001B(41H),显示时模块把位置41H中的点阵字符图形显示出来,我们就能看到字母“A”1602液晶模块内部的控制器共有11条控制

9、指令,如表2所示它的读写操作、屏幕和光标的操作都是经过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到位置00H位置指令2:光标复位,光标返回到位置00H指令3:光标和显示模式设置I/D:光标挪动方向,高电平右移,低电平左移S:屏幕上所有文字能否左移也许右移。高电平表示有效,低电平则无效指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标能否闪耀,高电平闪耀,低电平不闪耀指令5:光标或显示移位S/C:高电平常挪动显示的文字,低电平常挪动光标指令6:功能设置

10、命令DL:高电平常为4位总线,低电平常为8位总线N:低电平常为单行显示,高电平常双行显示F:低电平常显示5x7的点阵字符,高电平常显示5x10的点阵字符指令7:字符发生器RAM位置设置指令8:DDRAM位置设置指令9:读忙信号和光标位置BF:为忙标记位,高电平表示忙,此时模块不能够接收命令也许数据,假如为低电平表示不忙。指令10:写数据指令11:读数据三、硬件设计:四、软件设计:(见附录)五、测试数据及设计结果:六、调试中出现的错误及解决方法:用Proteus仿真软件仿真的时候里面的器件符号里找不到DHT11,只好用DS18B20取代。在电路调试方面,我们组四个人先把每一个外头电路的工作原理弄

11、懂,对它的工作电压电流核实,而后我们在实验板上把实质的电路连接起来,加上实质的电源,一个一个的调试,发现它的确能够正常工作时在做下一步。:本次设计我主若是做软件部分,采纳的是STC89C52单片机,该单片机的稳固性比较好,编程简单,功能易实现。在本次设计的过程中,发现很多的问题,单片机课程设计要点就在于软件算法的设计,需要有很奇妙的程序算法,固然以前写过几次程序,但我觉的写好一个程序其实不是一件简单的事。:经过此次对数字温度计的设计与制作,让我认识了设计电路的程序,也让我认识了关于数字温度计的原理与设计理念。要设计一个电路总要先用仿真,仿真成功以后才实质接线的。但是最后的成品却不必定与仿真时完

12、好相同。由于,再实质接线中有着各类各类的条件限制着。并且,在仿真中没法成功的电路接法。在实质中由于芯片自己的特征而能够成功。因此,在设计时应试虑二者的差异,从中找出最合适的设计方法。经过此次学习,让我对各类电路都有了大概的认识,因此说,坐而言不如立而行,关于这些电路还是应该自己着手实质操作才会有深刻理解。:我做的焊接的工作,从此次的课程设计中,我真真切正的意识到,在以后的学习中,要理论联系实质,把我们所学的理论知识用到实质中间,学习单机片机更是这样,程序只有在常常的写与读的过程中才能提升,在焊接晶振电路时,没有注意两个电容的大小,以致程序烧进去却不工作,此后自己的检查后发现错误的根源,换了电容

13、,数码管立马显示数据。那刻真的很快乐。附程序:#ifndef_TOU_H_#define_TOU_H_#include#include#include#include#include#defineuintunsignedint#defineucharunsignedchar/1602宏定义#defineLCD_SCREEN_ON0 x0C/显示开#defineLCD_SCREEN_OFF0 x08/显示关#defineLCD_CURSOR_ON0 x0A/显示光标#defineLCD_CURSOR_OFF0 x0c/无光标#defineLCD_C_FLASH_ON0 x0f/有光标,光标闪耀#

14、defineLCD_C_FLASH_OFF0 x0e/有光标,光标不闪耀进入模式设置指令#defineLCD_AC_UP0 x06/新数据后光标右移#defineLCD_AC_DOWN0 x04/新数据后光标左移#defineLCD_S_MOVE_ON0 x05/画面可平移#defineLCD_S_MOVE_OFF0 x04/画面不行平移/设定显示屏或光标挪动方向指令#defineLCD_C_LEFT0 x10/光标左移1格,且AC值减1#defineLCD_C_RIGHT0 x11/光标右移1格,且AC值加1#defineLCD_CHAR_LEFT0 x18/显示器上字符所有左移一格,但光标

15、不动#defineLCD_CHAR_RIGHT0 x1C/显示器上字符所有右移一格,但光标不动*/#defineLCD_DATAP0/*1602端口定义/sbitBF=P07;/忙碌标记位,将BF位定义为P0.7引脚/sbitRS=P24;/sbitRW=P23;/sbitEN=P22;sbitRS=P26;sbitRW=P24;sbitEN=P20;/*DHT11端口定义/sbitDHT11=P34;/sbitDHT11=P21;/sbitBUZZ=P17;sbitBUZZ=P23;/全局变量申明*/externfloatF16T,F16RH;/LCD函数申明*/voidInit_Lcd(v

16、oid);voidLCD_write_str(ucharX,ucharY,uchar*s);voidLCD_set_xy(ucharx,uchary);voidLCD_en_write(void);voidLCD_write_char(ucharcd,ucharab);voidLCD_byte(ucharabc);intLCD_value(ucharx,uchary,floatf);voidDelay_ms(uintn);voidDelay_us(ucharn);/DHT11函数申明/voidgetDHT11(void);#endif#includeucharU8T_data_H,U8T_da

17、ta_L,U8RH_data_H,U8RH_data_L,U8checkdata;floatF16T,F16RH;/floatF16T,F16RH;用于最后读取的温湿度数据/以下为延时函数voidDelay_ms(uintn)ucharj;while(n-)for(j=0;j125;j+);voidDelay_us(ucharn)/Nus延时函数精度4usn=n/2;while(-n);/读取数据charCOM(void)chari,U8temp,U8comdata;for(i=0;i8;i+)while(!DHT11);/表示读取的高电位延时大于20多us则读取的是1不然读取的是0Delay

18、_us(35);/经过U8FLAG可判断bit11显示数据的脉长U8temp=0;if(DHT11)U8temp=1;while(DHT11);U8comdata=1;U8comdata|=U8temp;returnU8comdata;/-以下变量均为全局变量-/-温度高8位=U8T_data_H-/-温度低8位=U8T_data_L-/-湿度高8位=U8RH_data_H-/-湿度低8位=U8RH_data_L-/-校验8位=U8checkdata-voidgetDHT11(void)GO1:DHT11=0;Delay_ms(20);/主机拉低18msDHT11=1;/总线由上拉电阻拉高主机

19、延时20usDelay_us(60);/主机设为输入判断从机响应信号if(!DHT11)/判断从机能否有低电平响应信号如不响应则跳出,响应则向下运转/T!while(!DHT11);/waitDHTgotohighwhile(DHT11);/数据接收状态U8RH_data_H=COM();U8RH_data_L=COM();U8T_data_H=COM();U8T_data_L=COM();U8checkdata=COM();DHT11=1;/数据校验if(U8T_data_H+U8T_data_L+U8RH_data_H+U8RH_data_L)!=U8checkdata)gotoGO1;F

20、16T=U8T_data_H+(float)U8T_data_L)/256;F16RH=U8RH_data_H+(float)U8RH_data_L)/256;/F16T=33;/F16=(U8T_data_H*10+(float)U8T_data_L*10/256)/10;#include/*名称:LCD_write_char(ucharcd,ucharab)*功能:写指令或数据当写ab时应使cd=0当cd不为0则写cd且ab的赋值无效进口参数:cd:指令内容ab:数据内容指令常量已在上边定义但一般不用出口参数:无*模范:LCD_write_char(0,f)*CD_set_xy*/void

21、LCD_write_char(ucharcd,ucharab)Delay_us(20);if(cd=0)RS=1;/RS=1,写显示内容LCD_byte(ab);elseRS=0;/RS=0,写命令LCD_byte(cd);/*名称:Init_Lcd()主函数调用功能:Lcd初始化进口参数:无出口参数:无模范:在主函数中直接调用/voidInit_Lcd()LCD_write_char(0 x38,0);Delay_ms(1);LCD_write_char(0 x38,0);Delay_ms(1);LCD_write_char(0 x38,0);Delay_ms(1);LCD_write_ch

22、ar(0 x0c,0);Delay_ms(1);LCD_write_char(0 x06,0);Delay_ms(1);LCD_write_char(0 x0c,0);Delay_ms(1);LCD_write_char(0 x01,0);Delay_ms(1);/*名称:LCD_write_str(ucharX,ucharY,uchar*s)主函数调用*功能:在指定位置写一个字符串eg:Y=0,1,2,3,4,5,6,7,8,9,10.15。X=0,1。进口参数:X:横坐标Y:纵坐标*s:字符串首位置出口参数:无模范:LCD_write_str(1,1,uchar*s)/voidLCD_write_str(ucharX,ucharY,uchar*s)LCD_write_char(0,);LCD_set_xy(X,Y);while(*s)/写位置写显示字符LCD_write_char(0,*s);s+;/*名称:LCD_set_xy(ucharx,uchary)/写位置函数功能:指定一个位置进口参数:X:横坐标Y:纵坐标出口参数:无模范:LCD_set_x

温馨提示

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

评论

0/150

提交评论