[摘要] 本設計是用VHDL語言來實現(xiàn)的基于RS232按位串行通信總線的行列式矩陣鍵盤接口電路,具有復位和串行數(shù)據(jù)的接收與發(fā)送功能,根據(jù)發(fā)光二極管led0—led2的顯示狀態(tài)可判斷芯片的工作情況;實現(xiàn)所有電路功能的程序均是在美國ALTERA公司生產的具有現(xiàn)場可編程功能的芯片EPM7128SLC84-15上調試通過的。該電路的設計貼近生活,實用性強,制成芯片后可作為一般的PC機鍵盤與主機的接口使用。
[關鍵詞] CPLD VHDL 鍵盤接口
一、引言
1.通過動態(tài)掃描來判斷是否有鍵按下。
2.將鍵值轉換成對應的ASCII碼值。
3.在時鐘脈沖的作用實現(xiàn)串行數(shù)據(jù)的接收與發(fā)送。
二、設計方案分析
1.動態(tài)掃描原理。(1)依次使列線scan0—scan7輸出0電平,檢查行線retn0—retn7的電平狀態(tài)。如果行線retn0—retn7的電平全為高電平,表示沒鍵按下。如果retn0—retn7上的電平不全為高電平,表示有鍵按下。(2)如果沒鍵按下,就返回掃描。有鍵按下則進行逐行掃描,找出閉合鍵的鍵號。其過程是:先使scan0=0,scan1—scan7=1,檢測retn0—retn7上的電平,如果retn=0,則表示第一行第一列的鍵被按下,如果retn1=0,則表示第二行第二列的鍵被按下,其他依次類推;如果retn0—retn7均不為0,則表示這一列沒鍵按下;然后再使scan1=0,檢測第二列按鍵,這樣一直循環(huán)下去,知道把閉合的鍵找到為止。
當有鍵按下時,根據(jù)該時刻的scan值和retn值就可判斷按下的是哪一個鍵。
2.芯片內部模塊框圖
三、模塊設計
1.數(shù)據(jù)接收模塊框圖
該模塊實現(xiàn)對串行數(shù)據(jù)的接收記數(shù)和串并變換的控制功能。
reset復位輸入端;clk時鐘輸入端;rxd串行數(shù)據(jù)接收端; led[2..0]輸出按下鍵對應的ASCII碼值的低三位去驅動發(fā)光二極管。
串行數(shù)據(jù)接收控制單元:將串行數(shù)據(jù)接收計數(shù)器設置位一個6位計數(shù)器,高4位為sh_r,低2位為sl_r,利用該計數(shù)器的狀態(tài)實現(xiàn)串行數(shù)據(jù)的同步控制和記數(shù)控制。
串并轉換電路單元:從RXD端接收的串行數(shù)據(jù)進經過串并變換后,將其低三位經LED輸出端輸出,驅動發(fā)光二極管LED0,LED1,LED2發(fā)光,從而顯示接收端RXD的每個數(shù)據(jù)的低三位。當每個數(shù)據(jù)的低三位相同時,顯示狀態(tài)就不變化,否則就出現(xiàn)閃爍現(xiàn)象,以此來檢查芯片的工作情況。
2.行編碼,列記數(shù)譯碼模塊框圖
該模塊實現(xiàn)行輸入數(shù)據(jù)的編碼、列掃描信號的記數(shù)、列值的譯碼功能。
行編碼電路單元:正常工作時,列掃描信號sanc按列掃描,如果掃描到只有一個按鍵按下時,則相應的行掃描信號從rent0至rent7輸入行編碼電路,經過編碼后的3位行編碼信號由renc0至renc3輸出;當由兩個鍵同時按下時,行號低的位具有高優(yōu)先級,優(yōu)先編碼;如果沒有按鍵按下則rent=11111111.
列掃描記數(shù)電路單元:列記數(shù)器為一個6位計數(shù)器,對列掃描進行狀態(tài)和記數(shù)控制;該計數(shù)器由行輸入信號retn控制,當retn=\"11111111\"時,即沒有按鍵按下時,列計數(shù)器對列掃描循環(huán)記數(shù),進行加1操作;一旦有鍵按下,則記數(shù)輸出信號scnt被鎖定為該時刻的記數(shù)值并保持不變,經譯碼后形成列掃描輸出信號scan。
3.發(fā)送模塊框圖
該模塊實現(xiàn)對發(fā)送計數(shù)器狀態(tài),以及記數(shù)的控制,將鍵值轉換成對應的ASCII碼并發(fā)送的功能。
根據(jù)是否有鍵按下來決定是否啟動發(fā)送計數(shù)器。當有鍵按下時,發(fā)送計數(shù)器被啟動記數(shù),然后將此時retn和scan的狀態(tài)通過查表轉換變成該鍵對應的ASCII碼發(fā)送出去,但只有當按鍵離開以后才能進入下一個數(shù)據(jù)的發(fā)送準備狀態(tài)。
參考文獻:
[1]邢立軍:微型計算機接口技術. 機械工業(yè)出版社.2004.8
[2]周志光:單片機技術與應用. 中南大學出版社.2005.8
[3]房小翠:單片微型計算機與機電接口技術.國防工業(yè)出版社2002.3