你可以使用一个简单的状态机来检测长按和短按。首先,在按键按下时记录时间,使用 delay_ms(i) 进行延时判断。如果按下时间超过设定的阈值(例如 500ms),则执行长按的函数;否则,执行短按的函数。下面是一个简单的伪代码示例:
void checkKeyPress() {
if (K2 == 0) { // 按键按下
delay_ms(10); // 消抖
if (K2 == 0) { // 确认仍然按下
unsigned int count = 0;
while (K2 == 0) {
delay_ms(1);
count++;
if (count > LONG_PRESS_THRESHOLD) { // 超过阈值
longPressFunction();
break;
}
}
if (count <= LONG_PRESS_THRESHOLD) {
shortPressFunction();
}
}
}
}
|