/* mija 2009 keysource file for process keyboard!!! must be set PINs,PORTs,DDR in lcd.hver.: 0.0 TESTED*/#include <avr/io.h>#include "key.h"void KeyInit(){KEY1Init();KEY1Pullup();KEY2Init();KEY2Pullup();}void ProcesKey(uint8_t *key){//stavenum{STABLE_NO_KEY,NO_STABLE,REPEAT};static uint8_t stav = STABLE_NO_KEY;static uint8_t KeyPrev = NOKEY;static uint16_t KeyTimer;uint8_t Key;Key = NOKEY;if (KEY1Input()) Key = TL1;if (KEY2Input()) Key = TL2;if (KEY1Input() && KEY2Input()) Key = TL1TL2;switch (stav){case STABLE_NO_KEY: if (Key){KeyPrev = Key;KeyTimer = KEYSTABLETIME;stav = NO_STABLE;}*key = NOKEY;break;case NO_STABLE: if (--KeyTimer){*key = NOKEY;break;}if (Key == KeyPrev){*key = Key;KeyTimer = KEYFIRSTREPEATTIME;stav = REPEAT;break;}stav = STABLE_NO_KEY;*key = NOKEY;break;/* case FIRST_REPEAT: if (--KeyTimer){if (Key == NOKEY) stav = STABLE_NO_KEY;*key = NOKEY;break;}if (Key == KeyPrev){*key = Key;KeyTimer = KEYREPEATTIME;stav = REPEAT;break;}stav = STABLE_NO_KEY;*key = NOKEY;break;*/case REPEAT: if (--KeyTimer){if (Key != KeyPrev) stav = STABLE_NO_KEY;*key = NOKEY;break;}if (Key == KeyPrev){*key = Key;KeyTimer = KEYREPEATTIME;//stav = REPEAT;break;}default: stav = STABLE_NO_KEY;*key = NOKEY;}}