42 lines
884 B
C
42 lines
884 B
C
|
#include "directkey.h"
|
||
|
#include "main.h"
|
||
|
|
||
|
|
||
|
uint8_t ReadDirectKey(void) {
|
||
|
static uint8_t KeyState = State0;
|
||
|
static uint8_t KeyOld;
|
||
|
uint8_t KeyPress;
|
||
|
uint8_t KeyValue = NoKey;
|
||
|
|
||
|
KeyPress = KeyPort->IDR & 0x000F; // 读按键
|
||
|
|
||
|
switch (KeyState) {
|
||
|
case State0:
|
||
|
if (KeyPress != NoKey) {
|
||
|
KeyOld = KeyPress; // 保存原来的键
|
||
|
KeyState = State1; // 切换状态
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case State1:
|
||
|
if (KeyPress == KeyOld) {
|
||
|
KeyState = State2;
|
||
|
// KeyValue = KeyOld; // 按下有效
|
||
|
} else {
|
||
|
KeyState = State0;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case State2:
|
||
|
if (KeyPress == NoKey) {
|
||
|
KeyState = State0;
|
||
|
KeyValue = KeyOld; // 抬起有效
|
||
|
} else {
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
return KeyValue;
|
||
|
}
|