我們設計為3V-5V的工作電壓以便報警系統(tǒng)安裝更加靈活方便。通常情況下可以使用3只1.5V普通直流干電池為電源,考慮到更換電池的問題,也可以外接4.5V直流電源使用起來更為長久。
單片機運行起始情況都是由復位電路來控制和確定的,而且復位電路完成單片機的啟動過程十分高效簡潔。一般情況下電源連接上的時候單片機就會生成一個復位信號,如果此時單片機完成了啟動動作,那么我們可以判斷單片機目前運行正常;如果沒有完成啟動動作則單片機運行不正常,需要調試。當單片機運行之中遇到程序跑飛這種外界環(huán)境干擾和影響而產生的情況之時,我們通常使用復位按鈕來啟動熱釋電紅外報警器系統(tǒng)單片機內部設定的程序讓單片機重新運行我們所需要它運行的程序。通常情況中電路中的單片機復位方式要么是自動復位,要么就是手動復位,這是最常用最實用的電路復位方法。自動復位一般都是上電自動復位,手動復位就是按鍵復位,單片機復位動作往往是在時鐘電路運行后于RESET端生成了兩個周期高電平而完成的。至于手動復位,本設計采用了一個按鍵來實現,即手動復位鍵,改按鍵的設計使得電路復位變得更加簡單可靠,為了把輸出電平升高到一定的值,我們通常都連接了上拉電阻。 3.2 按鍵電路設計
本報警系統(tǒng)中不同狀態(tài)的工作形式也是不同的,考慮到操作的簡單和實用功能,我們對本設計的電路初步進行了簡單的規(guī)劃設計,經過再三研討后設計確定如下:布防狀態(tài)在我們按了布防按鍵后立即啟動,大約5 秒系統(tǒng)進入布防狀態(tài),這5 秒的時間是為了操作人員離開布防區(qū)域而設置的,這個時間可以根據具體的離開布防區(qū)域需要的時間來設置;倘若無人闖入監(jiān)控布防范圍內,則不動作;倘若有人在探測器布防范圍內移動,那么人體輻射的紅外線會被探測器立刻感應到,并立刻通過電路傳至單片機進行運算處理,單片機快速運算后立馬通過電路發(fā)出信號控制聲光報警部分報警。考慮到一些始料未及的突發(fā)情況,客戶還需要我們對報警系統(tǒng)附加一個緊急的報警方案,為解決此問題,我們在設計中使用了一個緊急報警電路從根本上解決了這個需求,既方便又實用,在緊急報警按鍵按下后電路立刻進行聲光報警。如圖下圖3-8所示。
3.3 指示燈電路設計 高低不同的電平狀態(tài)是由單片機的I/O端口的輸出來決定的,P22連接黃色LED指示燈,P21連接綠色LED指示燈,P20連接紅色LED指示燈,P12連接報警用蜂鳴器,而蜂鳴器工作的驅動與否是由外部連接的三極管是否達到飽和狀態(tài)而決定的,該三極管如同一個開關,達到了飽和狀態(tài)就會驅動報警蜂鳴器運行。
第四章 程序設計 4.1 程序流程圖
4.2 程序設計(黑體四號)
4.2.1 按鍵設計程序 //自動報警按鍵 void baojing()
{if(s1==0)
{delay(10);
if(s1==0)
{while(!s1);
jinji=1;temp=4;}
}}
//布防按鍵 void prebufang()
{if(jinji==0)
{if(s2==0)
{delay(10);
if(s2==0)
{while(!s2);
temp=1;}}}}
//關閉報警,撤銷布防按鍵 void guanbi()
{ if(s3==0)
{temp=5;}}
//紅外檢測按鍵 void alarm()
{if(SR==0&temp==2)
{delay(10);
if(SR==0)
{while(!SR);
temp=3; }} }
4.2.2指示燈和報警程序 switch(temp)
{case 1:{LY=0;delay(500);LY=1;delay(500);TR0 =1;}break; //布防鍵按下
case 2 : {LY=0;TR0=0;}break; //5秒后常亮
case 3:{fmq=0;LR=0;LY=1;LG=0; delay(500); fmq=1;LR=1;LY=1;LG=1;delay(500);}break;//布防期間,有人來了
case 4 :{fmq=0;LR=0;LY=1;LG=1; delay(500); fmq=1;LR=1;LY=1;LG=1; delay(500);} break; //報警
case 5 :{LR=1;LG=1;LY=1;fmq=1;jinji=0;}break;//關閉報警/取消布防 default:{} }}}
5.1 軟件調試調試主要方法和技巧: 通常一個調試程序應該具備至少四種性能:跟蹤、斷點、查看變量、更改數值。整個程序是一個主程序調用各個子程序實現功能的過程,要使主程序和整個程序都能平穩(wěn)運行,各個模塊的子程序的正確與平穩(wěn)運行必不可少,所以在軟件調試的最初階段就是把各個子程序模塊進行分別調試。 我們在調試時,先對緊急報警模塊與基本布防功能(黃燈常亮)進行了測試,在按下鍵后紅燈閃爍,蜂鳴器閃鳴;布防鍵按下,黃燈常亮,功能正確;隨后,增加了黃燈閃爍功能,布防鍵按下,黃燈閃爍5秒后常亮,有人闖入布防區(qū)域,綠燈與紅燈閃爍,蜂鳴器閃鳴。最后,增加了取消報警撤銷布防按鈕。 5.2 仿真結果 
結果分析根據仿真結果可知,本設計能夠準確并徹底的完成設計要求。 按下自動報警按鍵,紅燈閃爍,蜂鳴器閃鳴;按下布防按鍵,黃燈閃爍5秒后常亮,進入布防狀態(tài),這時若檢測到有人來,紅燈和綠燈閃爍,蜂鳴器閃鳴;按下關閉按鍵,關閉報警,撤銷布防。
遇到的困難及解決辦法
1.設置報警為最高優(yōu)先級:在報警過程中,除關閉按鈕外,不受其他按鈕控制.(設置jinji標志位,添加限制條件)
2.程序需要多次判斷,導致結構混亂。(將程序模塊化處理)
3.閃爍時按下關閉按鈕,跳不出死循環(huán)(設置狀態(tài)標志位,用switch多分支選擇語句)
- //51單片機簡人體紅外報警器設計,手動按鍵控制實現緊防、撤急報警、布防、關閉報警)
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit s1=P1^0; //緊急報警按鍵
- sbit s2=P1^1; //布防按鍵
- sbit s3=P1^3;
- sbit SR=P2^6;
- sbit LY=P2^2;
- sbit LG=P2^1;
- sbit LR=P2^0;
- sbit fmq=P1^2;
- uchar temp=0;
- uchar value=0;
- uchar jinji=0;
-
- void delay(uint j)
- {uchar t;
- while(j--)
- for(t=0;t<125;t++);
- }
-
- void baojing()
- {if(s1==0)
- {delay(10);
- if(s1==0)
- {while(!s1);
- jinji=1;temp=4;}
- }}
-
- void prebufang()
- {if(jinji==0)
- {if(s2==0)
- {delay(10);
- if(s2==0)
- {while(!s2);
- temp=1;} }}}
- void guanbi()
- { if(s3==0)
- {temp=5;}}
- void alarm()
- {if(SR==0&temp==2)
- {delay(10);
- if(SR==0)
- {while(!SR);
- temp=3; }} }
- void time0_int() interrupt 1{
- TH0 = 0x3c; TL0 = 0xb0; // 50ms
- value ++;
- if(value == 100)
- { temp=2;value=0; } }
- void main( )
- {LR=1;LY=1;LG=1;
- EA = 1; //開總中斷
- TMOD = 0X01; //定時器0工作方式1
- ET0 = 1; //開定時器0中斷
- TH0 = 0x3c;
- TL0 = 0xb0;
- while(1)
- { baojing();
- prebufang();
- guanbi();
- alarm();
- switch(temp)
- {case 1:{LY=0;delay(500);LY=1;delay(500);TR0 =1;}break; //布防鍵按下
- case 2 : {LY=0;TR0=0;}break; //5秒后常亮
- case 3:{fmq=0;LR=0;LY=1;LG=0; delay(500);
- fmq=1;LR=1;LY=1;LG=1;delay(500);}break;//布防期間,有人來了
- case 4 :{fmq=0;LR=0;LY=1;LG=1; delay(500);
- fmq=1;LR=1;LY=1;LG=1; delay(500);} break; //報警
- case 5 :{LR=1;LG=1;LY=1;fmq=1;jinji=0;}break;//關閉報警/取消布防
- default:{}
- }}}
復制代碼
仿真文件下載:
單片機設計.7z
(425.98 KB, 下載次數: 152)
2021-2-18 20:24 上傳
點擊文件名下載附件
|