按鍵連按和不連按

2021-10-23 19:01:01 字數 847 閱讀 1282

//按鍵處理函式

//返回按鍵值

//mode:0,不支援連續按;1,支援連續按;

//0,沒有任何按鍵按下

//1,wkup按下 wk_up

//注意此函式有響應優先順序,key0>key1>key2>wk_up!!

u8 key_scan(u8 mode)

else if(key0==1&&key1==1&&key2==1&&wk_up==0)key_up=1;

return 0; //無按鍵按下

}

key_scan()函式,則是用來掃瞄這 4 個 io 口是否有按鍵按下。key_scan()函式,支援兩種掃瞄方式,通過 mode 引數來設定。

當 mode 為 0 的時候,key_scan()函式將不支援連續按,掃瞄某個按鍵,該按鍵按下之後必須要鬆開,才能第二次觸發,否則不會再響應這個按鍵,這樣的好處就是可以防止按一次多次觸發,而壞處就是在需要長按的時候比較不合適。

當 mode 為 1 的時候,key_scan()函式將支援連續按,如果某個按鍵一直按下,則會一直返回這個按鍵的鍵值,這樣可以方便的實現長按檢測。

有了 mode 這個引數,大家就可以根據自己的需要,選擇不同的方式。這裡要提醒大家,因為該函式裡面有 static 變數,所以該函式不是乙個可重入函式,在有 os 的情況下,這個大家要留意下。同時還有一點要注意的就是,該函式的按鍵掃瞄是有優先順序的,最優先的是 key0,第二優先的是 key1,接著 key2,最後是 wk_up 按鍵。該函式有返回值,如果有按鍵按下,則返回非 0 值,如果沒有或者按鍵不正確,則返回 0。

(摘自stm32f1開發指南-alientek 戰艦 stm32f103 v3 開發板教程)

Key Lock按鍵鎖防止按鍵連按

常用按鍵檢測函式會出現按鍵按下連續觸發的問題,在每次按鍵觸發前判斷按鍵所處的狀態會避免這個問題。函式如下 void read keyvalue if key1 1 key1 lock 1 按鍵按下 上鎖 if key2 0 按鍵未按下 if key2 0 key2 lock 1 每次按鍵按下前先檢測...

關於按鍵程式連按與不支援連按的解析。

關於按鍵程式連按與不支援連按的解析。u8 key scan u8 mode else if key01 key11 key21 wk up0 key up 1 如果沒有按鍵按下,則按鍵標誌位置1 return 0 無按鍵按下 支援連按的設定從四處 來實現。1.static u8 key up 1 按...

HashMap按鍵排序和按值排序

今天做統計時需要對x軸的地區按照地區 areacode 進行排序,由於在構建xmldata使用的map來進行資料統計的,所以在統計過程中就需要對map進行排序。在講解map排序之前,我們先來稍微了解下map。map是鍵值對的集合介面,它的實現類主要包括 hashmap,treemap,hashtab...