if(key_sr3 == 1) //IO是高电平,说明按键没有被按下,这时要及时清零一些标志位 { KeyLock3 = 0; //按键自锁标志清零 KeyTimeCnt3 = 0; //按键去抖动延时计数器清零,此行非常巧妙。 KeyCtntyCnt3 = 0; //连续累加的时间间隔延时计数器清零 } else if(KeyLock3 == 0) //有按键按下,且是第一次被按下 { KeyTimeCnt3++; //累加定时中断次数 if(KeyTimeCnt3 > CONST_KEY_TIMES) { KeyTimeCnt3 = 0; KeyLock3 = 1; //自锁按键置位,避免一直触发 KeySec = 3; //触发3号键 } } else if(KeyTimeCnt3 < CONST_TIME_1000MS) //按住累加到1秒 { KeyTimeCnt3++; } else //按住累加到2秒后仍然不放手,这个时候进入有节奏的连续触发 { KeyCtntyCnt3++; //连续触发延时计数器累加 if(KeyCtntyCnt3 > CONST_TIME_250MS) //按住没松手,每0.25秒就触发一次 { KeyCtntyCnt3 = 0; // KeySec = 3; //触发3号键 } }
时间: 2024-02-14 19:26:10 浏览: 116
这段代码是用来处理按键的逻辑。首先判断key_sr3是否为高电平,如果是高电平,说明按键没有被按下,需要清零一些标志位。如果key_sr3是低电平,并且KeyLock3为0,说明有按键按下且是第一次按下。此时累加KeyTimeCnt3,如果累加次数超过了CONST_KEY_TIMES,即达到了一定的延时时间,就将KeyLock3置位,避免一直触发,并且触发3号键操作。如果KeyTimeCnt3没有超过CONST_KEY_TIMES,继续累加KeyTimeCnt3。如果KeyTimeCnt3累加到了CONST_TIME_1000MS这个值,即按住累加到了1秒,还没有放手,就进入有节奏的连续触发。此时累加KeyCtntyCnt3,如果累加到了CONST_TIME_250MS,即每0.25秒触发一次。最后,如果KeyTimeCnt3累加到了2秒后仍然没有放手,就会不断触发3号键操作。
这段代码的作用是实现按键的去抖动和连续触发功能。通过设定一定的延时时间和连续触发时间间隔来控制按键的响应行为。
阅读全文