最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

STM32按鍵狀態(tài)機3——增加雙擊與功能優(yōu)化

2022-08-07 22:55 作者:碼農(nóng)愛學習-B站  | 我要投稿

上篇文章,介紹了將按鍵檢測增加長按功能,并將按下抖動與松開抖動共用一個抖動狀態(tài)來表示,其狀態(tài)圖如下:

仔細研究這個狀態(tài)圖,其它還存在一些問題:

  • 短按狀態(tài),只要按下去,不需要等按鍵再釋放,就會觸發(fā)短按事件。對于需要按下再松開作為一次短按的應用來說,此狀態(tài)圖也不滿足需求

  • 長按狀態(tài),必須先經(jīng)過短按狀態(tài),即長按按鍵,會先觸發(fā)一個短按,再觸發(fā)一個長按。如果實際應用中需要分別使用短按和長按,則此狀態(tài)圖不滿足要求

本篇,就來解決上述兩個問題,并再增加一個按鍵雙擊檢測,實現(xiàn)一個功能更全面的按鍵檢測。


1 增加雙擊檢測

增加一個雙擊檢測,需要增加兩個狀態(tài):

  • 等待再次按下

  • 確認第2次按下

同時,之前的“短按狀態(tài)”和“長按狀態(tài)”分別改為“確認按下”和“確認長按”。

1.1 狀態(tài)圖修改

修改后的狀態(tài)圖如下,有以下幾點需要注意: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

  • 確認按下”不是短按觸發(fā)的條件,需要等松開后,經(jīng)消抖進入到“等待再次按下”一段時間后(200ms),沒有再次被按下,才觸發(fā)短按事件,這樣就解決了本篇開頭提到的第1個問題

  • 確認按下”不是短按觸發(fā)的條件,另一個用途是,當此狀態(tài)繼續(xù)保持按下狀態(tài)一段時間后(1s),則會單獨觸發(fā)長按事件,同時進入到“確認長按”狀態(tài),這樣就解決了本篇開頭提到的第2個問題

  • 對于雙擊事件的檢測,首先按下按鍵進入“確認按下”狀態(tài),然后在1s內(nèi)松開進入“等待再次按下”狀態(tài),接著在200ms內(nèi)再次按下進入“確認第2次按下”狀態(tài),然后在1s內(nèi)松開,即可觸發(fā)雙擊事件,并同時進入“穩(wěn)定松開”狀態(tài)

  • 注意,在“確認第2次按下”狀態(tài)下,如果在1s內(nèi)沒有松開,也會進入到“確認長按”狀態(tài)

1.2 程序編寫

根據(jù)狀態(tài)圖,修改對應的狀態(tài)機邏輯,修改后的代碼如下:

最后注釋掉的一句是調(diào)試打印,調(diào)試時可打開,方便觀察狀態(tài)變化

1.3 測試

短按、長按、雙擊的測試結(jié)果如下:

還有從確認第2次按下狀態(tài)到達的長按狀態(tài):



2 功能優(yōu)化

上面的代碼實現(xiàn),是在主函數(shù)中,每50ms延時執(zhí)行一次狀態(tài)機循環(huán)(主函數(shù)代碼如下),僅用做演示按鍵狀態(tài)機的運行機制。

實際開發(fā)中,按鍵檢測程序,應該作為一個獨立的模塊運行,當檢測到某一按鍵狀態(tài)觸發(fā)時,通知應用程序來使用。

對于stm32裸機開發(fā)來說,可以將按鍵狀態(tài)機放到一個定時器中斷服務函數(shù)中運行,當檢測到某一按鍵狀態(tài)觸發(fā)后,通知應用程序:


3 總結(jié)

本篇在前兩篇按鍵狀態(tài)機的基礎上,繼續(xù)介紹增加按鍵的雙擊功能,并解決之前狀態(tài)存在的兩個問題,通過實測驗證,演示短按、長按、雙擊的使用效果。最后對代碼結(jié)構(gòu)進行優(yōu)化,使其更符合實際開發(fā)應用。



STM32按鍵狀態(tài)機3——增加雙擊與功能優(yōu)化的評論 (共 條)

分享到微博請遵守國家法律
本溪| 元氏县| 新昌县| 宾阳县| 枝江市| 宁明县| 凤台县| 西青区| 阿坝县| 藁城市| 榕江县| 上杭县| 定边县| 清新县| 巴马| 从化市| 宝坻区| 天气| 临颍县| 河南省| 定西市| 察哈| 昌图县| 萝北县| 射洪县| 遂宁市| 荣昌县| 新田县| 长沙市| 修水县| 奎屯市| 阿荣旗| 兴安县| 咸宁市| 林州市| 乌什县| 静海县| 迁安市| 白朗县| 玉溪市| 衡阳县|