<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 基于CPLD的矩陣鍵盤(pán)掃描模塊設計

基于CPLD的矩陣鍵盤(pán)掃描模塊設計

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

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

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

本文引用地址:http://dyxdggzs.com/article/191430.htm



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


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


上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>