⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 汽车报警系统.txt

📁 这是一个51单片机的c程序
💻 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 + -