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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于單片機dht11傳感器lcd1602只亮屏不顯示數據的問題 求幫助

[復制鏈接]
跳轉到指定樓層
樓主
ID:855437 發表于 2020-12-8 18:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
做的是1602和dht11結合的溫濕度傳感器,但是為什么1602上不顯示數據,只是亮起


單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<stdio.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. sbit rs=P2^0;  //lcd數據/指令選擇控制線
  7. sbit rw=P2^1;  //lcd讀寫控制線
  8. sbit e=P2^2;   //lcd使能控制線
  9. sbit temp_data=P2^3;//dht11數據線
  10. sbit lcd_data=P1;
  11. uchar table[8];
  12. void delayxms(uchar xms)
  13. {
  14.          uchar i,j;
  15.         for(i=xms;i>0;i--)
  16.                 for(j=110;j>0;j--);
  17. }
  18. void delayxus(uchar xus)
  19. {
  20.            while(--xus);
  21. }
  22. void lcdms(uint ms)
  23. {
  24.          uchar a,b;
  25.         for(;ms>0;ms--)
  26.                 for(b=38;b>0;b--)
  27.                         for(a=130;a>0;a--);
  28. }
  29. void lcd_busy()//判斷lcd是否處于忙的狀態
  30. {
  31.          uchar temp;
  32.         lcd_data=0xff;
  33.         rs=0;
  34.         rw=1;
  35.         do
  36.         {
  37.                  e=1;
  38.                 temp=lcd_data;
  39.                 e=0;
  40.         }while(temp&0x80);
  41.         
  42. }
  43. void w_com(uchar com)
  44. {
  45.         lcd_busy();
  46.          rs=0;//命令端
  47.         rw=0;//寫
  48.         lcd_data=com;
  49.         lcdms(1);
  50.         e=1;//使能開關
  51.         lcdms(1);
  52.         e=0;
  53. }
  54. void w_data(uchar dat)
  55. {
  56.         lcd_busy();
  57.          rs=1;
  58.         rw=0;
  59.         lcd_data=dat;
  60.         lcdms(1);
  61.         e=1;
  62.         lcdms(1);
  63.         e=0;
  64. }
  65. void lcd_init()        //lcd初始化
  66. {
  67.          w_com(0x38);
  68.         w_com(0x0C);
  69.         w_com(0x06);
  70.         w_com(0x01);
  71.         w_com(0x80);
  72. }
  73. void DHT_start() //dht啟動程序
  74. {
  75.          temp_data=1;
  76.         delayxus(2);
  77.         temp_data=0;
  78.         delayxms(20);
  79.         temp_data=1;
  80.         delayxus(13);
  81. }
  82. uchar rec_byte() //dht11接收一個字節數據
  83. {
  84.          uchar i,dat=0;
  85.         for(i=0;i<8;i++)
  86.         {
  87.                  while(!temp_data);
  88.                 delayxus(8);
  89.                 dat<<=1;
  90.                 if(temp_data==1)
  91.                 {
  92.                          dat+=1;
  93.                 }
  94.                 while(temp_data);
  95.         }
  96.         return dat;
  97. }
  98. void DH_receive() //接收溫濕度數據
  99. {
  100.          uchar R_S,R_G,T_S,T_G;
  101.         uchar RS,RG,TS,TG,revise;
  102.         DHT_start();
  103.         if(temp_data==0)
  104.         {
  105.                  while(temp_data==0);
  106.                 while(temp_data);
  107.                 R_S=rec_byte();
  108.                 R_G=rec_byte();
  109.                 T_S=rec_byte();
  110.                 T_G=rec_byte();
  111.                 revise=rec_byte();//校驗位
  112.                 delayxus(25);
  113.                 if((R_S+R_G+T_S+T_G)==revise)
  114.                 {
  115.                          RS=R_S;
  116.                         RG=R_G;
  117.                         TS=T_S;
  118.                         TG=T_G;

  119.                 }
  120.                 table[0]='S';
  121.                 table[1]='0'+RS/10;
  122.                 table[2]='0'+RS%10;
  123.                 table[3]=' ';
  124.                 table[4]=' ';
  125.                 table[5]='w';
  126.                 table[6]='0'+TS/10;
  127.                 table[7]='0'+TS%10;

  128.         }
  129. }
  130. void lcdCursor(uchar x,uchar y,uchar *s)
  131. {
  132.          if(y==0)
  133.         {
  134.                  w_com(0x80+x);
  135.         }
  136.         else
  137.         {
  138.                  w_com(0xC0+x);
  139.         }
  140.         while(*s)
  141.         {
  142.                  w_data(*s);
  143.                 s++;
  144.         }
  145. }
  146. void lcdshow(uchar x,uchar y,uchar date)
  147. {
  148.          if(y==0)
  149.         {
  150.                  w_com(0x80+x);
  151.         }
  152.         else
  153.         {
  154.                  w_com(0xC0+x);
  155.         }
  156.         w_data(date);
  157. }
  158. void main()
  159. {
  160.         uint i;
  161.         lcd_init();
  162.         
  163.         while(1)
  164.         {
  165.                  delayxus(1000);
  166.                 DH_receive();
  167.                 for(i=0;i<8;i++)
  168.                 {
  169.                          lcdshow(i,0,table[i]);
  170.                 }
  171.         }
  172. }
復制代碼

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

使用道具 舉報

沙發
ID:517466 發表于 2020-12-8 19:36 | 只看該作者
調試程序, 你可以分塊處理實驗。先調通LCD1602的顯示模塊是否正常。正常后,再試著調試DHT11模塊。
這樣可以快速知道問題出在哪里。從你的代碼來看,在主函數的循環中,僅僅有個1000微秒的延時。但是,我看到DHT11的資料,要求DHT11的采樣時間間隔必須是2秒以上。
你的程序讀取周期明顯太小,前面的數據還沒有讀出來呢,后續又開始讀,你覺得能得到結果嗎?

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:517466 發表于 2020-12-8 20:07 | 只看該作者
這里有一個可以參考的例子,是別的網友提供的,我沒試過是否可行,但是建議你看看。
http://www.zg4o1577.cn/bbs/dpj-189858-1.html
回復

使用道具 舉報

地板
ID:637591 發表于 2020-12-8 21:34 | 只看該作者
并一個排阻上去
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品视频在线观看一区二区三区 | 99爱视频 | 国产精品黄色 | 亚洲一区在线播放 | 91不卡 | 国产免费黄网 | 成人黄色三级毛片 | 午夜精品一区二区三区在线观看 | 欧美在线a | 亚洲国产中文字幕 | 欧美日韩久久久 | 在线91 | 久草在线| 国产日韩欧美91 | 久久久久久久电影 | 国产区一区二区三区 | 日韩一区不卡 | 97精品超碰一区二区三区 | 日本h片在线观看 | 找个黄色片| 久久久久99 | 亚洲午夜精品久久久久久app | 欧美1区2区 | 在线 丝袜 欧美 日韩 制服 | 欧美在线视频网 | 久一久| 久久成人免费 | 天天看天天摸天天操 | 欧美激情在线精品一区二区三区 | 欧美精品网站 | 精品国产欧美一区二区 | 中文字幕亚洲精品 | 日韩欧美在线视频 | 祝你幸福电影在线观看 | 黄视频国产 | 欧美一级电影免费 | 国产精品毛片av | 日韩欧美高清 | 欧美一区二区三区在线视频 | 亚洲国产日韩一区 | 国产伦精品一区二区三区在线 |