一個通用的、靈活的、可配置的、可移植的按鍵事件處理的實現
阿新 • • 發佈:2018-11-02
MCUKeys
1 簡介
MCUKeys是一個簡潔小巧可配置的、靈活的、通用的的按鍵檢測程式,截至到目前為止它可以檢測如下輸入事件:
- 按鍵按下
- 按鍵擡起
- 長按(時間可配置)
- 連擊(時間可配置)
- 雙擊
- 組合按鍵(可以實現以上五種狀態)
同時,所有的事件都支援註冊回撥函式,在事件發生時執行。如果當前系統希望只檢測按鍵按下事件,則可以遮蔽其他所有事件,對於其他按鍵事件亦然。
2 使用方法
- 先定義一個變數用於獲取按鍵狀態
e_keys_status key_value = KEY_NONE;
- 初始化按鍵,包括硬體IO配置和軟體變數初始化兩部分
keys_init(); //初始化按鍵
- 如果有需要回調函式,則註冊,不需要可跳過,預設不支援回撥函式
keys[KEY1_ID].short_key_down = led2_on; //註冊回撥函式
keys[KEY1_ID].short_key_up = led2_off;
keys[KEY1_ID].long_key_down = led3_on;
...
- 設定一個週期性可呼叫的函式來呼叫按鍵掃描函式
//定時器3中斷服務函式 KEY_TICKS週期中斷一次 void TIM3_IRQHandler(void) { if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢位中斷 { key_scan(); //按鍵掃描函式 } TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中斷標誌位 }
- 在主迴圈中可以取出按鍵事件並處理
//main while(1) { key_value = key_out_fifo(); if(key_value != KEY_NONE) { switch(key_value) { case KEY_1_DOWN: { //doing something } break; case KEY_1_UP: { //doing something } break; case KEY_1_LONG: { //doing something } break; case KEY_1_DOUBLE: { //doing something } default: { } break; } } }
3 按鍵事件說明
事件 | 說明 |
---|---|
KEY_DOWN | 按鍵按下,每次按下都觸發,可選是否上報 |
KEY_UP | 按鍵彈起,每次鬆開都觸發,可選是否上報 |
KEY_LONG | 長按觸發,key.h中的KEY_LONG_TIME配置長按時間,同時每個按鍵可單獨配置長按時間 |
KEY_REPEAT | 按下連發,key.h中的KEY_REPEAT_TIME配置連發時間,同時每個按鍵可單獨配置連發時間 |
KEY_DOUBLE | 雙擊按鍵事件,key.h中的KEY_DOUBLE_MIN/MAX調整雙擊靈敏度 |
4 快速上手
MCUKeys提供完整的中文註釋。同時,提供如下的例程供大家參考。相信很容易上手。
GitHub原始碼獲取清點這裡,希望給博主star以資鼓勵。