延时5ms达不到消抖的目的,尤其是在EMC中大量存在尖峰脉冲时,给你个思路
-
- #define KEY_TIME 10
- unsigned char key_num =0;//键值
- void keyscan(void)
- {
- static unsigned char key[6]={0,0,0,0,0,0};//假设有6个按键
- if (KEY1STAT() == 0) {//0表示有键按下
- key[0]++;
- if (key[0] >= KEY_TIME) {
- key[0] = KEY_TIME;
- }
- return;
- } else {
- if (key[0] >= KEY_TIME) {
- key_num = 1;//键值
- }
- key[0] = 0;
- }
- //1,2,3,4。。。依次类推
- }
- 基本思路是:连续判断按键状态,有键按下count++,无键count=0(或者--,这样可以消除误弹起),当count加到KEY_TIME时,说明有键按下,
- 可以使用10ms中断调用scan函数,通常手动按键的时间约为200ms,可根据灵敏度调节KEY_TIME的值
-
-
-
-
-
-
-
|