0,0 → 1,87 |
/* mija 2009 key |
|
source file for process keyboard |
|
!!! must be set PINs,PORTs,DDR in lcd.h |
|
|
ver.: 0.0 TESTED |
|
*/ |
|
#include <avr/io.h> |
#include "key.h" |
|
void KeyInit() |
{ |
KEY1Init(); |
KEY1Pullup(); |
KEY2Init(); |
KEY2Pullup(); |
} |
|
void ProcesKey(uint8_t *key) |
{ |
//stav |
enum{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; |
} |
} |