硬件设计
链接:https://pan.baidu.com/s/1wnOX12XFd0ZznX2kQ5P8CA
提取码:9piw
代码设计
#include <reg52.h>
#define uc unsigned char
#define ui unsigned int
sbit SOS = P1^2;//测试
sbit bufang = P1^4;//布放按键
sbit chefang= P1^3;//撤防
sbit baojing= P1^1;//蜂鸣器
sbit jdq = P1^0;//继电器
sbit led1=P0^2;
sbit led2=P0^3;
sbit sos1=P0^0;//第一路报警
sbit sos2=P0^1;//第二路报警 //热释电
bit bdata flag,flag1;//flag布防标志,flag1布防倒计时标志
uc t,t1,js; //定时器专用变量
void delay(ui x) //延时函数1ms
{
ui i,j;
for(i=0;i<x;i++)
for(j=0;j<110;j++);
}
void kongzhi() //控制函数
{
if((bufang==1)&&(flag==0)) //在报警等待时按下布防键
{
delay(10);
if((bufang==1)&&(flag==0))
{
P2=0x85; //显示字母b
t=0;
t1=0; //清零计时器
TR0=1; //打开计时器
baojing=0;
led1=0;
led2=0;
delay(500);
baojing=1;
led1=1;
led2=1;
}
}
if((flag==1)&&(sos1==0)) //震动传感器按下,人体传感器必然起作用,但是人体传感器触发震动传感器不一定触发//
{
flag1=1; //蜂鸣器鸣响
led1=0;
led2=0;
jdq=0;
TR0=1; //开启定时器
}
if((flag==1)&&(sos2==0)) //报警按键按下
{
TR0=1;
led2=0;
}
if((flag==0)&&(SOS==1)) //报警按键按下
{
flag1=1; //蜂鸣器鸣响
led1=0;
led2=0;
P2=0xbf; //显示"-"
jdq=0;
TR0=1; //开启定时器
}
if(chefang==1) //撤防键按下
{
delay(10);
if(chefang==1)
{
{
P2=0xff; //关闭显示
flag1=0;
baojing=1; //关闭蜂鸣器
flag=0; //停止计时器计时
TR0=0; //关闭计时器
led1=1;
led2=1;
jdq=1;
}
}
}
}
void init() //初始化函数
{
TH0=0x4b;
TL0=0xff;
TMOD=0x01;
EA=1;
ET0=1;
TR0=0; //定时器初始化
bufang=0;
SOS=0;
chefang=0; //按键初始化
jdq=1;
}
void main() //主函数
{
init(); //调用初始化
while(1)//循环
{
kongzhi();//控制函数
}
}
void time() interrupt 1//定时器函数
{
TH0=0x4b;
TL0=0xff; //重新赋初值
t++;
if(t==20)
{
t=0;
t1++;
if(t1==2)//计时到30s时开启布防数码管停止显示 关闭定时器
{
t1=0;
flag=1;
P2=0xff;
TR0=0;
}
}
if((t>=10)&&(flag1==1))//报警
{
baojing=~baojing;
js++;
if(js==120)
{
js=0;
flag1=0;
baojing=1; //关闭蜂鸣器
flag=0; //停止计时器计时
TR0=0; //关闭计时器
led1=1;
led2=1;
jdq=1;
t=0;
t1=0; //清零计时器
TR0=1; //打开计时器
}
t=0;
}
}