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

📄 main.c

📁 汽车防盗器源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/*----------------------------------------------------------------------
/* Device st72324k2:
/* Clock Type: RC/8MHZ
/* Project : Car Alarming System with voice
/* Date: 2006-3-9 ----------
/* Rev: A
/*---------------------------------------------------------------------*/
#define __DEFINE_REGISTERS_STVD7_INCLUDE__
#include "ST72324BLK2.h"
#undef  __DEFINE_REGISTERS_STVD7_INCLUDE__

#define asm_nop() _asm ("nop\n")
#define DI() _asm ("sim\n")
#define EI() _asm ("rim\n")


/*Define Operation Code*/
#define  T_MUTE    0X03
#define  T_UNLOCK  0X0C
#define  T_LOCK    0X08
#define  T_ALARM   0X0F
#define  T_BACKDOOR 0X04
/*Define 24c01 read/write operation*/
#define  Read24c01 0XA1
#define  Write24c01 0XA0
/*Define led indication */
#define  InGuarding  1
#define  HadVibrate  2
#define  HadSwitched 3
#define  ReleaseAlarm 4
#define  ReleaseUrgency 5
#define  OpeningDoor 6
#define  Learning    7
/*define Status (mem in eeprom) */
#define LOCK BIT0
#define UNLOCK BIT1
#define MUTE BIT2
#define DoorTriged BIT3
#define Alarm BIT4
#define VOICE  BIT5
#define Vibrated BIT6
#define Fire   BIT7
/* define LLMode */
#define LockOn 10
#define LockOff 11
#define OneFlash 33 // Light flash one times 
#define TwoFlash 02
#define Toggle   03
#define Toggle500ms 04
#define VoiceVibrate 06
#define VoiceSelect  07
#define Toggle120ms 31
#define Toggle250ms   34
#define DACCLockOff   35
#define Continue      36
#define WAIT     1
#define Learn0   41
#define Learn1   42
#define Learn2   43

/*Define Alarm Type*/
#define  LongAlarm  0x10
#define  ShortAlarm 0x11
#define  DoubleAlarm 0x12
#define  LShortAlarm 0x13
#define  Vibrate    0x14
#define  Switch     0x15
/*Define voice type*/
//#define Defence   0X40   /*攱晥宊*/
//#define CloseDoor 0X00  /*攣峸崕翏d*/
//#define Warning   0X80   /*攱楊嫀瓓T*/
//#define Notice1   0X90   /*had been Vibrated*/
//#define Notice2   0X50   /*had been open */

#define Defence   0X08   /*攱晥宊*/
#define CloseDoor 0X00  /*攣峸崕翏d*/
#define Warning   0X01   /*攱楊嫀瓓T*/
#define Notice1   0X11   /*had been Vibrated*/
#define Notice2   0X18   /*had been open */



/* Global variable */
extern unsigned char ReceiveCode;
extern unsigned  int long CodeID0,CodeID1,ReceiveBuff;
extern void EnableRfReceiver(void);
extern char TrigType;
extern unsigned char FlagRX;

BIT_CHAR Flag1,Flag2,Flag3,Flag4,Flag5,Flag6;
unsigned char DataBuff[10];
unsigned char  *RCBPointer;
unsigned  long int *IntPointer=(unsigned long int *)DataBuff;
unsigned char AlarmMode=0;
unsigned char Status=0x02;
unsigned char VibrateTimes=0;
unsigned char FlashTimes=0;
unsigned char R[10];
unsigned int LongTimer[4];
unsigned char LastReceive=0;
unsigned char PressTimes=0;
unsigned char LedTimes ;
unsigned char LockTime;
unsigned char CodeIDMonitor_EN=0;
unsigned char RS232Imformation=0;

/* Flag1 BITS */
#define  FlagPlsCloseDoor b0
#define  FlagVoice b1
#define  FlagTemp0 b2
#define  FlagOSO b3
#define  VoiceSetting b4
#define  FlagSearchMyCar b5
#define  FlagIgnoreBackDoor b6
#define  FlagOpenBackDoor b7
/* Flag2 BITS */
#define  FlagOver b0
#define  Flag120ms600msToggle b1
#define  FlagStep1 b2
#define  FlagStep2 b3
#define  FlagStep3 b4
#define  FlagGDelay b5
#define  TestingWrongUnlock b6
#define  TestTimer b7
/* Flag3 BITS */
#define  FlagACC b0
#define  FlagLocked b1
#define  FlagHelpMe b2
#define  FlagHelpMe0 b3
#define  FlagLearn b4
#define  FlagLearn1 b5
#define  FlagLearn2 b6
#define  FlagLearnEnable b7
/* Flag4 BITS */
#define  Direct b0
#define  FlagSet0 b1
#define  FlagSet1 b2
#define  FlagLed0 b3
#define  OpenDoorAction0  b4
#define  OpenDoorAction1 b5
#define  FlagLED3s b6
#define  FlagAlarmInOpen b7
/* Flag5 BITS */
#define  FlagEmergency b0
#define  FlagPortTrig b1
#define  FirstEnter b2
#define  FlagRecovery b3
#define  FlagDuration b4
#define  FlagDisEngineOff b5
#define  FlagACC0 b6
#define  FlagIndicate b7


unsigned char StandarClock0=0,StandarClock1=0,StandarClock2=0;
unsigned char VoiceTime=0;
unsigned int AlarmClock=0;
unsigned char LedClock=0;
unsigned char LightClock=0;
unsigned char TrigClock=0;
unsigned char LLMode=0 ;    /* Center Lock on/off control*/
unsigned char TAOC2LBuff;
unsigned char UARTTimer=0;

void  RemoveCtrl(void);
void LedScan(void);
void  Initial (void); 
void TimerGenerator(void);
void LightCtrl(void);
void LLEMode(char Mode,char Times);
void LockLightEngine(void);
void  AlarmCtrl (void);
void Voice (unsigned char VoiceMode);
void ClearVoice(void);
void CenterCtrl(void);
void DisSensorChek(unsigned char duration);
void GDelay(char GDelayTime);  
void OpenBackDoor(void);
void EngineOff(void);
void CheckLearn(void);
void StoreStatus(void);
void StoreCodeID(void);
void CheckOpenDoor(void);
void CodeIDMonitor(void);
void ReadCodeID(void);
void FireMode(void);
void CheckJumper(void);
void FlashLed(void);
void delay(int DelayNum);
extern void TrigCheck(void);

extern unsigned char RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,unsigned char ControlByte);
extern void RS232(void);

/*#################################################################*/
/*#################################################################*/
void main(void)
{
	Initial();
  while(1)
	{
  CheckJumper(); 
  FireMode();
	WDGCR=0XFF;
  CodeIDMonitor();
	RS232();
  TimerGenerator();
  AlarmCtrl();
  LedScan();
  LockLightEngine();
  TrigCheck();
  ClearVoice();
  CenterCtrl();
  StoreStatus();
  }

}
/*#################################################################*/
/*#################################################################*/

void delay(int DelayNum)/*DelayNum=100=0.728US*/
{
while(DelayNum--);
WDGCR=0XFF;
}

/*#################################################################*/

void Initial (void)
{
 unsigned char j;	
 Flag1.byte=0;
 Flag2.byte=0;
 Flag3.byte=0;
 Flag4.byte=0;
 Flag5.byte=0;
 Flag6.byte=0;
 Flag5.b.FirstEnter=1;
 //WDTM=0X67;
	MCCSR=(BIT1+BIT4);  // FOSC2/2 ,system clock is 2mhz
	
/* For voice and jumper detector*/  
	//PADDR=0XFF;
  //PADR=0;
	//PAOR=0XFF;
	PBDDR=0XFF;
	PBDR=0;
	PBOR=0XFF;
/* For Learn key & engine ctrl*/
  PDDDR=Engine;
	PDOR =(Engine+Learn_Key);
	PDDR=0;
	
/* Portf assignment*/
  PFDDR=(BackDoor+LED+Light+LockOpen);
	PFOR=(BackDoor+LED+Light+LockOpen);
	PFDR=0;
/* Porte assignment*/
	PEDDR=(TDO+LockClose);
	PEOR=(TDO+LockClose);
	PEDR=0;
	
	
/* For RF Receiver Timer setting*/
  PCDDR=0;
	//PCOR=0XFF;  //Enable pushpull resister
	TBCR1=BIT7;  // Input capture enable , ICAP1 rising edge trigger
	TBCR2=(BIT2+BIT1);         // TimerB clock as Fcpu/2 ,ICAP2 falling edge trigger
	TBCSR=0;            // Enable TimerB
	TACLR=0;
	TACHR=0;            // Clear TimerB
	ISPR2=0XFB;         // Enable interrupt of TimerB (Normal)
	
/* UART Port Setting*/	
	SCISR=0;
	SCICR2=BIT3; //Transmitter is enable 
	SCIBRR=(BIT7+BIT6); // baut rate:9600
	SCICR1=0;
	
/*read the CodeID From EEPROM*/	
  ReadCodeID();
  j=5;
  while(j--)
  {
   delay(10000);
  }

  if(Status&0x48) LongTimer[1]=10; 
  TrigType=(PCDR&~(SIDE_TRIG+BIT2+BIT3));
	EI();
  if(Status&0x58 && Status&0x10)  
	{
	if((Status&0x4c)==0x44);
	else{Flag4.b.FlagAlarmInOpen=1;AlarmMode=LongAlarm;}
	LLEMode(Toggle,60);
	}
}
/*#################################################################*/
void ReadCodeID(void)
{
    char i=0,j,k; 
    do
    {
	 j=0; 
	 k=8; 
	 i+=0x10;
	 RCBPointer=DataBuff;               
	 RW24XX(RCBPointer,10,i,Read24c01);    //CheckSum--DataBuff[8];  //DataBuff[0-3]--CodeID0;DataBuff[4-7]--CodeID1; 
	 RCBPointer=DataBuff;               
	 while(k--) 
	   {
   		 j+=*RCBPointer;
   	     RCBPointer++;
   	   } 
   	  } 
    while(j!=DataBuff[8] && i<0x30);
    
    if(i>=0x30) {DataBuff[9]=0x02;}
    CodeID0=*IntPointer;
    CodeID1=*(IntPointer+1);
    Status=DataBuff[9];

}
/*#################################################################*/
void CheckJumper(void)
{
 if(PADR&BIT3) return;
 PBOR=0X0;   //Floating input  
 PBDDR=~(BIT0+BIT3+BIT4); //BIT4,6,7 Input
 delay(3);
 if(PBDR&BIT4)  Flag4.b.FlagSet0=1; 
 else  Flag4.b.FlagSet0=0; 
 if(PBDR&BIT3)  Flag4.b.FlagSet1=1;
 else  Flag4.b.FlagSet1=0;
 if(PBDR&BIT0)  LockTime=2; else  LockTime=20;
 PBDDR=0XFF;
 PBOR=0XFF;
}
/*#################################################################*/
void TimerGenerator(void)
{
	 if(!StandarClock0)
	 {if(StandarClock2>=7) goto Timer_Next1;}
	 else 
		 if(StandarClock2>=6)
Timer_Next1:		 
    {
      StandarClock2=0;
      TrigClock++;
      AlarmClock++;
      VoiceTime++;
      FlagRX|=ReceiveDelay;
      if(R[0]<250) R[0]++;    /*24ms; */
      if(++StandarClock0>=5) 
			  {
			  StandarClock0=0;
				LedClock++;
				UARTTimer=1;
        }  /*125ms*/
      if(++StandarClock1>=10) 
			  {              
		   							StandarClock1=0;
										CodeIDMonitor_EN=1;
      							LightClock++;
      							if(VibrateTimes) {if(!--R[2]) VibrateTimes=0;}
      							if(!(--R[4])) Flag2.b.FlagGDelay=1;
      							R[1]++;
      							R[9]++;
                                if(R[8]){R[8]--;}
      							if(!R[7]-- && Flag3.b.FlagHelpMe )
      							 {
      							   Flag3.b.FlagHelpMe0=1;
      							   AlarmMode=LongAlarm;
      							   LLMode=Toggle250ms;
      							   if(!Flag4.b.FlagSet0) PDDR|=Engine;
      							 }
										if(!(++LongTimer[1])) LongTimer[1]--; 
										if(!(++LongTimer[0])) LongTimer[0]--; 
										if(!(++LongTimer[2])) LongTimer[2]--; 
										if(!(++LongTimer[3])) LongTimer[3]--; 
										if(Flag1.b.FlagOpenBackDoor&&(!--R[5])) 
											{
											  Flag1.b.FlagOpenBackDoor=0;
												PFDR&=~BackDoor;
												RS232Imformation=0;
												} /* open back door*/                               
										if(LLMode!=Toggle) 
											{
											 if((!(R[6]--))) 
													{if(Flag3.b.FlagHelpMe && LLMode==Toggle250ms) 
													 return; 
													 PDDR&=~Engine;
													}
											} 
		  }  /*250ms;LongTimer[0] for Sensor Timer;LongTimer[1] for Detect the door is closed after 5 s under guarding mode */


		}                           
}
/*#################################################################*/

void Voice (unsigned char VoiceMode)
{
   PBDR=VoiceMode;
   VoiceTime=0;
   delay(10);
   PADR|=Voice_En;
}
/*#################################################################*/

void ClearVoice(void)
{

  if(FlagRX&ReceiveDelay) TBCR1=BIT7;
  if(VoiceTime>30)  {PADR=0;}  
  if(!R[8])  
        {
         if(Flag1.b.FlagIgnoreBackDoor)
          {
           if(TrigType&BACK_TRIG)  DisSensorChek(20);
           else               Flag1.b.FlagIgnoreBackDoor=0;
          }
        } 
 else TrigType|=SENSOR;       
}
/*#################################################################*/

void DisSensorChek(unsigned char duration)
{
 R[8]=duration;
 TrigType|=SENSOR;
}
/*#################################################################*/
void LedScan(void)
{
   
 if(Flag3.b.FlagLearn)		return;
 if(Flag1.b.FlagSearchMyCar || Flag1.b.VoiceSetting || (Flag1.b.FlagPlsCloseDoor && LLMode!=Toggle))
	{PFDR&=~LED;return;}

if(Status&0x01 && LongTimer[1]>20)
   { 
     if(Flag1.b.FlagPlsCloseDoor)
       {FlashLed();}
     else if(Status&0x08)   
       {
         FlashLed();
         if(LedClock>=17 && (LLMode!=Toggle))
         {PFDR^=LED;LedClock=0;}
       }   
      else if(Status&0x40)  //been vibrated
       { 
         FlashLed();
         if(Flag4.b.FlagLed0)
          {
            if(LedClock)
             {
                 PFDR^=LED;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -