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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4290|回復(fù): 3
收起左側(cè)

DHT11在仿真上可以正常顯示,在實物上只顯示0是怎么回事

[復(fù)制鏈接]
ID:637063 發(fā)表于 2020-3-11 09:32 | 顯示全部樓層 |閱讀模式
缺圖,缺詳細(xì)介紹,或標(biāo)題意思不明確,請重發(fā)
  1. #include<reg51.h>
  2. #include<lcd.h>
  3. sbit dht11=P2^0;
  4. #define OK 1
  5. #define ERROR 0  
  6. #define NUMBER  20  
  7. #define SIZE  5
  8. unsigned char flag;
  9. int temp_value, humi_value, lemp_value, lumi_value;                              
  10. unsigned char status;
  11. unsigned char value_array[5];
  12. //Ñóê±  1ms
  13. void Delay_1ms(unsigned int ms)
  14. {
  15.      unsigned int x, y;
  16.      for(x = ms; x > 0; x--)
  17.      {
  18.         for(y = 124; y > 0; y--);
  19.      }
  20. }
  21. //Ñóê±10 ns
  22. void  Delay_10us(void)
  23. {
  24.     unsigned char  i;
  25.     i--;
  26.     i--;
  27.     i--;
  28.     i--;
  29.     i--;
  30.     i--;
  31. }
  32. unsigned char ReadValue(void)
  33. {
  34.      unsigned char count, value = 0, i;
  35.      status = OK;   
  36.      for(i = 8; i > 0; i--)
  37.      {
  38.         value <<= 1;
  39.         count = 0;
  40.         while(dht11 == 0 && count++ < NUMBER);
  41.         if(count >= NUMBER)
  42.         {
  43.              status = ERROR;
  44.              return 0;   
  45.         }
  46.         Delay_10us();
  47.         Delay_10us();
  48.         Delay_10us();
  49.         if(dht11 != 0)
  50.         {
  51.              value++;
  52.              while(dht11 != 0 && count++ < NUMBER)
  53.              {
  54.                 dht11 = 1;
  55.              }
  56.              if(count >= NUMBER)
  57.              {
  58.                 status = ERROR;  
  59.                 return 0;
  60.               }  
  61.         }
  62.     }  
  63.     return (value);
  64. }
  65. unsigned char ReadTempAndHumi(void)
  66. {  
  67.      unsigned char i = 0, check_value = 0,count = 0;
  68.      EA = 0;
  69.      dht11 = 0;     
  70.      Delay_1ms(20);   
  71.      dht11 = 1;     
  72.      Delay_10us();
  73.      Delay_10us();
  74.      Delay_10us();
  75.      Delay_10us();  
  76.      if(dht11 != 0)   
  77.      {
  78.         EA = 1;
  79.         return ERROR;
  80.      }
  81.      else
  82.     {
  83.         while(dht11 == 0 && count++ < NUMBER);   
  84.         if(count >= NUMBER)  
  85.         {
  86.              dht11 = 1;
  87.              EA = 1;
  88.              return ERROR;   
  89.         }
  90.         count = 0;
  91.         dht11 = 1;
  92.         while(dht11 != 0 && count++ < NUMBER);
  93.         if(count >= NUMBER)
  94.         {
  95.              dht11 = 1;
  96.              EA = 1;
  97.              return ERROR;  
  98.         }  
  99.         for(i = 0; i < SIZE; i++)
  100.         {
  101.              value_array[i] = ReadValue();
  102.              if(status == ERROR)
  103.              {
  104.                 dht11 = 1;
  105.                 EA = 1;   
  106.                 return ERROR;  
  107.              }
  108.              if(i != SIZE - 1)  
  109.              {
  110.                 check_value += value_array[i];  
  111.              }
  112.         }
  113.         if(check_value == value_array[SIZE - 1])
  114.         {
  115.              humi_value = value_array[0]/10;
  116.              lumi_value = value_array[0]%10;
  117.                                            temp_value = value_array[2]/10;
  118.              lemp_value = value_array[2]%10;                                       
  119.              dht11 = 1;
  120.              EA = 1;
  121.              return OK;   
  122.         }
  123.         else
  124.         {
  125.          EA = 1;
  126.          return ERROR;
  127.         }
  128.     }         
  129. }
  130. void display()
  131. {
  132.         LcdWriteCom(0x82);                  //D′μØÖ· 80±íê¾3õê¼μØÖ·
  133.         LcdWriteData('0'+humi_value);
  134.         LcdWriteCom(0x83);
  135.         LcdWriteData('0'+lumi_value);
  136.         LcdWriteCom(0x40+0x82);                  
  137.         LcdWriteData('0'+temp_value);
  138.         LcdWriteCom(0x40+0x83);
  139.         LcdWriteData('0'+lemp_value);
  140. }
  141. void InitTime(void)
  142. {
  143.     TH0 = (65535 - 50000)/256;
  144.     TL0 = (65535 - 50000)%256;
  145.     TMOD = 0X01;
  146.     TR0 = 1;
  147.     ET0 = 1;
  148.     EA = 1;
  149. }        
  150. void main()
  151. {
  152.         LcdInit();
  153.         InitTime();
  154.         while(1)
  155.         {
  156.                 Delay_1ms(1000);
  157.     ReadTempAndHumi();
  158.     Delay_1ms(30);
  159.     display();
  160.   }
  161. }
  162. void timer(void) interrupt 1
  163. {
  164.      TH0 = (65535 - 50000)/256;  
  165.      TL0 = (65535 - 50000)%256;
  166.      flag++;
  167. }
  168. #include"lcd.h"

  169. /*******************************************************************************
  170. * 函 數(shù) 名         : Lcd1602_Delay1ms
  171. * 函數(shù)功能                   : 延時函數(shù),延時1ms
  172. * 輸    入         : c
  173. * 輸    出         : 無
  174. * 說    名         : 該函數(shù)是在12MHZ晶振下,12分頻單片機(jī)的延時。
  175. *******************************************************************************/

  176. void Lcd1602_Delay1ms(uint c)   //誤差 0us
  177. {
  178.     uchar a,b;
  179.         for (; c>0; c--)
  180.         {
  181.                  for (b=199;b>0;b--)
  182.                  {
  183.                           for(a=1;a>0;a--);
  184.                  }      
  185.         }
  186.             
  187. }

  188. /*******************************************************************************
  189. * 函 數(shù) 名         : LcdWriteCom
  190. * 函數(shù)功能                   : 向LCD寫入一個字節(jié)的命令
  191. * 輸    入         : com
  192. * 輸    出         : 無
  193. *******************************************************************************/
  194. #ifndef         LCD1602_4PINS         //當(dāng)沒有定義這個LCD1602_4PINS時
  195. void LcdWriteCom(uchar com)          //寫入命令
  196. {
  197.         LCD1602_E = 0;     //使能
  198.         LCD1602_RS = 0;           //選擇發(fā)送命令
  199.         LCD1602_RW = 0;           //選擇寫入
  200.         
  201.         LCD1602_DATAPINS = com;     //放入命令
  202.         Lcd1602_Delay1ms(1);                //等待數(shù)據(jù)穩(wěn)定

  203.         LCD1602_E = 1;                  //寫入時序
  204.         Lcd1602_Delay1ms(5);          //保持時間
  205.         LCD1602_E = 0;
  206. }
  207. #else
  208. void LcdWriteCom(uchar com)          //寫入命令
  209. {
  210.         LCD1602_E = 0;         //使能清零
  211.         LCD1602_RS = 0;         //選擇寫入命令
  212.         LCD1602_RW = 0;         //選擇寫入

  213.         LCD1602_DATAPINS = com;        //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
  214.         Lcd1602_Delay1ms(1);

  215.         LCD1602_E = 1;         //寫入時序
  216.         Lcd1602_Delay1ms(5);
  217.         LCD1602_E = 0;

  218. //        Lcd1602_Delay1ms(1);
  219.         LCD1602_DATAPINS = com << 4; //發(fā)送低四位
  220.         Lcd1602_Delay1ms(1);

  221.         LCD1602_E = 1;         //寫入時序
  222.         Lcd1602_Delay1ms(5);
  223.         LCD1602_E = 0;
  224. }
  225. #endif
  226. /*******************************************************************************
  227. * 函 數(shù) 名         : LcdWriteData
  228. * 函數(shù)功能                   : 向LCD寫入一個字節(jié)的數(shù)據(jù)
  229. * 輸    入         : dat
  230. * 輸    出         : 無
  231. *******************************************************************************/                  
  232. #ifndef         LCD1602_4PINS                  
  233. void LcdWriteData(uchar dat)                        //寫入數(shù)據(jù)
  234. {
  235.         LCD1602_E = 0;        //使能清零
  236.         LCD1602_RS = 1;        //選擇輸入數(shù)據(jù)
  237.         LCD1602_RW = 0;        //選擇寫入

  238.         LCD1602_DATAPINS = dat; //寫入數(shù)據(jù)
  239.         Lcd1602_Delay1ms(1);

  240.         LCD1602_E = 1;   //寫入時序
  241.         Lcd1602_Delay1ms(5);   //保持時間
  242.         LCD1602_E = 0;
  243. }
  244. #else
  245. void LcdWriteData(uchar dat)                        //寫入數(shù)據(jù)
  246. {
  247.         LCD1602_E = 0;          //使能清零
  248.         LCD1602_RS = 1;          //選擇寫入數(shù)據(jù)
  249.         LCD1602_RW = 0;          //選擇寫入

  250.         LCD1602_DATAPINS = dat;        //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
  251.         Lcd1602_Delay1ms(1);

  252.         LCD1602_E = 1;          //寫入時序
  253.         Lcd1602_Delay1ms(5);
  254.         LCD1602_E = 0;

  255.         LCD1602_DATAPINS = dat << 4; //寫入低四位
  256.         Lcd1602_Delay1ms(1);

  257.         LCD1602_E = 1;          //寫入時序
  258.         Lcd1602_Delay1ms(5);
  259.         LCD1602_E = 0;
  260. }
  261. #endif
  262. /*******************************************************************************
  263. * 函 數(shù) 名       : LcdInit()
  264. * 函數(shù)功能                 : 初始化LCD屏
  265. * 輸    入       : 無
  266. * 輸    出       : 無
  267. *******************************************************************************/                  
  268. #ifndef                LCD1602_4PINS
  269. void LcdInit()                                                  //LCD初始化子程序
  270. {
  271.          LcdWriteCom(0x38);  //開顯示
  272.         LcdWriteCom(0x0c);  //開顯示不顯示光標(biāo)
  273.         LcdWriteCom(0x06);  //寫一個指針加1
  274.         LcdWriteCom(0x01);  //清屏
  275.         LcdWriteCom(0x80);  //設(shè)置數(shù)據(jù)指針起點
  276. }
  277. #else
  278. void LcdInit()                                                  //LCD初始化子程序
  279. {
  280.         LcdWriteCom(0x32);         //將8位總線轉(zhuǎn)為4位總線
  281.         LcdWriteCom(0x28);         //在四位線下的初始化
  282.         LcdWriteCom(0x0c);  //開顯示不顯示光標(biāo)
  283.         LcdWriteCom(0x06);  //寫一個指針加1
  284.         LcdWriteCom(0x01);  //清屏
  285.         LcdWriteCom(0x80);  //設(shè)置數(shù)據(jù)指針起點
  286. }
  287. #endif

  288. #endif
  289. #ifndef __LCD_H_
  290. #define __LCD_H_
  291. /**********************************
  292. 當(dāng)使用的是4位數(shù)據(jù)傳輸?shù)臅r候定義,
  293. 使用8位取消這個定義
  294. **********************************/
  295. //#define LCD1602_4PINS

  296. /**********************************
  297. 包含頭文件
  298. **********************************/
  299. #include<reg51.h>

  300. //---重定義關(guān)鍵詞---//
  301. #ifndef uchar
  302. #define uchar unsigned char
  303. #endif

  304. #ifndef uint
  305. #define uint unsigned int
  306. #endif

  307. /**********************************
  308. PIN口定義
  309. **********************************/
  310. #define LCD1602_DATAPINS P0
  311. sbit LCD1602_E=P2^7;
  312. sbit LCD1602_RW=P2^5;
  313. sbit LCD1602_RS=P2^6;

  314. /**********************************
  315. 函數(shù)聲明
  316. **********************************/
  317. /*在51單片機(jī)12MHZ時鐘下的延時函數(shù)*/
  318. void Lcd1602_Delay1ms(uint c);   //誤差 0us
  319. /*LCD1602寫入8位命令子函數(shù)*/
  320. void LcdWriteCom(uchar com);
  321. /*LCD1602寫入8位數(shù)據(jù)子函數(shù)*/        
  322. void LcdWriteData(uchar dat)        ;
  323. /*LCD1602初始化子程序*/               
  324. void LcdInit();                                                  

  325. #endif
復(fù)制代碼



求各位大神幫幫我,這到底是怎么回事

proteus仿真

proteus仿真
51hei圖片20200311093202.jpg
回復(fù)

使用道具 舉報

ID:96682 發(fā)表于 2020-3-11 13:31 來自手機(jī) | 顯示全部樓層
看圖片樓主的開發(fā)板模塊端口未正確設(shè)置。
回復(fù)

使用道具 舉報

ID:637063 發(fā)表于 2020-3-11 17:14 | 顯示全部樓層
wc86110 發(fā)表于 2020-3-11 13:31
看圖片樓主的開發(fā)板模塊端口未正確設(shè)置。

什么意思,請大神說細(xì)一些
回復(fù)

使用道具 舉報

ID:639372 發(fā)表于 2020-3-11 19:07 | 顯示全部樓層
給你思路,具體怎么辦你自己試一試,排查一下:
1.硬件問題。建議你找官方例程試一下,如果還是0就是你的模塊有問題。
2.接錯線了。別說不可能,我一個接線問題(vcc沒連)搞了我兩天才發(fā)現(xiàn),還燒了個板子。
3.程序問題。如果官方例程可以就是你的程序?qū)戝e了。
大概問題就這三種,希望能幫到你!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av黄色在线观看 | 国产在线一区二区 | 一二三区av | 国产激情免费视频 | 美国黄色毛片 | 欧美成人一级 | 午夜寂寞影院在线观看 | 欧美一级片 | 日韩a视频| 91欧美激情一区二区三区成人 | 久久久久久久一区二区 | 欧美国产日韩在线 | 国产精品小视频在线观看 | 精品在线 | 91精品国产一区二区在线观看 | 国产精品国产精品国产专区不卡 | 亚洲综合天堂 | 麻豆成人在线视频 | 玖玖综合在线 | 日韩在线精品强乱中文字幕 | 亚洲国产成人精品一区二区 | 欧美电影大全 | 成人片免费看 | 国产精品午夜电影 | 久久99视频| 久草视频在线播放 | 亚洲色图在线观看 | 国产91亚洲精品 | 91精品在线播放 | 日韩免| 亚洲精品久久嫩草网站秘色 | 国产成人精品免费视频大全最热 | 99成人在线视频 | 超碰在线97国产 | 日韩欧美国产一区二区三区 | 欧美一级在线 | 亚洲自拍偷拍欧美 | 一区二区三区电影网 | 二区不卡 | 国产精品视频偷伦精品视频 | 日韩二三区 |