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

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

QQ登錄

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

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

單片機(jī)DHT11在LCD1602顯示 濕度和溫度都是00

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
剛學(xué)C51單片機(jī),想學(xué)學(xué)DHT11在LCD顯示,遇到了濕度和溫度都是00的問(wèn)題,請(qǐng)教一下各位大神這是什么問(wèn)題導(dǎo)致的~

代碼是
  1. #include "reg52.h"
  2. #include "intrins.h"
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit Dat=P2^0;
  6. sbit RS=P2^6;
  7. sbit RW=P2^5;
  8. sbit EN=P2^7;
  9. sbit CE=P3^5;
  10. sbit DSIO=P3^4;
  11. sbit SCL=P3^6;
  12. uchar code talble[]="0123456789";
  13. uchar  read[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};                //??????????????????????????
  14. uchar  time[]={0x21,0x53,0x15,0x18,0x09,0x05,0x20};                //??????????????????????BCD?
  15. uchar num0=0,num1=0,num2=0;
  16. void delayms(uint z)        //12MHz?,z=1??1ms
  17. {
  18.         uint x,y;
  19.         for(x=z;x>0;x--)
  20.                 for(y=122;y>0;y--);
  21. }
  22. void delayus(uchar z)                //12MHz?,z=1??17us
  23. {
  24.         while(z--);
  25. }
  26. /************************************??*************************************/
  27. //??
  28. /******************************DHT11??????********************************/
  29. uchar Read_Byte()
  30. {
  31.         uchar m,n,sum;
  32.         for(m=0;m<8;m++)
  33.         {
  34.                 while(!Dat);        //??????????50us????,??50us??
  35.                 delayus(3);                //??50us?????
  36.                 sum<<=1;                //????,?????????0??1???,??????
  37.                 n=Dat;                //???
  38.                 if(n==1)
  39.                 {
  40.                         sum=sum|0x01;
  41.                         while(!Dat);        //???????
  42.                 }
  43.                 else
  44.                 {
  45.                         sum=sum|0x00;
  46.                 }
  47.                 delayus(3);
  48.         }
  49.         return (sum);
  50. }
  51. void dht11()
  52. {
  53.         uchar m0,m1,m2,m3,m4;
  54.         Dat=1;
  55.         delayms(2);
  56.         Dat=0;                                //?????
  57.         delayms(30);                //????18ms
  58.         Dat=1;                        //????,????DHT11????
  59.         delayus(30);                //?????????,??20~40u?,??DHT11????
  60.         if(Dat==0)                //??DHT11???????,?DHT11??????,????????80us,?????80us??????
  61.         {
  62.                 while(!Dat);                //???????,????????
  63.                 while(Dat);                        //???????,???????80us,??????,???????
  64.                 m0=Read_Byte();                //????????
  65.                 m1=Read_Byte();                //????????
  66.                 m2=Read_Byte();                //????????
  67.                 m3=Read_Byte();                //????????
  68.                 m4=Read_Byte();                //?????
  69.         }
  70.         if(m4==(m0+m1+m2+m3))                //????,????????,??????????
  71.         {
  72.                 num0=m0;
  73.                 num1=m2;
  74.         }
  75.         else
  76.         {
  77.                 num0=num0;
  78.                 num1=num1;
  79.         }
  80. }
  81. /************************************DS1302*************************************/
  82. void Ds1302_Write_Byte(uchar addr,uchar dat)                        //?????????????
  83. {
  84.         uchar i;
  85.         CE=0;                                        //CE????,??????
  86.         SCL=0;                                //??????
  87.         CE=1;                                        //CE??,??????
  88.         for(i=0;i<8;i++)        //????,??8???
  89.         {
  90.                 DSIO=addr&0x01;        //????????
  91.                 addr>>=1;                                        //?????1?
  92.                 SCL=1;                //????????DS1302
  93.                 _nop_();
  94.                 SCL=0;
  95.                 _nop_();
  96.         }
  97.         for(i=0;i<8;i++)        //?????
  98.         {
  99.                 DSIO=dat&0x01;
  100.                 dat>>=1;
  101.                 SCL=1;
  102.                 _nop_();
  103.                 SCL=0;
  104.                 _nop_();
  105.         }
  106.         CE=0;
  107. }
  108. uchar Ds1302_Read_Byte(uchar addr)                        //?????????
  109. {
  110.         uchar i,dat0,dat1;
  111.         CE=0;                                        //CE????,???
  112.         SCL=0;                                //SCL????,???
  113.         CE=1;                                        //??DS1302??,CE??
  114.         for(i=0;i<8;i++)
  115.         {
  116.                 DSIO=addr&0x01;                //?????,??addr????,?????DSIO
  117.                 addr>>=1;                                //???????,????,???0
  118.                 SCL=1;                                        //??SCL????,????,???????,?????DS1302,??????,?????
  119.                 _nop_();
  120.                 SCL=0;                                        //?SCL??,??????????
  121.                 _nop_();
  122.         }
  123.         for(i=0;i<8;i++)
  124.         {
  125.                 dat0=DSIO;
  126.                 dat1=(dat1>>1)|(dat0<<7);
  127.                 SCL=1;
  128.                 _nop_();
  129.                 SCL=0;
  130.                 _nop_();
  131.         }
  132.         CE=0;
  133.         SCL=1;
  134.         DSIO=0;
  135.         DSIO=1;
  136.         return dat1;
  137. }
  138. void DS1302_Init()
  139. {
  140.         Ds1302_Write_Byte(0x8e,0x00);                //????????
  141.         Ds1302_Write_Byte(0x80,0x21);                //?????
  142.         Ds1302_Write_Byte(0x82,0x53);                //?????
  143.         Ds1302_Write_Byte(0x84,0x15);                //?????
  144.         Ds1302_Write_Byte(0x86,0x18);                //?????
  145.         Ds1302_Write_Byte(0x88,0x09);                //?????
  146.         Ds1302_Write_Byte(0x8a,0x05);                //????
  147.         Ds1302_Write_Byte(0x8c,0x20);                //????
  148.         Ds1302_Write_Byte(0x8e,0x80);                //?????        
  149. }
  150. void Read_time()
  151. {
  152.         uchar i;
  153.         for(i=0;i<7;i++)
  154.         {
  155.                 time[i]=Ds1302_Read_Byte(read[i]);
  156.         }
  157. }
  158. /************************************??*************************************/
  159. //??
  160. /**********************************1602??*************************************/
  161. bit Busy()
  162. {
  163.         bit bsy;
  164.         RS=0;
  165.         RW=1;
  166.         EN=1;
  167.         _nop_();
  168.         _nop_();
  169.         _nop_();
  170.         _nop_();
  171.         bsy=(bit)(P0&0x80);
  172.         EN=0;
  173.         return (bsy);
  174. }
  175. void Wr_com(uchar com)
  176. {
  177.         while(Busy());
  178.         RS=0;
  179.         RW=0;
  180.         P0=com;
  181.         delayus(1);
  182.         EN=1;
  183.         EN=0;
  184. }
  185. void Wr_dat(uchar dat)
  186. {
  187.         while(Busy());
  188.         RS=1;
  189.         RW=0;
  190.         P0=dat;
  191.         delayus(1);
  192.         EN=1;
  193.         EN=0;
  194. }
  195. void LCD_Init()
  196. {
  197.         Wr_com(0x38);
  198.         Wr_com(0x0C);
  199.         Wr_com(0x06);
  200.         Wr_com(0x01);
  201. }
  202. void display()
  203. {
  204.         Wr_com(0x80);
  205.         Wr_dat('2');
  206.         Wr_dat('0');
  207.         Wr_dat('0'+time[6]/16);                                //?
  208.         Wr_dat('0'+(time[6]&0x0f));
  209.         Wr_dat('-');                                                        //-
  210.         Wr_dat('0'+time[4]/16);                                //?
  211.         Wr_dat('0'+(time[4]&0x0f));        
  212.         Wr_dat(0xb0);                                                        //-
  213.         Wr_dat('0'+time[3]/16);                                //?
  214.         Wr_dat('0'+(time[3]&0x0f));

  215.         Wr_com(0x80+0x0b);
  216.         Wr_dat('0'+(time[5]&0x0f));                //??

  217.         Wr_com(0x80+0x0d);                                                        
  218.         Wr_dat(talble[num0/10]);                        //??
  219.         Wr_dat(talble[num0%10]);
  220.         Wr_dat(0x25);                                                        //%

  221.         Wr_com(0xC0);
  222.         Wr_dat('0'+time[2]/16);                                //?
  223.         Wr_dat('0'+(time[2]&0x0f));        
  224.         Wr_dat(0x3a);                                                        //:
  225.         Wr_dat('0'+time[1]/16);                                //?
  226.         Wr_dat('0'+(time[1]&0x0f));
  227.         Wr_dat(0x3a);                                                        //:
  228.         Wr_dat('0'+time[0]/16);                                //?
  229.         Wr_dat('0'+(time[0]&0x0f));

  230.         Wr_com(0xC0+0x0a);
  231.         Wr_dat(talble[num1/10]);                        //??
  232.         Wr_dat(talble[num1%10]);
  233.         Wr_dat(0x2e);                                                        //.
  234.         Wr_dat(talble[0]);
  235.         Wr_dat(0xdf);                                                        //
  236.         Wr_dat(0x43);                                                        //C        
  237. }
  238. void main()
  239. {
  240.         uint a;
  241.         LCD_Init();
  242.         DS1302_Init();
  243.         while(1)
  244.         {
  245.                 a++;
  246.                 if(a==20)
  247.                 {
  248.                       a=0;
  249.                       dht11();
  250.                  }
  251.                 Read_time();
  252.                 display();
  253.         }

  254. }
復(fù)制代碼

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

使用道具 舉報(bào)

沙發(fā)
ID:1013894 發(fā)表于 2022-12-7 21:55 | 只看該作者
找了百度說(shuō)是延遲問(wèn)題,看了其他人的運(yùn)用改了也沒(méi)啥變化,加了上拉電阻也不行。請(qǐng)教一下大神這是什么問(wèn)題導(dǎo)致的~
回復(fù)

使用道具 舉報(bào)

板凳
ID:123289 發(fā)表于 2022-12-8 09:19 | 只看該作者
先學(xué)會(huì)如何走單步調(diào)試程序。
回復(fù)

使用道具 舉報(bào)

地板
ID:161164 發(fā)表于 2022-12-8 13:32 | 只看該作者
請(qǐng)善用仿真內(nèi)的工具
經(jīng)仿真,DHT11的初始化低電平18ms后的等待時(shí)間太久了接近200us,遠(yuǎn)大于手冊(cè)要求得20~40us





讀數(shù)據(jù)的邏輯也不太對(duì),應(yīng)改為






回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 羞羞视频在线观免费观看 | 欧美性生交大片免费 | 成人免费观看视频 | 97久久精品午夜一区二区 | 欧美日高清视频 | 亚洲高清视频在线观看 | 精品综合视频 | 久久久久久精 | 国产一二三区电影 | 区一区二区三在线观看 | 久久99国产精一区二区三区 | 羞羞视频网 | 日本a视频 | 午夜私人影院在线观看 | 蜜桃在线一区二区三区 | 秋霞在线一区 | 午夜精品一区 | 久久久国产精品 | 国产高清在线 | 国产成人精品网站 | 91精品国产综合久久久久 | 成人亚洲精品久久久久软件 | 久久精品国产亚洲a | 一级做a爰片性色毛片 | 久久午夜剧场 | 久草网站 | 久久精品久久久久久 | 91xxx在线观看 | 国产一区二区三区四区区 | 国产午夜精品一区二区三区嫩草 | 一区二区三区四区日韩 | 午夜日韩 | 日本久久久久久 | 一区二区精品在线 | 96国产精品久久久久aⅴ四区 | 夜久久 | 91久久国产综合久久 | 一区二区三区日 | 久久伊人精品 | 天天曰夜夜操 | 欧美一级全黄 |