亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于有限狀態(tài)機的按鍵檢測程序設計

        2021-06-16 03:14:26龔利英
        電子制作 2021年3期
        關鍵詞:狀態(tài)機按鍵鍵盤

        龔利英

        (惠州經(jīng)濟職業(yè)技術學院,廣東惠州,516057)

        0 引言

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

        1 有限狀態(tài)機

        圖1 有限狀態(tài)機的轉換示意圖

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

        2 按鍵狀態(tài)分析

        ■2.1 按鍵的檢測事件

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

        ■2.2 按鍵時間與狀態(tài)轉換分析

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

        按鍵檢測程序每個系統(tǒng)節(jié)拍執(zhí)行一次。按鍵檢測步驟如下:

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

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

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

        若當前按鍵狀態(tài)是NONE,在keyCntr計數(shù)值超過按鍵消抖時間 KEY_TIME_PRESS后,觸發(fā)按鍵按下PRESS事件,按鍵狀態(tài)更新為PRESS;

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

        圖2 按鍵狀態(tài)分析

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

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

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

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

        若當前按鍵狀態(tài)是PRESS,觸發(fā)PRESS_RELEASE事件;

        若當前按鍵狀態(tài)是SHORT_HOLD或SHORT_HOLD_REPEAT,觸發(fā)SHORT_HOLD_RELEASE事件;

        若當前按鍵狀態(tài)是LONG_HOLD或LONG_HOLD_REPEAT,觸發(fā)LONG_HOLD_RELEASE事件;

        并且將按鍵狀態(tài)更新為NONE,前次按鍵值為NOKEY。

        3 按鍵的程序設計

        ■3.1 基于有限狀態(tài)機按鍵檢測程序流程

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

        圖3 按鍵檢測流程

        ■3.2 按鍵事件的散轉處理

        按鍵狀態(tài)的識別及狀態(tài)的轉換,最終目的是讓對應的事件得到響應,程序設計上通過將按鍵值、按鍵狀態(tài)和按鍵事件一一進行匹配,使用一個二維數(shù)組將三者一一對應起來。按鍵值索引keyIndex,按鍵狀態(tài)索引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 小結

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

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

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

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

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

        猜你喜歡
        狀態(tài)機按鍵鍵盤
        你知道手機撥號鍵盤上為什么要有*和#嗎?
        消費電子(2022年6期)2022-08-25 09:44:42
        鍵盤貓
        Cлово месяца
        中國(俄文)(2019年6期)2019-11-22 14:41:58
        基于有限狀態(tài)機的交會對接飛行任務規(guī)劃方法
        ikbc R300機械鍵盤
        電腦報(2019年40期)2019-09-10 07:22:44
        一種多方向導光按鍵結構設計
        電子制作(2016年1期)2016-11-07 08:43:05
        基于有限狀態(tài)機的STM32系統(tǒng)按鍵識別方法
        按鍵的多種狀態(tài)檢測及消抖處理方法
        家電科技(2013年4期)2013-07-09 10:55:08
        解析某型號手機按鍵檢測程序的缺陷
        FPGA設計中狀態(tài)機安全性研究
        黑龍江科學(2011年2期)2011-03-14 00:39:36
        青青草视频网站免费观看| 情人伊人久久综合亚洲| 久久www色情成人免费观看| 欧美自拍视频在线| 亚洲精品一区二区在线播放| 伊人网综合| 国产精品亚洲一区二区三区正片 | 成人在线视频亚洲国产| 免费在线观看av不卡网站| 日本怡春院一区二区三区| 精品国产一级毛片大全| 色青青女同性恋视频日本熟女| 中文字幕有码人妻在线| 久久精品国产色蜜蜜麻豆| 亚洲综合欧美在线| 中文字幕亚洲精品一二三区| 日韩中文字幕版区一区二区三区| 欧美噜噜久久久xxx| 精品亚洲国产成人av| 中文文精品字幕一区二区| 国产精品国产三级国产一地| 日本大片一区二区三区| 激情亚洲一区国产精品久久| 欧美老妇多毛xxxxx极瑞视频| 又爽又黄又无遮挡网站动态图| 妇女性内射冈站hdwwwooo | 很黄很色的女同视频一区二区| 中文字幕人妻中文| 91免费在线| 国产精品久久久看三级| 国产99久久久国产精品~~牛| 一本大道色婷婷在线| 亚洲va成无码人在线观看| 一区二区三区日本伦理| 国产精品第一国产精品| 国产精品白浆一区二区免费看| 人妖熟女少妇人妖少妇| 日韩三级一区二区不卡| 欧美日韩色另类综合| 国产69口爆吞精在线视频喝尿| 久久亚洲av午夜福利精品西区|