下面的代碼實現了多種按鍵輸入處理,基于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;
}
下面為全部代碼:
|