概要
本系统主要由单片机和GSM短信模块组成,借助最可靠、最成熟的GSM移动网络,
以最直观的中文短消息或电话形式,直接把报警地点的情况反映到您的手机屏幕上。
(1)该设计包括硬件和软件设计两个部分。模块划分为数据采集、键盘控制、
报警等模块子函数。
(2)本震动防盗报警系统由震动传感器、报警器、单片机控制电路、LED控制
电路及相关的控制管理软件组成。用户终端完成信息采集、处理、数据传送、
功能设定、本地报警等功能。
(3)系统可实现功能。当人员外出时,可把报警系统设置在外出布防状态,探
测器工作起来,当有人闯入时,设置在监测点上的震动传感器变换成电信号,
经放大电路、比较电路送至门限开关,打开门限阀门送出TTL 电平至STC89C51
单片机,经单片机处理运算后驱动执行报警电路使警号发声。
(4)系统工作的稳定性和可靠性也是追求的重要指标。至于报警可采用声光信号。
原理图
部分代码
void Uart_init()
{
TMOD= 0X20; //T1 方式2 ,8位 自动重装
TH1=0Xfd;
TL1=0Xfd; //9600
TR1=1; // 定时器1启动
SM0=0; // 设置串口的工作模式
SM1=1; //方式1
REN=0; // 允许串口接收数据
ES=0; // 串口中断应许
EA=1; // 开启中断
}
void SendASC(uchar d)
{
SBUF=d;
while(!TI);
TI=0;
}
void SendString(uchar *str)
{
while(*str)
{
SendASC(*str) ;
str++;
//delay_uart(1);
}
}
void TIME()
{
if(flag==0)
{
delay(50);
TIME_50ms++;
if(TIME_50ms%10==0)
LED_B=!LED_B;
if(TIME_50ms>=100)
{
TIME_50ms=0;
flag_BF=1;
LED_B=0;
flag_time_start=0;
again=1;
}
}
else
{
delay(50);
TIME_50ms++;
if(TIME_50ms%10==0)
{
LED_B=!LED_B;
if(flag_alam==1)
{
if(flag_continue==0)
{
flag_continue=1;
time_continue=TIME_50ms;
}
BUZZ=!BUZZ;
LED_BJ=BUZZ;
if(TIME_50ms>=time_continue+100)
{
BUZZ=1;
LED_BJ=1;
flag_continue=0;
flag_alam=0;
time_continue=0;
}
}
}
if(TIME_50ms>=1200)
{
LED_B=0;
TIME_50ms=0;
flag_time_start=0;
again=1;
}
}
}
//按键扫描函数
void keyscan()
{
if(key1==0&&flag_BF==0)//布防
{
delay(5);//延时
if(key1==0)
{
LED_B=0;
flag=0;
flag_time_start=1;
}
while(key1==0);
}
if(flag_time_start==1)
{
TIME();
}
if(key2==0)
{
delay(5);//撤防
if(key2==0)
{
BUZZ=1; //关闭蜂鸣器
LED_BJ=1;
flag_alam=0;
flag_BF=0;
flag=0;
flag_time_start=0;
LED_S=1;
LED_B=1;
}
while(key2==0);
}
if(key3==0)
{
delay(5);
if(key3==0)
{
SOS=1;
flag_alam=1;
}
while(key3==0);
}
}
void GSM_work()
{
if(rsd==0&&flag_BF==1)
flag_alam=1;
/* else
BUZZ=1; */
if((rsd==0&&flag_BF==1&&again==1)||SOS==1)
{
LED_S=0;
BUZZ=1;
SendString("AT+CMGF=1\r\n");
delay(1000);
SendString("AT+CSCS=\"UCS2\"\r\n");
delay(1000);
SendString("AT+CSMP=17,0,2,25\r\n");
delay(1000);
SendString("AT+CMGS="); //信息发送指令 AT+CMGS=//
SendASC('"');
SendString(PhoneNO);
SendASC('"');
SendASC('\r'); //发送回车指令//
SendASC('\n'); //发送换行指令//
delay(1000);
SendString(somebody);
delay(1000);
SendASC(0x1a);
if(SOS==0)
{
again=0;
flag_time_start=1;
flag_alam=1;
}
else if(SOS==1&&flag_time_start==1)
{
TIME_50ms=0;
flag_BF=1;
LED_B=0;
flag_time_start=0;
again=1;
}
LED_S=1;
SOS=0;
flag=1;
}
}