|
#define key_input PIND.7 // 按键输入口
#define key_state_0 0
#define key_state_1 1
#define key_state_2 2
char read_key(void)
{
static char key_state = 0;
char key_press, key_return = 0;
key_press = key_input; // 读按键I/O电平
switch (key_state)
{
case key_state_0: // 按键初始态
if (!key_press) key_state = key_state_1; // 键被按下,状态转换到键确认态
break;
case key_state_1: // 按键确认态
if (!key_press)
{
key_return = 1; // 按键仍按下,按键确认输出为“1”
key_state = key_state_2; // 状态转换到键释放态
}
else
key_state = key_state_0; // 按键已抬起,转换到按键初始态
break;
case key_state_2:
if (key_press) key_state = key_state_0; //按键已释放,转换到按键初始态
break;
}
return key_return;
}
我感觉应该吧case key_state_1改成这样
case key_state_1:
key_return = 1;
key_state = key_state_2;
break;
要是 在按键程序第一次经检测到按键按下的时候过了10ms 然后转到状态1 如果处在抖动期按键程序有可能检测到的是高 也可能是低 所以我感直接就是这样写了(这是我个人的理解) 不知道对不对呵呵 |
|