找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1366|回复: 0
收起左侧

DHT11单片机程序

[复制链接]
ID:643198 发表于 2020-11-22 10:12 | 显示全部楼层 |阅读模式
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit Data=P1^0;   
  6. uchar rec_dat[13]="123695669999";   
  7. extern void InitLcd1602();
  8. uchar showset[16]="12369566999999";
  9. int wendu=0;
  10. int shidu=0;

  11. sbit shezhi=P2^0;   //定义按键引脚
  12. sbit jia=P2^1;
  13. sbit jian=P2^2;
  14. sbit beep=P3^7;     //定义蜂鸣器引脚

  15. int wendul=5;      //温度下限值
  16. int wenduh=30;     //温度上限值
  17. int shidul=30;     //湿度下限值
  18. int shiduh=60;     //湿度上限值
  19. int change=0;
  20. uchar key_can;         //按键值
  21. extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
  22. void DHT11_delay_us(uchar n)
  23. {
  24.     while(--n);
  25. }

  26. void DHT11_delay_ms(uint z)
  27. {
  28.    uint i,j;
  29.    for(i=z;i>0;i--)
  30.       for(j=110;j>0;j--);
  31. }
  32. /************DHT11函数*********/
  33. void DHT11_start()     
  34. {
  35.    Data=1;
  36.    DHT11_delay_us(2);
  37.    Data=0;
  38.    DHT11_delay_ms(20);   
  39.    Data=1;
  40.    DHT11_delay_us(30);
  41. }

  42. uchar DHT11_rec_byte()   
  43. {
  44.    uchar i,dat=0;
  45.   for(i=0;i<8;i++)   
  46.    {         
  47.       while(!Data);   
  48.       DHT11_delay_us(8);   
  49.       dat<<=1;         
  50.       if(Data==1)   
  51.          dat+=1;
  52.       while(Data);      
  53.     }  
  54.     return dat;
  55. }

  56. void DHT11_receive()   
  57. {
  58.     uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  59.     DHT11_start();
  60.     if(Data==0)
  61.     {
  62.         while(Data==0);   //等待数据   
  63.         DHT11_delay_us(40);  //延时80us
  64.         R_H=DHT11_rec_byte();    //湿度高位  
  65.         R_L=DHT11_rec_byte();    //湿度低位  
  66.         T_H=DHT11_rec_byte();    //温度高位
  67.         T_L=DHT11_rec_byte();    //温度低位
  68.         revise=DHT11_rec_byte(); //获取数据

  69.         DHT11_delay_us(25);    //延时

  70.         if((R_H+R_L+T_H+T_L)==revise)      //校验
  71.         {
  72.             RH=R_H;
  73.             RL=R_L;
  74.             TH=T_H;
  75.             TL=T_L;
  76.         }
  77.         /*数据分解*0-9*/
  78.                                
  79. //        rec_dat[0]='0'+(RH/10);
  80. //        rec_dat[1]='0'+(RH%10);
  81. //        rec_dat[2]='R';
  82. //        rec_dat[3]='H';
  83. //        rec_dat[4]=' ';
  84. //        rec_dat[5]=' ';
  85. //        rec_dat[6]='0'+(TH/10);
  86. //        rec_dat[7]='0'+(TH%10);
  87. //        rec_dat[8]='C';
  88.                                 shidu=RH;
  89.                                 wendu=TH;
  90.                                 rec_dat[0]='H';
  91.                                 rec_dat[1]=':';
  92.                                 rec_dat[2]='0'+(RH/10);
  93.         rec_dat[3]='0'+(RH%10);
  94.         rec_dat[4]='R';
  95.         rec_dat[5]='H';
  96.         rec_dat[6]=' ';
  97.         rec_dat[7]=' ';
  98.                                
  99.                                 rec_dat[8]='T';
  100.                                 rec_dat[9]=':';
  101.         rec_dat[10]='0'+(TH/10);
  102.         rec_dat[11]='0'+(TH%10);
  103.         rec_dat[12]='C';
  104.     }
  105. }

  106. /**********主函数***********/
  107. void main()
  108. {   
  109.    InitLcd1602();   //1602初始化
  110.    while(1)
  111.    {   
  112.        DHT11_delay_ms(500);    //DHT11初始1S延时1500
  113.        DHT11_receive();
  114.                   
  115.                          if(shezhi==0)
  116.                          {
  117.                                  DHT11_delay_ms(2);
  118.                                  if(shezhi==0)
  119.                                 {
  120.                                          change++;
  121.                                   if(change>3)
  122.                                   {
  123.                                          change=0;
  124.                                          
  125.                                   }
  126.                                        
  127.                                   }
  128.                           }
  129.                                
  130.                                 if(change==0)
  131.                                 {
  132.                                         if(jia==0)
  133.                                         {
  134.                                                 DHT11_delay_ms(2);
  135.                                     if(jia==0)
  136.                                     {
  137.                                                          shidul++;
  138.                                                         if(shidul>99)
  139.                                                         {
  140.                                                          shidul=99;
  141.                                                          
  142.                                                         }
  143.                                        
  144.                                     }
  145.                              }
  146.                                          
  147.                                          if(jian==0)
  148.                                         {
  149.                                                 DHT11_delay_ms(2);
  150.                                     if(jian==0)
  151.                                     {
  152.                                                          shidul--;
  153.                                                         if(shidul<0)
  154.                                                         {
  155.                                                          shidul=0;
  156.                                                          
  157.                                                         }
  158.                                        
  159.                                     }
  160.                              }

  161.                                 }
  162.                                
  163.                                 if(change==1)
  164.                                 {
  165.                                         if(jia==0)
  166.                                         {
  167.                                                 DHT11_delay_ms(2);
  168.                                     if(jia==0)
  169.                                     {
  170.                                                          shiduh++;
  171.                                                         if(shiduh>99)
  172.                                                         {
  173.                                                          shiduh=99;
  174.                                                          
  175.                                                         }
  176.                                        
  177.                                     }
  178.                              }
  179.                                          
  180.                                          if(jian==0)
  181.                                         {
  182.                                                 DHT11_delay_ms(2);
  183.                                     if(jian==0)
  184.                                     {
  185.                                                          shiduh--;
  186.                                                         if(shiduh<0)
  187.                                                         {
  188.                                                          shiduh=0;
  189.                                                          
  190.                                                         }
  191.                                        
  192.                                     }
  193.                              }

  194.                                 }
  195.                                
  196.                                
  197.                                
  198.                                 if(change==2)
  199.                                 {
  200.                                         if(jia==0)
  201.                                         {
  202.                                                 DHT11_delay_ms(2);
  203.                                     if(jia==0)
  204.                                     {
  205.                                                          wendul++;
  206.                                                         if(wendul>99)
  207.                                                         {
  208.                                                          wendul=99;
  209.                                                          
  210.                                                         }
  211.                                        
  212.                                     }
  213.                              }
  214.                                          
  215.                                          if(jian==0)
  216.                                         {
  217.                                                 DHT11_delay_ms(2);
  218.                                     if(jian==0)
  219.                                     {
  220.                                                          wendul--;
  221.                                                         if(wendul<0)
  222.                                                         {
  223.                                                          wendul=0;
  224.                                                          
  225.                                                         }
  226.                                        
  227.                                     }
  228.                              }

  229.                                 }
  230.                                
  231.                                 if(change==3)
  232.                                 {
  233.                                         if(jia==0)
  234.                                         {
  235.                                                 DHT11_delay_ms(2);
  236.                                     if(jia==0)
  237.                                     {
  238.                                                          wenduh++;
  239.                                                         if(wenduh>99)
  240.                                                         {
  241.                                                          wenduh=99;
  242.                                                          
  243.                                                         }
  244.                                        
  245.                                     }
  246.                              }
  247.                                          
  248.                                          if(jian==0)
  249.                                         {
  250.                                                 DHT11_delay_ms(2);
  251.                                     if(jian==0)
  252.                                     {
  253.                                                          wenduh--;
  254.                                                         if(wenduh<0)
  255.                                                         {
  256.                                                          wenduh=0;
  257.                                                          
  258.                                                         }
  259.                                        
  260.                                     }
  261.                              }

  262.                                 }
  263.        
  264.                     showset[0]='L';
  265.                                 showset[1]=':';
  266.                                 showset[2]='0'+(shidul/10);
  267.         showset[3]='0'+(shidul%10);
  268.                  
  269.                     showset[4]='H';
  270.                                 showset[5]=':';
  271.                                 showset[6]='0'+(shiduh/10);
  272.         showset[7]='0'+(shiduh%10);
  273.                  
  274.                                 showset[8]='L';
  275.                                 showset[9]=':';
  276.         showset[10]='0'+(wendul/10);
  277.         showset[11]='0'+(wendul%10);
  278.               showset[12]='L';
  279.                                 showset[13]=':';
  280.         showset[14]='0'+(wenduh/10);
  281.         showset[15]='0'+(wenduh%10);
  282.                                
  283.                                 if((shidu< shidul )|| (shidu>shiduh))
  284.                                 {
  285.                                         beep=0;
  286.                                        
  287.                                 }
  288.                                 else if((wendu< wendul )|| (wendu>wenduh))
  289.                                 {
  290.                                         beep=0;
  291.                                 }
  292.                                 else
  293.                                 {
  294.                                         beep=1;
  295.                                 }
  296.                   LcdShowStr(0,1,showset);  //显示温湿度设置   
  297.                         LcdShowStr(0,0,rec_dat);  //显示温湿度                     
  298.    }
  299. }
复制代码


DHT11(程序 电路图).rar

65.45 KB, 下载次数: 13, 下载积分: 黑币 -5

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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