标题: 基于51单片机的DHT11温湿度传感器程序,1602显示 [打印本页]

作者: sxz197    时间: 2018-12-15 14:12
标题: 基于51单片机的DHT11温湿度传感器程序,1602显示
DHT11温湿度传感器,用51单片机驱动,并用1602液晶显示屏显示。请大家多多指教!

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit Data=P2^0;   
  6. uchar rec_dat[9]="12369566";   
  7. extern void InitLcd1602();
  8. extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
  9. void DHT11_delay_us(uchar n)
  10. {
  11.     while(--n);
  12. }

  13. void DHT11_delay_ms(uint z)
  14. {
  15.    uint i,j;
  16.    for(i=z;i>0;i--)
  17.       for(j=110;j>0;j--);
  18. }

  19. void DHT11_start()
  20. {
  21.    Data=1;
  22.    DHT11_delay_us(2);
  23.    Data=0;
  24.    DHT11_delay_ms(20);   
  25.    Data=1;
  26.    DHT11_delay_us(30);
  27. }

  28. uchar DHT11_rec_byte()   
  29. {
  30.    uchar i,dat=0;
  31.   for(i=0;i<8;i++)   
  32.    {         
  33.       while(!Data);   
  34.       DHT11_delay_us(8);   
  35.       dat<<=1;         
  36.       if(Data==1)   
  37.          dat+=1;
  38.       while(Data);      
  39.     }  
  40.     return dat;
  41. }

  42. void DHT11_receive()   
  43. {
  44.     uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  45.     DHT11_start();
  46.     if(Data==0)
  47.     {
  48.         while(Data==0);   //等待数据   
  49.         DHT11_delay_us(40);  //延时80us
  50.         R_H=DHT11_rec_byte();    //湿度高位  
  51.         R_L=DHT11_rec_byte();    //湿度低位  
  52.         T_H=DHT11_rec_byte();    //温度高位
  53.         T_L=DHT11_rec_byte();    //温度低位
  54.         revise=DHT11_rec_byte(); //获取数据

  55.         DHT11_delay_us(25);    //延时

  56.         if((R_H+R_L+T_H+T_L)==revise)      //校验
  57.         {
  58.             RH=R_H;
  59.             RL=R_L;
  60.             TH=T_H;
  61.             TL=T_L;
  62.         }
  63.         /*数据分解*/
  64.         rec_dat[0]='0'+(RH/10);
  65.         rec_dat[1]='0'+(RH%10);
  66.         rec_dat[2]='R';
  67.         rec_dat[3]='H';
  68.         rec_dat[4]=' ';
  69.         rec_dat[5]=' ';
  70.         rec_dat[6]='0'+(TH/10);
  71.         rec_dat[7]='0'+(TH%10);
  72.         rec_dat[8]='C';
  73.     }
  74. }


  75. void main()
  76. {   
  77.    InitLcd1602();   //1602初始化
  78.    while(1)
  79.    {   
  80.        DHT11_delay_ms(1500);    //DHT11初始1S延时
  81.        DHT11_receive();
  82.                         LcdShowStr(0,0,rec_dat);  //显示温湿度                     
  83.    }
  84. }
复制代码

所有资料51hei提供下载:
51温湿度传感器1602显示.zip (27.84 KB, 下载次数: 113)
Sheet2.pdf (61.89 KB, 下载次数: 54)


作者: admin    时间: 2018-12-15 15:41
补全原理图或者详细说明一下电路连接即可获得100+黑币
作者: sxz197    时间: 2018-12-26 18:44
admin 发表于 2018-12-15 15:41
补全原理图或者详细说明一下电路连接即可获得100+黑币

原理图已补充




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1