单片机+DHT11读不出数据

单片机+DHT11读不出数据,写了一个DHT11温度计,用lcd1602显示,lcd1602的程序肯定是没错的,用了许多次。DHT11的函数里面用了while语句,所以现在就好像是…

单片机+DHT11读不出数据,写了一个DHT11温度计,用lcd1602显示,lcd1602的程序肯定是没错的,用了许多次。DHT11的函数里面用了while语句,所以现在就好像是卡在读取程序的函数里面了,这个模块我之前用别人的程序测试过也是好用的,延时函数由STC-isp提供,应该也没错。

下面是单片机代码

  1. void DHT11Start()     //发送开始信号
  2. {
  3.     DHT11data = 1;
  4.     DHT11data = 0;
  5.     Delay20ms();
  6.     DHT11data = 1;
  7.     Delay30us();
  8. }
  9. uchar DHT11GetByte()  //获得一组8bit数据
  10. {
  11.     uchar byte = 0;
  12.     uint i;
  13.     for(i=0;i<8;i++)
  14.     {
  15.         while(!DHT11data);
  16.         Delay30us();
  17.         Delay30us();
  18.         byte <<= 1;
  19.         if(DHT11data == 1)
  20.         { byte += 1; }
  21.         while(DHT11data);
  22.     }
  23.     return byte;
  24. }
  25. void DHT11GetData(uchar *dat)                         //获得所有数据
  26. {
  27.     uchar check,datbuffer[4]={0,0,0,0};
  28.   uchar datcheck[4]={0,0,0,0};    //湿度十位,湿度个位,温度十位,温度个位
  29.     uint i,num;
  30.    
  31.     DHT11Start();
  32.     if(DHT11data == 0)
  33.     {
  34.         while(DHT11data == 0);
  35.         Delay80us();
  36.    
  37.         datbuffer[0] = DHT11GetByte();
  38.         datbuffer[1] = DHT11GetByte();
  39.         datbuffer[2] = DHT11GetByte();
  40.         datbuffer[3] = DHT11GetByte();
  41.         
  42.         check = DHT11GetByte();
  43.         Delay30us();
  44.         num = datbuffer[0]+datbuffer[1]+datbuffer[2]+datbuffer[3];
  45.         if(check == num)
  46.             {
  47.                 for(i=0;i<4;i++)
  48.                 {
  49.                     datcheck[i] = datbuffer[i];
  50.                 }
  51.             }
  52.             dat[0] = (datcheck[0]/10)+’0′;
  53.             dat[1] = (datcheck[1]%10)+’0′;
  54.             dat[2] = (datcheck[2]/10)+’0′;
  55.             dat[3] = (datcheck[3]%10)+’0′;
  56.             
  57. //            dat[0] = (datbuffer[0]/10)+’0′;
  58. //            dat[1] = (datbuffer[1]%10)+’0′;
  59. //            dat[2] = (datbuffer[2]/10)+’0′;
  60. //            dat[3] = (datbuffer[3]%10)+’0′;
  61.     }
  62. }

复制代码

,DHT11 data是全局变量吗 在哪更新 不更新就会死在while里

作者: soufei

为您推荐


Fatal error: Can't use function return value in write context in /www/wwwroot/www.qianrushi.com.cn/wp-content/themes/news/footer.php on line 115