本發(fā)明涉及按鍵驅(qū)動(dòng)領(lǐng)域,特別是涉及一種按鍵驅(qū)動(dòng)方法及裝置。
背景技術(shù):
現(xiàn)有的按鍵驅(qū)動(dòng)方法,通常為周期性?huà)呙璨⒆x取輸入端的輸入輸出接口電平信號(hào),并經(jīng)延時(shí)消斗后得到輸入端中各個(gè)按鍵的鍵值,從而得到鍵值序列并存入緩沖區(qū)中,當(dāng)下一周期掃描按鍵時(shí),得到的新的鍵值序列存入緩沖區(qū)中并對(duì)應(yīng)覆蓋上一次鍵值序列,應(yīng)用程序再周期性地讀取調(diào)用該緩沖區(qū)中的鍵值,根據(jù)調(diào)用的鍵值讀取相關(guān)的函數(shù)作出相應(yīng)的響應(yīng)。
很顯然,在應(yīng)用程序讀取調(diào)用該緩沖區(qū)中鍵值的周期內(nèi),已掃描到的有效按鍵在應(yīng)用程序讀取調(diào)用前就可能已經(jīng)消失了,尤其是在多個(gè)按鍵同時(shí)按下而應(yīng)用程序需要響應(yīng)所有按鍵的按下或抬起時(shí),在應(yīng)用程序讀取調(diào)用鍵值的周期內(nèi),已掃描到的有效按鍵在應(yīng)用程序讀取調(diào)用前可能消失的更多,由于有效按鍵在應(yīng)用程序處理前消失,則應(yīng)用程序處理的按鍵值存在漏洞,從而導(dǎo)致最后作出的響應(yīng)存在錯(cuò)誤,而這種錯(cuò)誤將會(huì)對(duì)工業(yè)生產(chǎn)造成巨大的損失。
技術(shù)實(shí)現(xiàn)要素:
為解決上述技術(shù)問(wèn)題,本發(fā)明一方面提供一種按鍵驅(qū)動(dòng)方法,包括:
按鍵驅(qū)動(dòng)裝置周期性讀取輸入端接口電平信號(hào),得到鍵值序列,并將所述鍵值序列依次存入緩沖區(qū)中;
所述按鍵驅(qū)動(dòng)裝置將每相鄰的兩個(gè)所述鍵值序列進(jìn)行對(duì)比,得到按鍵事件值序列,并依次存入循環(huán)存儲(chǔ)隊(duì)列中;
所述按鍵驅(qū)動(dòng)裝置周期性調(diào)用所述循環(huán)存儲(chǔ)隊(duì)列中的按鍵事件值序列,并根據(jù)所述按鍵事件值序列驅(qū)動(dòng)對(duì)應(yīng)的函數(shù)做出相應(yīng)的響應(yīng)。
進(jìn)一步地,所述輸入端為行列矩陣鍵盤(pán)。
進(jìn)一步地,所述將每相鄰的兩個(gè)所述鍵值序列進(jìn)行對(duì)比后還包括:
周期性更新所述緩沖區(qū)中的鍵值序列。
進(jìn)一步地,所述周期性更新所述緩沖區(qū)中的鍵值序列具體為:
當(dāng)所述緩沖區(qū)中的鍵值序列的個(gè)數(shù)等于3時(shí),依次丟棄最早獲得的鍵值序列。
進(jìn)一步地,所述將相鄰的兩個(gè)所述鍵值序列進(jìn)行對(duì)比,得到按鍵事件值序列,并依次存入循環(huán)存儲(chǔ)隊(duì)列中具體為:
將相鄰的兩個(gè)所述鍵值序列中按序依次進(jìn)行對(duì)比;
當(dāng)相鄰的兩個(gè)所述鍵值序列中相同位置處的鍵值不同時(shí),則判斷為所述位置對(duì)應(yīng)的按鍵彈起或按下;
將所述按鍵彈起或按下記為按鍵事件,得到按鍵事件值序列,并依次存入循環(huán)存儲(chǔ)隊(duì)列中。
進(jìn)一步地,所述循環(huán)存儲(chǔ)隊(duì)列的容量為所述輸入端中的按鍵個(gè)數(shù)的兩倍及以上。
進(jìn)一步地,所述周期性讀取的周期時(shí)間為1ms~10ms。
進(jìn)一步地,所述周期性調(diào)用的周期時(shí)間為1ms~200ms。
本發(fā)明另一方面提供一種按鍵驅(qū)動(dòng)裝置,包括:
數(shù)據(jù)讀取和存儲(chǔ)單元,用于周期性讀取輸入端接口電平信號(hào),得到鍵值序列,并將所述鍵值序列依次存入緩沖區(qū)中;
以及將相鄰的兩個(gè)所述鍵值序列進(jìn)行對(duì)比,得到按鍵事件值序列,并依次存入循環(huán)存儲(chǔ)隊(duì)列中;
按鍵驅(qū)動(dòng)單元,用于周期性調(diào)用所述按鍵事件值序列,并根據(jù)所述按鍵事件值序列驅(qū)動(dòng)對(duì)應(yīng)的函數(shù)做出相應(yīng)的響應(yīng)。
進(jìn)一步地,所述按鍵驅(qū)動(dòng)單元,還用于所述并將所述鍵值序列依次存入緩沖區(qū)中后,周期性更新所述緩沖區(qū)中的鍵值序列。
有益效果
本發(fā)明提供的一種按鍵驅(qū)動(dòng)方法及裝置,通過(guò)周期性地讀取輸入端接口電平信號(hào)而獲得鍵值序列,并將該鍵值序列依次存入緩沖區(qū)中,然后周期性地對(duì)相鄰的兩個(gè)鍵值序列按序進(jìn)行對(duì)比,得到按鍵事件序列,再將該按鍵事件序列依次存入到循環(huán)存儲(chǔ)隊(duì)列中,通過(guò)周期性調(diào)用該按鍵事件序列,應(yīng)用程序根據(jù)該按鍵事件序列驅(qū)動(dòng)對(duì)應(yīng)的函數(shù)作出相應(yīng)的響應(yīng)。與現(xiàn)有技術(shù)中直接調(diào)用緩沖區(qū)中的鍵值相比,本方法可以做到不漏按鍵狀態(tài)改變值,保證了物理鍵盤(pán)使用的穩(wěn)定性。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例提供的一種按鍵驅(qū)動(dòng)方法流程圖。
圖2為本發(fā)明實(shí)施例提供的一種按鍵驅(qū)動(dòng)裝置示意圖。
圖3為本發(fā)明實(shí)施例提供的一種按鍵驅(qū)動(dòng)方法部分圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明提供的一種按鍵驅(qū)動(dòng)方法流程圖,包括:
步驟101:按鍵驅(qū)動(dòng)裝置周期性讀取輸入端接口電平信號(hào),得到鍵值序列,并將所述鍵值序列依次存入緩沖區(qū)中;
其中,輸入端可為行列矩陣鍵盤(pán),鍵值序列均按照輸入端中的按鍵編號(hào)依次排列構(gòu)成,且由于周期性讀取入端接口電平信號(hào),則得到周期性的鍵值序列,并依次存入緩存區(qū)中,其中每一鍵值序列中的值都存入緩存區(qū)中對(duì)應(yīng)位置。具體地,可按照按鍵編號(hào)從大到小或從小到大的順序排列構(gòu)成鍵值序列;電平信號(hào)為高電平信號(hào)(通常由1表示)時(shí)按鍵處于抬起狀態(tài),低電平信號(hào)(通常由0表示)時(shí)按鍵處于按下?tīng)顟B(tài)。
需要指出的是,由于輸入端按鍵在按下或抬起的一瞬間,機(jī)械特性決定了這一瞬間會(huì)產(chǎn)生電平波動(dòng),即此時(shí)電平是不穩(wěn)定的,需要等待電平達(dá)到穩(wěn)定值時(shí),才能正確讀取輸入端接口,為此,在輸入端接口剛檢測(cè)到電平變化時(shí),馬上讀取該電平信號(hào)是不準(zhǔn)確的,需要從此刻開(kāi)始,等待幾毫秒的消抖時(shí)間(消抖時(shí)間長(zhǎng)短取決于按鍵特性,例如,普通薄膜按鍵消抖時(shí)間10ms即可),從而讀取到可信的電平信號(hào)。
步驟102:所述按鍵驅(qū)動(dòng)裝置將每相鄰的兩個(gè)所述鍵值序列進(jìn)行對(duì)比,得到按鍵事件值序列,并依次存入循環(huán)存儲(chǔ)隊(duì)列中;
具體地,將相鄰的兩個(gè)所述鍵值序列中按序依次進(jìn)行對(duì)比,即可從上到下或者從下到上依次對(duì)比;當(dāng)相鄰的兩個(gè)所述鍵值序列中相同位置處的鍵值不同時(shí),例如,相鄰鍵值序列中任一相同位置處的鍵值不一致時(shí),則判斷為所述位置對(duì)應(yīng)的按鍵彈起或按下。按以下方式判斷抬起或按下:
當(dāng)上一次鍵值為1,當(dāng)前鍵值為0時(shí),則表明該位置出的按鍵按下;當(dāng)上一次鍵值為0,當(dāng)前鍵值為1時(shí),則表明該位置出的按鍵抬起。
并將按鍵彈起或按下記為按鍵事件,得到按鍵事件值序列,依次存入循環(huán)存儲(chǔ)隊(duì)列中,同時(shí)并記錄相應(yīng)的按鍵編號(hào)以便應(yīng)用程序調(diào)用。
步驟103:所述按鍵驅(qū)動(dòng)裝置周期性調(diào)用所述循環(huán)存儲(chǔ)隊(duì)列中的按鍵事件值序列,并根據(jù)所述按鍵事件值序列驅(qū)動(dòng)對(duì)應(yīng)的函數(shù)做出相應(yīng)的響應(yīng)。
本發(fā)明在另一實(shí)施例中,為了減少緩存區(qū)的內(nèi)存量,將每相鄰的兩個(gè)所述鍵值序列進(jìn)行對(duì)比后還包括:
周期性更新緩沖區(qū)中的鍵值序列。
具體地,如圖3所示,以一個(gè)按鍵值為例,當(dāng)緩沖區(qū)中的鍵值序列的個(gè)數(shù)等于3時(shí),從左至右依次為最新鍵值、前一次鍵值和最早一次鍵值,當(dāng)前一次鍵值和最早一次鍵值對(duì)比之后,依次丟棄最早獲得的鍵值序列,且前一次鍵值移動(dòng)至最早一次鍵值處,最新鍵值移動(dòng)至前一次鍵值處,下一周期掃描的新的鍵值存入最新鍵值處,此時(shí)前一次鍵值就成為了最早鍵值,將最新鍵值、前一次鍵值又進(jìn)行對(duì)比,對(duì)比之后丟次最早鍵值,以此類(lèi)推,持續(xù)進(jìn)行更新。
需要說(shuō)明的是,當(dāng)首次獲得2個(gè)鍵值序列時(shí),將首次獲得的鍵值序列和第二次獲得的鍵值序列進(jìn)行一一對(duì)比,即是相同位置處進(jìn)行對(duì)比,當(dāng)獲得第三鍵值時(shí),將第三鍵值與第二鍵值進(jìn)行對(duì)比,對(duì)比之后將最早獲得的鍵值序列丟棄,并將鍵值序列依次向右移動(dòng)。
為了更清楚的描述上述提供的一種按鍵驅(qū)動(dòng)方法,舉個(gè)例子,周期性?huà)呙璜@得某一個(gè)按鍵的前三次(第一次、第二次和第三次)鍵值分別為1、1、0,獲得前兩次鍵值1、1時(shí),將前兩次鍵值進(jìn)行對(duì)比,則該按鍵沒(méi)有變化為抬起狀態(tài),獲得第三次鍵值0時(shí),將第二次鍵值1與第三次鍵值0進(jìn)行對(duì)比,此時(shí)鍵值發(fā)生變化,從高電平變成了低電平,則該按鍵為按下?tīng)顟B(tài),并將變化的狀態(tài)作為一個(gè)按鍵事件,同理,判斷其他按鍵的變化狀態(tài),當(dāng)電平信號(hào)改變時(shí),則為按鍵事件,每一個(gè)周期形成一個(gè)按鍵事件隊(duì)列,將該按鍵事件隊(duì)列依次存入循環(huán)隊(duì)列中,供按鍵驅(qū)動(dòng)裝置根據(jù)按鍵事件值序列驅(qū)動(dòng)對(duì)應(yīng)的函數(shù)做出相應(yīng)的響應(yīng)。以此類(lèi)推,繼續(xù)獲得新的鍵值,第四、第五及其他鍵值,將第四鍵值與第三鍵值進(jìn)行對(duì)比,第五鍵值與第四鍵值進(jìn)行對(duì)比,并將對(duì)比后的按鍵事件隊(duì)列存入循環(huán)存儲(chǔ)隊(duì)列中,供按鍵驅(qū)動(dòng)裝置根據(jù)按鍵事件值序列驅(qū)動(dòng)對(duì)應(yīng)的函數(shù)做出相應(yīng)的響應(yīng)。
優(yōu)選地,在將第二次鍵值1與第三次鍵值0進(jìn)行對(duì)比后,將第一次獲得的鍵值丟棄,并將鍵值依次向右移動(dòng)一個(gè)位置,即第二鍵值位于第一鍵值處,第三鍵值位于第二鍵值處,將獲得新的鍵值時(shí),假定第四次鍵值為0時(shí),位于第三鍵值處,即是保證緩存區(qū)中只有三個(gè)鍵值,可節(jié)約緩存區(qū)的空間,將第四鍵值0與第三鍵值0進(jìn)行對(duì)比,則該按鍵沒(méi)有變化,仍然處于按下?tīng)顟B(tài),再丟棄第二次獲得的按鍵,依次類(lèi)推,獲得第五、第六及其他按鍵,并進(jìn)行對(duì)應(yīng)的對(duì)比,得到按鍵事件隊(duì)列,并將按鍵事件隊(duì)列存入循環(huán)存儲(chǔ)隊(duì)列中,與此同時(shí),依次丟棄最早獲得的鍵值,供按鍵驅(qū)動(dòng)裝置根據(jù)按鍵事件值序列驅(qū)動(dòng)對(duì)應(yīng)的函數(shù)做出相應(yīng)的響應(yīng)。
應(yīng)當(dāng)說(shuō)明的是,本發(fā)明提供的一種按鍵驅(qū)動(dòng)方法也可以是獲得四個(gè)按鍵、五個(gè)按鍵及其以上個(gè)數(shù)的按鍵值對(duì)比后再丟棄最早獲得的鍵值,上述的最早是相對(duì)于緩存區(qū)中的鍵值而言,最右邊的鍵值即為最早的鍵值!
特別地,循環(huán)存儲(chǔ)隊(duì)列的容量可為輸入端中的按鍵個(gè)數(shù)的兩倍及以上。
優(yōu)選地,所述周期性讀取的周期時(shí)間為1ms~10ms。
優(yōu)選地,所述周期性調(diào)用的周期時(shí)間為1ms~200ms。
對(duì)應(yīng)于本發(fā)明提供的一種按鍵驅(qū)動(dòng)方法,本發(fā)明還提供一種按鍵驅(qū)動(dòng)裝置,如圖2所示包括:
數(shù)據(jù)讀取和存儲(chǔ)單元201,用于周期性讀取輸入端接口電平信號(hào),得到鍵值序列,并將所述鍵值序列依次存入緩沖區(qū)中;以及將相鄰的兩個(gè)所述鍵值序列進(jìn)行對(duì)比,得到按鍵事件值序列,并依次存入循環(huán)存儲(chǔ)隊(duì)列中;
其中,輸入端可為行列矩陣鍵盤(pán),鍵值序列均按照輸入端中的按鍵編號(hào)依次排列構(gòu)成。具體地,可按照按鍵編號(hào)從大到小或從小到大的順序排列構(gòu)成鍵值序列;電平信號(hào)為高電平信號(hào)(通常由1表示)時(shí)按鍵處于抬起狀態(tài),低電平信號(hào)(通常由0表示)時(shí)按鍵處于按下?tīng)顟B(tài)。
具體地,數(shù)據(jù)讀取和存儲(chǔ)單元201讀取輸入端接口電平信號(hào),并按序得到鍵值序列,由于周期性讀取則得到周期性的鍵值序列。
將相鄰的兩個(gè)所述鍵值序列中按序依次進(jìn)行對(duì)比,即可從上到下或者從下到上依次對(duì)比;當(dāng)相鄰的兩個(gè)所述鍵值序列中相同位置處的鍵值不同時(shí),例如,相鄰鍵值序列中任一相同位置處的鍵值不一致時(shí),則判斷為所述位置對(duì)應(yīng)的按鍵彈起或按下。按以下方式判斷抬起或按下:
當(dāng)上一次鍵值為1,當(dāng)前鍵值為0時(shí),則表明該位置出的按鍵按下;當(dāng)上一次鍵值為0,當(dāng)前鍵值為1時(shí),則表明該位置出的按鍵抬起。
并將按鍵彈起或按下記為按鍵事件,得到按鍵事件值序列,依次存入循環(huán)存儲(chǔ)隊(duì)列中,同時(shí)并記錄相應(yīng)的按鍵編號(hào)以便應(yīng)用程序調(diào)用。
按鍵驅(qū)動(dòng)單元202,用于周期性調(diào)用所述按鍵事件值序列,并根據(jù)所述按鍵事件值序列驅(qū)動(dòng)對(duì)應(yīng)的函數(shù)做出相應(yīng)的響應(yīng)。
對(duì)應(yīng)于本發(fā)明的另一實(shí)施例,為了減少緩存區(qū)的內(nèi)存量,將鍵值序列依次存入緩沖區(qū)中后還包括:按鍵驅(qū)動(dòng)單元202還用于周期性更新緩沖區(qū)中的鍵值序列。
具體地,如圖3所示,以一個(gè)按鍵值為例,當(dāng)緩沖區(qū)中的鍵值序列的個(gè)數(shù)等于3時(shí),從左至右依次為最新鍵值、前一次鍵值和最早一次鍵值,當(dāng)前一次鍵值和最早一次鍵值對(duì)比之后,依次丟棄最早獲得的鍵值序列,且前一次鍵值移動(dòng)至最早一次鍵值處,最新鍵值移動(dòng)至前一次鍵值處,下一周期掃描的新的鍵值存入最新鍵值處,此時(shí)前一次鍵值就成為了最早鍵值,將最新鍵值、前一次鍵值又進(jìn)行對(duì)比,對(duì)比之后丟次最早鍵值,以此類(lèi)推,持續(xù)進(jìn)行更新。
由此可以看出,對(duì)所有數(shù)值按鍵序列都進(jìn)行了對(duì)比,然后再存入循環(huán)存儲(chǔ)隊(duì)列中,不會(huì)漏掉每一次掃描后的所有按鍵的物理鍵值,也就不會(huì)漏掉由物理鍵值轉(zhuǎn)換成的數(shù)值鍵值,通過(guò)掃描循環(huán)存儲(chǔ)隊(duì)列中的狀態(tài)變化值序列,即可完成對(duì)硬件鍵盤(pán)上的所有按鍵進(jìn)行相應(yīng)的驅(qū)動(dòng)操作,保證了該硬件鍵盤(pán)使用的穩(wěn)定性。
以上是對(duì)本發(fā)明所提供的一種按鍵驅(qū)動(dòng)方法及裝置進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以對(duì)本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。