?? main.c
字號:
/*----------------------------------------------------------------------
/* 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 + -