欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

      標題: C51單片機溫濕度顯示(DHT11)仿真程序 [打印本頁]

      作者: keill5zuo    時間: 2025-3-31 10:08
      標題: C51單片機溫濕度顯示(DHT11)仿真程序
      仿真+代碼


      單片機源程序如下:
      1. #include "DHT11.h"
      2. #include "LCD1602.h"
      3. //燈、蜂鳴器、按鍵引腳定義
      4. sbit led1    = P1^1;  //正常指示燈
      5. sbit led2    = P1^2;  //超限指示燈
      6. sbit buzz    = P2^1;  //蜂鳴器
      7. sbit key_set = P3^2;  //設置鍵
      8. sbit key_jia = P3^3;  //加鍵
      9. sbit key_jian= P3^4;  //減鍵

      10. //變量定義
      11. uchar temp_up=35,temp_down=10;//存儲溫度上、下限值
      12. uchar humi_up=80,humi_down=40;//存儲濕度上、下限值
      13. uchar set_f;                           //設置選擇標記,=0非設置,=1設置濕度上限,=2設置濕度下限
      14.                                                   //     =3設置溫度上限,=4設置溫度下限,=5設置照度上限,=6設置照度下限
      15. uchar Flash;        //閃爍信號
      16. uchar  U8FLAG;
      17. uchar  Temp_H,Temp_L,Humi_H,Humi_L,Check_data;//溫度整數位,小數位;濕度整數位
      18. //顯示固定內容
      19. void fix_display()  
      20. {
      21.         LCD_ShowString(1,1,"Humidity: ");//humidity
      22.         LCD_ShowString(2,1,"Temperature: ");//temperature
      23.         LCD_ShowString(1,13,"%");
      24.         LCD_ShowString(2,16,"C");
      25. }

      26. //顯示當前測出的內容
      27. void now_display()  
      28. {
      29.         if(temp_up<Temp_H||temp_down>Temp_H||humi_up<Humi_H||humi_down>Humi_H)//當溫濕度超過界限時
      30.         {
      31.                 //蜂鳴器響,超限指示燈亮
      32.                 buzz=0;
      33.                 led1=1;
      34.                 led2=0;
      35.         }
      36.         else  //蜂鳴器不響,正常指示燈亮
      37.         {
      38.                 buzz=1;
      39.                 led1=0;
      40.                 led2=1;
      41.         }
      42.         //顯示實測的照度與溫濕度
      43.         LCD_ShowNum(1,11,Humi_H,2);  
      44.         LCD_ShowNum(2,14,Temp_H,2);
      45.        
      46. }



      47. //顯示設置時的內容
      48. void set_display()
      49. {
      50.                 LCD_ShowString(1,1,"Humi:Up");  
      51.                 LCD_ShowString(2,1,"Temp:Up");
      52.                 LCD_ShowString(1,10,"Down");
      53.                 LCD_ShowString(2,10,"Down");
      54.                 //利用定時器設置Flash閃爍值以達到閃爍效果
      55.                 if(Flash==1&&set_f==1){LCD_ShowString(1,8,"  ");}  //當Flash等于1則清零,等于0則顯示
      56.                 else{LCD_ShowNum(1,8,humi_up,2);}                  //當set_f標記鍵分別等于1,2,3,4時,設置不同位置
      57.                 if(Flash==1&&set_f==2){LCD_ShowString(1,14,"  ");}
      58.                 else{LCD_ShowNum(1,14,humi_down,2);}
      59.                 if(Flash==1&&set_f==3){LCD_ShowString(2,8,"  ");}
      60.                 else{LCD_ShowNum(2,8,temp_up,2);}
      61.                 if(Flash==1&&set_f==4){LCD_ShowString(2,14,"  ");}
      62.                 else{LCD_ShowNum(2,14,temp_down,2);}
      63. }

      64. //按鍵掃描
      65. void scan()  
      66. {
      67.         if(key_set==0)  //當設置鍵摁下時
      68.         {
      69.                 Delay_ms(7);
      70.          if(key_set==0)
      71.          {
      72.                 buzz=1;  //蜂鳴器關閉,所有LED熄滅
      73.                 led1=1;
      74.                 led2=1;
      75.                
      76.                 if(set_f==0) //進入設置模式
      77.                 {
      78.                         LCD_WriteCommand(0x01);  //清屏
      79.                         Delay_ms(10);
      80.                 }
      81.                 set_f++;     //每摁一次key_f設置鍵,set_f標記鍵便加1
      82.                 if(set_f==5) //當循環6次,即摁下key_set設置鍵6次時,把set_f標記鍵置0
      83.                 {
      84.                         set_f=0;
      85.                         LCD_WriteCommand(0x01);  //清屏
      86.                         Delay_ms(10);
      87.                         fix_display();  //顯示固定內容
      88.                 }
      89.          }
      90.                   while(!key_set);  //當摁下key_sey設置鍵松手時,完成一次操作
      91.         }

      92.        
      93.         if(key_jia==0&&set_f!=0)  //加法鍵
      94.         {
      95.                 Delay_ms(7);
      96.                 if(set_f==1){humi_up++;}
      97.                 if(set_f==2){humi_down++;}
      98.                 if(set_f==3){temp_up++;}
      99.                 if(set_f==4){temp_down++;}
      100.         }
      101.        
      102.         if(key_jian==0&&set_f!=0) //減法鍵
      103.         {
      104.                 Delay_ms(7);
      105.                 if(set_f==1){humi_up--;}
      106.                 if(set_f==2){humi_down--;}
      107.                 if(set_f==3){temp_up--;}
      108.                 if(set_f==4){temp_down--;}
      109.         }
      110. }
      111.        

      112. void main()
      113. {
      114.         TMOD &= 0x00;                //設置定時器模式
      115.         TMOD |= 0x10;                //設置定時器模式
      116.         TL1 = 0x18;                //設置定時初值
      117.         TH1 = 0xFC;                //設置定時初值
      118.         TF1 = 0;                //清除TF0標志
      119.         TR1 = 1;                //定時器0開始計時
      120.         ET1=1;
      121.         EA=1;
      122.         led1=1;
      123.         led2=1;
      124.         LCD_Init();    //LCD初始化
      125.         fix_display(); //顯示固定內容
      126.         Delay_ms(100);
      127.         while(1)
      128.         {
      129.                 scan();  //按鍵掃描
      130.                 if(set_f==0) //表示并未進入設置操作
      131.                 {
      132.                         EA=0;          //關閉中斷
      133.                         DHT11_read();          //DHT11讀取溫濕度值
      134.                         now_display();         //顯示實測內容
      135.                         EA=1;  //打開中斷
      136.                 }
      137.                 else
      138.                         set_display();   //顯示設置內容
      139.         }
      140. }

      141. void Timer1_Rountine() interrupt 3  //中斷程序
      142. {
      143.         static unsigned int T1Count;
      144.         TL1 = 0x18;  //設置初值
      145.         TH1 = 0xFC;
      146.         T1Count++;
      147.         if(T1Count>=500)  //每隔500ms,即0.5秒
      148.         {
      149.                 T1Count=0;
      150.                 Flash=!Flash;   //Flash翻轉
      151.         }
      152. }
      復制代碼
      下載: C51_溫濕度顯示(DHT11).7z (181.58 KB, 下載次數: 0)





      歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1