|
程序
#include<reg51.h> //加载头文件
#define uchar unsigned char //宏定义
#define uint unsigned int
#define ulong unsigned long
sbit LED_BJ=P2^0; //报警指示灯
sbit LED_PIR=P2^1; //红外人体检测灯
sbit LED_BF=P2^2; //布防指示灯
sbit PIR_IN=P2^7; //热释电红外人体感应接口
sbit SPK=P1^7; //蜂鸣器报警
sbit KEY_ALARM=P1^0; //紧急报警按键
sbit KEY_BF=P1^1; //布防按键
sbit KEY_QX=P1^2; //取消报警/取消布防
bit alarm=1,kai=0; //变量声明
uchar Mode=1,Mode1=0;
uchar code number[]="0123456789_";
uchar zh[]={1,3,4,1,1,1,1,1,1,1,1}; //设置缓冲
//uchar code at[]="AT\r";
uchar code TC_MSXZ[]={"AT+CMGF=1\r"};// 发送模式选择
uchar code TC_ZXH[]={"AT+CSCA=+8613801573500\r"};// 本地移动中心号
uchar code TC_FSNR[]={"danger\r"};
uchar code ath[]="ATH\r";//挂断电话
uchar code ata[]="ATA\r";//接听电话
uchar fa_flag=0;
void main() //主函数
{
P2=0xff; //断开初始化
Uart_Init(); //串口初始化
while(1) //大循环
{
if(KEY_ALARM==0) //紧急报警键
{
Delay_MS(10); //延时消抖
if(KEY_ALARM==0)
{
while(!KEY_ALARM); //等待按键松开
kai=0;
LED_BF=1; //布防灯灭
alarm=0; //进入报警状态
Mode1=1; //Mode1置1:紧急报警过程中以防按了布防键取消紧急报警
}
}
if(Mode1==0) //未在紧急报警状态
{
if(KEY_BF==0) //布防键
{
Delay_MS(10); //延时消抖
if(KEY_BF==0) //布防键
{
while(!KEY_BF); //等待按键松开
LED_BJ=1;
LED_BF=0; //布防灯亮
Mode=0; //布防状态标识
kai=1;
}
}
if(PIR_IN==0) //检测红外模块有信号,绿灯亮,否则灭
LED_PIR=0;
else //红外检测无人
{
LED_PIR=1;
fa_flag=0;
}
}
if(KEY_QX==0) //取消报警
{
Delay_MS(10); //延时去抖动
if(KEY_QX==0)
{
while(!KEY_QX); //等待按键松开
LED_BJ=1;
LED_BF=1;
Mode=1;
Mode1=0;
fa_flag=0;
alarm=1;
SPK=1;
}
}
if((PIR_IN==0)&&(Mode==0)) //打开布防,且热释电人体感应到人
alarm=0; //开始进入报警
else if(kai==1) //布防状态 未检测到人
{
alarm=1; //非报警状态
LED_BJ=1; //报警灯不亮
}
if(alarm==0) //报警
{
if(fa_flag==0) //未发送,变量为0
{
Send_Dat_Duoo(); //发送多数据
Call_Phone(); //打电话
fa_flag=1; //已发送,变量置1
}
Alarm_Spk_Led(50); //蜂鸣器响
Delay_MS(100); //延时函数
}
}
}
|
评分
-
查看全部评分
|