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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+DHT11怎么在數(shù)碼管上顯示溫濕度上下限閾值,并通過按鍵調(diào)節(jié)?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:761818 發(fā)表于 2020-6-3 22:11 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
要用DHT11在數(shù)碼管上顯示當(dāng)前溫濕度,并且可以通過按鍵設(shè)置閾值,同時能用串口通信發(fā)送相關(guān)數(shù)據(jù)到串口仿真終端。
現(xiàn)已經(jīng)能實現(xiàn)顯示當(dāng)前溫濕度,并可以靠按住按鍵1、2顯示濕度或溫度的上下限,串口內(nèi)容能夠勉強過關(guān)。
但是通過按鍵調(diào)節(jié)閾值卻始終實現(xiàn)不了,同時我發(fā)現(xiàn)我的按鍵掃描函數(shù)是有bug的,按鍵一按下并彈起,實際上等同于我期望達到的按鍵二按下的效果。該BUG我理解發(fā)生原因,但是不知道怎么比較好的解決。
(因不明原因,PROTEUS文件在上傳前一會崩潰,一旦開始仿真就會閃退)
核心問題:DHT11怎么在數(shù)碼管上顯示溫濕度上下限閾值,并通過按鍵調(diào)節(jié)?

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include  <reg51.h>
  2. #include <absacc.h>
  3. #include <intrins.h>

  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define cmd_8155    XBYTE[0x8000]
  7. #define pb_8155            XBYTE[0x8002]
  8. #define pc_8155            XBYTE[0x8003]

  9. sbit dht=P1^0;      
  10. sbit k1=P1^1;
  11. sbit k2=P1^2;
  12. sbit k3=P1^3;
  13. sbit k4=P1^4;
  14. sbit k5=P1^5;
  15. sbit k6=P1^6;
  16. sbit rled=P3^2;
  17. sbit tled=P3^3;

  18. unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極0~9編碼
  19. unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x76,0x38};//共陰極0~9+H、L編碼
  20. unsigned char DisBuff[5]={0,0,0,0,0};
  21. unsigned char a[5]={0,0,0,0,0};
  22. uchar k;
  23. signed char  R;//濕度
  24. signed char  T;//溫度
  25. unsigned char  key_value;//按鍵值
  26. unsigned char WRH=85,WRL=35,WTH=40,WTL=15;

  27. uint flag=0,c;



  28. void delay_ms(unsigned int cnt)   //延時函數(shù)ms
  29. {
  30.         unsigned int x;
  31.         for( ; cnt>0; cnt--)
  32.         {
  33.                 for(x=110; x>0; x--);//軟件延時為1MS
  34.         }
  35. }

  36. void delay_us(unsigned int cnt)   //延時函數(shù)us
  37. {
  38.         while(cnt--);
  39. }

  40. void DHT11_delay_us(unsigned char n)//DHT延時函數(shù)us
  41. {
  42.     while(--n);
  43. }

  44. void DHT11_delay_ms(unsigned int z)//DHT延時函數(shù)ms
  45. {
  46.    unsigned int i,j;
  47.    for(i=z;i>0;i--)
  48.       for(j=110;j>0;j--);
  49. }

  50. void DHT11_start()//DHT啟動函數(shù)
  51. {
  52.    dht=1;
  53.    DHT11_delay_us(2);
  54.    dht=0;
  55.    DHT11_delay_ms(30);   //延時18ms以上
  56.    dht=1;
  57.    DHT11_delay_us(30);
  58. }

  59. unsigned char DHT11_rec_byte()      //接收一個字節(jié)
  60. {
  61.    unsigned char i,dat=0;
  62.   for(i=0;i<8;i++)    //從高到低依次接收8位數(shù)據(jù)
  63.    {
  64.       while(!dht);   ////等待50us低電平過去
  65.       DHT11_delay_us(8);     //延時60us,如果還為高則數(shù)據(jù)為1,否則為0
  66.       dat<<=1;           //移位使正確接收8位數(shù)據(jù),數(shù)據(jù)為0時直接移位
  67.       if(dht==1)    //數(shù)據(jù)為1時,使dat加1來接收數(shù)據(jù)1
  68.          dat+=1;
  69.       while(dht);  //等待數(shù)據(jù)線拉低
  70.     }
  71.     return dat;
  72. }

  73. void DHT11_receive()      //接收40位的數(shù)據(jù)
  74. {
  75.     unsigned char R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  76.     DHT11_start();
  77.     if(dht==0)
  78.     {
  79.         while(dht==0);   //等待拉高
  80.         DHT11_delay_us(40);  //拉高后延時80us
  81.         R_H=DHT11_rec_byte();   //接收濕度高八位
  82.         R_L=DHT11_rec_byte();   //接收濕度低八位
  83.         T_H=DHT11_rec_byte();   //接收溫度高八位
  84.         T_L=DHT11_rec_byte();   //接收溫度低八位
  85.         revise=DHT11_rec_byte();//接收校正位

  86.         DHT11_delay_us(25);    //結(jié)束

  87.         if((R_H+R_L+T_H+T_L)==revise)      //校正
  88.         {
  89.             RH=R_H;
  90.             RL=R_L;
  91.             TH=T_H;
  92.             TL=T_L;
  93.         }
  94.         R=RH;
  95.         T=TH;
  96.     }
  97. }

  98. void key(){
  99.         if(k1==0&&flag==0){
  100.                 flag=1;}
  101.         if(k1==1&&flag==1){
  102.                 c=0;
  103.                 flag=0;}
  104.         if(k2==0&&flag==0){
  105.                 flag=1;}
  106.         if(k2==1&&flag==1){
  107.                 c=1;
  108.                 flag=0;}
  109.         if(k3==0&&flag==0){
  110.                 flag=1;}
  111.         if(k3==1&&flag==1){
  112.                 c=2;
  113.                 flag=0;}}


  114. void disr()//展示濕度上下限
  115. {
  116. unsigned char i,j,rn[6]={11,0,0,10,0,0};
  117.   
  118.               rn[1]=WRH/10;
  119.                                 rn[2]=WRH%10;
  120.                                 rn[4]=WRL/10;
  121.                                 rn[5]=WRL%10;
  122.                
  123.                 SP = 0x60;
  124.         cmd_8155 = 0x0e;
  125.         pc_8155=0;

  126.                         for(k=0;k<200;k++){
  127.                         j=32;
  128.   for(i=0;i<6;i++)
  129.         {           pb_8155 = table[rn[i]];
  130.             delay_us(10);
  131.                                         pc_8155 = j;
  132.             j = j/2;
  133.         }
  134.                         delay_ms(1);}}

  135. void dist()//展示溫度上下限
  136. {
  137.                  unsigned char i,j,tn[6]={11,0,0,10,0,0};
  138.                                 tn[1]=WTH/10;
  139.                                 tn[2]=WTH%10;
  140.                                 tn[4]=WTL/10;
  141.                                 tn[5]=WTL%10;
  142.                 SP = 0x60;
  143.         cmd_8155 = 0x0e;
  144.         pc_8155=0;
  145.         
  146.                         for(k=0;k<200;k++){
  147.                                 j=32;
  148.                                  for(i=0;i<6;i++)
  149.         {   pb_8155 = table[tn[i]];
  150.             delay_us(10);
  151.                                         pc_8155 = j;
  152.             j = j/2;
  153.         }delay_ms(1);}}

  154. void display() //展示當(dāng)前溫濕度
  155. {
  156.     unsigned char i,j,shu[6]={0,0,0,0,0,0};
  157.    
  158.   shu[0]=R/10;
  159.         shu[1]=R%10;
  160.         shu[4]=T/10;
  161.         shu[5]=T%10;

  162.                 SP = 0x60;
  163.         cmd_8155 = 0x0e;
  164.         pc_8155=0;
  165.                
  166.     for(k=0;k<200;k++)
  167.     {  
  168.                 j = 32;
  169.         for(i=0;i<6;i++)
  170.         {   
  171.             pc_8155 = 0x00;
  172.             delay_us(10);
  173.             pb_8155 = s[shu[i]];
  174.             pc_8155 = j;
  175.             j = j/2;
  176.             delay_us(10);
  177.                                 }}delay_ms(1);}



  178. void initscon(){//初始化串口
  179.         SCON=0X40;
  180.         TMOD=0X20;
  181.         PCON=0X00;
  182.         TH1=0xfd;
  183.         TL1=0xfd;
  184.   ES=0;
  185.         ET1=0;
  186.         TR1=1;
  187. }

  188. void send(){//向串口發(fā)送數(shù)據(jù)
  189.         uchar i;
  190.         initscon();
  191.         for(i=0;i<4;i++){
  192.         SBUF=a[i];
  193.   while(TI==0);
  194.         TI=0;}}

  195. void main(void)//主函數(shù)
  196. { while(1){
  197.         DHT11_receive();//讀取溫濕度
  198.         a[0]=R/10;
  199.         a[1]=R%10;
  200.         a[2]=T/10;
  201.         a[3]=T%10;
  202.     send();
  203. key();
  204.         switch(c){
  205.                         case 0:display();break;
  206.                         case 1:disr();break;
  207.                         case 2:dist();break;}
  208.         
  209.          if(R>WRH||R<WRL){
  210.                 rled=0;}else{
  211.                         rled=1;}
  212.          if(T>WTH||T<WTL){
  213.                  tled=0;}else{
  214.                          tled=1;}

  215.                  }}
復(fù)制代碼

全部資料51hei下載地址:
DHT11.rar (36.9 KB, 下載次數(shù): 39)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:92810 發(fā)表于 2020-6-28 11:39 | 只看該作者
你給的壓縮包里面是可以的嗎??
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成av人在线视午夜片 | 久久r久久 | 天天天天天操 | 国产成人免费在线 | 久久天天 | 99精品一区 | 在线免费观看黄色 | 国产欧美日韩一区二区三区在线观看 | 一区二区不卡视频 | 日日夜夜精品免费视频 | 伊人色综合久久久天天蜜桃 | 国产精品久久久久久久久久久新郎 | 一级中国毛片 | 国产精品一区二区在线播放 | 久久成人精品视频 | 三级成人在线 | 成人av电影天堂 | 免费观看一区二区三区毛片 | 一级毛片在线播放 | 91在线视频免费观看 | 在线视频 欧美日韩 | 久久成人免费 | www.日韩 | 日本久草 | 99精品视频在线 | 午夜精品一区二区三区在线视 | 久久精品国产一区老色匹 | 男女视频在线观看 | 拍真实国产伦偷精品 | 美女天堂 | 五月免费视频 | 欧美性久久 | 国产视频第一页 | 丝袜 亚洲 另类 欧美 综合 | 亚洲精品一区二区在线观看 | 日日碰狠狠躁久久躁婷婷 | 亚洲 精品 综合 精品 自拍 | 久久久久久久久久久久久9999 | 成人久久久久久久久 | 午夜影晥 | 免费a网|