找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2550|回复: 2
打印 上一主题 下一主题
收起左侧

基于51单片机的DHT11温湿度传感器程序,1602显示

[复制链接]
跳转到指定楼层
楼主
ID:299239 发表于 2018-12-15 14:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-12-15 15:41 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

板凳
ID:299239 发表于 2018-12-26 18:44 | 只看该作者
admin 发表于 2018-12-15 15:41
补全原理图或者详细说明一下电路连接即可获得100+黑币

原理图已补充
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表