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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4546|回復: 8
打印 上一主題 下一主題
收起左側

單片機+DHT11仿真不成功,找不出來問題

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 151huh 于 2019-12-26 11:41 編輯

使用的元件有stc89c52,npn三極管,四位一體共陰數碼管,DHT11.


代碼文件
  1. #include <reg52.h>
  2. #define duanxuan P0
  3. #define weixuan P2
  4. sbit Data = P1^0;[/align][align=left]
  5. void delay_us(int num)//us延時函數
  6. {
  7. int cnt = 0;
  8. TMOD = 0x01;
  9. TH0 = 0xFF; //設置延時1us
  10. TL0 = 0xFF;
  11. TR0 = 1;
  12. while(1)
  13. {
  14.   if(TF0 == 1)
  15.   {
  16.    TF0 = 0;
  17.    TH0 = 0xFF;
  18.    TL0 = 0XFF;
  19.    cnt++;
  20.    if(cnt >= num)
  21.     break;
  22.   }
  23. }
  24.   
  25. }void delay_ms(int shuzhi)//ms延時函數
  26. {
  27. int cnt = 0;
  28. TMOD = 0x01;
  29. TH0 = 0x03; //設置延時1ms
  30. TL0 = 0xE8;
  31. TR0 = 1;
  32. while(1)
  33. {
  34.   if(TF0 == 1)
  35.   {
  36.    TF0 = 0;
  37.    TH0 = 0x03;
  38.    TL0 = 0XE8;
  39.    cnt++;
  40.    if(cnt >= shuzhi)
  41.     break;
  42.   }
  43. }
  44. }
  45. void Xianshi(int a, d)//數碼管顯示函數
  46. {
  47. unsigned char code wxcode[4] = {0xfe,0xfd,0xfb,0xf7};//位選編碼表
  48. unsigned char code dxcode[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段選編碼表
  49. unsigned char i;
  50. unsigned int g, s, b, q, j;

  51. g = a%10;//個位
  52. s = a/10%10; //十位
  53. b = b%10;  //百位
  54. q = b/10%10;  //千位

  55. for(i=0;i<4;i++)
  56. {
  57.   weixuan = wxcode[i];
  58.   duanxuan = 0x00;
  59.   if(i==3)
  60.    duanxuan = dxcode[g];
  61.   if(i==2)
  62.    duanxuan = dxcode[s];
  63.   if(i==1)
  64.    duanxuan = dxcode[b];
  65.   if(i==0)
  66.    duanxuan = dxcode[q];
  67. }
  68. j = 100;
  69. while(j--);  
  70. }
  71. [align=left]void DHT_star()//溫濕度讀取函數
  72. {
  73. Data = 1;
  74. delay_us(20);
  75. Data = 0;
  76. delay_ms(20);    //主機發送起始信號
  77. Data = 1;
  78. delay_us(30);
  79. }
  80. unsigned char DHT_code() //DHT11接受一個字節
  81. {
  82. unsigned char i;
  83. unsigned char dat = 0;
  84. for(i=0;i<8;i++)
  85. {
  86.   while(!Data);  //等待50us的低電平過去
  87.   delay_us(60);  //延時60us如果還為高電平則數據為1
  88.   dat <<= 1;    //數據為0時直接執行移位操作
  89.   if(Data==1)   //數據為1時,加1
  90.    dat += 1;
  91.   while(Data);    //等待數據線拉低
  92. }
  93. return dat;
  94. }[/align][align=left]void DHT_receive()
  95. {
  96. unsigned char R_H, R_L, T_H, T_L, RH=0, RL, TH=0, TL, revise;
  97. DHT_star();
  98. if(Data==0)
  99. {
  100.   while(Data == 0);  //等待數據線拉高
  101.   delay_us(80);
  102.   R_H = DHT_code(); //接受8位濕度整數數據
  103.   R_L = DHT_code(); //接受8位濕度小數數據
  104.   T_H = DHT_code(); //接受8位溫度整數數據
  105.   T_L = DHT_code(); //接受8位溫度小數數據
  106.   revise = DHT_code();   //接受檢驗數據[/align][align=left]  delay_us(30);[/align][align=left]  if((R_H+R_L+T_H+T_L)==revise) //校驗數據是否正確
  107.   {
  108.    RH = R_H;
  109.    RL = R_L;
  110.    TH = T_H;
  111.    TL = T_L;
  112.   }
  113. }
  114. Xianshi(RH, TH);  //顯示濕度整數,溫度整數
  115. }[/align][align=left]void main()//主函數
  116. {
  117. while(1)
  118. {
  119.   delay_ms(1500);  //DHT11上電后等待超過1s以越過不穩定狀態
  120.   DHT_receive();
  121. }
  122. }
復制代碼

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

使用道具 舉報

沙發
ID:130230 發表于 2019-12-26 11:55 | 只看該作者
不要再while(1)里面延時,你的數碼管刷不起來的。建議如果確實需要延時用定時器加標志做成時間片。
回復

使用道具 舉報

板凳
ID:396245 發表于 2019-12-26 12:05 | 只看該作者
P0口需要外部上拉。
回復

使用道具 舉報

地板
ID:532541 發表于 2019-12-26 12:24 | 只看該作者
DHT11、 18B20這類接口,出問題,有三個方面,第一時序,第二時間,第三口線的設置,第一個一般不出問,因為大家用的程序都是參考了調試通過的了例程,第二個是出問題最多的是時間,因為延時都是用程序循環實現的,而我們用的單片機,時鐘頻率分頻系數和例程可能差別很大,比如用的例程是標準的51(89CAT52),而實際用的是STC12C5A60S2單片機,那延時的時間就差很多了,只要報延時的時間弄對了就ok了,低三就是口線的設置,如方向驅動能力等。
回復

使用道具 舉報

5#
ID:202748 發表于 2019-12-26 15:13 | 只看該作者
你說是共陰數碼管,但你這仿真圖是共陽接法。
回復

使用道具 舉報

6#
ID:584814 發表于 2019-12-26 18:12 | 只看該作者
[/align][align=left]這些是什么鬼看得眼花
建議將
void main()//主函數
{
while(1)
{
  delay_ms(1500);  //DHT11上電后等待超過1s以越過不穩定狀態
  DHT_receive();
}
}
調整成
void main()//主函數
{
delay_ms(1500);  //DHT11上電后等待超過1s以越過不穩定狀態
while(1)
{
  DHT_receive();
}
}
試試。還有就是感覺在delay()里用while(1)也極罕見。
回復

使用道具 舉報

7#
ID:312890 發表于 2019-12-30 13:23 | 只看該作者
P0口需要上拉電阻
回復

使用道具 舉報

8#
ID:1042651 發表于 2022-8-22 17:15 | 只看該作者
void delay_ms(int shuzhi)//ms延時函數
void delay_us(int num)//us延時函數

可能是這兩個延時函數的問題,導致不精準,優化下!
回復

使用道具 舉報

9#
ID:1042651 發表于 2022-8-22 17:15 | 只看該作者
延時函數的問題
回復

使用道具 舉報

10#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品亚洲一区二区 | 国产精品区二区三区日本 | 成人免费视频在线观看 | 亚洲欧美日韩精品久久亚洲区 | 拍戏被cao翻了h承欢 | 色婷婷综合网 | 精品一二区 | 久久成人精品视频 | 国产a区| 成人动慢 | 精品久久久久久 | 欧美黑人一区 | 亚洲手机视频在线 | 曰韩一二三区 | 成人欧美一区二区三区黑人孕妇 | 久久一及片 | 欧美成人aaa级毛片在线视频 | 国产精品久久久久久久午夜片 | 欧美日韩在线视频观看 | 日韩成人av在线 | 中文字幕欧美一区 | 成人免费在线视频 | 色视频在线播放 | 久久久精品 | 国产精品美女久久久久久免费 | 中文字幕一区二区三区精彩视频 | 在线国产视频 | 高清久久久 | 日韩视频三区 | 国产精品国产精品国产专区不片 | 成人免费一区二区 | 自拍偷拍视频网 | 国产一在线 | 欧美一区二区三区在线看 | 国产一级视频在线播放 | 久久久久久久久99 | 亚洲日日夜夜 | 日韩在线视频一区 | 中文字幕乱码视频32 | 欧美在线一区二区三区 | 亚洲天堂影院 |