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

下载本文档

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

文档简介

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

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

3、持续时间大于 2个机器周期。本系统的复位电路采用上电复位方式。(c)按键脉冲复位6MHz晶振,能保证复位信号(2 )测量部分测量部分我们采用DHT11温度传感器1概述:DHT11是广州奥松有限公司生产的一款湿温度一体化的数字传感器。该传感 器包括一个电阻式测湿元件和一个 NT(测温元件,并与一个高性能8位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。 DHT1与单片机之间能采用简单的单总线进行通信,仅仅需要一个I/O 口。传感器内部湿度和温度数据40Bit的数据一次性传给单片机,数据采用校验和方式进行 校验,有效的保证数据传输的准确性。DHT1 功耗很低,5V

4、电源电压下,工作平均最大电流0.5mA性能指标和特性如下:3.5V-5.5V :平均0.5mA20- 90% RH0-50 E:1%RH 8位:仁C 8位:1STTL兼容(5V)2管脚排列如下:底视图I>HTxx12 3 43应用电路连接说明DHT11数字湿温度传感器连接方法极为简单。第一脚接电源正,第四脚接电源地端。 数据端为第二脚。可直接接主机(单片机)的I/O 口。为提高稳定性,建议在数据端和电源正之间接一只4.7K的上拉电阻。第三脚为空脚,此管脚悬空不用。引脚说明:Vcc正电源 Dout输出NC空脚GND地4 DHT11数据结构DHT1数字湿温度传感器采用单总线数据格式。 即,单

5、个数据引脚端口完成输入 输出双向传输。其数据包由5Byte (40Bit )组成。数据分小数部分和整数部分, 具体格式在下面说明。一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和校验和数据为前四个字节相加。传感器数据输出的是未编码的二进制数据。数据 (湿度、温度、整数、小数)之间应该分开处理。如果,某次从传感器中读取如下5Byte数据:byte4 byte3 byte2 bytel byteO00101101 00000000 00011100 00000000 01001001整数小数整

6、数小数校验和湿度温度校验和由以上数据就可得到湿度和温度的值,计算方法:humi (湿度)=byte4 . byte3=45.0 (% RH)temp (温度)=byte2 . byte1=28.0 (°C)jiaoyan(校验)=byte4+ byte3+ byte2+ byte1=73(=humi+temp)(校验正确)注意:DHT1 一次通讯时间最大3ms主机连续采样间隔建议不小于100ms5 > DHT11的传输时序5.1 > DHT11开始发送数据流程主机发送开始信号后,延时等待20us-40us后读取DH11的回应信号,读取总 线为低电平,说明DHT1发送响应信

7、号,DHT1发送响应信号后,再把总线拉高 准备发送数据,每一bit数据都以低电平开始,格式见下面图示。如果读取响应信 号为高电平,则DHT1役有响应,请检查线路是否连接正常。VCC'GND7主机发开f DHT响应 1 I 号 丨丨输出 丨缶前1I村鮭时+1廷时零待*!准备躺出J-U费据TL-5.2 >主机复位信号和DHT1响应信号i_主机20-40ns信号线说明:4 EHT拉高 4*主机信号DHT信号主机棺号I1HT疽号5.3 数字 O'信号表示方法26-2 Sus表示©VCCCf-NT-单总线"it开始12-1411S下一bit开始信号线说明:主机信

8、号BHTft 号5.4 数字 1'信号表示方法VCCGND116-11811SIBitJf 始 12-14 ns 戶下一h if开始单总线信号线说明:主机信号DHT信号(3)显示部分1602采用标准的16脚接口,其中:第1脚:VS助地电源第2脚:VD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源 时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K勺电 位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄 存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当R删RW共同为低电平时可以写入

9、指令或者显示地址,当RSM氐电平RW为高电平时可以读忙信号,当RS为高电平RV为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D旷D7为8位双向数据线。第1516脚:空脚1602液晶模块内部的字符发生存储器(CGROM)经存储了 160个不同的点阵字符 图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、 和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B( 41H),显示时模块把地址41H中的点阵字符图形显示出来, 我 们就能看到字母“ A表3 4 CGROM和CGRAM

10、中字苻代码与字符的理对症关廉0oooo00)00100fllOl01100111J10101OU1他1U0nnXXX X0000CRAM00P>1p三apXXX XOM1t1AQaqnTfA1qx xxxooio(3)2BRbrrMlPGx xx xwn<4)iCSca>7毛tTOXXX XQIOO$4DT6t工卜tHnX X XX0IG1%5EUeu口才工B0X X XX0110(7)&6FVfV7-3Psxxx XO111>7GW8wT亏sKXX XX 1OOT(1)(8HXhX<夕'JJXxxx xiooi(2>>4I¥

11、iy1rj牛yXXX Xl&ioVJZisXVj千XXX X1011U)+tKk才t0K万X X xxuoo7<L¥1177eAxxx XllOi(«)二MmZLX7毛+x x x xmo(7)>NR-n3七八nx xx xim/TO -O706J /1602液晶模块内部的控制器共有11条控制指令,如表2所示RSR/WD?D6DSD4D3D21DO/清显示u00000000t2光标返囲0000000Q1*置卷人模式00000001I/Ds*显示开/关控制Q00a001DCB* J光标廡字符移也000001S/CR/L#迂功能00001DLNF0*覽字帝发

12、生再贮器地址c001字希发生存贮馨地扯r置数据存贮霸地址001显示数据存贮器地址(ADD)j读忙插志成地址01.BF让数黠地址CAOCGRAM 1&DDRAM10姿写的数CGRAM 或 DDRAM 读数11逮出的数据它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置指令2:光标复位,光标返回到地址00H指令3:光标和显示模式设置I/D :光标移动方向,高电平右移,低电平左 移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 指令4:显示开关控制。D :控制整体显示的开与关,高电平

13、表示开显示, 低电平表示关显示C :控制光标的开与关,高电平表示有光标,低电平表示 无光标B :控制光标是否闪烁,高电平闪烁,低电平不闪烁指令5:光标或显示移位S/C :高电平时移动显示的文字,低电平时移动光 标指令6:功能设置命令DL :高电平时为4位总线,低电平时为8位总线N :低 电平时为单行显示,高电平时双行显示 F:低电平时显示5x7的点阵字符, 高电平时显示5x10的点阵字符指令7:字符发生器RA地址设置指令& DDRA地址设置指令9:读忙信号和光标地址BF :为忙标志位,高电平表示忙,此时模块不 能接收命令或者数据,如果为低电平表示不忙。指令10:写数据指令11:读数据三

14、、硬件设计:四、软件设计:(见附录)五、测试数据及设计结果:ABCDEFG DPIS 34H3曹盟nPT 口 口口 E! 口口口住心1311口-91<» ffezzez六、调试中出现的错误及解决方法:用Proteus仿真软件仿真的时候里面的器件符号里找不到DHT11只能用DS18B20代替。在电路调试方面,我们组四个人先把每一个外围电路的工作 原理弄懂,对它的工作电压电流核实,然后我们在实验板上把实际的电路连接 起来,加上实际的电源,一个一个的调试,发现它确实能够正常工作时在做下:本次设计我主要是做软件部分,采用的是 STC89C52单片机,该单片机 的稳定性比较好,编程简单,

15、功能易实现。在本次设计的过程中,发现很多的问题,单片机课程设计重点就在于软件 算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写 好一个程序并不是一件简单的事。:通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念。要设计一个电路总要先用仿 真,仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样。 因为,再实际接线中有着各种各样的条件制约着。而且,在仿真中无法成功的 电路接法。在实际中因为芯片本身的特性而能够成功。所以,在设计时应考虑 两者的差异,从中找出最适合的设计方法。通过这次学习,让我对各种电路都 有了大概

16、的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动 手实际操作才会有深刻理解。:我做的焊接的工作,从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,在焊接晶振电 路时,没有注意两个电容的大小,导致程序烧进去却不工作,后来自己的检查 后发现错误的根源,换了电容,数码管立马显小数据。那刻真的很高兴。附程序:#ifndef _TOU_H_ #define _TOU_H_ #include<reg51.h> #include vintrins.h> #inc

17、lude <string.h> #include<math.h> #include<stdio.h> #define uint unsigned int#define uchar unsigned char*1602宏定义*#define LCD_SCREEN_ON OxOC / 显示开#define LCD_SCREEN_OFF 0x08 / 显示关#define LCD_CURSOR_ON OxOA / 显示光标#define LCD_CURSOR_OFF 0x0c / 无光标#define LCD_C_FLASH_ON 0x0f / 有光标,光标闪动

18、#define LCD_C_FLASH_OFF 0x0e / 有光标,光标不闪动 /进入模式设置指令#define LCD_AC_UP 0x06 /新数据后光标右移#define LCD AC DOWN 0x04 / 新数据后光标左移#define LCD_S_MOVE_ON 0x05 / 画面可平移 #define LCD_S_MOVE_OFF 0x04 / 画面不可平移 /设定显示屏或光标移动方向指令 #define LCD_C_LEFT 0x10 / 光标左移 1 格,且 AC 值减 1#define LCD_C_RIGHT 0x11 / 光标右移 1 格,且 AC 值加 1*/#def

19、ine LCD_CHAR_LEFT 0x18 / 显示器上字符全部左移一格,但光标不动 #define LCD_CHAR_RIGHT 0x1C / 显示器上字符全部右移一格,但光标不动#define LCD_DATAP0*1602端口定义*sbit BFsbit RS/sbit RW/sbit EN sbit RS sbit RW sbit EN=P0A7;=卩2八4;=P2A3;=P2A2;=P2A6;=P2A4;=P2A0;/忙碌标志位,将BF位定义为P0.7引脚*DHT11端口定义*sbit DHT11 = P3A4;/sbit DHT11 =P2A1;/sbit BUZZ=卩1八7;s

20、bit BUZZ =P2A3;/*全局变量声明 */extern float F16T,F16RH;/*lcd函数声明*/void lnit_Lcd(void);void LCD_write_str(uchar X,uchar Y,uchar *s);void LCD_set_xy( uchar x, uchar y );void LCD_en_write(void);void LCD_write_char(uchar cd,uchar ab);void LCD_byte(uchar abc);int LCD_value(uchar x,uchar y,float f);void Delay_

21、ms(uint n);void Delay_us(uchar n);*dhtii函数声明 *void getDHT11(void);#endif#include<TOU.h>uchar U8T data H,U8T data L,U8RH data H,U8RH data L,U8checkdata; float F16T,F16RH;/用于最终读取的温湿度数据float F16T,F16RH;/以下为延时函数 void Delay_ms(uint n)uchar j;while(n-) for(j=0;j<125;j+);N us延时函数精度土 4usvoid Delay_

22、us(uchar n) n=n/2; while(-n);/读取数据char COM(void)char i,U8temp,U8comdata; for(i=0;i<8;i+)while(!DHT11);表示读取的高电位延时大于20多us则读取的是1否则读取的是0Delay_us(35);/通过U8FLAG 可判断bit11显示数据的脉长U8temp=0;if(DHT11)U8temp=1;while(DHT11);U8comdata<<=1; U8comdata|=U8temp;return U8comdata;/-以下变量均为全局变量 II温度高8位=U8T_data_H

23、/-温度低 8 位=U8T_data_LII-湿度高 8 位=U8RH_data_HII-湿度低 8 位=U8RH_data_LII-校验 8 位=U8checkdatavoid getDHT11(void)GO1:DHT11=0;Delay_ms(20);II 主机拉低 18msDHT1仁1;II总线由上拉电阻拉高主机延时20usDelay_us(60);II主机设为输入判断从机响应信号if(!DHT11)II判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行IIT !while(!DHT11);IIwait DHT goto highwhile(DHT11);II数据接收状态U8R

24、H_data_H=COM();U8RH_data_L=COM();U8T_data_H=COM();U8T_data_L=COM();U8checkdata=COM();DHT1仁1;II数据校验if(U8T_data_H+U8T_data_L+U8RH_data_H+U8RH_data_L)!=U8checkdata) goto GO1;F16T=U8T_data_H+(float)U8T_data_L)I256;F16RH=U8RH_data_H+(float)U8RH_data_L)I256;II F16T=33;F16=(U8T_data_H*10+(float)U8T_data_L*

25、10/256)/10; #include<TOU.h>* 名称:LCD_write_char(uchar cd,uchar ab )*功能:写指令或数据当写ab时应使cd=0当cd不为0则写cd且ab的赋值无效*入口参数:cd:指令内容ab:数据内容指令常量已在上面定义但一般不用*出口参数:无* 范例:LCD_write_char( 0, f')*Cd set xy*/void LCD_write_char(uchar cd,uchar ab) Delay_us(20); if(cd=0) /RS=1,写显示内容RS=1; LCD_byte(ab); elseRS=0; L

26、CD_byte(cd);/RS=0,写命令/*名称:Init_Lcd()主函数调用*功能:Lcd初始化*入口参数:无*出口参数:无*范例:在主函数中直接调用 void Init_Lcd()LCD_write_char(0x38,0);Delay_ms(1);LCD_write_char(0x38,0);Delay_ms(1);LCD_write_char(0x38,0);Delay_ms(1);LCD_write_char(0x0c,0);Delay_ms(1);LCD_write_char(0x06,0);Delay_ms(1);LCD_write_char(0x0c,0);Delay_ms

27、(1);LCD_write_char(OxO1,O);Delay_ms(1);/*X=0,1 o* 名称:LCD_write_str(uchar X,uchar Y,uchar *s) 主函数调用*功能:在指定地址写一个字符串eg:Y=0,1,2,3,4,5,6,7,8,9,10.15。*入口参数:X:横坐标Y :纵坐标*s:字符串首地址*出口参数:无* 范例:LCD_write_str(1,1,uchar *s)* I void LCD_write_str(uchar X,uchar Y,uchar *s)LCD_write_char(O,'');LCD_set_xy( X, Y );/ 写地址while (*s)/写显示字符LCD_write_char( 0, *s );s +;f* 名称:LCD_set_xy( uchar x, uchar y ) / 写地址函数*功能:指定一个地址*入口参数:X:横坐标Y :纵坐标*

温馨提示

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

评论

0/150

提交评论