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

標題: 我設計一個溫室檢測,但是單片機程序無法讓蜂鳴器報警和控制繼電器,求大佬指點 [打印本頁]

作者: 皮皮蝦不p    時間: 2019-4-21 12:52
標題: 我設計一個溫室檢測,但是單片機程序無法讓蜂鳴器報警和控制繼電器,求大佬指點
TH 和RH是300ms檢測一次得到的數據,Data1和2是自己通過按鍵可以調整的閥值,這兩個數據都能在lcd1602上正確顯示,但是就是那個報警函數warn(),燒寫后跟不不按照預定想法來實行。怎么樣都不會報警,我把控制蜂鳴器的管腳連接led也沒用。不知道是不是我程序寫的有問題,希望大佬們幫我看一下。

單片機源程序如下:
  1. #include"reg52.h"
  2. #include"dht11.h"
  3. #include "lcd1602.h"
  4. #include"keypros.h"
  5. #include"i2c.h"

  6. sbit beep=P1^4;
  7. sbit switch1=P1^5;
  8. sbit switch2=P1^6;
  9. extern uint RH,TH;
  10. extern uint rec_dat1[2]; //用于顯示的接收數據數組
  11. extern uint rec_dat2[2];
  12. extern uint Data1,Data2;
  13. extern uchar menu,flat;
  14. uchar DHT11;
  15. uchar i;
  16. uchar menu1_1[]={"Temp:   C   T:"},menu1_2[]={"Humi:  %RH  H:"},menu2[]={"Temp"},menu3[]={"Humi"};
  17. void time_init()   
  18. {
  19. EA   = 1;     //開總中斷
  20. TMOD = 0X01;   //定時器0、定時器1工作方式1
  21. ET0  = 1;    //開定時器0中斷
  22. TR0  = 1;    //允許定時器0定時
  23. }

  24. void warn()  //報警函數
  25. {

  26.   if(Data1<=TH)  //檢測的溫度高于設定溫度報警值
  27.                               
  28.      {
  29.       beep=1;    //報警
  30.    switch1=1;
  31.      }      
  32.    
  33. if(Data2<=RH)  //檢測的濕度高于設定的濕度值
  34.                               
  35.      {
  36.       beep=1;
  37.       switch2=1;    //報警
  38.      }      
  39.    
  40. if( Data1<=TH && Data2<=RH )  
  41.     {
  42.     beep=0; //停止報警
  43.    switch1=0;
  44.    switch2=0;
  45.   }
  46.    
  47.    
  48.   
  49. }




  50. void main()
  51. {   
  52.    
  53.     Data1=At24c02Read(1);
  54.    delay(10);
  55.    Data2=At24c02Read(2);
  56.   time_init();   
  57.    while(1)
  58.   {
  59.    Key();     //通過按鍵1來選擇模式 模式1顯示數據 模式二 調整溫度閥值 模式三調整濕度閥值
  60.    if(menu==0)
  61.    {
  62.     if(flat==1)
  63.     {
  64.      flat=0;
  65.      LcdWriteCom(0x38);  //開顯示
  66.          LcdWriteCom(0x0c);  //開顯示不顯示光標
  67.          LcdWriteCom(0x06);  //寫一個指針加1
  68.          LcdWriteCom(0x01);
  69.      
  70.      LcdWriteCom(0x80);
  71.      for(i=0;i<14;i++)
  72.      LcdWriteData(menu1_1[i]);
  73.      LcdWriteCom(0x87);
  74.      LcdWriteData(0xdf);
  75.    
  76.      LcdWriteCom(0x40+0x80);
  77.       for(i=0;i<14;i++)
  78.      LcdWriteData(menu1_2[i]);
  79.          
  80.      LcdWriteCom(0x0e+0x80);
  81.      LcdWriteData((Data1/10)+0x30);
  82.      
  83.      LcdWriteCom(0x0f+0x80);
  84.      LcdWriteData((Data1%10)+0x30);
  85.      
  86.      LcdWriteCom(0x4e+0x80);
  87.      LcdWriteData((Data2/10)+0x30);
  88.      
  89.      LcdWriteCom(0x4f+0x80);
  90.      LcdWriteData((Data2%10)+0x30);
  91.          
  92.     }
  93.     if(DHT11==1)
  94.     {
  95.      DHT11=0;
  96.      DHT11_receive();
  97.      warn();
  98.      LcdWriteCom(0x85);
  99.      LcdWriteData(rec_dat2[0]);
  100.      LcdWriteCom(0x86);
  101.      LcdWriteData(rec_dat2[1]);
  102.      LcdWriteCom(0x45+0x80);
  103.      LcdWriteData(rec_dat1[0]);
  104.      LcdWriteCom(0x46+0x80);
  105.      LcdWriteData(rec_dat1[1]);
  106.         
  107.      
  108.     }
  109.    }
  110.    
  111.    
  112.    
  113.    if(menu==1)
  114.    {
  115.     if(flat==1)
  116.     {
  117.      flat=0;
  118.      LcdInit1();  //初始化 函數
  119.      
  120.      LcdWriteCom(0x86);
  121.       for(i=0;i<4;i++)
  122.      LcdWriteData(menu2[i]);
  123.     }
  124.     shezhi();                              //此函數是通過按鍵增加溫度閥值
  125.     LcdWriteCom(0x47+0x80);
  126.     LcdWriteData((Data1/10)+0x30);
  127.      
  128.     LcdWriteCom(0x48+0x80);
  129.     LcdWriteData((Data1%10)+0x30);
  130.    }
  131.    
  132.    
  133.    if(menu==2)
  134.    {
  135.     if(flat==1)
  136.     {
  137.      flat=0;
  138.      LcdInit1();
  139.      
  140.      LcdWriteCom(0x86);
  141.       for(i=0;i<4;i++)
  142.      LcdWriteData(menu3[i]);
  143.   
  144.     }
  145.     shezhi();   ////此函數是通過按鍵增加濕度閥值
  146.     LcdWriteCom(0x47+0x80);
  147.     LcdWriteData((Data2/10)+0x30);
  148.      
  149.     LcdWriteCom(0x48+0x80);
  150.     LcdWriteData((Data2%10)+0x30);
  151.    }   
  152.   }   
  153. }
  154. void time0_int() interrupt 1
  155. {
  156. static uchar i;
  157. TH0 = 0x3c;
  158. TL0 = 0xb0;  // 50ms
  159. i++;  
  160. if(i==6)
  161. {
  162.   i = 0;
  163.   DHT11=1;    //300ms
  164. }
  165. }
復制代碼

作者: SURUBU1976    時間: 2019-4-23 20:23
蜂鳴器選型選對了沒?
作者: wushiye54    時間: 2019-4-24 20:01
void warn()  //報警函數
{

  if(Data1<=TH)  //檢測的溫度高于設定溫度報警值
                              
     {
      beep=1;    //報警
   switch1=1;
     }      
   
if(Data2<=RH)  //檢測的濕度高于設定的濕度值
                              
     {
      beep=1;
      switch2=1;    //報警
     }      
   
if( Data1<=TH && Data2<=RH )  
    {
    beep=0; //停止報警
   switch1=0;
   switch2=0;
  }
   
   
  
}
你判斷邏輯都有問題
作者: Wuhen_123456789    時間: 2019-4-24 23:25
前面兩個IF語句應該是大于等于,你的邏輯有點小問題




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