|
//51單片機簡人體紅外報警器設計,手動按鍵控制實現緊急報警、布防、撤防、關閉報警)//
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar Mode=1,Mode1=0;
uchar t;
sbit s1=P1^0;
sbit s2=P1^2;
sbit s3=P1^1;
bit alarm=1,kai=1;
sbit LR=P2^0;//紅燈報警燈
sbit LY=P2^2;//布防燈
sbit LG=P2^1;//紅外信號檢測燈
sbit Feng=P1^3;//蜂鳴器報警
sbit HR=P0^3;//紅外模塊接入端口
void delay(uint x) //毫秒級延時函數
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void di()
{
LR=0;//蜂鳴器報警,紅燈跟隨閃爍
Feng=0;
delay(80);
LR=1;
Feng=1;
delay(200);
}
void main()
{
LR=1;//初始化三個燈都是滅
LG=1;
LY=1;
delay(5);
while(1)
{
if(s1==0) //緊急手動報警
{
delay(5); //延時消抖
if(s1==0)
{
delay(5);
while(!s1);
kai=0;
LY=1;
LG=1;
alarm=0; //進入報警狀態
Mode1=1; //Mode1置1:緊急報警過程中以防按了布防鍵取消緊急報警
delay(5);
}
}
if(s3==0) //取消報警
{
delay(5);
if(s3==0)
{
delay(5);
while(!s3);
LR=1;
LY=1;
Mode=1;
Mode1=0;
alarm=1;
delay(5);
}
}
if(s2==0) //布防
{
if(Mode1==1) //判斷Mode1的狀態,如果是緊急報警狀態就保持,否則進入布防設置
{
alarm=0;
}
else
{
for(t=0;t<200;t++)
{
LY=~LY;
delay(200);
}
LR=1;
LY=0;
Mode=0; //布防狀態標識
kai=1;
delay(5);
}
}
if(alarm==0)
{
di();
delay(100);
di();
delay(100);
}
if(HR==1&&Mode==0)
{
alarm=0;//開始進入報警
}
else
{
if(kai)
{
alarm=1;
LR=1;
}
}
if(HR==1) //檢測紅外模塊有信號,綠燈亮,否則滅
{
LG=0;
delay(200);
}
else
{
LG=1;
}
}
}
|
評分
-
查看全部評分
|