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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3924|回復: 1
收起左側

單片機火災報警源程序與Proteus仿真圖 ADC0832+電位器模擬煙霧溫度控制電機

  [復制鏈接]
ID:814966 發表于 2022-1-18 10:34 | 顯示全部樓層 |閱讀模式
此次設計是火災報警系統,主要功能是實現當出現火災的時候,通過煙霧報警器和溫度報警器進行報警,并帶動電機運轉進行排煙或者灑水。本單片機系統采用AT89C51單片機控制,整個硬件系統由A/D轉換、LCD顯示、按鍵鍵盤、溫度傳感器、煙霧傳感器、LED燈、電機、繼電器等模塊組成。系統中設置了4個按鍵,其中1個是復位鍵,其余的3個鍵,其中一個是設置鍵,另外兩個是加減鍵,用來設置溫度、煙霧閾值,用程序來控制實現不同的功能:
(1)LCD液晶顯示屏實時顯示當前的煙霧值和溫度值;
(2)溫度和煙霧的報警值可以通過按鍵設定
(3)當前溫度值超過上限時,藍燈亮,蜂鳴器響;
(4)當前煙霧值超過上線時,黃燈亮,蜂鳴器響,電機運轉;
(5)四個按鍵功能:設置鍵、加鍵、減鍵、復位按鍵;
(6)通過繼電器驅動模塊,當煙霧或可燃氣體濃度超過報警值時啟動繼電器,繼電器帶動風扇轉動模擬排煙。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif Snipaste_2022-01-18_10-38-09.jpg

單片機源程序如下:
  1. void main (void)
  2. {
  3.         u8 key;        
  4. //  uint ppm;
  5.         uchar adc = 0;
  6.         float voltage = 0;
  7.         wendu=check_wendu();                                          //初始化時調用溫度讀取函數 防止開機85°C
  8.         Init1602();                                                                                  //調用初始化顯示函數
  9.         LCD_Write_String(0,0,"SET T:00 Y:0.00%");  //開機界面
  10.         LCD_Write_String(1,0,"NOW T:00 Y:0.00%");  
  11.         delay_ms(1000);
  12.         wendu=check_wendu();        //初始化時調用溫度讀取函數 防止開機85°C
  13.         
  14.         while (1)                                                                        //主循環
  15.         {        
  16.                 key=Key_Scan();                                                                        //按鍵掃描
  17.                 adc = Adc0832(0);                                                                //讀取adc值
  18.                 voltage = adc * 5/255;                                        //將adc值換算成電壓
  19. yanwu=(39*adc+100)/100;                          //0-255轉化為1-100的線性關系顯示,由于顯示問題,ppm100-10000除100,顯示1-100        
  20. wendu=check_wendu();                          //讀取溫度值
  21.         
  22.                
  23. //========================================================================
  24. //循環的主程序,進行數據讀取,switch循環選擇對應的模式進行按鍵設置
  25. //LED、蜂鳴器、風扇均為低電平有效
  26. //========================================================================
  27.          
  28.                 if(key==KEY_SET)
  29.                         {
  30.                                 Mode++;
  31.                         }                                
  32.                                 switch(Mode)                                //判斷模式的值
  33.                                 {
  34.                                  case 0:                                                                                                //監控模式
  35.                                         {
  36.                                                 Display_1602(yushe_wendu,yushe_yanwu,wendu,yanwu);  //顯示預設溫度,預設煙霧,溫度值,煙霧值
  37.                                                 if(yanwu>=yushe_yanwu)                                                                                                                  //煙霧值大于等于預設值時
  38.                                                         {
  39.                                                                 if(flag)
  40.                                                                          {
  41.                                                                                         Led_Blue=1;                                //煙霧指示燈滅
  42.                                                                                         Fan=1;                                                //風扇停止
  43.                                                                                         Buzzer=1;                                        //蜂鳴器不響
  44.                                                                         }
  45.                                                                 else
  46.                                                                          {
  47.                                                                                         Buzzer=0;                                                                  //蜂鳴器報警
  48.                                                                                         delay_ms(100);
  49.                                                                                         Buzzer=1;
  50.                                                                                         Led_Blue=0;                                                          //煙霧指示燈亮
  51.                                                                                         Fan=0;                                                                                //風扇運行
  52.                                                                          }
  53.                                                         }
  54.                                                 else                                                                                                  //煙霧值小于預設值時
  55.                                                         {
  56.                                                                 Led_Blue=1;                                                          //關掉報警燈
  57.                                                                 Fan=1;
  58.                                                                 Buzzer=1;
  59.                                                         }
  60.                                                 if(wendu>=(yushe_wendu*10))                  //溫度大于等于預設溫度值時(為什么是大于預設值*10:因為我們要顯示的溫度是有小數點后一位,是一個3位數,25.9°C時實際讀的數是259,所以判斷預設值時將預設值*10)
  61.                                                         {
  62.                                                                 if(flag)
  63.                                                                          {
  64.                                                                                         Led_Yellow=1;        //煙霧指示燈
  65.                                                                                         Buzzer=1;
  66.                                                                          }
  67.                                                          else
  68.                                                                          {
  69.                                                                                         Buzzer=0;                                //打開蜂鳴器報警
  70.                                                                                         delay_ms(100);
  71.                       Buzzer=1;                                                                                 
  72.                                                                                         Led_Yellow=0;                //打開溫度報警燈
  73.                                                                          }
  74.                                                         }                                                                        
  75.                                                 else                                                                                        //溫度值小于預設值時
  76.                                                                 {
  77.                                                                          Led_Yellow=1;                        //關閉報警燈
  78.                                                                          Buzzer=1;          //關閉蜂鳴器
  79.                                                                 }                                                        
  80.                                                 if((yanwu<yushe_yanwu)&&(wendu<(yushe_wendu*10)))        //當煙霧小于預設值并且溫度也小于預設值時
  81.                                                                 {
  82.                                                                          Buzzer=1;                                        //停止報警
  83.                                                                 }
  84.                                                                 break;
  85.                                                         }
  86.                         case 1:                                                                                                        //預設溫度模式
  87.                         {
  88.                                 SelectPosition(0,5) ;                                        //指定位置
  89.                                 write_com(0x0d);                                                        //陰影閃爍
  90.                                 if(key==KEY_ADD)                                                        //加鍵按下
  91.                                         {
  92.                                                 yushe_wendu++;                                            //預設溫度值(閥值)加1
  93.                                                 if(yushe_wendu>=99)                                         //當閥值加到大于等于99時
  94.                                                 yushe_wendu=99;                                                         //閥值固定為99
  95.                                                 LCD_Write_Char(0,6,yushe_wendu,2) ;//顯示預設溫度
  96.                                         }
  97.                                 if(key==KEY_MINUS)                                                 //減鍵按下
  98.                                         {
  99.                                                 if(yushe_wendu<=1)                                        //當溫度上限值減小到1時
  100.                                                 yushe_wendu=1;                          //固定為1
  101.                                                 yushe_wendu--;                                                        //預設溫度值減一,最小為0
  102.                                                 LCD_Write_Char(0,6,yushe_wendu,2) ;//顯示預設溫度
  103.                                         }
  104.                                                 break;                                                                                          //執行后跳出switch
  105.                         }
  106.                         case 2:                                                                                                        //預設煙霧模式
  107.                         {
  108.                                 SelectPosition(0,10) ;                                //指定位置        
  109.                                 write_com(0x0d);                                                        //打開顯示 無光標 光標閃爍
  110.                                 if(key==KEY_ADD)                                                        //加鍵按下
  111.                                         {
  112.                                                 if(yushe_yanwu>=100)        //當閥值加到大于等于99時
  113.                                                 yushe_yanwu=99;            //閥值固定為98
  114.                                                 yushe_yanwu++;                                            //預設煙霧值(閥值)加1,最大為99
  115.                                                 LCD_Write_Char(0,13,yushe_yanwu,2) ;//顯示預設煙霧
  116.                                         }
  117.                                 if(key==KEY_MINUS)                                                //減鍵按下
  118.                                         {        
  119.                                                 if(yushe_yanwu<=1)                                        //當煙霧上限值減小到1時
  120.                                                 yushe_yanwu=1;                  //固定為1
  121.                                                 yushe_yanwu--;                                                        //預設溫度值減一,最小為0         
  122.                                                 LCD_Write_Char(0,13,yushe_yanwu,2) ;//顯示預設煙霧
  123.                                         }
  124.                                                 break;
  125.                         }
  126.                                 default        :        
  127.                                         {
  128.                                                 write_com(0x38);                                                //屏幕初始化
  129.                                                 write_com(0x0c);                                                //打開顯示 無光標 無光標閃爍
  130.                                                 Mode=0;                                                                            //恢復正常模式
  131.                                                 break;
  132.                                         }        
  133.                         }                        
  134.         }                                                         
  135. }        
復制代碼

Keil代碼與Proteus仿真下載:
火災報警仿真代碼.7z (99.27 KB, 下載次數: 218)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:964009 發表于 2022-4-7 11:16 | 顯示全部樓層
下載的仿真原理圖是.pdsprj格式的文件,需要用Proteus8.8這個版本來打開
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表