▼點擊下方名片,關注公眾號
▼檢測按鍵有中斷方式和GPIO查詢方式兩種。推薦大家用GPIO查詢方式。
1.從裸機的角度分析
- 中斷方式:中斷方式可以快速地檢測到按鍵按下,并執(zhí)行相應的按鍵程序,但實際情況是由于按鍵的機械抖動特性,在程序進入中斷后必須進行濾波處理才能判定是否有效的按鍵事件。如果每個按鍵都是獨立的接一個 IO 引腳,需要我們給每個 IO 都設置一個中斷,程序中過多的中斷會影響系統(tǒng)的穩(wěn)定性。中斷方式跨平臺移植困難。
- 查詢方式:查詢方式有一個最大的缺點就是需要程序定期的去執(zhí)行查詢,耗費一定的系統(tǒng)資源。實際上耗費不了多大的系統(tǒng)資源,因為這種查詢方式也只是查詢按鍵是否按下,按鍵事件的執(zhí)行還是在主程序里面實現。
2.從OS的角度分析
- 中斷方式:在 OS 中要盡可能少用中斷方式,因為在RTOS中過多的使用中斷會影響系統(tǒng)的穩(wěn)定性和可預見性。只有比較重要的事件處理需要用中斷的方式。
- 查詢方式:對于用戶按鍵推薦使用這種查詢方式來實現,現在的OS基本都帶有CPU利用率的功能,這個按鍵FIFO占用的還是很小的,基本都在1%以下。
二、最簡單的按鍵檢測程序
先給他說了一種經典的
按鍵檢測代碼,相信大多數人使用按鍵
函數都見過它,很簡單就不過多介紹了!
#define?KEY0_PRES?1??//KEY0??
#define?KEY1_PRES?2??//KEY1?
#define?WKUP_PRES?3??//WK_UP?
u8?KEY_Scan(u8?mode)
{??
?static?u8?key_up=1;//按鍵按松開標志
?if(mode)key_up=1;??//支持連按????
?if(key_up