999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于有限狀態機的按鍵檢測程序設計

2021-06-16 03:14:26龔利英
電子制作 2021年3期
關鍵詞:單片機檢測

龔利英

(惠州經濟職業技術學院,廣東惠州,516057)

0 引言

鍵盤是單片機嵌入式系統中常見且非常重要的人機接口。從編碼的功能上,鍵盤可以分成全編碼鍵盤和非編碼鍵盤兩種。全編碼鍵盤是由硬件完成鍵盤識別功能的,它通過識別鍵是否按下以及所按下鍵的位置,由全編碼電路產生一個唯一對應的編碼信息(如ASCII碼)。非編碼鍵盤是由軟件完成鍵盤識別功能,它利用簡單的硬件和一套專用鍵盤編碼程序來識別按鍵的位置,然后由CPU將位置碼通過查表程序轉換成相應的編碼信息。在單片機系統中,用的最多的是非編碼鍵盤,其電路結構根據按鍵硬件連接方式可分為獨立式按鍵、矩陣式按鍵和ADC按鍵等。在實際工程應用中,由于要考慮成本等因素,系統中的按鍵電路通常按鍵數目較少,需要軟件程序的設計來實現嵌入式系統對按鍵復雜功能需求,使用軟件來檢測按鍵的一般思路是根據輸入端口的狀態及電平的持續時間,做出判斷從而做出正確的動作。因此軟件程序是非常的重要的,如果程序編寫不合理就會出現按鍵失靈或誤操作等情況。按鍵按下,按鍵抬起,按鍵持續按住一定時間等狀態是一種有限狀態的集合,本文針對單片機應用系統中按鍵結構形式的多樣性,利用有限狀態機設計一種高兼容性的按鍵檢測系統,以此降低按鍵程序設計難度,減少工程人員在產品開發中的工作量。

1 有限狀態機

圖1 有限狀態機的轉換示意圖

有限狀態機是指在外界條件的作用下,在有限個狀態之間進行狀態轉移的數學模型,如圖1所示,其中Q表示有限狀態,e表示觸發條件。在實際應用中,根據邏輯功能,有限狀態機有Moore型和Mealy型兩種類型。Moore型有限狀態機某時刻的輸出,只取決于該時刻的輸入,與前一個狀態沒有關系,可將該類型狀態機看作組合邏輯電路;Mealy型有限狀態機該時刻的輸出不僅取決于該時刻的輸入,還與前一個狀態有關,該種狀態機可視為時序邏輯電路。

2 按鍵狀態分析

■2.1 按鍵的檢測事件

CPU通過檢測按鍵的狀態接收用戶發出的指令,并做出相應的動作。這個過程通常由軟件實現,一般情況下按鍵檢測事件可分為:按鍵按下、按鍵按下后松開、按鍵短按住、按鍵短按住后松開、按鍵短按住后重復、按鍵長按住、按鍵長按住后松開、按鍵長按住后重復,其中事件觸發時間可自行定義。

■2.2 按鍵時間與狀態轉換分析

在單片機應用系統中,一般按鍵數目較少,可以通過對按鍵時間的長短對事件進行劃分,即在指定時間范圍為一個事件。因此程序設計的關鍵是實現按鍵時間與事件狀態的轉換,轉換關系如圖2所示。

按鍵檢測程序每個系統節拍執行一次。按鍵檢測步驟如下:

(1) 在沒有檢測到按鍵按下時,設定按鍵狀態為NONE和前次按鍵值為NOKEY;

(2) 在檢測到有按鍵按下并且按下的按鍵與前一次檢測到的按鍵值不一樣時,更新前次按鍵值為新的鍵值,初始化兩個按鍵計數器keyCntr和keyCntrLong的值為0;

(3) 在檢測到有按鍵按下并且按下的按鍵與前一次檢測到的按鍵值一樣時,兩個按鍵計數器keyCntr和keyCntrLong的值自增1:

若當前按鍵狀態是NONE,在keyCntr計數值超過按鍵消抖時間 KEY_TIME_PRESS后,觸發按鍵按下PRESS事件,按鍵狀態更新為PRESS;

若當前按鍵狀態是PRESS,在keyCntr計數值超過按鍵短按住時間;KEY_TIME_SHORT_HOLD后,觸發按鍵短按住SHORT_HOLD事件,按鍵狀態更新為SHORT_HOLD,同時keyCntr減去一個按鍵短按住后重復時間KEY_TIME_SHORT_HOLD_REPEAT;

圖2 按鍵狀態分析

若當前按鍵狀態是SHORT_HOLD_REPEAT,在keyCntr計數值超過按鍵短按住時間KEY_TIME_SHORT_HOLD后,再次觸發SHORT_HOLD_REPEAT事件,同時keyCntr減去一個按鍵短按住后重復時間KEY_TIME_SHORT_HOLD_REPEAT;此時如果keyCntrLong計數值也超過按鍵長按住時間KEY_TIME_LONG_HOLD,則觸發LONG_HOLD事件,按鍵狀態更新為LONG_HOLD,同時keyCntrLong減去一個按鍵長按住后重復時間KEY_TIME_LONG_HOLD_REPEAT;

若當前按鍵狀態是LONG_HOLD,在keyCntrLong計數值超過按鍵長按住時間KEY_TIME_LONG_HOLD后,觸發LONG_HOLD_REPEAT事件,按鍵狀態更新為LONG_HOLD_REPEAT,同時keyCntrLong減去一個按鍵長按住后重復時間KEY_TIME_LONG_HOLD_REPEAT;

若當前按鍵狀態是LONG_HOLD_REPEAT,在keyCntrLong計數值超過按鍵長按住時間KEY_TIME_LONG_HOLD后,再次觸發LONG_HOLD_REPEAT事件,同時keyCntrLong減去一個按鍵長按住后重復時間KEY_TIME_LONG_HOLD_REPEAT;

(4)在檢測到按鍵松開時:

若當前按鍵狀態是PRESS,觸發PRESS_RELEASE事件;

若當前按鍵狀態是SHORT_HOLD或SHORT_HOLD_REPEAT,觸發SHORT_HOLD_RELEASE事件;

若當前按鍵狀態是LONG_HOLD或LONG_HOLD_REPEAT,觸發LONG_HOLD_RELEASE事件;

并且將按鍵狀態更新為NONE,前次按鍵值為NOKEY。

3 按鍵的程序設計

■3.1 基于有限狀態機按鍵檢測程序流程

程序設計的關鍵點是識別當前的狀態及觸發的外部條件,進行下一狀態的轉換,程序流程如圖3所示。該程序思路適合獨立式按鍵、矩陣式按鍵和ADC按鍵等多種結構形式的按鍵電路,在檢測端口狀態時,若是獨立式按鍵就直接讀取端口;若是矩陣式按鍵則需要設置相應端口輸出輸入狀態后再讀取端口,注意防止損壞端口的可能性;若是ADC按鍵則要切換相應ADC通道后再讀取端口,同時要保證通道切換的正確性,且需要多次讀取平均值,如果是組合按鍵的成員必須在不同的ADC端口上。

圖3 按鍵檢測流程

■3.2 按鍵事件的散轉處理

按鍵狀態的識別及狀態的轉換,最終目的是讓對應的事件得到響應,程序設計上通過將按鍵值、按鍵狀態和按鍵事件一一進行匹配,使用一個二維數組將三者一一對應起來。按鍵值索引keyIndex,按鍵狀態索引keyStateIndex,按鍵事件表KeyEventTable。

KeyEventTable [keyIndex][ keyStateIndex]=

{

// keyIndex=0

{KEY0_NONE, KEY0_PRESS, KEY0_PRESS_RELEASE, KEY0_SHORT_HOLD, KEY0_SHORT_HOLD_RELEASE, KEY0_SHORT_HOLD_REPEAT, KEY0_LONG_HOLD, KEY0_LONG_HOLD_RELEASE, KEY0_LONG_HOLD_REPEAT},

// keyIndex=1

{KEY1_NONE, KEY1_PRESS, KEY1_PRESS_RELEASE, KEY1_SHORT_HOLD, KEY1_SHORT_HOLD_RELEASE, KEY1_SHORT_HOLD_REPEAT, KEY1_LONG_HOLD, KEY1_LONG_HOLD_RELEASE, KEY1_LONG_HOLD_REPEAT},

……

};

4 小結

本文設計了一種高兼容性的按鍵檢測程序。程序的思路是預先將所有按鍵可能產生的按鍵動作編上編號,并用二維數組將編號和對應的執行函數聯系到一起,然后在程序運行時,根據當前檢測到的按鍵值和按鍵狀態值,查找到對應的按鍵事件執行函數并執行之。

此程序設計具有較高的兼容性和實用性,可應用于單片機嵌入式系統中的獨立式按鍵、鍵盤按鍵、ADC按鍵。在使用此程序進行單片機系統設計中應注意如下幾個問題:

(1)需要占用一部分ROM空間來存放按鍵事件表;

(2)各個按鍵值、按鍵狀態和按鍵事件表的排序需要一一對應,如果對應出錯,則相應的按鍵功能必然出錯;

(3)按鍵事件沒有超出255個時,按鍵事件表的大小就等于按鍵事件數目,字節如果超出了255個,則按鍵事件表的大小將需要占用按鍵事件數*2字節的ROM空間,實際應用中應該對按鍵事件數目加以限制。

猜你喜歡
單片機檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
“幾何圖形”檢測題
“角”檢測題
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
小議PLC與單片機之間的串行通信及應用
電子制作(2018年12期)2018-08-01 00:48:04
基于單片機的平衡控制系統設計
電子制作(2017年19期)2017-02-02 07:08:27
主站蜘蛛池模板: 日本道综合一本久久久88| 欧美成人a∨视频免费观看| 国产屁屁影院| 精品人妻系列无码专区久久| 中文字幕在线永久在线视频2020| 欧美啪啪精品| 亚洲美女久久| 亚洲IV视频免费在线光看| 亚洲人成网站色7777| 日本国产精品| 熟妇人妻无乱码中文字幕真矢织江 | 亚洲综合日韩精品| 伊人丁香五月天久久综合| 午夜丁香婷婷| 亚洲国产系列| 中文字幕有乳无码| 国产一级二级在线观看| 国产精品漂亮美女在线观看| 国产传媒一区二区三区四区五区| 国产一在线观看| 久久国产成人精品国产成人亚洲 | 亚洲欧洲日韩久久狠狠爱| 国产精品第5页| 久久无码高潮喷水| 欧美亚洲一区二区三区在线| 国产精品专区第1页| 国产精品香蕉在线观看不卡| 亚洲欧美日韩成人在线| 国产成人精品视频一区二区电影| 国产极品美女在线播放| 九九视频免费看| 69精品在线观看| 一级福利视频| 国产精品美女自慰喷水| 99热最新在线| 在线国产资源| 三级视频中文字幕| 5388国产亚洲欧美在线观看| 亚洲第一网站男人都懂| 日韩精品毛片| 国产小视频在线高清播放| 国产亚洲精品91| 亚洲三级成人| 亚洲色图另类| 最近最新中文字幕在线第一页 | 国内精自线i品一区202| 国产99视频免费精品是看6| 欧美激情视频在线观看一区| 在线亚洲精品福利网址导航| 福利视频一区| 九九视频在线免费观看| 色综合热无码热国产| 成·人免费午夜无码视频在线观看 | 国产在线欧美| 美女无遮挡免费视频网站| 青青草原国产| 91无码视频在线观看| 亚洲精品色AV无码看| 国产爽歪歪免费视频在线观看| 丰满人妻中出白浆| 欧美视频在线播放观看免费福利资源| 久久亚洲黄色视频| 九九视频免费看| 激情六月丁香婷婷四房播| 免费啪啪网址| 日本久久网站| 国外欧美一区另类中文字幕| 久久性视频| 日韩欧美国产中文| 久久不卡国产精品无码| 欧美日本在线观看| 国产原创演绎剧情有字幕的| 国产成人无码播放| 熟妇人妻无乱码中文字幕真矢织江 | 国产自产视频一区二区三区| 亚洲另类色| 国产超薄肉色丝袜网站| 农村乱人伦一区二区| 国产一区二区影院| 狠狠五月天中文字幕| 中文字幕无线码一区| jizz在线免费播放|