打印

【转】温湿度传感器---DHT11

[复制链接]
679|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
俺是村长他爹|  楼主 | 2016-12-21 19:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

一、DHT11简介

DHT11是一款有已校准数字信号输出的温湿度传感器,传感器包括一个电阻式感湿元件和一个NTC测温元件。




pin名称注释
1VDD供电 3-5.5V DC
2DATA串行数据,单总线
3NC空脚,请悬空
4GND接地,电源负极

二、DHT11模块特点

1. 可以检测周围环境的湿度和温度。

2. 湿度测量范围:20% - 95%(0 度-50 度范围)湿度测量误差:+-5%。
3. 温度测量范围:0 度 - 50 度温度测量误差:+/-2 度。

4. 工作电压3.3V - 5V。

5. 输出形式数字输出。

6. 单线制串行接口。

三、DHT11原理图


四、程序

[plain] view plain copy


  • #include <reg52.h>  
  • #include <intrins.h>   
  •   
  • typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable   */  
  • typedef signed   char  S8;       /* defined for signed 8-bits integer variable     */  
  • typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable  */  
  • typedef signed   int   S16;      /* defined for signed 16-bits integer variable    */  
  • typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable  */  
  • typedef signed   long  S32;      /* defined for signed 32-bits integer variable    */  
  • typedef float          F32;      /* single precision floating point variable  32   */  
  • typedef double         F64;      /* double precision floating point variable  64   */  
  •   
  • #define uchar unsigned char  
  • #define uint  unsigned int  
  • #define Data_0_time 4  
  •   
  • sbit  P2_0  = P2^0 ;  
  •   
  • U8  U8FLAG,k;  
  • U8  U8count,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;  
  • U8  outdata[5];   
  • U8  indata[5];  
  • U8  count, count_r = 0;  
  • U8  str[5]={"RS232"};  
  • U16 U16temp1,U16temp2;  
  •   
  • void SendData(U8 *a)  
  • {  
  •     outdata[0] = a[0];   
  •     outdata[1] = a[1];  
  •     outdata[2] = a[2];  
  •     outdata[3] = a[3];  
  •     outdata[4] = a[4];  
  •     count      = 1;  
  •     SBUF       = outdata[0];  
  • }  
  •   
  • void Delay(U16 j)  
  • {  
  •     U8 i;  
  •     for(; j > 0; j--)  
  •     {     
  •         for(i = 0; i < 27; i++);  
  •     }  
  • }  
  •   
  • void Delay_10us(void)  
  • {  
  •     U8 i;  
  •     i--;  
  •     i--;  
  •     i--;  
  •     i--;  
  •     i--;  
  •     i--;  
  • }  
  •       
  • void COM(void)  
  • {  
  •     U8 i;  
  •     for(i = 0; i < 8; i++)        
  •     {  
  •         U8FLAG = 2;   
  •         while((!P2_0) && U8FLAG++);  
  •         Delay_10us();  
  •         Delay_10us();  
  •         Delay_10us();  
  •         U8temp = 0;  
  •         if(P2_0)U8temp = 1;  
  •         U8FLAG = 2;  
  •         while((P2_0) && U8FLAG++);  
  •         
  •         if(U8FLAG == 1)break;  
  •   
  •         U8comdata<<=1;  
  •         U8comdata|=U8temp;        //0  
  •     }  
  • }  
  •   
  • void RH(void)  
  • {  
  •     P2_0 = 0;  
  •     Delay(180);  
  •     P2_0 = 1;  
  •   
  •     Delay_10us();  
  •     Delay_10us();  
  •     Delay_10us();  
  •     Delay_10us();  
  •   
  •     P2_0 = 1;  
  •    
  •     if(!P2_0)        //T !      
  •     {  
  •         U8FLAG = 2;  
  •    
  •         while((!P2_0) && U8FLAG++);  
  •         U8FLAG = 2;  
  •   
  •         while((P2_0) && 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;  
  •         P2_0 = 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;  
  •             U8checkdata = U8checkdata_temp;  
  •         }  
  •     }  
  • }  
  •   
  • void main()  
  • {  
  •     //uchar str[6]={"RS232"};  
  •   
  •     TMOD = 0x20;  
  •     TH1  = 253;  
  •     TL1  = 253;  
  •     TR1  = 1;  
  •     SCON = 0x50;   
  •     ES   = 1;  
  •     EA   = 1;  
  •     TI   = 0;  
  •     RI   = 0;  
  •     SendData(str);  
  •     Delay(1);  
  •     while(1)  
  •     {  
  •        RH();  
  •   
  •        str[0] = U8RH_data_H;  
  •        str[1] = U8RH_data_L;  
  •        str[2] = U8T_data_H;  
  •        str[3] = U8T_data_L;  
  •        str[4] = U8checkdata;  
  •        SendData(str);  
  •   
  •        Delay(20000);  
  •     }  
  • }  
  •   
  • void RSINTR() interrupt 4 using 2  
  • {  
  •     U8 InPut3;  
  •     if(TI == 1)  
  •     {  
  •         TI = 0;  
  •         if(count != 5)  
  •         {  
  •             SBUF = outdata[count];  
  •             count++;  
  •         }  
  •     }  
  •   
  •     if(RI == 1)     
  •     {     
  •         InPut3 = SBUF;  
  •         indata[count_r] = InPut3;  
  •         count_r++;  
  •         RI = 0;                                
  •         if(count_r == 5)  
  •         {  
  •             count_r = 0;  
  •             str[0]  = indata[0];  
  •             str[1]  = indata[1];  
  •             str[2]  = indata[2];  
  •             str[3]  = indata[3];  
  •             str[4]  = indata[4];  
  •             P0 = 0;  
  •         }  
  •     }  
  • }  


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

168

帖子

2

粉丝