#include "key.h" KEYCTL Switch[KEY_NUM_MAX]; //******************************************************* void keyInit(KEYCTL* key, BYTE num){ while(num){ key->ctl.Byte = 0; key++; num--; } } //******************************************************** void keyDebounce(KEYCTL* key, BYTE input){ BYTE keycount; keycount = key->count; if(input != FALSE){ if(keycount < KEY_HOLD_TH_CNT) keycount++; else key->ctl.Bits.hold = TRUE; } else{ if(keycount > KEY_PRESS_TH_CNT) keycount = KEY_PRESS_TH_CNT; if(keycount > KEY_RELEASE) keycount--; } if(keycount == KEY_RELEASE){ if(key->ctl.Bits.press_s){ if(key->ctl.Bits.hold) key->ctl.Bits.release_h = TRUE; else key->ctl.Bits.release = TRUE; key->ctl.Bits.press_s = FALSE; } key->ctl.Bits.status = FALSE; key->ctl.Bits.hold = FALSE; } if(keycount >= KEY_PRESS_TH_CNT){ if(key->ctl.Bits.press_s == FALSE){ key->ctl.Bits.press_s = TRUE; key->ctl.Bits.press = TRUE; } key->ctl.Bits.status = TRUE; } key->count = keycount; } //*********************************************************** BYTE keyGetPress(KEYCTL* key){ BYTE press; press = key->ctl.Bits.press; if(press) key->ctl.Bits.press = FALSE; return(press); } //*********************************************************** BYTE keyGetRelease(KEYCTL* key){ BYTE release; release = key->ctl.Bits.release; if(release) key->ctl.Bits.release = FALSE; return(release); } //************************************************************ BYTE keyGetHoldRelease(KEYCTL* key){ BYTE release_h; release_h = key->ctl.Bits.release_h; if(release_h) key->ctl.Bits.release_h = FALSE; return(release_h); } //************************************************************* void keyScan(void) { keyDebounce(&SW_LOCK, !SW_LOCK_PORT); keyDebounce(&SW_UNLOCK, !SW_UNLOCK_PORT); keyDebounce(&SW_OPEN_TRUNK, !SW_OPEN_TRUNK_PORT); keyDebounce(&SW_CAR_LOCATION, !SW_CAR_LOCATION_PORT); }