📄 汽车报警系统.txt
字号:
#include<absacc.h>
#include<REG51.h>
#define uint unsigned int
#define uchar unsigned char
uchar idata tranbuff_e[10]={0xFD,0x01,'e','n','t','e','r',0x0D,0x0A,0x00};
uchar idata tranbuff_w[12]={0xFD,0x01,'w','a','r','n','i','n','g',0x0D,0x0A,0x00};
uchar idata
setbuf[22]={0xFD,'*','*','8','6','1','3','5','5','0','2','8','6','9','9','9',0x41,0x41,0x41,0x0D,0x0A,0x00};
uchar idata lowbattery[15]={0xFD,0x01,'l','o','w','b','a','t','t','e','r','y',0x0D,0x0A,0x00};
uchar idata feedback_ok[10] ={0xFD,0x01,'s','e','t','O','K',0x0D,0x0A,0x00};
uchar idata *p_tranbuff_e=tranbuff_e;
uchar idata *p_tranbuff_w=tranbuff_w;
uchar idata *p_setbuf=setbuf;
uchar idata *p_low_batter =lowbattery;
uchar idata *p_feedback_ok =feedback_ok;
unsigned char data recbuff[30];
unsigned char data i,j;
uint flag_allow=0; /*发送冲突控制位, 空闲为0,modem为1,enter为2,warning为3,feedback为4,lowbattery为5*/
sbit beep_e =P1^3;
sbit beep_w =P1^0;
sbit lock =P1^1;
sbit stop =P1^2;
sbit low_batter =P1^5;
sbit watchdog =P1^7;
bit flag_e=0;
bit flag_w=0;
bit txd_e=0;
bit txd_w=0;
bit txd_inti=0;
bit flag_lowbattery=0;
bit flag_feedback=0;
bit flag_control=0;
bit lowbatter_allow=1;
void moden_initialize(void)
{
txd_inti=1; /*置发送初始化GSM信息标志位*/
if(flag_allow==0) /*若冲突控制标志位为0,即串口发送线空闲,则进行发送,否则退出*/
{
flag_allow =1; /*置冲突控制标志位,封锁其他发送请求*/
SBUF=*p_setbuf++;
}
}
void watchdog_clr(void)
{
watchdog=1;
watchdog=0;
}
void delay_5s(void) /*延时5秒*/
{
unsigned int x=10000;
unsigned char j;
while(x--)
{
for(j=0;j<125;j++);
watchdog_clr();
}
}
void car_control(void) /*根据短信内容控制汽车上锁或熄火*/
{
if((recbuff[16]=='l'||recbuff[16]=='L')&&recbuff[17]=='o'&&recbuff[18]=='c'&&recbuff[19]=='k')
{
lock =0;
flag_feedback=1;
for (i=0;i<22;i++)
{
recbuff[i]=0;
}
}
if((recbuff[16]=='s'||recbuff[16]=='S')&&recbuff[17]=='t'&&recbuff[18]=='o'&&recbuff[19]=='p')
{
stop =0;
flag_feedback=1;
for (i=0;i<22;i++)
{
recbuff[i]=0;
}
}
}
void Alarm_infrare(void) interrupt 0 using 1/*红外报警中断*/
{
EX0=0; /*关中断INT0 5s*/
txd_e=1; /*置发送enter信息标志位*/
flag_e=1; /*置报警标志位*/
if(flag_allow==0) /*判断冲突控制标志位*/
{
flag_allow=2; /*封锁其他发送请求*/
SBUF=*p_tranbuff_e++; /*开始发送enter信息*/
}
}
void Alarm_shock(void) interrupt 2 using 2/*震动报警中断*/
{
EX1=0; /*关中断INT1 5s*/
txd_w=1; /*置发送warning信息标志位*/
flag_w=1; /*置报警标志位*/
if(flag_allow==0)
{
flag_allow=3;
SBUF=*p_tranbuff_w++;/*开始发送warning信息*/
}
}
void Receive(void) interrupt 4 using 0/*串口接收中断*/
{
static unsigned char data temp;
if(RI==1)
{
RI=0;
temp=SBUF;
if(temp=='R') /*若是开头则刷新数据接收缓冲区*/
{
i=0;
recbuff[i++]=temp;
}
else if(temp==0x0A) /*若是数据包结尾,则根据数据对汽车进行控制*/
{
flag_control =1;
}
else /*接收串口上的数据*/
{
recbuff[i++]=temp;
}
}
if(TI==1)
{
TI=0;
if(txd_w==1&&flag_allow==3)
{
if(*p_tranbuff_w!=0)
{
SBUF=*p_tranbuff_w++;
}
else
{
flag_allow=0;
txd_w=0;
p_tranbuff_w=&tranbuff_w;
}
}
if(txd_e==1&&flag_allow==2)
{
if(*p_tranbuff_e!=0)
{
SBUF=*p_tranbuff_e++;
}
else
{
flag_allow=0;
txd_e=0;
p_tranbuff_e=&tranbuff_e;
}
}
if(txd_inti==1&&flag_allow==1)
{
if(*p_setbuf!=0)
{
SBUF=*p_setbuf++;
}
else
{
flag_allow=0;
txd_inti=0;
p_setbuf=&setbuf;
}
}
if(flag_lowbattery ==1&&flag_allow==5)
{
if(*p_low_batter!=0)
{
SBUF =*p_low_batter++;
}
else
{
flag_allow=0;
flag_lowbattery =0;
p_low_batter =&lowbattery;
}
}
if (flag_feedback==1 && flag_allow==4)
{
if(*p_feedback_ok!=0x00)
{
SBUF =*p_feedback_ok++;
}
else
{
flag_allow=0;
flag_feedback =0;
p_feedback_ok = &feedback_ok;
}
}
}
}
void main(void)
{
IT0=0; /*开INT0,电平触发*/
EX0=1;
IT1=0;
EX1=1;
ES=1;
EA=1;
TMOD=0x20;
TL1=0xfd;TH1=0xfd;
SCON=0x70;
TR1=1;
P1=0x2F; /*清零控制口*/
delay_5s();
moden_initialize();
for(;;)
{
if(flag_e==1)
{
flag_e=0;
beep_e=0;
delay_5s();
delay_5s();
delay_5s();
beep_e=1;
EX0=1;
}
if(flag_w==1)
{
flag_w=0;
beep_w=0;
delay_5s();
beep_w=1;
EX1=1;
}
watchdog_clr();
if(flag_control==1)
{
flag_control=0;
car_control();
delay_5s();
delay_5s();
if(stop==0)
{
stop=1;
}
if(lock==0)
{
lock=1;
}
beep_e=1;
}
if(low_batter==0&&lowbatter_allow==1&&flag_allow==0)
{
flag_lowbattery=1;
flag_allow=5;
lowbatter_allow =0;
SBUF =*p_low_batter++;
}
if(flag_feedback==1 && flag_allow==0)
{
flag_allow=4;
SBUF=*p_feedback_ok++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -