專利名稱:鍵盤掃描的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種鍵盤掃描的實(shí)現(xiàn)方法,尤其涉及一種基于狀態(tài)機(jī)的鍵盤掃描的實(shí)現(xiàn)方法。
背景技術(shù):
在編寫單片機(jī)程序的過(guò)程中,鍵盤作為一種人機(jī)接口的實(shí)現(xiàn)方式,是很常用的。而一般的實(shí)現(xiàn)方法有1、外接鍵盤掃描芯片(例如8279、7279等芯片),然后由該芯片來(lái)完成去抖、鍵值讀取、中斷請(qǐng)求等功能。然后單片機(jī)響應(yīng)中斷并讀取鍵值,有的時(shí)候也可以采用輪訓(xùn)的方式。而這種方法需要專門的外圍芯片,增加成本,且不容易檢測(cè)按鍵的按下、釋放以及長(zhǎng)按
鍵等一些事件。2、如果按鍵數(shù)比較少,那么可以直接將按鍵接到單片機(jī)的IO 口,然后各按鍵取邏輯或再送到單片機(jī)的中斷管腳(對(duì)于51體系),單片機(jī)響應(yīng)中斷后再去讀取IO 口的數(shù)據(jù)。 如果單片機(jī)的中斷向量比較多(例如AVR系列的單片機(jī),每個(gè)IO都可以作為中斷),那么也可以直接把各個(gè)按鍵接到各個(gè)具有中斷功能的IO上面。在中斷處理程序中往往需要執(zhí)行這樣一個(gè)操作序列延時(shí)一定時(shí)間來(lái)去抖,如果按鍵有效那么等待按鍵釋放。而這種方法同樣不容易檢測(cè)按鍵的按下、釋放以及長(zhǎng)按鍵等一些事件。且采用軟件延時(shí)的方式,浪費(fèi)CPU 資源。鍵按下之后的理想波形如圖1所示,按鍵處于空閑狀態(tài)Sl時(shí),信號(hào)為高;按鍵處于將按下?tīng)顟B(tài)2時(shí),信號(hào)垂直降為低;按鍵處于按下?tīng)顟B(tài)S3時(shí),信號(hào)為低;按鍵處于將釋放狀態(tài)S4時(shí),信號(hào)垂直升為高。而實(shí)際波形如圖2所示,按鍵處于空閑狀態(tài)Sl時(shí),信號(hào)為高;按鍵處于將按下?tīng)顟B(tài)S2時(shí),信號(hào)出現(xiàn)一段時(shí)間的抖動(dòng),然后降為低;按鍵處于按下?tīng)顟B(tài)S3時(shí), 信號(hào)為低,按鍵處于將釋放狀態(tài)S4時(shí),信號(hào)抖動(dòng)一段時(shí)間后升為高。同時(shí),在數(shù)據(jù)線為低或者為高的過(guò)程中,都有可能出現(xiàn)一些很窄的干擾信號(hào)。如果可以采用基于這種基于狀態(tài)機(jī)的掃描式的方法來(lái)判斷各種按鍵事件,則可有效的解決了上述方法中問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種鍵盤掃描的實(shí)現(xiàn)方法,其工作穩(wěn)定,占用系統(tǒng)資源少, 對(duì)各種按鍵事件響應(yīng)及時(shí)。為實(shí)現(xiàn)上述目的,本發(fā)明提供一種鍵盤掃描的實(shí)現(xiàn)方法,包括如下步驟步驟1、在按鍵處于空閑狀態(tài)時(shí),如果信號(hào)線為高,繼續(xù)保持空閑狀態(tài),如果信號(hào)線為低,切換到按鍵將按下?tīng)顟B(tài);步驟2、在按鍵處于將按下?tīng)顟B(tài)時(shí),如果信號(hào)線為高,切換到按鍵空閑狀態(tài),如果信號(hào)線為低,發(fā)送按鍵按下消息,并將該按鍵按下消息存入消息列隊(duì),切換到按鍵按下?tīng)顟B(tài);步驟3、在按鍵處于按下?tīng)顟B(tài)時(shí),如果信號(hào)線為低,保持按鍵按下?tīng)顟B(tài),并對(duì)信號(hào)為低這一狀態(tài)進(jìn)行計(jì)數(shù),如果信號(hào)線為高,切換到按鍵將釋放狀態(tài);
3
步驟4、在按鍵處于將釋放狀態(tài)時(shí),如果信號(hào)為低,切換到按鍵按下?tīng)顟B(tài),如果信號(hào)線為高,發(fā)送按鍵釋放消息,并將該按鍵釋放消息存入消息隊(duì)列,切換到按鍵空閑狀態(tài)。所述步驟2中所發(fā)送的按鍵按下消息經(jīng)過(guò)系統(tǒng)判斷為不需要消息時(shí),釋放該按鍵按下消息。所述步驟4中信號(hào)為低時(shí),系統(tǒng)根據(jù)預(yù)設(shè)閾值對(duì)信號(hào)為低這一按鍵消息的計(jì)數(shù)進(jìn)行判斷,如果該計(jì)數(shù)的數(shù)值大于該預(yù)設(shè)閾值,該按鍵消息作為一長(zhǎng)按鍵消息,小于該預(yù)設(shè)閾值,該按鍵消息作為一短按鍵消息。所述步驟4中信號(hào)為高時(shí),系統(tǒng)對(duì)所發(fā)送的按鍵釋放消息進(jìn)行判斷,如該按鍵釋放消息為不需要時(shí),釋放該按鍵釋放消息。本發(fā)明的有益效果本發(fā)明所提供的鍵盤掃描的實(shí)現(xiàn)方法,使用狀態(tài)機(jī)的模式設(shè)計(jì)鍵盤掃描程序,其工作穩(wěn)定可靠,占用系統(tǒng)資源非常少,對(duì)各種按鍵事件響應(yīng)及時(shí),在現(xiàn)有的程序框架下還可以方便地?cái)U(kuò)展其它類型的按鍵事件。為了能更進(jìn)一步了解本發(fā)明的特征以及技術(shù)內(nèi)容,請(qǐng)參閱以下有關(guān)本發(fā)明的詳細(xì)說(shuō)明與附圖,然而附圖僅提供參考與說(shuō)明用,并非用來(lái)對(duì)本發(fā)明加以限制。
下面結(jié)合附圖,通過(guò)對(duì)本發(fā)明的具體實(shí)施方式
詳細(xì)描述,將使本發(fā)明的技術(shù)方案及其它有益效果顯而易見(jiàn)。附圖中,圖1為按鍵過(guò)程的理想波形示意圖;圖2為按鍵過(guò)程的實(shí)際波形示意圖;圖3為本發(fā)明鍵盤掃描的實(shí)現(xiàn)方法的流程圖。
具體實(shí)施例方式為更進(jìn)一步闡述本發(fā)明所采取的技術(shù)手段及其效果,以下結(jié)合本發(fā)明的優(yōu)選實(shí)施例及其附圖進(jìn)行詳細(xì)描述。請(qǐng)參閱圖3,本發(fā)明提供一種鍵盤掃描的實(shí)現(xiàn)方法,其包括如下步驟步驟1、在按鍵處于空閑狀態(tài)Sl時(shí),如果信號(hào)線為高,那么繼續(xù)保持按鍵空閑狀態(tài) Si,如果信號(hào)線為低,那么切換到按鍵將按下?tīng)顟B(tài)S2。步驟2、在按鍵處于將按下?tīng)顟B(tài)S2時(shí),如果信號(hào)線為高,那么切換到按鍵空閑狀態(tài) Si,如果信號(hào)線為低,那么切換到按鍵按下?tīng)顟B(tài)S3,此時(shí)表示有了鍵按下的消息事件,把此事件存入消息隊(duì)列,如果系統(tǒng)不需要此消息,此時(shí)可以不存入這個(gè)鍵按下事件。步驟3、在按鍵處于按下?tīng)顟B(tài)S3時(shí),如果信號(hào)線為低,那么保持按鍵按下?tīng)顟B(tài)S3, 并對(duì)信號(hào)為低這一狀態(tài)進(jìn)行計(jì)數(shù),如果信號(hào)線為高,那么切換到按鍵將釋放狀態(tài)S4。步驟4、在按鍵處于釋將放過(guò)態(tài)S4時(shí),如果信號(hào)線為低,則切換到按鍵按下?tīng)顟B(tài) S3,如果信號(hào)線為高,那么切換到按鍵空閑狀態(tài)Si,此時(shí)表示有了鍵釋放的消息事件,把此消息存入消息隊(duì)列,如果系統(tǒng)不需要此消息,此時(shí)可以不存入這個(gè)鍵按下事件,同時(shí)還需要對(duì)信號(hào)為低這一狀態(tài)的計(jì)數(shù)進(jìn)行判斷,如果大于預(yù)設(shè)的閾值,那么表示之前是一個(gè)長(zhǎng)按鍵消息事件,小于此閾值,則表示之前為一個(gè)短按鍵消息事件。
本發(fā)明所提供的鍵盤掃描的實(shí)現(xiàn)方法,使用狀態(tài)機(jī)的模式設(shè)計(jì)鍵盤掃描程序,其工作穩(wěn)定可靠,占用系統(tǒng)資源非常少,對(duì)各種按鍵事件響應(yīng)及時(shí),在現(xiàn)有的程序框架下還可以方便地?cái)U(kuò)展其它類型的按鍵事件。以上所述,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),可以根據(jù)本發(fā)明的技術(shù)方案和技術(shù)構(gòu)思作出其他各種相應(yīng)的改變和變形,而所有這些改變和變形都應(yīng)屬于本發(fā)明權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種鍵盤掃描的實(shí)現(xiàn)方法,其特征在于,包括如下步驟步驟1、在按鍵處于空閑狀態(tài)時(shí),如果信號(hào)線為高,繼續(xù)保持空閑狀態(tài),如果信號(hào)線為低,切換到按鍵將按下?tīng)顟B(tài);步驟2、在按鍵處于將按下?tīng)顟B(tài)時(shí),如果信號(hào)線為高,切換到按鍵空閑狀態(tài),如果信號(hào)線為低,發(fā)送按鍵按下消息,并將該按鍵按下消息存入消息列隊(duì),切換到按鍵按下?tīng)顟B(tài);步驟3、在按鍵處于按下?tīng)顟B(tài)時(shí),如果信號(hào)線為低,保持按鍵按下?tīng)顟B(tài),并對(duì)信號(hào)為低這一狀態(tài)進(jìn)行計(jì)數(shù),如果信號(hào)線為高,切換到按鍵將釋放狀態(tài);步驟4、在按鍵處于將釋放狀態(tài)時(shí),如果信號(hào)為低,切換到按鍵按下?tīng)顟B(tài),如果信號(hào)線為高,發(fā)送按鍵釋放消息,并將該按鍵釋放消息存入消息隊(duì)列,切換到按鍵空閑狀態(tài)。
2.如權(quán)利要求1所述的鍵盤掃描的實(shí)現(xiàn)方法,其特征在于,所述步驟2中所發(fā)送的按鍵按下消息經(jīng)過(guò)系統(tǒng)判斷為不需要消息時(shí),釋放該按鍵按下消息。
3.如權(quán)利要求1所述的鍵盤掃描的實(shí)現(xiàn)方法,其特征在于,所述步驟4中信號(hào)為低時(shí), 系統(tǒng)根據(jù)預(yù)設(shè)閾值對(duì)信號(hào)為低這一按鍵消息的計(jì)數(shù)進(jìn)行判斷,如果該計(jì)數(shù)的數(shù)值大于該預(yù)設(shè)閾值,該按鍵消息作為一長(zhǎng)按鍵消息,小于該預(yù)設(shè)閾值,該按鍵消息作為一短按鍵消息。
4.如權(quán)利要求1所述的鍵盤掃描的實(shí)現(xiàn)方法,其特征在于,所述步驟4中信號(hào)為高時(shí), 系統(tǒng)對(duì)所發(fā)送的按鍵釋放消息進(jìn)行判斷,如該按鍵釋放消息為不需要時(shí),釋放該按鍵釋放消息。
全文摘要
本發(fā)明提供一種鍵盤掃描的實(shí)現(xiàn)方法,其包括如下步驟步驟1、按鍵處于空閑狀態(tài),如果信號(hào)線為高,繼續(xù)保持空閑狀態(tài),如果信號(hào)線為低,切換到按鍵將按下?tīng)顟B(tài);步驟2、按鍵處于將按下?tīng)顟B(tài),如果信號(hào)線為高,切換到按鍵空閑狀態(tài),如果信號(hào)線為低,發(fā)送按鍵按下消息,并將該按鍵按下消息存入消息列隊(duì),切換到按鍵按下?tīng)顟B(tài);步驟3、按鍵處于按下?tīng)顟B(tài),如果信號(hào)線為低,保持按鍵按下?tīng)顟B(tài),并對(duì)信號(hào)為低這一狀態(tài)進(jìn)行計(jì)數(shù),如果信號(hào)線為高,切換到按鍵將釋放狀態(tài);步驟4、按鍵處于將釋放狀態(tài),如果信號(hào)為低,切換到按鍵按下?tīng)顟B(tài),如果信號(hào)線為高,發(fā)送按鍵釋放消息,并將該按鍵釋放消息存入消息隊(duì)列,切換到按鍵空閑狀態(tài),起工作穩(wěn)定,占用資源少。
文檔編號(hào)G06F3/023GK102508556SQ201110337759
公開(kāi)日2012年6月20日 申請(qǐng)日期2011年10月31日 優(yōu)先權(quán)日2011年10月31日
發(fā)明者劉均, 胡貴 申請(qǐng)人:深圳市元征軟件開(kāi)發(fā)有限公司