欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 有大佬用過DHT11溫濕度模塊嗎?單片機測出來的數據不太正常,求救 [打印本頁]

作者: 單片機小白一個    時間: 2019-5-6 10:41
標題: 有大佬用過DHT11溫濕度模塊嗎?單片機測出來的數據不太正常,求救
還有就是那個從機響應函數response()加上的話lcd就什么也不顯示了,不加的話現在顯示濕度68,溫度46,

程序如下
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit DATA=P2^0;
  5. sbit rs=P2^6;        
  6. sbit rw=P2^5;        
  7. sbit en=P2^7;     
  8. uchar rec_dat[9];   //用于顯示的接收數據數組
  9. /*1ms延時函數*/
  10. void delay1ms(uint x)   //誤差 0us
  11. {
  12.     unsigned char a,b,c;
  13.     for(c=x;c>0;c--)
  14.         for(b=142;b>0;b--)
  15.             for(a=2;a>0;a--);
  16. }
  17. /*80us延時函數*/
  18. void delay80us(void)   //誤差 0us
  19. {
  20.     unsigned char a,b;
  21.     for(b=11;b>0;b--)
  22.         for(a=2;a>0;a--);
  23. }
  24. /*60us延時函數*/
  25. void delay60us(void)   //誤差 0us
  26. {
  27.     unsigned char a,b;
  28.     for(b=3;b>0;b--)
  29.         for(a=8;a>0;a--);
  30. }
  31. /*24us延時函數*/
  32. void delay24us(void)   //誤差 0us
  33. {
  34.     unsigned char a,b;
  35.     for(b=3;b>0;b--)
  36.         for(a=2;a>0;a--);
  37. }
  38. /*27us延時函數*/
  39. void delay27us(void)   //誤差 0us
  40. {
  41.     unsigned char a;
  42.     for(a=12;a>0;a--);
  43. }
  44. /*主機發送起始信號*/
  45. void start()
  46. {
  47.    DATA=0;
  48.    delay1ms(20);
  49.    DATA=1;
  50.    delay24us();
  51. }
  52. /*檢測從機應答信號*/
  53. void response()
  54. {
  55.    DATA=0;
  56.    delay80us();
  57.    DATA=1;
  58.    delay80us();
  59. }
  60. /*接收1字節數據*/
  61. uint receivebyte()
  62. {
  63.       uchar i,dat=0;
  64.     for(i=0;i<8;i++)
  65.     {
  66.        while(!DATA);//等待50ms低電平過去
  67.        delay27us();
  68.        if(DATA==1)
  69.          dat+=1;
  70.        dat<<=1;//數據移位
  71.        while(DATA);
  72.     }
  73.     return dat;
  74. }
  75. void DHT11()
  76. {
  77.    uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revive;
  78.    start();
  79.    DATA=1;
  80. //   response();
  81.    if(DATA==0)
  82.    {
  83.      while(DATA==0);
  84.      delay80us();
  85.      R_H=receivebyte(); //接收濕度高八位
  86.      R_L=receivebyte(); //接收濕度低八位
  87.      T_H=receivebyte(); //接收溫度高八位
  88.      T_L=receivebyte(); //接收溫度低八位
  89.      revive=receivebyte(); //接收校正位
  90.      delay60us();
  91.    }
  92.    if((R_H+R_L+T_H+T_L)==revive) //校正
  93.    {
  94.     RH=R_H;
  95.     RL=R_L;
  96.     TH=T_H;
  97.     TL=T_L;
  98.    }
  99.     /*數據處理,方便顯示*/
  100.     rec_dat[0]='0'+(RH/10);
  101.     rec_dat[1]='0'+(RH%10);
  102.     rec_dat[2]='R';
  103.     rec_dat[3]='H';
  104.     rec_dat[4]=' ';
  105.     rec_dat[5]=' ';
  106.     rec_dat[6]='0'+(TH/10);
  107.     rec_dat[7]='0'+(TH%10);
  108.     rec_dat[8]='C';
  109. }
  110. void lcd_wcom(uchar com)
  111. {
  112.    rs=0;
  113.    rw=0;
  114.    P0=com;
  115.    delay1ms(5);
  116.    en=1;
  117.    delay1ms(5);
  118.    en=0;
  119. }
  120. void lcd_wdat(uchar dat)
  121. {
  122.    rs=1;
  123.    rw=0;
  124.    P0=dat;
  125.    delay1ms(5);
  126.    en=1;
  127.    delay1ms(5);
  128.    en=0;
  129. }
  130. void lcd_init()
  131. {
  132.    lcd_wcom(0x38);
  133.    lcd_wcom(0x0c);
  134.    lcd_wcom(0x06);
  135.    lcd_wcom(0x01);
  136. }
  137. void main()
  138. {
  139.    uchar i;
  140.    lcd_init();
  141.    delay1ms(1000);
  142.    while(1)
  143.    {
  144.    DHT11();
  145.    lcd_wcom(0x80);
  146.    for(i=0;i<9;i++)
  147.    {
  148.       lcd_wdat(rec_dat[i]);
  149.    }
  150.    }
  151. }
復制代碼


作者: 1qdeuuu000    時間: 2019-5-6 18:58
主函數加個延時試試,這模塊不能太過頻繁調用,最好1~2s調用一次。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1