|
|
下面的代碼實(shí)現(xiàn)了多種按鍵輸入處理,基于switch狀態(tài)機(jī)實(shí)現(xiàn),可實(shí)現(xiàn)單擊雙擊三擊長(zhǎng)按,單擊后長(zhǎng)按,雙擊后長(zhǎng)按。
多平臺(tái)可用,只需要修改KEYINPUT即可。
如果是51單片機(jī),改為#define KEYINPUT P32
如果是32單片機(jī),改為#define KEYINPUT GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)
使用方法:可以在定時(shí)器中斷中直接調(diào)用KEY_HANDLER函數(shù),也可以在定時(shí)器中斷設(shè)允許標(biāo)志,主循環(huán)執(zhí)行KEY_HANDLER
KEY_HANDLER函數(shù)中的不同case,我現(xiàn)在填入的是測(cè)試用的串口打印函數(shù),可以直接改為你需要的功能代碼。
本函數(shù)無(wú)法連續(xù)返回同一個(gè)按鍵狀態(tài),比如在三次定時(shí)器中斷中狀態(tài)先后變化為NOKEY→LONGKEY→NOKEY,所有的按鍵裝填,只能返回一次!
如果需要持續(xù)長(zhǎng)按來(lái)修改某個(gè)變量值的效果,推薦在KEY_HANDLER函數(shù)中僅設(shè)允許位,比如這樣:
case SINGLETOLONGKEY://單擊后長(zhǎng)按
decreaseduty = 1;//減少占空比標(biāo)志
break;
然后在主循環(huán)中執(zhí)行下面的,即按鍵抬起后,清零標(biāo)志
if(KEYINPUT){//P32 == 1,按鍵抬起
increaseduty = 0;//清空占空比調(diào)節(jié)標(biāo)志
decreaseduty = 0;
}
下面為全部代碼:
|
評(píng)分
-
查看全部評(píng)分
|