此次設(shè)計是火災(zāi)報警系統(tǒng),主要功能是實(shí)現(xiàn)當(dāng)出現(xiàn)火災(zāi)的時候,通過煙霧報警器和溫度報警器進(jìn)行報警,并帶動電機(jī)運(yùn)轉(zhuǎn)進(jìn)行排煙或者灑水。本單片機(jī)系統(tǒng)采用AT89C51單片機(jī)控制,整個硬件系統(tǒng)由A/D轉(zhuǎn)換、LCD顯示、按鍵鍵盤、溫度傳感器、煙霧傳感器、LED燈、電機(jī)、繼電器等模塊組成。系統(tǒng)中設(shè)置了4個按鍵,其中1個是復(fù)位鍵,其余的3個鍵,其中一個是設(shè)置鍵,另外兩個是加減鍵,用來設(shè)置溫度、煙霧閾值,用程序來控制實(shí)現(xiàn)不同的功能: (1)LCD液晶顯示屏實(shí)時顯示當(dāng)前的煙霧值和溫度值; (2)溫度和煙霧的報警值可以通過按鍵設(shè)定 (3)當(dāng)前溫度值超過上限時,藍(lán)燈亮,蜂鳴器響; (4)當(dāng)前煙霧值超過上線時,黃燈亮,蜂鳴器響,電機(jī)運(yùn)轉(zhuǎn); (5)四個按鍵功能:設(shè)置鍵、加鍵、減鍵、復(fù)位按鍵; (6)通過繼電器驅(qū)動模塊,當(dāng)煙霧或可燃?xì)怏w濃度超過報警值時啟動繼電器,繼電器帶動風(fēng)扇轉(zhuǎn)動模擬排煙。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (209.24 KB, 下載次數(shù): 56)
下載附件
2022-1-18 16:36 上傳
Snipaste_2022-01-18_10-38-09.jpg (183.59 KB, 下載次數(shù): 58)
下載附件
2022-1-18 10:39 上傳
單片機(jī)源程序如下:
- void main (void)
- {
- u8 key;
- // uint ppm;
- uchar adc = 0;
- float voltage = 0;
- wendu=check_wendu(); //初始化時調(diào)用溫度讀取函數(shù) 防止開機(jī)85°C
- Init1602(); //調(diào)用初始化顯示函數(shù)
- LCD_Write_String(0,0,"SET T:00 Y:0.00%"); //開機(jī)界面
- LCD_Write_String(1,0,"NOW T:00 Y:0.00%");
- delay_ms(1000);
- wendu=check_wendu(); //初始化時調(diào)用溫度讀取函數(shù) 防止開機(jī)85°C
-
- while (1) //主循環(huán)
- {
- key=Key_Scan(); //按鍵掃描
- adc = Adc0832(0); //讀取adc值
- voltage = adc * 5/255; //將adc值換算成電壓
- yanwu=(39*adc+100)/100; //0-255轉(zhuǎn)化為1-100的線性關(guān)系顯示,由于顯示問題,ppm100-10000除100,顯示1-100
- wendu=check_wendu(); //讀取溫度值
-
-
- //========================================================================
- //循環(huán)的主程序,進(jìn)行數(shù)據(jù)讀取,switch循環(huán)選擇對應(yīng)的模式進(jìn)行按鍵設(shè)置
- //LED、蜂鳴器、風(fēng)扇均為低電平有效
- //========================================================================
-
- if(key==KEY_SET)
- {
- Mode++;
- }
- switch(Mode) //判斷模式的值
- {
- case 0: //監(jiān)控模式
- {
- Display_1602(yushe_wendu,yushe_yanwu,wendu,yanwu); //顯示預(yù)設(shè)溫度,預(yù)設(shè)煙霧,溫度值,煙霧值
- if(yanwu>=yushe_yanwu) //煙霧值大于等于預(yù)設(shè)值時
- {
- if(flag)
- {
- Led_Blue=1; //煙霧指示燈滅
- Fan=1; //風(fēng)扇停止
- Buzzer=1; //蜂鳴器不響
- }
- else
- {
- Buzzer=0; //蜂鳴器報警
- delay_ms(100);
- Buzzer=1;
- Led_Blue=0; //煙霧指示燈亮
- Fan=0; //風(fēng)扇運(yùn)行
- }
- }
- else //煙霧值小于預(yù)設(shè)值時
- {
- Led_Blue=1; //關(guān)掉報警燈
- Fan=1;
- Buzzer=1;
- }
- if(wendu>=(yushe_wendu*10)) //溫度大于等于預(yù)設(shè)溫度值時(為什么是大于預(yù)設(shè)值*10:因?yàn)槲覀円@示的溫度是有小數(shù)點(diǎn)后一位,是一個3位數(shù),25.9°C時實(shí)際讀的數(shù)是259,所以判斷預(yù)設(shè)值時將預(yù)設(shè)值*10)
- {
- if(flag)
- {
- Led_Yellow=1; //煙霧指示燈
- Buzzer=1;
- }
- else
- {
- Buzzer=0; //打開蜂鳴器報警
- delay_ms(100);
- Buzzer=1;
- Led_Yellow=0; //打開溫度報警燈
- }
- }
- else //溫度值小于預(yù)設(shè)值時
- {
- Led_Yellow=1; //關(guān)閉報警燈
- Buzzer=1; //關(guān)閉蜂鳴器
- }
- if((yanwu<yushe_yanwu)&&(wendu<(yushe_wendu*10))) //當(dāng)煙霧小于預(yù)設(shè)值并且溫度也小于預(yù)設(shè)值時
- {
- Buzzer=1; //停止報警
- }
- break;
- }
- case 1: //預(yù)設(shè)溫度模式
- {
- SelectPosition(0,5) ; //指定位置
- write_com(0x0d); //陰影閃爍
- if(key==KEY_ADD) //加鍵按下
- {
- yushe_wendu++; //預(yù)設(shè)溫度值(閥值)加1
- if(yushe_wendu>=99) //當(dāng)閥值加到大于等于99時
- yushe_wendu=99; //閥值固定為99
- LCD_Write_Char(0,6,yushe_wendu,2) ;//顯示預(yù)設(shè)溫度
- }
- if(key==KEY_MINUS) //減鍵按下
- {
- if(yushe_wendu<=1) //當(dāng)溫度上限值減小到1時
- yushe_wendu=1; //固定為1
- yushe_wendu--; //預(yù)設(shè)溫度值減一,最小為0
- LCD_Write_Char(0,6,yushe_wendu,2) ;//顯示預(yù)設(shè)溫度
- }
- break; //執(zhí)行后跳出switch
- }
- case 2: //預(yù)設(shè)煙霧模式
- {
- SelectPosition(0,10) ; //指定位置
- write_com(0x0d); //打開顯示 無光標(biāo) 光標(biāo)閃爍
- if(key==KEY_ADD) //加鍵按下
- {
- if(yushe_yanwu>=100) //當(dāng)閥值加到大于等于99時
- yushe_yanwu=99; //閥值固定為98
- yushe_yanwu++; //預(yù)設(shè)煙霧值(閥值)加1,最大為99
- LCD_Write_Char(0,13,yushe_yanwu,2) ;//顯示預(yù)設(shè)煙霧
- }
- if(key==KEY_MINUS) //減鍵按下
- {
- if(yushe_yanwu<=1) //當(dāng)煙霧上限值減小到1時
- yushe_yanwu=1; //固定為1
- yushe_yanwu--; //預(yù)設(shè)溫度值減一,最小為0
- LCD_Write_Char(0,13,yushe_yanwu,2) ;//顯示預(yù)設(shè)煙霧
- }
- break;
- }
- default :
- {
- write_com(0x38); //屏幕初始化
- write_com(0x0c); //打開顯示 無光標(biāo) 無光標(biāo)閃爍
- Mode=0; //恢復(fù)正常模式
- break;
- }
- }
- }
- }
復(fù)制代碼
Keil代碼與Proteus仿真下載:
火災(zāi)報警仿真代碼.7z
(99.27 KB, 下載次數(shù): 218)
2022-1-18 16:17 上傳
點(diǎn)擊文件名下載附件
包含proteus、keil程序 下載積分: 黑幣 -5
|