矩陣鍵盤(pán)接口電路的設(shè)計(jì)
一、 實(shí)驗(yàn)?zāi)康?/strong>1、了解普通4×4鍵盤(pán)掃描的原理。
2、進(jìn)一步加深七段碼管顯示過(guò)程的理解。
3、了解對(duì)輸入/輸出端口的定義方法。
二、 實(shí)驗(yàn)原理
實(shí)現(xiàn)鍵盤(pán)有兩種方案:一是采用現(xiàn)有的一些芯片實(shí)現(xiàn)鍵盤(pán)掃描;再就是用軟件實(shí)現(xiàn)鍵盤(pán)掃描。作為一個(gè)嵌入系統(tǒng)設(shè)計(jì)人員,總是會(huì)關(guān)心產(chǎn)品成本。目前有很多芯片可以用來(lái)實(shí)現(xiàn)鍵盤(pán)掃描,但是鍵盤(pán)掃描的軟件實(shí)現(xiàn)方法有助于縮減一個(gè)系統(tǒng)的重復(fù)開(kāi)發(fā)成本,且只需要很少的CPU 開(kāi)銷。嵌入式控制器的功能能強(qiáng),可以充分利用這一資源,這里就介紹一下軟鍵盤(pán)的實(shí)現(xiàn)方案。
圖4-12-1 簡(jiǎn)單鍵盤(pán)電路
通常在一個(gè)鍵盤(pán)中使用了一個(gè)瞬時(shí)接觸開(kāi)關(guān),并且用如圖4-12-1 所示的簡(jiǎn)單電路,微處理器可以容易地檢測(cè)到閉合。當(dāng)開(kāi)關(guān)打開(kāi)時(shí),通過(guò)處理器的I/O 口的一個(gè)上拉電阻提供邏輯1;當(dāng)開(kāi)關(guān)閉合時(shí),處理器的/IO 口的輸入將被拉低得到邏輯0?蛇z憾的是,開(kāi)關(guān)并不完善,因?yàn)楫?dāng)它們被按下或者被釋放時(shí),并不能夠產(chǎn)生一個(gè)明確的1 或者0。盡管觸點(diǎn)可能看起來(lái)穩(wěn)定而且很快地閉合,但與微處理器快速的運(yùn)行速度相比,這種動(dòng)作是比較慢的。當(dāng)觸點(diǎn)閉合時(shí),其彈起就像一個(gè)球。彈起效果將產(chǎn)生如圖4-12-2 所示的好幾個(gè)脈沖。彈起的持續(xù)時(shí)間通常將 維持在5ms∼30ms 之間。如果需要多個(gè)鍵,則可以將每個(gè)開(kāi)關(guān)連接到微處理器上它自己的輸入端口。然而,當(dāng)開(kāi)關(guān)的數(shù)目增加時(shí),這種方法將很快使用完所有的輸入端口。
圖4-12-2 按鍵抖動(dòng)
鍵盤(pán)上陣列這些開(kāi)關(guān)最有效的方法(當(dāng)需要5 個(gè)以上的鍵時(shí))就形成了一個(gè)如圖4-12-3 所示的二維矩陣。當(dāng)行和列的數(shù)目一樣多時(shí),也就是方型的矩陣,將產(chǎn)生一個(gè)最優(yōu)化的布列方式(I/O 端被連接的時(shí)候)。一個(gè)瞬時(shí)接觸開(kāi)關(guān)(按鈕)放置在每一行與線一列的交叉點(diǎn)。矩陣所需的鍵的數(shù)目顯然根據(jù)應(yīng)用程序而不同。每一行由一個(gè)輸出端口的一位驅(qū)動(dòng),而每一列由一個(gè)電阻器上拉且供給輸入端口一位。
圖4-12-3 矩陣鍵盤(pán)
鍵盤(pán)掃描的實(shí)現(xiàn)過(guò)程如下:對(duì)于4×4鍵盤(pán),通常連接為4行、4列,因此要識(shí)別按鍵,只需要知道是哪一行和哪一列即可,為了完成這一識(shí)別過(guò)程,我們的思想是,首先固定輸出4行為高電平,然后輸出4列為低電平,在讀入輸出的4行的值,通常高電平會(huì)被低電平拉低,如果讀入的4行均為高電平,那么肯定沒(méi)有按鍵按下,否則,如果讀入的4行有一位為低電平,那么對(duì)應(yīng)的該行肯定有一個(gè)按鍵按下,這樣便可以獲取到按鍵的行值。同理,獲取列值也是如此,先輸出4列為高電平,然后在輸出4行為低電平,再讀入列值,如果其中有哪一位為低電平,那么肯定對(duì)應(yīng)的那一列有按鍵按下。
獲取到行值和列值以后,組合成一個(gè)8位的數(shù)據(jù),根據(jù)實(shí)現(xiàn)不同的編碼在對(duì)每個(gè)按鍵進(jìn)行匹配,找到鍵值后在7段碼管顯示。
三、 實(shí)驗(yàn)內(nèi)容
本實(shí)驗(yàn)要求完成的任務(wù)是通過(guò)編程實(shí)現(xiàn)對(duì)4X4矩陣鍵盤(pán)按下鍵的鍵值的讀取,并在數(shù)碼管上完成一定功能(如移動(dòng)等)的顯示。
四、 實(shí)驗(yàn)步驟
1、打開(kāi)QUARTUSII軟件,新建一個(gè)工程。
2、建完工程之后,再新建一個(gè)VHDL File,打開(kāi)VHDL編輯器對(duì)話框。
3、按照實(shí)驗(yàn)原理和自己的想法,在VHDL編輯窗口編寫(xiě)VHDL程序,用戶可參照光盤(pán)中提供的示例程序。
4、編寫(xiě)完VHDL程序后,保存起來(lái)。方法同實(shí)驗(yàn)一。
5、對(duì)自己編寫(xiě)的VHDL程序進(jìn)行編譯并仿真,對(duì)程序的錯(cuò)誤進(jìn)行修改。
6、編譯仿真無(wú)誤后,根據(jù)用戶自己的要求進(jìn)行管腳分配。分配完成后,再進(jìn)行全編譯一次,以使管腳分配生效。
7、根據(jù)實(shí)驗(yàn)內(nèi)容用實(shí)驗(yàn)導(dǎo)線將上面管腳分配的FPGA管腳與對(duì)應(yīng)的模塊連接起來(lái)。
如果是調(diào)用的本書(shū)提供的VHDL代碼,則實(shí)驗(yàn)連線如下:
Clk:FPGA工作時(shí)鐘信號(hào),接數(shù)字時(shí)鐘CLOCK3,并設(shè)為1464HZ。
Kr[0:3]:分別接4×4鍵盤(pán)部分的R1、R2、R3和R4。
Kc[0:3]:分別接4×4鍵盤(pán)部分的C1、C2、C3和C4。
Sa、Sb、Sc:接七段碼顯示區(qū)的Sel0、Sel1和Sel2。
A、B、C、D、E、F、G:接七段碼顯示區(qū)的A、B、C、D、E、F和G
8、用下載電纜通過(guò)JTAG口將對(duì)應(yīng)的sof文件加載到FPGA中。觀察實(shí)驗(yàn)結(jié)果是否與自己的編程思想一致。
五、 實(shí)驗(yàn)結(jié)果與現(xiàn)象
以設(shè)計(jì)的參考示例為例,當(dāng)設(shè)計(jì)文件加載到目標(biāo)器件后,確認(rèn)信號(hào)連接線已正確連接,按下矩陣鍵盤(pán)的某一個(gè)鍵,則在數(shù)碼管上顯示對(duì)應(yīng)的這個(gè)鍵標(biāo)識(shí)的鍵值,當(dāng)再按下第二個(gè)鍵的時(shí)候前一個(gè)鍵的鍵值在數(shù)碼管上左移一位。
六、 實(shí)驗(yàn)報(bào)告
1、繪出不同的鍵值時(shí)的數(shù)碼管的仿真波形,并作說(shuō)明。
2、根據(jù)自己的思路,找一找還有沒(méi)有其它方法進(jìn)行鍵盤(pán)的掃描顯示。并畫(huà)出流程圖。
1、 將實(shí)驗(yàn)原理、設(shè)計(jì)過(guò)程、編譯仿真波形和分析結(jié)果、硬件測(cè)試結(jié)果記錄下來(lái)。