找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DHT11温湿度传感器程序

[复制链接]
跳转到指定楼层
楼主
ID:403053 发表于 2018-9-27 11:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于51单片机的DHT11温湿度传感器
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit dht=P1^1;
  6. sbit dula=P2^6;
  7. sbit wela=P2^7;
  8. uchars8h,s8h_temp,s8l,s8l_temp,w8h,w8h_temp,w8l,w8l_temp,check8,check8_temp,flag=0;
  9. float sd,wd;
  10. uchar code table[]={
  11. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
  12. 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
  13. void delayms(uint z)
  14. {
  15.        uintx,y;
  16.        for(x=z;x>0;x--)
  17.               for(y=110;y>0;y--);
  18. }
  19. void Delay_10us()        //进入函数3us
  20. {
  21.    uchar i;    //每条语句1us
  22.    i--;
  23.    i--;
  24.    i--;
  25.    i--;
  26.    i--;
  27.    i--;
  28. }
  29. void display(uchar th,uchar tl)
  30. {
  31.        ucharih=0,il=0,jh=0,jl=0,kh=0,kl=0;
  32.        ih=th/100;
  33.        jh=th%100/10;                                          
  34.        kh=th%10;
  35.        il=tl/100;
  36.        jl=tl%100/10;                                    
  37.        kl=tl%10;
  38.       
  39.        P0=0xfe;
  40.        wela=1;
  41.        wela=0;
  42.        P0=table[ih];
  43.        dula=1;
  44.        dula=0;   
  45.        delayms(1);
  46.       
  47.        P0=0xfd;
  48.        wela=1;
  49.        wela=0;
  50.        P0=table[jh];
  51.        dula=1;
  52.        dula=0;
  53.        delayms(1);
  54.       
  55.        P0=0xfb;
  56.        wela=1;
  57.        wela=0;
  58.        P0=table[kh+10];
  59.        dula=1;   
  60.        dula=0;   
  61.        delayms(1);
  62.        P0=0xf7;
  63.        wela=1;
  64.        wela=0;
  65.        P0=table[il];
  66.        dula=1;
  67.        dula=0;   
  68.        delayms(1);
  69.       
  70.        P0=0xef;
  71.        wela=1;
  72.        wela=0;
  73.        P0=table[jl];
  74.        dula=1;
  75.        dula=0;
  76.        delayms(1);
  77.       
  78.        P0=0xdf;
  79.        wela=1;
  80.        wela=0;
  81.        P0=table[kl];
  82.        dula=1;   
  83.        dula=0;   
  84.        delayms(1);
  85. }         
  86. char com()
  87. {
  88.        uchari,j,temp,cdata=0;
  89.        for(i=0;i<8;i++)
  90.        {
  91.               flag=2;
  92.               while((!dht)&&(flag++));//等待拉高
  93. //            Delay_10us();
  94. //            Delay_10us();
  95. //            Delay_10us();
  96.               j=3;while(j--); //延时30us            
  97.               temp=0;
  98.               if(dht==1)temp=1;
  99.               flag=2;
  100.               while(dht&&(flag++));//等待拉低
  101. //            if(flag==1)break;
  102.               cdata<<=1;
  103.               cdata=cdata|temp;
  104.        }
  105.        returncdata;                              
  106. }
  107. void getdth()
  108. {
  109.        uchari;
  110.        dht=0;
  111.        delayms(18);    //18ms
  112.        dht=1;
  113. //     Delay_10us();
  114. //     Delay_10us();
  115. //     Delay_10us();
  116. //     Delay_10us();
  117.        i=4;while(i--);  //延时40us
  118.        dht=1;
  119.        if(dht!=1)         //dth11响应
  120.        {
  121.               flag=2;while((!dht)&&(flag++));//等待拉高
  122.               flag=2;while(dht&&(flag++));//等待读入数据
  123.               s8h_temp=com();
  124.               s8l_temp=com();
  125.               w8h_temp=com();
  126.               w8l_temp=com();
  127.               check8_temp=com();
  128.               dht=1;
  129.               if((s8h_temp+s8l_temp+w8h_temp+w8l_temp)==check8_temp)//校验
  130.               {
  131.                     s8h=s8h_temp;
  132.                      s8l=s8l_temp;
  133.                      w8h=w8h_temp;
  134.                      w8l=w8l_temp;
  135.                      check8=check8_temp;           
  136.               }
  137.        }
  138.        sd=s8h+(float)s8l/256;
  139.        wd=w8h+(float)w8l/256;
  140. }
  141. void main()
  142. {
  143.        while(1)
  144.        {
  145.               getdth();
  146.               display(s8h,w8h);   
  147.        }
  148. }
复制代码

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

使用道具 举报

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

使用道具 举报

板凳
ID:305990 发表于 2018-9-27 21:59 | 只看该作者
31个错误
回复

使用道具 举报

地板
ID:445547 发表于 2018-12-13 12:39 | 只看该作者
有错误不对啊  应该修改一下头文件
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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