作者/王海珍,內(nèi)蒙古民族大學(xué)
按鍵檢測算法創(chuàng)新在嵌入式開發(fā)中的應(yīng)用
作者/王海珍,內(nèi)蒙古民族大學(xué)
傳統(tǒng)的按鍵檢測算法對應(yīng)的CPU占用率非常大,為了在嵌入式開發(fā)過程中解決這一問題,本文提出了一種基于有限狀態(tài)機(jī)的新型按鍵檢測算法。首先簡要介紹了有限狀態(tài)機(jī)分析設(shè)計(jì)的原理,在其基礎(chǔ)上對按鍵檢測算法進(jìn)行了創(chuàng)新,并將其應(yīng)用到了嵌入式開發(fā)當(dāng)中,實(shí)踐證明,本文的按鍵檢測算法在嵌入式開發(fā)中的應(yīng)用具有一定的創(chuàng)新性,并且實(shí)用價值較高。
按鍵檢測;嵌入式開發(fā);應(yīng)用
在嵌入式系統(tǒng)當(dāng)中,最常用的接口就是鍵盤和按鍵,這兩種接口作為一種常用的方式,主要用于人機(jī)對話的實(shí)現(xiàn),其功能主要包括數(shù)據(jù)的輸入以及數(shù)據(jù)的傳輸,以人工操作的方式來對系統(tǒng)進(jìn)行相應(yīng)的有效控制[1]。傳統(tǒng)的按鍵檢測算法已經(jīng)滿足不了當(dāng)前嵌入式系統(tǒng)功能需求,所以對其進(jìn)行創(chuàng)新成為了必然發(fā)展趨勢。本文主要針對按鍵檢測算法創(chuàng)新在嵌入式開發(fā)中的應(yīng)用展開了相關(guān)論述。
有限狀態(tài)機(jī)實(shí)際上是一種數(shù)學(xué)模型,用于實(shí)時系統(tǒng)的設(shè)計(jì),主要以描述控制特性為主[2]。目前,有限狀態(tài)機(jī)的應(yīng)用領(lǐng)域越來越廣,大多數(shù)實(shí)時系統(tǒng)的研發(fā)都離不開這種模型,尤其是實(shí)時控制系統(tǒng),系統(tǒng)的狀態(tài)與分析機(jī)制和功能之間的關(guān)聯(lián)度非常大。有限狀態(tài)機(jī)不僅包括有限狀態(tài),而且還包括相互之間的狀態(tài)轉(zhuǎn)移,無論何時,僅能夠處于所有給定狀態(tài)中的一個。如果輸入事件達(dá)到接收端,此時狀態(tài)機(jī)就會自動產(chǎn)生一個對應(yīng)的輸出,與此同時其狀態(tài)也會發(fā)生相應(yīng)的轉(zhuǎn)移。
時間序列作為狀態(tài)機(jī)當(dāng)中的重要因素,從硬件的角度對其進(jìn)行分析,時間序列就好比一個同步信號或者觸發(fā)脈沖序列;如果從軟件的角度對其進(jìn)行分析,可以將時間序列看作是一個定時器,主要用于狀態(tài)機(jī)的同步觸發(fā),按照相關(guān)要求,在指定的時間段對輸入進(jìn)行檢測,依據(jù)目前的狀態(tài)完成信號的輸出,與此同時還要完成下一次系統(tǒng)狀態(tài)轉(zhuǎn)移的有效確定。當(dāng)下一次觸發(fā)到來時,系統(tǒng)會在前一次狀態(tài)的基礎(chǔ)上發(fā)生相應(yīng)的轉(zhuǎn)移。另外,也可以將時間序列作為一個系統(tǒng)輸入信號,通過改變其狀態(tài)來改變系統(tǒng)的輸出。因此正確分析時間序列的時間間隔對于系統(tǒng)開發(fā)來說至關(guān)重要,同時依據(jù)系統(tǒng)功能需求挑選出較為合適的時間間隔。通常情況下選取的時間間隔要略小于變化最快的周期值,但是這個數(shù)值必須是外部輸入信號對應(yīng)的周期值[3]。
圖1 狀態(tài)轉(zhuǎn)換圖
本文利用有限狀態(tài)機(jī)對按鍵檢測算法進(jìn)行創(chuàng)新,如圖1所示為按鍵狀態(tài)機(jī)對應(yīng)的狀態(tài)轉(zhuǎn)換圖。
圖1中,完成一次按鍵需要經(jīng)過3個操作步驟,其中時間序列的周期設(shè)置為10ms。此周期可以理解為經(jīng)過10ms運(yùn)行時間就需要對按鍵的輸入信號進(jìn)行一次檢測,確定其狀態(tài)是否發(fā)生改變,同時還需要輸入一個確認(rèn)按鍵狀態(tài)的信號,此時其狀態(tài)會自動發(fā)生轉(zhuǎn)換。本文將按鍵的初始狀態(tài)設(shè)置為“狀態(tài)0”,想要開啟按鍵,只需要令按鍵輸入為“狀態(tài)1”即可。如果按鍵輸出為“狀態(tài)0”,那么其對應(yīng)的下一個狀態(tài)也是“狀態(tài)0”,代表按鍵處于閉合狀態(tài),如果按鍵沒有經(jīng)過消抖處理,就不可以將其確認(rèn)為按下狀態(tài),下一狀態(tài)將轉(zhuǎn)為“狀態(tài)1”。
當(dāng)按鍵輸出的是“狀態(tài)1”,則表明其處于閉合確認(rèn)狀態(tài),并且在10ms之前按鍵始終處于閉合狀態(tài),所以在其基礎(chǔ)上再次檢測到按鍵輸入是“狀態(tài)0”時,可以看作按鍵經(jīng)過了消抖處理,如果按鍵輸出“1”則代表已經(jīng)確認(rèn)按鍵閉合,接下來會自動跳轉(zhuǎn)至“狀態(tài)2”。當(dāng)檢測結(jié)果再次為“1”時,則代表按鍵很有可能在抖動處理時受到外界因素干擾,同時按鍵輸出是“狀態(tài)0”,同時下一狀態(tài)會重新返回至“狀態(tài)0”。
利用上述確認(rèn)方法,如果按鍵輸出為“狀態(tài)1”,就可以達(dá)到按鍵消抖處理的目的。而 “狀態(tài)2”表示按鍵處于等待狀態(tài),即將被釋放,一次完整的按鍵操作過程必須等到按鍵釋放以后才算結(jié)束。依據(jù)圖1,在整個按鍵操作過程當(dāng)中,起初按鍵的狀態(tài)為“狀態(tài)0”,接下來轉(zhuǎn)變?yōu)椤盃顟B(tài)1”,經(jīng)過10ms轉(zhuǎn)變?yōu)椤盃顟B(tài)2”,最終又會返回至初始狀態(tài),即“狀態(tài)0”。在整個輸出信號轉(zhuǎn)變的過程中,只有按鍵輸出“狀態(tài)1”時,才會有以此確認(rèn)按鍵是否處于閉合狀態(tài),并且對應(yīng)的確認(rèn)信號為“1”。因此本文狀態(tài)機(jī)表示出來的按鍵系統(tǒng)在解決按鍵抖動問題的同時,也可以保證整個按鍵輸出過程只有一次按鍵閉合確認(rèn)信號“1”輸出。
傳統(tǒng)算法對應(yīng)的CPU占用率是100%,說明CUP的按鍵檢測程序處于“死等”狀態(tài),通過改進(jìn)按鍵算法以后,CPU占用率減低幅度非常明顯,僅有0.4%,CPU在按鍵檢測結(jié)束以后還會有很多時間來完成其他處理。實(shí)踐證明,本文的按鍵檢測算法在嵌入式開發(fā)中的應(yīng)用具有一定的創(chuàng)新性,并且實(shí)用價值較高。
* [1]鄭玉章,徐愛鈞.嵌入式開發(fā)過程中按鍵檢測算法的改進(jìn)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2014(8):73-75.
* [2]黃慶華.基于情緒激勵的“嵌入式應(yīng)用程序開發(fā)”教學(xué)方法創(chuàng)新[J].柳州職業(yè)技術(shù)學(xué)院學(xué)報,2012,12(3):99-103.
* [3]張旭,李亞利,陳晨,等.嵌入式駕駛員狀態(tài)檢測算法的實(shí)現(xiàn)與優(yōu)化[J].自動化學(xué)報,2012,38(12):2014-2022.