|
程序
#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); //延時函數
}
}
}
|
評分
-
查看全部評分
|