#ifndef _KEY_H #define _KEY_H #include #define _S08QG8_H #define FALSE 0 #define TRUE 1 typedef unsigned char BYTE; typedef struct { union { struct { BYTE status :1; BYTE press :1; BYTE press_s :1; BYTE release :1; BYTE release_h :1; BYTE hold :1; BYTE type :1; BYTE :1; }Bits; BYTE Byte; }ctl; BYTE count; }KEYCTL; /* key definition */ #define KEY_NUM_MAX 4 extern KEYCTL Switch[KEY_NUM_MAX]; #define SW_LOCK Switch[0] #define SW_UNLOCK Switch[1] #define SW_OPEN_TRUNK Switch[2] #define SW_CAR_LOCATION Switch[3] #define SW_LOCK_PORT PTAD_PTAD3 #define SW_UNLOCK_PORT PTAD_PTAD5 #define SW_OPEN_TRUNK_PORT PTAD_PTAD2 #define SW_CAR_LOCATION_PORT PTAD_PTAD1 //Key period definition (Unit: mS) #ifdef _S08QG8_H #define KEY_PERIOD 10L #endif #ifdef _S08DZ60_H #define KEY_PERIOD 10L #endif #define KEY_RELEASE 0 //Key press threshold 100mS #define KEY_PRESS_THRESHOLD (100) #define KEY_PRESS_TH_CNT (BYTE)(KEY_PRESS_THRESHOLD/KEY_PERIOD) //Key hold threshold 1000mS #define KEY_HOLD_THRESHOLD (1000) #define KEY_HOLD_TH_CNT (BYTE)(KEY_HOLD_THRESHOLD/KEY_PERIOD) //extern KEYCTL F_WASHER_SW, IGN_SW; //Macro #define keyGetStatus(key) (key.ctl.Bits.status) #define keyGetHold(key) (key.ctl.Bits.hold) //Functions extern void keyInit(KEYCTL* key, BYTE num); extern BYTE keyGetPress(KEYCTL* key); extern BYTE keyGetRelease(KEYCTL* key); extern BYTE keyGetHoldRelease(KEYCTL* key); extern void keyDebounce(KEYCTL* key, BYTE input); extern void keyScan(void); //void keyScan(void); #endif