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