吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用可編程邏輯器件實現矩陣鍵盤掃描模塊的設計

電子設計 ? 作者:電子設計 ? 2018-10-07 11:20 ? 次閱讀

給出了CPLD 部分模塊的VHDL 語言實現和仿真波形。在矩陣鍵盤的掃描、編碼、輸出完全不需CPU 控制的前提下,實現標準鍵盤和矩陣鍵盤雙鍵盤同時使用。

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

1 矩陣鍵盤掃描原理

圖1 給出了4×4 矩陣鍵盤的電路圖, 在圖1 中KX[3..0]為掃描碼輸入,KY[3..0]為掃描碼輸出。鍵盤掃描開始時,首先置KX[3..0]=“0000”;鍵盤掃描碼寄存器和鍵盤掃描碼緩存器Kreg[15..0]和Kscan[15..0]置成“1111111111111111” ( 全1為沒有鍵按下,有鍵按下時至少有一位為0),一旦有鍵按下,KY[3..0]輸出不全為“0”的掃描碼觸發鍵盤掃描功能開始鍵盤掃描,掃描開始后,依次將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 中,重復上述掃描過程直到Kscan[15..0]各位輸出全為“1”時,說明按下的鍵全部抬起,Kreg[15..0]中的每一個為“0”的位對應一個按下的鍵,保留掃描過程中的Kreg 最小值就可以處理組合鍵。

根據記錄的Kreg 值可以判斷是哪個或哪幾個鍵按下, 據此編碼按鍵值后輸出。將KX[3..0]置為“0000”,等待下一次按鍵發生。

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

圖1 4×4 矩陣鍵盤電路圖。

2 基于CPLD 的4×4 矩陣鍵盤掃描模塊設計

根據上述掃描原理和工作流程,如果以PC104 CPU 實現上述矩陣鍵盤的掃描過程, 那么在有鍵按下后,CPU 必須不停地掃描矩陣鍵盤電路,在此期間不能進行其他工作,降低了CPU 工作效率,且CPU 連續高速運轉增加系統功耗。

本文的目的就是在不需要CPU 參與的條件下以CPLD完成矩陣鍵盤按鍵事件觸發、按鍵的掃描定位以及按鍵的編碼和鍵值輸出工作,CPU 只需要定時查詢有無鍵按下并讀走按下鍵的按鍵值送入鍵盤緩沖區。這樣就使CPU 從繁重的矩陣鍵盤掃描工作中解脫出來。根據上述鍵盤掃描工作原理,基于CPLD 的4×4 矩陣鍵盤掃描模塊功能框圖如圖2 所示。

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

圖2 4×4 矩陣鍵盤掃描模塊CPLD 實現框圖。

圖中, 模塊KeyTri 在時鐘信號CLK 的控制下實現按鍵事件觸發和矩陣鍵盤掃描時序產生功能; 模塊keycode 在時鐘信號CLK 和掃描時序碼SCode 的控制下完成輸出鍵盤掃描碼KX,同時記錄16 位鍵盤掃描數據等工作,并在所有鍵抬起后對按下的鍵編碼完成輸出功能;模塊nread 實現按鍵碼的暫存、按鍵狀態的置位和清除以及矩陣鍵盤的使能;模塊PCPORT 完成矩陣鍵盤與CPU 的接口; 模塊OSC 與CreatClock 產生控制鍵盤掃描模塊工作的3 KHz 時鐘信號CLK。

2.1 鍵盤掃描觸發模塊(KeyTri)的功能與時序仿真

鍵盤掃描過程中,掃描信號不停變化,以判斷鍵盤按鍵的按下和抬起。高速變化的鍵盤掃描信號不僅使系統功耗增加,而且還會對其他敏感電路造成干擾。因此在本設計中將鍵盤掃描模式設計成鍵按下觸發掃描方式,只有當鍵盤有鍵按下后,才觸發鍵盤掃描電路產生掃描鍵盤時序,所有鍵都放開后,停止對鍵盤的掃描,使電路處于相對靜止狀態,以減少對其他電路的干擾。

鍵盤按下時會有抖動,在按鍵抖動時掃描鍵盤,可能會使鍵盤掃描電路產生誤判,因此在鍵盤按下與開始掃描之間應加入一段延時,延時結束后按鍵仍處于按下狀態,才允許開始鍵盤掃描,這樣做可以最大限度地避免掃描電路的誤判和漏判。

鍵盤掃描觸發模塊實現的功能為: 在KX=“0000” 的狀態下,如果有任意一個鍵被按下,KY 必然不全為‘1’,觸發延時功能開始延時,延時結束后,如果KY 仍不全為‘1’,說明該按鍵事件有效, 啟動掃描時序產生1H~BH 的4 位循環掃描時序碼,控制后續的鍵盤掃描電路對鍵盤掃描,當ReSet 變低時,立即將掃描時序碼置為0H,停止本次鍵盤掃描并等待下一次鍵盤按下事件到來。鍵盤掃描觸發模塊的VHDL 語言實現如下:

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

鍵盤掃描觸發模塊的時序仿真如圖3 所示。

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

圖3 鍵盤掃描觸發模塊的時序仿真。

在圖3 中,①和②之間的時間為去鍵盤抖動延時,為了方便仿真,此處把延時時間設定為4 個周期,實際使用時,應保持在20~30 ms 左右。

2.2 鍵盤掃描與編碼輸出模塊(keycode)的功能與時序仿真

所謂鍵盤掃描,就是在鍵盤的KX 端依次送入掃描碼,以便定位被按下的鍵。鍵盤編碼是對鍵盤掃描值譯碼得到按下鍵的按鍵值。

該模塊完成的功能為: 在掃描時序控制碼SCode [3..0]和CLK 的下降沿控制下依次輸出4 組掃描碼“0111”、“1011”、“1101”、“1110”掃描整個鍵盤,同時記錄鍵盤的掃描值,將記錄的4 組掃描值組合成一組16 位的鍵盤掃描值Kscan [15..0],如果Kscan[15..0] 小于Kreg[15..0], 將Kscan[15..0] 保存于Kreg[15..0]中,當所有鍵放開后,對Kreg[15..0]譯碼產生按鍵編碼并輸出。有一個鍵按下,16 位的鍵盤掃描值中有且只有一位為0,多鍵組合按下時,鍵盤掃描值中就會有多個位為‘0’,因此在鍵盤掃描過程中,記錄最小的鍵盤掃描值,使得掃描模塊不僅能夠處理單鍵,而且可以處理多鍵組合。具體工作過程說明如下:

當SCode [3..0]=0 時,KX=“0000”, 置16 位鍵盤掃描值Kscan[15..0]和Kreg[15..0]為全‘1’,此時無論哪一個鍵按下,都可使KY 不全為‘1’,從而觸發掃描模塊工作;當SCode[3..0]=1 或2 時,KX=“0111”,此時圖1 中K12~K15 有按下的鍵時, KY 對應位為‘0’,其他位為‘1’,記錄KY到鍵盤掃描碼寄存器的Kreg[15..12];當SCode[3..0]=3 或4 時,KX=“1011”,此時圖1 中K08~K11 有按下的鍵時, KY 對應位為‘0’,其他位為‘1’,記錄KY到鍵盤掃描碼寄存器的Kreg[11..8];當SCode[3..0]=5 或6 時,KX=“1101”,此時圖1 中K04~K07 有按下的鍵時, KY 對應位為‘0’,其他位為‘1’,記錄KY到鍵盤掃描碼寄存器的Kreg[7..4];當SCode[3..0]=7 或8 時,KX=“1110”,此時圖1 中K00~K03 有按下的鍵時, KY 對應位為‘0’,其他位為‘1’,記錄KY到鍵盤掃描碼寄存器的Kreg[3..0];當SCode[3..0]=9 和10 時,如果Kscan[15..0]各位不全為“1” 且Kscan[15..0]< Kreg[15..0], 將Kscan[15..0] 保存到Kreg[15..0];否則對Kreg[15..0]譯碼產生按鍵編碼并輸出;當SCode[3..0]=11 且記錄Kscan[15..0]各位為全“1”時,產生鍵盤復位信號ReSet,結束本次鍵盤掃描。

鍵盤掃描與編碼輸出模塊的核心模塊VHDL 語言實現如下:

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

鍵盤掃描與編碼輸出模塊的時序仿真圖如圖4 所示。

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

圖4 鍵盤掃描與編碼模塊的時序仿真。

2.3 鍵盤編碼輸出模塊(nread)的功能與時序仿真

在該模塊中,KeyData 的最高位KeyData(7)為鍵盤緩存狀態指示位,當KeyData(7)=‘0’時,表示鍵盤緩存中沒有按鍵碼;當KeyData(7)=‘1’時,表示鍵盤緩存中有按鍵碼等待CPU 讀取。KeyData[6..0]為按下鍵的編碼。ReSet 的下降沿用于將KeyVal[6..0]存入KeyData[6..0],同時將KeyData(7)置成‘1’。enKeyOut 用于使能矩陣鍵盤輸出,當enKeyOut=‘1’時,允許矩陣鍵盤輸出按鍵碼;當enKeyOut=‘0’時,禁止矩陣鍵盤輸出按鍵碼。ClrKey 用于清除鍵盤緩存狀態指示位KeyData(7),當ClrKey=‘0’時,置KeyData(7)為‘0’。

鍵盤編碼輸出模塊的VHDL 語言實現如下:

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

鍵盤編碼輸出模塊的時序仿真圖如圖5 所示。

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

圖5 鍵盤編碼輸出模塊的時序仿真。

2.4 接口模塊(PCPORT)的功能與時序仿真

該模塊用于實現CPU 讀入鍵盤碼以及矩陣鍵盤控制信號的輸出。開始時,CPU 首先應通過該模塊送出OSCEn=‘1’ 信號, 使振蕩器模塊(OSC) 和時鐘產生模塊(CreatClock)開始工作,產生驅動掃描模塊工作的時鐘信號F3kHz;接下來送出鍵盤禁止信號enKeyOut=0;禁止矩陣鍵盤在穩定工作前隨機輸出按鍵值; 其次送出清除鍵盤緩存狀態指示位的ClrKey 信號; 最后再送出鍵盤使能信號enKeyOut=‘1’,開始模塊掃描鍵盤工作。接口模塊的時序仿真圖如圖6 所示。

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

圖6 接口模塊的時序仿真。

2.5 其他模塊的功能

振蕩器模塊(OSC) 為利用Altera 公司的IP 核產生的MAXII 系列CPLD 內帶的振蕩器, 用于在使能信號的控制下產生3.3 MHz 的時鐘輸出。

時鐘產生模塊(CreatClock),用于將3.3 MHz 的時鐘分頻產生3 KHz 的鍵盤掃描時鐘,驅動整個鍵盤掃描模塊工作。

3 控制軟件的設計

本文軟件設計的基本思想是:CPU 利用定時中斷查詢矩陣鍵盤狀態并讀入矩陣鍵盤的按鍵碼,如果按鍵碼為需要立即響應的特殊功能鍵(如熱啟動鍵),即在中斷服務程序中作出處理,否則直接送入與標準鍵盤共用的鍵盤緩沖區,在鍵盤緩沖區與標準鍵盤送來的按鍵碼一起排隊等待CPU 響應處理,從而實現雙鍵盤同時工作。在向鍵盤緩沖區寫入按鍵值時,必須使用DOS 軟中斷,否則會由于中斷優先級的原因而使新寫入的按鍵碼得不到響應。

矩陣鍵盤的控制軟件采用C 語言編制,利用PC104 的定時器中斷定時查詢矩陣鍵盤, 如果有鍵值, 將其存入PC104 的鍵盤緩沖區,等待PC104 使用??刂瞥绦虻脑创a如下:

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

使用可編邏輯器件實現矩陣鍵盤掃描模塊的設計

4 測試結果

本文所述的鍵盤掃描模塊已經在多功能電法接收機中使用,在使用過程中對矩陣鍵盤的響應時間、準確度、CPU 處理時間占用、以及雙鍵盤同時工作性能等指標進行了測試分析,結果如下:

1)矩陣鍵盤響應時間和準確度測試,理論上計算矩陣鍵盤的最短響應時間為T=t1+t2+t3+t4=55.9 ms(其中,t1為防抖動延時時間30 ms; t2鍵盤掃描最短用時, 共掃描2 次用22 個F3 kHz 時鐘周期6.6 ms; t3為鍵盤值暫存時間,3 個F3kHz 時鐘周期1 ms; t4為查詢鍵盤中斷間隔18.3 ms), 考慮到操作鍵盤的速度, 測試方法為全部16 個鍵以3 次/s 的速度連續按6 次,間隔5 s 換一個鍵,將鍵值輸出到顯示器觀察輸入情況,測試結果為:總按鍵數:96;顯示按鍵數:96;漏判按鍵數:0;錯判按鍵數:0;準確率:100%。

2)矩陣鍵盤占用CPU 時間分析,通過對矩陣鍵盤按鍵值的讀入程序分析可知, 當允許矩陣鍵盤輸出且有鍵按下時,每次中斷服務程序需要額外執行8 條語句, 大約用時4 μs;當允許矩陣鍵盤輸出且沒有鍵按下時,每次中斷服務程序需要額外執行3 條語句,大約用時1.5 μs;與CPU 完成矩陣鍵盤掃描工作(假設從鍵按下到釋放一般用時300 ms)相比,一次按鍵讀入CPU 占用時間節省99.998%。

3)雙鍵盤同時工作測試,測試方法將矩陣鍵盤和標準鍵盤同時接入系統, 按1 次/s 的速度交替按兩鍵盤的按鍵100個,在顯示器上觀察按鍵輸出情況,得出雙鍵盤工作可靠性數據如下: 總按鍵數:200;顯示按鍵數200;漏判按鍵數:0;錯判按鍵數:0;準確率:100%。因此,該模塊可以實現雙鍵盤同時工作。

5 結論

該模塊經過測試和使用,得出如下結論:1)基于CPLD 的矩陣鍵盤掃描模塊占用CPU 時間很少;2)可以實現雙鍵盤同時工作;3)誤判、漏判率低;4)反應速度快,能夠處理組合鍵。

測試結果表明,該方案滿足設計要求。該模塊以按鍵的放開控制按鍵編碼輸出,因此在鍵按下一段時間后到釋放按鍵之前不能按一定的間隔連續輸出按下鍵的鍵值,矩陣鍵盤沒有連續按鍵輸出功能。鍵盤碼的讀入采用PC104 定時器中斷(18.3 ms 一次)定時查詢的方式實現,在大多數情況下都不會查詢到按鍵事件發生,也就是說矩陣鍵盤占用的比較少的CPU 處理時間中絕大部分被白白浪費。如果能夠修改接口模塊實現更靈活的按鍵外中斷觸發方式讀入鍵值,還可以節省更多的時間。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10902

    瀏覽量

    213006
  • 鍵盤
    +關注

    關注

    4

    文章

    859

    瀏覽量

    39868
  • 可編程邏輯
    +關注

    關注

    7

    文章

    517

    瀏覽量

    44179
收藏 人收藏

    評論

    相關推薦

    可編程邏輯器件

    可編程邏輯器件到底是干什么用的呢,簡單的說,就是通過重新寫程序,重新注入到這個器件中達到實現其它的功能。最常見的當屬電腦了。電腦本身除了加法,減法和簡單的邏輯運算四種。比如要是想
    發表于 04-15 10:02

    可編程邏輯器件是如何發展的?

    可編程邏輯器件是如何發展的?
    發表于 04-29 06:23

    PLD可編程邏輯器件

    PLD可編程邏輯器件 英文全稱為:programmable logic device 即 PLD。PLD是做為一種通用集成電路產生的,他的邏輯功能按照用戶對器件編程來確定。一般的PLD
    發表于 07-22 09:05

    可編程邏輯器件設計

    可編程邏輯器件設計 (264頁,nlc格式)
    發表于 03-25 16:41 ?66次下載

    可編程邏輯器件基礎及應用實驗指導書

    可編程邏輯器件基礎及應用實驗指導書 《可編程邏輯器件基礎及應用》是一門側重掌握可編程邏輯器件的基本結構和原理的課程。重點是使學生掌握基于可編程
    發表于 03-24 14:22 ?29次下載

    什么是PLD(可編程邏輯器件)

    什么是PLD(可編程邏輯器件) PLD是可編程邏輯器件(Programable Logic Device)的簡稱,FPGA是現場可編程門陣列(Field Programable Gate Array)
    發表于 06-20 10:32 ?2.7w次閱讀
    什么是PLD(<b class='flag-5'>可編程邏輯器件</b>)

    EDA技術與應用(可編程邏輯器件)

    7.1 可編程邏輯器件的基本原理 7.2 可編程邏輯器件的設計技術 7.3 可編程邏輯器件編程與配置
    發表于 05-23 10:46 ?142次下載
    EDA技術與應用(<b class='flag-5'>可編程邏輯器件</b>)

    可編程邏輯器件FPGA/CPLD結構與應用

    可編程邏輯器件FPGA/CPLD結構與應用
    發表于 12-11 23:38 ?0次下載

    可編程邏輯器件(書皮)

    可編程邏輯器件(書皮)
    發表于 07-10 14:34 ?0次下載

    可編程邏輯器件PLD課件下載

    可編程邏輯器件PLD課件下載
    發表于 08-13 10:58 ?33次下載

    可編程邏輯器件EPLD是如何設計的

    可編程邏輯器件(Electrically Programmable Logic Device,EPLD)是指采用電信號的可擦可編程邏輯器件。
    發表于 08-22 18:12 ?1527次閱讀

    可編程邏輯器件的結構

    常見的可編程邏輯器件分為FPGA、EPLD(CPLD)。下面簡單介紹兩類器件的結構和區別。
    的頭像 發表于 03-24 14:18 ?1258次閱讀
    <b class='flag-5'>可編程邏輯器件</b>的結構

    可編程邏輯器件測試

    可編程邏輯器件 (Programmable Loeie Device,PLD)是一種用戶編程實現某種邏輯功能的邏輯
    發表于 06-06 15:37 ?720次閱讀
    <b class='flag-5'>可編程邏輯器件</b>測試

    什么叫可編程邏輯器件 可編程邏輯器件有哪些特征和優勢?

    可編程邏輯器件(Programmable Logic Device,PLD)是一類集成電路器件,可以根據用戶的需求進行編程和配置,以實現特定的邏輯
    發表于 09-14 15:25 ?3022次閱讀

    可編程邏輯器件的特征及優勢科普

    可編程邏輯器件是一種集成電路,具有可編程功能的特性。它們可以根據用戶的需求進行編程,從而實現不同的邏輯功能。
    的頭像 發表于 02-26 18:24 ?1192次閱讀
    百家乐官网龙虎台布多少钱| 网上百家乐哪家较安全| 大嘴棋牌手机版| 百家乐官网预约| 大发888娱乐城娱乐城| 现金百家乐官网赢钱| 百家乐庄闲庄庄闲| 百家乐官网下注口诀| 网络百家乐赌博视频| 高安市| 百家乐投注注技巧| 诏安县| 玩百家乐澳门368娱乐城| 百家乐官网保单详图| 网上百家乐庄家有赌场优势吗| 百家乐研究| 澳门百家乐赢钱窍门| 百家乐官网信誉平台开户| 诸子百家乐的玩法技巧和规则 | 88娱乐城2官方网站| 百家乐赔率技巧| 阿坝县| 百家乐api| 澳门百家乐官网送彩金| 大发888娱乐场菲律宾| 诺贝尔百家乐官网的玩法技巧和规则 | 全讯网网址| 赌博百家乐经验网| 百家乐官网平投注法| 百家乐玩法| 百家乐官网园云鼎赌场娱乐网规则| 大发888娱乐城电脑版下载| 网上百家乐官网赌博经历| 忻州市| 正品百家乐玩法| 百家乐官网发牌规| 民乐县| 百家乐线路图分析| 大玩家百家乐官网的玩法技巧和规则 | 爱婴百家乐官网的玩法技巧和规则| 大发888娱乐|