久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8768|回復(fù): 17
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+DHT11讀不出數(shù)據(jù)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:884998 發(fā)表于 2021-2-19 22:12 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
寫(xiě)了一個(gè)DHT11溫度計(jì),用lcd1602顯示,lcd1602的程序肯定是沒(méi)錯(cuò)的,用了許多次。DHT11的函數(shù)里面用了while語(yǔ)句,所以現(xiàn)在就好像是卡在讀取程序的函數(shù)里面了,這個(gè)模塊我之前用別人的程序測(cè)試過(guò)也是好用的,延時(shí)函數(shù)由STC-isp提供,應(yīng)該也沒(méi)錯(cuò)。

下面是單片機(jī)代碼
  1. void DHT11Start()     //發(fā)送開(kāi)始信號(hào)
  2. {
  3.     DHT11data = 1;
  4.     DHT11data = 0;
  5.     Delay20ms();
  6.     DHT11data = 1;
  7.     Delay30us();
  8. }

  9. uchar DHT11GetByte()  //獲得一組8bit數(shù)據(jù)
  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)                         //獲得所有數(shù)據(jù)
  26. {
  27.     uchar check,datbuffer[4]={0,0,0,0};
  28.   uchar datcheck[4]={0,0,0,0};    //濕度十位,濕度個(gè)位,溫度十位,溫度個(gè)位
  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. }
復(fù)制代碼


DHT11.zip

44.53 KB, 下載次數(shù): 26

這是工程文件

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:871393 發(fā)表于 2021-2-19 22:28 | 只看該作者
DHT11 data是全局變量嗎 在哪更新 不更新就會(huì)死在while里
回復(fù)

使用道具 舉報(bào)

板凳
ID:884998 發(fā)表于 2021-2-19 22:59 來(lái)自觸屏版 | 只看該作者
77599585 發(fā)表于 2021-2-19 22:28
DHT11data是全局變量嗎 在哪更新 不更新就會(huì)死在while里

DHT11data不是個(gè)變量,是dht11的io口,前面有句我沒(méi)放上來(lái)是,是:sbit DHT11data = P2^1
回復(fù)

使用道具 舉報(bào)

地板
ID:844772 發(fā)表于 2021-2-20 09:30 | 只看該作者
它不是IIC設(shè)備,你delay時(shí)間安排的不大對(duì)啊,比如while(DHT11data == 0);         Delay80us();前一句已經(jīng)等待掉這80
回復(fù)

使用道具 舉報(bào)

5#
ID:884998 發(fā)表于 2021-2-20 16:59 | 只看該作者
glinfei 發(fā)表于 2021-2-20 09:30
它不是IIC設(shè)備,你delay時(shí)間安排的不大對(duì)啊,比如while(DHT11data == 0);         Delay80us();前一句已經(jīng) ...

你這么一說(shuō)確實(shí),這個(gè)地方相當(dāng)于延遲了兩遍,但我這個(gè)代碼是參考別人的寫(xiě)的,他那個(gè)程序就能讀出了,我的就不行,我把那個(gè)delay80刪除之后還是讀不出來(lái)
回復(fù)

使用道具 舉報(bào)

6#
ID:884998 發(fā)表于 2021-2-20 17:35 | 只看該作者
  1.     void DHT11_start()                 // 主機(jī)控制DHT11開(kāi)始工作
  2.     {
  3. //       DATA=1;                                 // 主線空閑狀態(tài)
  4. //       _nop_();
  5. //       _nop_();
  6.        DATA=0;                                 // 主機(jī)發(fā)送開(kāi)始工作信號(hào)
  7.        Delay20ms();   //延時(shí)18ms以上
  8.        DATA=1;                                 // 拉高并延時(shí)等待DHT11響應(yīng)
  9.        Delay30us();
  10.     }
  11.     /*********************************************************************************************
  12.     函數(shù)名:DHT11讀數(shù)據(jù)函數(shù)
  13.     調(diào)  用:? = DHT11_rec_byte();
  14.     參  數(shù):無(wú)
  15.     返回值:
  16.     結(jié)  果:讀DHT11數(shù)據(jù)并保存到dat
  17.     備  注:
  18.     **********************************************************************************************/

  19.     uchar DHT11_rec_byte()      //接收一個(gè)字節(jié)
  20.     {
  21.        uchar i,dat=0;
  22.       for(i=0;i<8;i++)    //從高到低依次接收8位數(shù)據(jù)
  23.        {         
  24.           while(!DATA);   ////等待50us低電平過(guò)去
  25.           Delay30us();
  26.               Delay30us();     //延時(shí)60us,如果還為高則數(shù)據(jù)為1,否則為0
  27.           dat<<=1;           //左移位使正確接收8位數(shù)據(jù),數(shù)據(jù)為0時(shí)直接移位
  28.           if(DATA==1)    //數(shù)據(jù)為1時(shí),使dat加1來(lái)接收數(shù)據(jù)1
  29.              dat+=1;
  30.           while(DATA);  //等待數(shù)據(jù)線拉低   
  31.         }  
  32.         return dat;
  33.     }

  34.     /*********************************************************************************************
  35.     函數(shù)名:接收DHT11的40位的數(shù)據(jù)并校驗(yàn)
  36.     調(diào)  用:? = DHT11_receive();
  37.     參  數(shù):無(wú)
  38.     返回值:無(wú)
  39.     結(jié)  果:結(jié)果保存到dat_r[i]中
  40.     備  注:
  41.     **********************************************************************************************/
  42.     void DHT11_receive()      //接收40位的數(shù)據(jù)
  43.     {
  44.         uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  45.         DHT11_start();                 // 主機(jī)控制DHT11開(kāi)始工作
  46.         if(DATA==0)
  47.         {
  48.             while(DATA==0);   //等待拉高     
  49.             Delay30us();
  50.                     Delay30us();
  51.                     Delay30us();  //拉高后延時(shí)80us
  52.             R_H=DHT11_rec_byte();    //接收濕度高八位  
  53.             R_L=DHT11_rec_byte();    //接收濕度低八位  
  54.             T_H=DHT11_rec_byte();    //接收溫度高八位  
  55.             T_L=DHT11_rec_byte();    //接收溫度低八位
  56.             revise=DHT11_rec_byte(); //接收校正位

  57. //            Delay30us();    //結(jié)束

  58.             if((R_H+R_L+T_H+T_L)==revise)      //校正
  59.             {
  60.                 RH=R_H;
  61.                 RL=R_L;
  62.                 TH=T_H;
  63.                 TL=T_L;
  64.             }
  65.             /*數(shù)據(jù)處理,方便顯示*/
  66.             dat_r[0]='0'+(RH/10);
  67.             dat_r[1]='0'+(RH%10);
  68.             dat_r[2]='0'+(TH/10);
  69.             dat_r[3]='0'+(TH%10);

  70.         }
  71.     }
復(fù)制代碼


這是我測(cè)試時(shí)用的代碼,我實(shí)在找不出和我寫(xiě)的有啥區(qū)別,可是我的程序就是讀不出數(shù)據(jù),dat_r是個(gè)全局變量
回復(fù)

使用道具 舉報(bào)

7#
ID:112099 發(fā)表于 2021-2-21 08:40 | 只看該作者
樓主有試過(guò)仿真看是卡死在哪里?你用的是什么單片機(jī)?IO口設(shè)置對(duì)嗎?
回復(fù)

使用道具 舉報(bào)

8#
ID:155507 發(fā)表于 2021-2-21 09:34 | 只看該作者
MirrAKe 發(fā)表于 2021-2-20 17:35
這是我測(cè)試時(shí)用的代碼,我實(shí)在找不出和我寫(xiě)的有啥區(qū)別,可是我的程序就是讀不出數(shù)據(jù),dat_r是個(gè)全局變 ...

求助之前,自己先別急,靜下心來(lái),仔細(xì)檢查代碼有沒(méi)有錯(cuò)誤;程序處理邏輯有沒(méi)有問(wèn)題。必要的話(huà),各變量隨著處理流程的值變化,列成清單。

建議你先畫(huà)個(gè)流程,先在流程圖上走通,再與程序!

對(duì)于控制一些對(duì)時(shí)序要求比較高的外部器件,可以根據(jù)MCU時(shí)鐘頻率,用單片機(jī)助手之類(lèi)的工具計(jì)算延時(shí)很方便。

DHT11溫濕度傳感器中文資料分析
http://www.zg4o1577.cn/bbs/dpj-30362-1.html
回復(fù)

使用道具 舉報(bào)

9#
ID:844772 發(fā)表于 2021-2-22 17:09 | 只看該作者
//       DATA=1;                                 // 主線空閑狀態(tài)
//       _nop_();
//       _nop_();
這幾句也需要的
回復(fù)

使用道具 舉報(bào)

10#
ID:887027 發(fā)表于 2021-2-28 14:30 | 只看該作者
一個(gè)是dht11是不是不同,現(xiàn)在dht11好像有兩種,最好你有在用的dht11的datasheet。第二你接個(gè)邏輯分析儀上去,看看dht11的信號(hào)時(shí)序。
回復(fù)

使用道具 舉報(bào)

11#
ID:390243 發(fā)表于 2021-3-16 21:51 | 只看該作者
請(qǐng)問(wèn)樓主解決了嗎?我也遇到和你一樣的問(wèn)題了。。
回復(fù)

使用道具 舉報(bào)

12#
ID:889832 發(fā)表于 2021-3-17 15:50 | 只看該作者
細(xì)節(jié)決定成敗,加油相信你,反正我的  dht11  可以
回復(fù)

使用道具 舉報(bào)

13#
ID:884998 發(fā)表于 2021-3-20 11:04 | 只看該作者
LOGLOG6 發(fā)表于 2021-3-16 21:51
請(qǐng)問(wèn)樓主解決了嗎?我也遇到和你一樣的問(wèn)題了。。

當(dāng)時(shí)時(shí)解決了,按照人家的例程完全照搬就好使,甚至for循環(huán)中的i 從unsigned char變成unsigned int都會(huì)讀不出來(lái),至于為什么,我不知道,后來(lái)還有個(gè)奇怪的事,當(dāng)天晚上改完好用,第二天早上,就讀不出來(lái)了,然后一直到現(xiàn)在,我也再?zèng)]讀出過(guò)正確數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

14#
ID:915884 發(fā)表于 2021-5-11 14:45 | 只看該作者
MirrAKe 發(fā)表于 2021-3-20 11:04
當(dāng)時(shí)時(shí)解決了,按照人家的例程完全照搬就好使,甚至for循環(huán)中的i 從unsigned char變成unsigned int都會(huì)讀 ...

我也是這樣,樓主后續(xù)有跟進(jìn)嗎,我測(cè)試了一下我是卡在while(Data); 這句上了,一刪掉就能顯示,不過(guò)數(shù)據(jù)不對(duì),好像一直無(wú)法拉低數(shù)據(jù)線
回復(fù)

使用道具 舉報(bào)

15#
ID:915884 發(fā)表于 2021-5-12 13:20 | 只看該作者
dellte 發(fā)表于 2021-5-11 14:45
我也是這樣,樓主后續(xù)有跟進(jìn)嗎,我測(cè)試了一下我是卡在while(Data); 這句上了,一刪掉就能顯示,不過(guò)數(shù)據(jù) ...

解決了,加了個(gè)上拉電阻就能讀到數(shù)據(jù)了
回復(fù)

使用道具 舉報(bào)

16#
ID:1082926 發(fā)表于 2023-6-9 00:00 | 只看該作者
dellte 發(fā)表于 2021-5-11 14:45
我也是這樣,樓主后續(xù)有跟進(jìn)嗎,我測(cè)試了一下我是卡在while(Data); 這句上了,一刪掉就能顯示,不過(guò)數(shù)據(jù) ...

請(qǐng)問(wèn)后來(lái)解決了嗎,我也是卡在while循環(huán)里面了
回復(fù)

使用道具 舉報(bào)

17#
ID:1004455 發(fā)表于 2023-6-9 17:02 | 只看該作者
IO口要設(shè)置一下
回復(fù)

使用道具 舉報(bào)

18#
ID:1101718 發(fā)表于 2024-7-12 15:34 | 只看該作者
dellte 發(fā)表于 2021-5-12 13:20
解決了,加了個(gè)上拉電阻就能讀到數(shù)據(jù)了

IIC好像需要上拉電阻才可以穩(wěn)定通訊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级黄色片免费观看 | 日韩欧美黄色 | 成人在线视频网 | 国产999精品久久久 午夜天堂精品久久久久 | 成人欧美一区二区三区白人 | 欧美一级特黄aaa大片在线观看 | 男女一区二区三区 | 精品少妇v888av | 一区二区三区四区在线视频 | 久久久久久久久中文字幕 | 国产一区二区三区在线 | 国产高清精品一区二区三区 | 日本a视频 | 精品国产视频 | 午夜不卡一区二区 | 国产在线一区二 | av色站 | 日韩在线观看网站 | 91精品国产综合久久婷婷香蕉 | 亚洲欧美日韩精品久久亚洲区 | 在线伊人网 | 精品视频一区二区 | 欧美精品在线免费观看 | 天天爽一爽| 丝袜毛片| 亚洲天堂一区二区 | 欧美福利 | 97视频精品 | 亚洲精品视频一区二区三区 | 国产精品国产a | 国产精品一区二区福利视频 | 狠狠的干 | 美女视频一区二区三区 | 久久精品色欧美aⅴ一区二区 | 久久一区二区三区四区 | 国产在线视频在线观看 | 亚洲精品久久久蜜桃 | 91不卡在线 | 天天综合网天天综合色 | 97精品超碰一区二区三区 | 国产精品高清一区二区三区 |