新聞中心

EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 基于CPLD的矩陣鍵盤掃描模塊設(shè)計(jì)

基于CPLD的矩陣鍵盤掃描模塊設(shè)計(jì)

作者: 時(shí)間:2010-12-20 來源:網(wǎng)絡(luò) 收藏

在基于PC104的便攜式野外測(cè)試設(shè)備的設(shè)計(jì)中,鍵盤是常用的輸入設(shè)備。對(duì)于便攜式設(shè)備野外工作時(shí),一般使用小型(4x4)鍵盤就能滿足設(shè)備的信息輸入需要;室內(nèi)調(diào)試時(shí),使用標(biāo)準(zhǔn)PS2鍵盤更方便、靈活。一般的做法是保留PC104的鍵盤接口用于接標(biāo)準(zhǔn)鍵盤,利用擴(kuò)展I/O接口完成小鍵盤的掃描和輸入。這樣做雖然可以實(shí)現(xiàn)設(shè)備雙鍵盤同時(shí)工作的功能,卻需耗費(fèi)大量的CPU處理時(shí)間掃描鍵盤,造成CPU處理其他信息的能力下降。而本文設(shè)計(jì)的基于的矩陣模塊能夠很好地解決上述問題。

1 矩陣原理
圖1給出了4x4矩陣鍵盤的電路圖,在圖1中KX[3..0]為掃描碼輸入,KY[3..0]為掃描碼輸出。開始時(shí),首先置KX[3..0]=“0000”;鍵盤掃描碼寄存器和鍵盤掃描碼緩存器Kreg[15..0]和Kscan[15..0]置成“1111111111111111”(全1為沒有鍵按下,有鍵按下時(shí)至少有一位為O),一旦有鍵按下,KY[3..0]輸出不全為“O”的掃描碼觸發(fā)鍵盤掃描功能開始鍵盤掃描,掃描開始后,依次將KX3、KX2、KX1、KX0置“0”,分別將對(duì)應(yīng)的4組KY[3..0]輸入值保存于Kscan[15..12]、Kscan[11..8]、Kscan[7..4]、Kscan[3..0]中,而后比較Kscan和Kreg的大小,如果Kscan小于Kreg,將Kscan保存于Kreg中,重復(fù)上述掃描過程直到Kscan[15..0]各位輸出全為“1”時(shí),說明按下的鍵全部抬起,Kreg[15..0]中的每一個(gè)為“0”的位對(duì)應(yīng)一個(gè)按下的鍵,保留掃描過程中的Kreg最小值就可以處理組合鍵。根據(jù)記錄的Kreg值可以判斷是哪個(gè)或哪幾個(gè)鍵按下,據(jù)此編碼按鍵值后輸出。將KX[3..0]置為“0000”,等待下一次按鍵發(fā)生。

本文引用地址:http://www.butianyuan.cn/article/191430.htm



2 基于的4x4矩陣鍵盤掃描
根據(jù)上述掃描原理和工作流程,如果以PC104 CPU實(shí)現(xiàn)上述矩陣鍵盤的掃描過程,那么在有鍵按下后,CPU必須不停地掃描矩陣鍵盤電路,在此期間不能進(jìn)行其他工作,降低了CPU工作效率,且CPU連續(xù)高速運(yùn)轉(zhuǎn)增加系統(tǒng)功耗。
本文的目的就是在不需要CPU參與的條件下以完成矩陣鍵盤按鍵事件觸發(fā)、按鍵的掃描定位以及按鍵的編碼和鍵值輸出工作,CPU只需要定時(shí)查詢有無鍵按下并讀走按下鍵的按鍵值送入鍵盤緩沖區(qū)。這樣就使CPU從繁重的矩陣鍵盤掃描工作中解脫出來。根據(jù)上述鍵盤掃描工作原理,基于CPLD的4x4矩陣鍵盤掃描模塊功能框圖如圖2所示。


圖中,模塊KeyTri在時(shí)鐘信號(hào)CLK的控制下實(shí)現(xiàn)按鍵事件觸發(fā)和矩陣鍵盤掃描時(shí)序產(chǎn)生功能;模塊keycode在時(shí)鐘信號(hào)CLK和掃描時(shí)序碼SCode的控制下完成輸出鍵盤掃描碼KX,同時(shí)記錄16位鍵盤掃描數(shù)據(jù)等工作,并在所有鍵抬起后對(duì)按下的鍵編碼完成輸出功能;模塊nread實(shí)現(xiàn)按鍵碼的暫存、按鍵狀態(tài)的置位和清除以及矩陣鍵盤的使能;模塊PCPORT完成矩陣鍵盤與CPU的接口;模塊OSC與CreatClock產(chǎn)生控制鍵
盤掃描模塊工作的3 KHz時(shí)鐘信號(hào)CLK。
2.1 鍵盤掃描觸發(fā)模塊(KeyTri)的功能與時(shí)序仿真
鍵盤掃描過程中,掃描信號(hào)不停變化,以判斷鍵盤按鍵的按下和抬起。高速變化的鍵盤掃描信號(hào)不僅使系統(tǒng)功耗增加,而且還會(huì)對(duì)其他敏感電路造成干擾。因此在本設(shè)計(jì)中將鍵盤掃描模式設(shè)計(jì)成鍵按下觸發(fā)掃描方式,只有當(dāng)鍵盤有鍵按下后,才觸發(fā)鍵盤掃描電路產(chǎn)生掃描鍵盤時(shí)序,所有鍵都放開后,停止對(duì)鍵盤的掃描,使電路處于相對(duì)靜止?fàn)顟B(tài),以減少對(duì)其他電路的干擾。
鍵盤按下時(shí)會(huì)有抖動(dòng),在按鍵抖動(dòng)時(shí)掃描鍵盤,可能會(huì)使鍵盤掃描電路產(chǎn)生誤判,因此在鍵盤按下與開始掃描之間應(yīng)加入一段延時(shí),延時(shí)結(jié)束后按鍵仍處于按下狀態(tài),才允許開始鍵盤掃描,這樣做可以最大限度地避免掃描電路的誤判和漏判。
鍵盤掃描觸發(fā)模塊實(shí)現(xiàn)的功能為:在KX=0000的狀態(tài)下,如果有任意一個(gè)鍵被按下,KY必然不全為‘1’,觸發(fā)延時(shí)功能開始延時(shí),延時(shí)結(jié)束后,如果KY仍不全為‘1’,說明該按鍵事件有效,啟動(dòng)掃描時(shí)序產(chǎn)生1H~BH的4位循環(huán)掃描時(shí)序碼,控制后續(xù)的鍵盤掃描電路對(duì)鍵盤掃描,當(dāng)ReSet變低時(shí),立即將掃描時(shí)序碼置為OH,停止本次鍵盤掃描并等待下一次鍵盤按下事件到來。鍵盤掃描觸發(fā)模塊的VHDL語言實(shí)現(xiàn)如下:


上一頁 1 2 3 下一頁

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉