目录
具体实现功能
具体功能:
(1)系统分为主机和从机。从机上有布防、撤防、紧急报警按键。
(2)按下布防按键后,进入监控状态,当主机检测到震动或人体时,进行报警。
(3)按下撤防按键解除布防。当遇到特殊紧急情况时,可按下紧急报警键,进行报警。

设计介绍

51单片机简介
51单片是一种低功耗、高性能CMOS-8位微控制器,拥有灵巧的8位CPU和可编程Flash,使得51单片机为众多嵌入式控制应用系统提供灵活、高效的解决方案。
本设计所使用的芯片可兼容以下所有的51系列单片机(包括AT系列和STC系列)。

资料内容
原理图(AD19)
本系统原理图设计采用Altium Designer19,具体如图。

注1:请使用Altium Designer19直接打开资料中的工程文件(资料中已说明打开方式)!
注2:此设计需按照原理图制作实物,不可直接烧录到任何开发板中运行(需要修改程序)!
程序(Keil5)
本设计利用KEIL5软件实现程序设计。
主函数如下:
////////////////
void main() //主函数
{
uchar j;
relay=0;
key1=0;
key2=0;
key3=0;
Uart_init(); //中断初始化函数
init_eeprom();
LED_Y=LED_G=0;
delay(5000);
SendString("AT\r\n");
delay(1000);
SendString("AT\r\n");
delay(1000);
SendString("ati\r\n");
delay(1000);
SendString("ati\r\n");
delay(1000);
SendString("ATH\r\n");
delay(1000);
SendString("AT+IPR=9600\r\n");
delay(1000);
RsPoint=0;
for(j=0;j<RsBuf_N;j++)
{
RsBuf[j]=0;
}
delay(10000);
SendString("AT\r\n");
delay(1000);
SendString("ati\r\n");
delay(1000);
SendString("ATH\r\n");
delay(1000);
SendString("AT+CMGF=1\r\n");
delay(1000);
SendString("AT+CNMI=2,1,0,0,0\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+CMGL=\"REC UNREAD\",0\r\n");
delay(1000);
REN=1; // 不允许串口接收数据
ES=1; // 串口中断不应许
LED_Y=LED_G=1;
while(1) //进入循环
{
if(RsPoint>10)
{
deal();
RsPoint=0;
}
keyscan(); //按键函数
if((rsd==0||zd==0)&&flag_BF==1&&TR0==0) //热释电有信号并且在布防状态
{
if(rsd==0) flag_rsd=0;
if(zd==0) flag_zd=0;
LED_G=flag_zd;
LED_Y=flag_rsd; //点亮发送短信指示灯
j=200; //初值200
while(j--)
{
delay(10); //5ms*200=1s
if(rsd==0) flag_rsd=0;
if(zd==0) flag_zd=0;
if(flag_rsd==0&&flag_zd==0)
break;
}
LED_G=flag_zd;
LED_Y=flag_rsd; //点亮发送短信指示灯
GSM_work(); //发送短信函数
}
if(SOS==1)
GSM_work(); //发送短信函数
}
}
void T0_time() interrupt 1 //定时器0中断服务函数
{
TH0=0x4b;
TL0=0xff; //重新赋初值50ms
m++; //每50ms变量m加一次
if(m>=10) //加10次,也就是500ms
{
m=0; //m清零
n++; //变量n加一次是500ms
if(flag==1/*||flag_bj==1*/) //布防计时并且再次发送短信等待变量为1
{
LED_G=!LED_G; //布防指示灯闪烁
LED_Y=LED_G;
}
if(flag_alarm==1) //报警开关打开
{
BUZZ=!BUZZ; //蜂鸣器取反
sec_alarm++; //报警计时
if(sec_alarm>=40) //取反十次,也就是蜂鸣器响5次
{
sec_alarm=0; //秒清零
BUZZ=1; //关闭蜂鸣器
flag_alarm=0; //报警变量清零
sec=0;
TR0=0;
LED_G=1; //布防指示灯闪烁
LED_Y=1;
}
}
if(n>=2) //n大于等于2,也就是加两次,就是1s
{
n=0; //n清零
sec++; //秒加
if(sec>=20&&flag==1) //秒加到20,布防计时状态下
{
BUZZ=1; //关闭蜂鸣器
sec=0; //秒清零
flag=0; //开始布防变量清零
LED_G=1; //布防指示灯熄灭
LED_Y=1;
flag_BF=1; //布防变量置1,代表进入布防状态
TR0=0; //关闭定时器
sec_alarm=0; //秒清零
}
}
}
}
程序运行结果如图:

注:请使用KEIL C51直接打开资料中的工程文件(资料中已说明打开方式)!
全部资料
全部资料包括原理图(AD19)、程序(Keil5)、protues仿真(protues8.7)、设计报告(仅供参考)、仿真视频、开发资料、仿真视频、单片机最小系统介绍等,全网最全!资料内容如下图所示!!
