马老师的按键状态机程序中的键值确定部分能否更精简?
本帖最后由 gnail092 于 2013-7-17 22:31 编辑我指 的就是下面这段程序,有没有更好的办法实现根据按键返回码确定键值,感觉这段程序case太多了,我实际用到的按键数更多。
我能想到的就是弄一个按键返回码和其对应的键盘编码的结构体数组,然后当查询到按键返回码相等时,就能确定按键编码,但是每次还是要在数组中查询按键返回码是否相等,代码是几句就够了,但不知效率是否跟原来的switch差不多,大家有没有代码精简,效率也高的实现方法?
case 1:
if (key_value == (Key_mask & PIND)) // 再次读列电平,
{
switch (key_line | key_value) // 与状态0的相同,确认按键
{ // 键盘编码,返回编码值
case 0b00001110:
key_return = K1_1;
break;
case 0b00001101:
key_return = K1_2;
break;
case 0b00001011:
key_return = K1_3;
break;
case 0b00010110:
key_return = K2_1;
break;
case 0b00010101:
key_return = K2_2;
break;
case 0b00010011:
key_return = K2_3;
break;
case 0b00100110:
key_return = K3_1;
break;
case 0b00100101:
key_return = K3_2;
break;
case 0b00100011:
key_return = K3_3;
break;
case 0b01000110:
key_return = K4_1;
break;
case 0b01000101:
key_return = K4_2;
break;
case 0b01000011:
key_return = K4_3;
break;
}
key_state++; // 转入等待按键释放状态
}
else
key_state--; // 两次列电平不同返回状态0,(消抖处理)
break; 顶一下,还是期待有其它写法的 写两个函数,先写一个用于确定按键状态,再写一个用于确定键码。 一路向南 发表于 2013-7-22 22:43 static/image/common/back.gif
写两个函数,先写一个用于确定按键状态,再写一个用于确定键码。
兄弟,你没弄清楚我的问题 直接返回按键码,键值是属于上层的定义的事情。 mcu_lover 发表于 2013-7-22 23:47 static/image/common/back.gif
直接返回按键码,键值是属于上层的定义的事情。
那在上层不还是要对不同的按键码进行确认,我这里疑惑的是switch 语句的用法,如果我有几十个按键,那不是要几十个case了,有没有更精简的效率也还行的代码
页:
[1]