下面的代码实现了多种按键输入处理,基于switch状态机实现,可实现单击双击三击长按,单击后长按,双击后长按。
多平台可用,只需要修改KEYINPUT即可。
如果是51单片机,改为#define KEYINPUT P32
如果是32单片机,改为#define KEYINPUT GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)
使用方法:可以在定时器中断中直接调用KEY_HANDLER函数,也可以在定时器中断设允许标志,主循环执行KEY_HANDLER
KEY_HANDLER函数中的不同case,我现在填入的是测试用的串口打印函数,可以直接改为你需要的功能代码。
本函数无法连续返回同一个按键状态,比如在三次定时器中断中状态先后变化为NOKEY→LONGKEY→NOKEY,所有的按键装填,只能返回一次!
如果需要持续长按来修改某个变量值的效果,推荐在KEY_HANDLER函数中仅设允许位,比如这样:
case SINGLETOLONGKEY://单击后长按
decreaseduty = 1;//减少占空比标志
break;
然后在主循环中执行下面的,即按键抬起后,清零标志
if(KEYINPUT){//P32 == 1,按键抬起
increaseduty = 0;//清空占空比调节标志
decreaseduty = 0;
}
下面为全部代码:
|