<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ò ) 收藏


觸發(fā)模塊的時(shí)序仿真如圖3所示。

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


在圖3中,①和②之間的時(shí)間為去鍵盤(pán)抖動(dòng)延時(shí),為了方便仿真,此處把延時(shí)時(shí)間設定為4個(gè)周期,實(shí)際使用時(shí),應保持在20~30 ms左右。
2.2 與編碼輸出模塊(keycode)的功能與時(shí)序仿真
所謂,就是在鍵盤(pán)的KX端依次送入掃描碼,以便定位被按下的鍵。鍵盤(pán)編碼是對鍵盤(pán)掃描值譯碼得到按下鍵的按鍵值。
該模塊完成的功能為:在掃描時(shí)序控制碼SCode[3..0]和CLK的下降沿控制下依次輸出4組掃描碼“0111”、“1011”、“1101”、“11 10”掃描整個(gè)鍵盤(pán),同時(shí)記錄鍵盤(pán)的掃描值,將記錄的4組掃描值組合成一組16位的鍵盤(pán)掃描值Kscan[15..0],如果Kscan[15..0]小于Kreg[15..O],將Kscan[15..0]保存于Kreg[15..0]中,當所有鍵放開(kāi)后,對Kreg[15..0]譯碼產(chǎn)生按鍵編碼并輸出。有一個(gè)鍵按下,16位的鍵盤(pán)掃描值中有且只有一位為O,多鍵組合按下時(shí),鍵盤(pán)掃描值中就會(huì )有多個(gè)位為‘0’,因此在鍵盤(pán)掃描過(guò)程中,記錄最小的鍵盤(pán)掃描值,使得掃描模塊不僅能夠處理單鍵,而且可以處理多鍵組合。具體工作過(guò)程說(shuō)明如下:
當SCode [3..0]=0時(shí),KX=0000,置16位鍵盤(pán)掃描值Kscan[15..0]和Kreg[15..0]為全‘1’,此時(shí)無(wú)論哪一個(gè)鍵按下,都可使KY不全為‘1’,從而觸發(fā)掃描模塊工作;
當SCode[3..0]=1或2時(shí),KX=0111,此時(shí)圖1中K12~K15有按下的鍵時(shí),KY對應位為‘0’,其他位為‘1’,記錄KY到鍵盤(pán)掃描碼寄存器的Kreg[15..12];
當SCode[3..0]=3或4時(shí),KX=“1011”,此時(shí)圖1中K08~K11有按下的鍵時(shí),KY對應位為‘0’,其他位為‘1’,記錄KY到鍵盤(pán)掃描碼寄存器的Kreg[11..8];
當SCode[3..0]=5或6時(shí),KX=“1101”,此時(shí)圖1中K04~K07有按下的鍵時(shí),KY對應位為‘0’,其他位為‘1’,記錄KY到鍵盤(pán)掃描碼寄存器的Kreg[7..4];
當SCode[3..0]=7或8時(shí),KX=“1110”,此時(shí)圖l中K00~K03有按下的鍵時(shí),KY對應位為‘O’,其他位為‘1’,記錄KY到鍵盤(pán)掃描碼寄存器的Kreg[3..0];
當SCode[3..0]=9和10時(shí),如果Kscan[15..0]各位不全為“1”且Kscan[15..0]Kreg[15..0],將Kscan[15..O]保存到Kreg[15..0];否則對Kreg[15..0]譯碼產(chǎn)生按鍵編碼并輸出;
當SCode[3..0]=11且記錄Kscan[15..0]各位為全“1”時(shí),產(chǎn)生鍵盤(pán)復位信號ReSet,結束本次鍵盤(pán)掃描。
鍵盤(pán)掃描與編碼輸出模塊的核心模塊VHDL語(yǔ)言實(shí)現如下:



鍵盤(pán)掃描與編碼輸出模塊的時(shí)序仿真圖如圖4所示。


2.3 鍵盤(pán)編碼輸出模塊(nread)的功能與時(shí)序仿真
在該模塊中,KeyrData的最高位KeyData(7)為鍵盤(pán)緩存狀態(tài)指示位,當KeyData(7)=‘0’時(shí),表示鍵盤(pán)緩存中沒(méi)有按鍵碼:當KeyData(7)=‘1’時(shí),表示鍵盤(pán)緩存中有按鍵碼等待CPU讀取。KeyData[6..0]為按下鍵的編碼。ReSet的下降沿用于將KeyVal[6..0]存入KeyData[6..0],同時(shí)將KeyData(7)置成'1'。enKeyOut用于使能鍵盤(pán)輸出,當enKeyOut=‘1’時(shí),允許鍵盤(pán)輸出按鍵碼;當enKeyOut=‘0’時(shí),禁止鍵盤(pán)輸出按鍵碼。ClrKey用于清除鍵盤(pán)緩存狀態(tài)指示位KeyData(7),當ClrKey=‘0’時(shí),置KeyData(7)為‘O’。
鍵盤(pán)編碼輸出模塊的VHDL語(yǔ)言實(shí)現如下:



評論


相關(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>