版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、二、矩陣鍵盤顯示電路設(shè)計(顯示鍵盤值的平方)矩陣鍵盤顯示電路的設(shè)計一、實驗?zāi)康?、了解普通 4 × 4鍵盤掃描的原理。2、進一步加深七段碼管顯示過程的理解。3、了解對輸入 /輸出端口的定義方法。二、實驗原理實現(xiàn)鍵盤有兩種方案:一是采用現(xiàn)有的一些芯片實現(xiàn)鍵盤掃描;再就是用軟 件實現(xiàn)鍵盤掃描。作為一個嵌入系統(tǒng)設(shè)計人員,總是會關(guān)心產(chǎn)品成本。目前有很多芯片可以用來實現(xiàn)鍵盤掃描,但是鍵盤掃描的軟件實現(xiàn)方法有助于縮減一個系統(tǒng)的重復(fù)開發(fā)成本,且只需要很少的CPU 開銷。嵌入式控制器的功能能強,可能充分利用這一資源,這里就介紹一下軟鍵盤的實現(xiàn)方案。圖 10-1簡單鍵盤電路通常在一個鍵盤中使用了一個瞬
2、時接觸開關(guān),并且用如圖10-1所示的簡單電路,微處理器可以容易地檢測到閉合。當(dāng)開關(guān)打開時, 通過處理器的 I/O口的一個上拉電阻提供邏輯1;當(dāng)開關(guān)閉合時,處理器的/IO 口的輸入將被拉低得到邏輯0。可遺憾的是,開關(guān)并不完善,因為當(dāng)它們被按下或者被釋放時,并不能夠產(chǎn)生一個明確的1或者 0。盡管觸點可能看起來穩(wěn)定而且很快地閉合,但與微處理器快速的運行速度相比,這種動作是比較慢的。當(dāng)觸點閉合時, 其彈起就像一個球。 彈起效果將產(chǎn)生如圖 10-2所示的好幾個脈沖。彈起的持續(xù)時間通常將維持在 5ms30ms 之間。如果需要多個鍵,則可以將每個開關(guān)連接到微處理器上它自己的輸入端口。然而,當(dāng)開關(guān)的數(shù)目增加時
3、,這種方法將很快使用完所有的輸入端口。圖 10-2 按鍵抖動鍵盤上陣列這些開關(guān)最有效的方法 (當(dāng)需要 5個以上的鍵時)就形成了一個如圖 10-3 所示的二維矩陣。 當(dāng)行和列的數(shù)目一樣多時, 也就是方型的矩陣,將產(chǎn)生一個最優(yōu)化的布列方式( I/O 端被連接的時候),一個瞬時接觸開關(guān)(按鈕)放置在每一行與線一列的交叉點。 矩陣所需的鍵的數(shù)目顯然根據(jù)應(yīng)用程序而不同。 每一行由一個輸出端口的一位驅(qū)動,而每一列由一個電阻器 上拉且供給輸入端口一位。圖 10-3 矩陣鍵盤鍵盤掃描的實現(xiàn)過程如下:對于 4 × 4 鍵盤,通常連接為 4行、 4列,因此要識別按鍵,只需要知道是哪一行和哪一列即可,為了
4、完成這一識別過程,我們的思想是,首先固定輸出 4行為高電平,然后輸出 4列為低電平,在讀入輸出的 4行的值,通常高電平會被低電平拉低,如果讀入的 4 行均為高電平,那么肯定沒有按鍵按下,否則,如果讀入的 4 行有一位為低電平,那么對應(yīng)的該行肯定有一個按鍵按下,這樣便可以獲取到按鍵的行值。同理,獲取列值也是如此,先輸出 4 列為高電平,然后在輸出 4 行為低電平,再讀入列值,如果其中有哪一位為低電平,那么肯定對應(yīng)的那一列有按鍵按下。獲取到行值和列值以后,組合成一個 8位的數(shù)據(jù),根據(jù)實現(xiàn)不同的編碼在對每個按鍵進行匹配,找到鍵值后在 7段碼管顯示。三、實驗內(nèi)容本實驗要求完成的任務(wù)是通過編程實現(xiàn)對 4
5、X4 矩陣鍵盤按下鍵的鍵值的讀 取,并在數(shù)碼管上完成一定功能 (如移動等) 的顯示。按鍵盤的定義, 按下“* ” 鍵則在數(shù)碼管是顯示“ E”鍵值。按下“ #”鍵在數(shù)碼管上顯示“ F” 鍵值。其它的鍵則按鍵盤上的標(biāo)識進行顯示。在此實驗中數(shù)碼管與 FPGA的連接電路和管腳連接在以前的實驗中都做了詳細(xì)說明,這里不在贅述。本實驗箱上的 4X4 矩陣鍵盤的電路原理如圖 10-4所示。與 FPGA 的管腳連接如表 10-1所示。圖 10-4 4X4 矩陣鍵盤電路原理圖表 10-1 4X4 矩陣鍵與 FPGA 的管腳連接表信號名稱對應(yīng)FPGA 管腳名說明KEY-C0KEY-C1KEY-C2KEY-C3KEY
6、-R0KEY-R1KEY-R2KEY-R3B8A9B9E5B6A7B7A8矩陣鍵盤的第1 列選擇矩陣鍵盤的第2 列選擇矩陣鍵盤的第3 列選擇矩陣鍵盤的第4 列選擇矩陣鍵盤的第1 行選擇矩陣鍵盤的第2 行選擇矩陣鍵盤的第3 行選擇矩陣鍵盤的第4 行選擇四、實驗步驟1、打開 QUARTUSII 軟件,新建一個工程。2、建完工程之后,再新建一個VHDL File ,打開 VHDL 編輯器對話框。3、按照實驗原理和自己的想法,在VHDL編輯窗口編寫 VHDL程序,用戶可參照光盤中提供的示例程序。4、編寫完 VHDL程序后,保存起來。方法同實驗一。5、對自己編寫的 VHDL程序進行編譯并仿真,對程序的錯
7、誤進行修改。6、編譯仿真無誤后, 依照 4X4 矩陣鍵、數(shù)碼管與 FPGA 的管腳連接表(表或參照附錄)進行管腳分配。 表 10-2 是示例程序的管腳分配表。 分配完成后,再進行全編譯一次,以使管腳分配生效。表 10-2端口管腳分端口名使用模塊信號對應(yīng) FPGA 管腳說 明CLK數(shù)字信號源C13時鐘為 1KHZKR04*4矩陣鍵盤R0B6KR14*4矩陣鍵盤R1A7矩陣鍵盤行信號KR24*4R2B7矩陣鍵盤KR34*4矩陣鍵盤R3A8KC04*4矩陣鍵盤C0B8矩陣鍵盤列信號KC14*4矩陣鍵盤C1A9配表KC24*4矩陣鍵盤 C2B9矩陣鍵盤列信號KC34*4矩陣鍵盤 C3E5A數(shù)碼管模塊A
8、 段F13B數(shù)碼管模塊B 段F14C數(shù)碼管模塊C 段F15D數(shù)碼管模塊D 段E15E數(shù)碼管模塊E 段F16鍵值顯示F數(shù)碼管模塊F 段F17G數(shù)碼管模塊G 段E18SA數(shù)碼管模塊SEL0G18SB數(shù)碼管模塊SEL1G17SC數(shù)碼管模塊SEL2G167、用下載電纜通過 JTAG 口將對應(yīng)的 sof 文件加載到 FPGA 中。觀察實驗 結(jié)果是否與自己的編程思想一致。五、實驗結(jié)果與現(xiàn)象以設(shè)計的參考示例為例,當(dāng)設(shè)計文件加載到目標(biāo)器件后,將數(shù)字信號源模塊 的時鐘選擇為 1KHz ,按動“模式”按鍵使單 8字?jǐn)?shù)碼管顯示 “ 0”(參考實驗四),按下矩陣鍵盤的某一個鍵,則在數(shù)碼管上顯示對應(yīng)的這個鍵標(biāo)識的鍵值,
9、當(dāng)再按下第二個鍵的時候前一個鍵的鍵值在數(shù)碼管上左移一位。按下“ * ”鍵則在數(shù)碼管是顯示 “E”鍵值。按下“#”鍵在數(shù)碼管上顯示 “F”鍵 值。/*工程: 4x4 矩陣鍵盤日期: 2011-08-3最后修改:功能:鍵盤說明: ROW 【 3:0】設(shè)為輸入, COL 【 3:0】設(shè)為輸出。如果沒有按鍵按下,則ROW 【 3:0】一直被上拉為高電平,且COL 【 3:0】有低電平輸出,ROW 【 3:0】中才有可能低電平輸入。*/module keys(clk_50M,rst_n,row,col,dataout,smg_wei);/*/output 3:0col;/矩陣鍵盤列inputrst_n;
10、/ 復(fù)位鍵inputclk_50M;/系統(tǒng)時鐘input3:0row;/ 矩陣鍵盤行output 7:0dataout;/ 鍵盤值數(shù)碼管顯示數(shù)據(jù)output 7:0smg_wei;/數(shù)碼管顯示使能reg 7:0dataout;reg 3:0col;reg 3:0key_board_val;/*/assignsmg_wei=0;/ 八個數(shù)碼管顯示/*/ 分頻部分開始/*/reg19:0cnt;/計數(shù)子always (posedge clk_50M or negedge rst_n)if(!rst_n)cnt<=0;elsecnt<=cnt+1'b1;wire key_clk=
11、cnt19;/ 220/50M=21ms/*狀態(tài)機部分獨熱碼編碼*/parameter NO_KEY_PRESSED=6'b000_001;/ 沒有鍵按下parameter SCAN_COL0=6'b000_010;/ 掃描第 0列parameter SCAN_COL1=6'b000_100;/ 掃描第 1列parameter SCAN_COL2=6'b001_000;/ 掃描第2列parameter SCAN_COL3=6'b010_000;/ 掃描第3列parameter KEY_PRESSED=6'b100_000;/ 有鍵按下/*/reg
12、 5:0current_state,next_state;/ 現(xiàn)態(tài)和次態(tài)/*/ 復(fù)位/*/always (posedge key_clk or negedge rst_n)if(!rst_n)current_state<=NO_KEY_PRESSED;elsecurrent_state<=next_state;/*/always */(current_state)/ 根據(jù)條件轉(zhuǎn)移狀態(tài)case (current_state)NO_KEY_PRESSED:/ 沒有鍵按下if(row!=4'hf)next_state=SCAN_COL0;elsenext_state=NO_KEY
13、_PRESSED;SCAN_COL0:/ 掃描第0 列if(row!=4'hf)next_state=KEY_PRESSED;elsenext_state=SCAN_COL1;SCAN_COL1:/掃描第1 列if(row!=4'hf)next_state=KEY_PRESSED;elsenext_state=SCAN_COL2;SCAN_COL2:/掃描第2 列if(row!=4'hf)next_state=KEY_PRESSED;elsenext_state=SCAN_COL3;SCAN_COL3:/掃描第3 列if(row!=4'hf)next_state
14、=KEY_PRESSED;elsenext_state=NO_KEY_PRESSED;KEY_PRESSED:/有按鍵按下if(row!=4'hf)next_state=KEY_PRESSED;elsenext_state=NO_KEY_PRESSED;endcase/*/reg key_pressed_flag; / 按鍵按下標(biāo)志reg 3:0col_val;/ 列值reg 3:0row_val;/ 行值/*/根據(jù)次態(tài),給相應(yīng)的寄存器賦值/*/always (posedge key_clk or negedge rst_n)if(!rst_n)/ 復(fù)位begincol<=4
15、39;h0;key_pressed_flag<=0;endelsecase (next_state)NO_KEY_PRESSED:begincol<=4'h0;key_pressed_flag<=0;endSCAN_COL0:/ 掃描第0 列col<=4'b1110;SCAN_COL1:/ 掃描第1 列col<=4'b1101;SCAN_COL2:/ 掃描第2 列col<=4'b1011;SCAN_COL3:/掃描第3 列col<=4'b0111;KEY_PRESSED:/ 有按鍵按下begincol_val&l
16、t;=col; /鎖存列值row_val<=row; /鎖存行值key_pressed_flag<=1;/ 置鍵盤按下標(biāo)endendcase/* */ 掃描行列值部分開始/* */always (posedge key_clk or negedge rst_n)if(!rst_n)key_board_val<=4'h0;elseif(key_pressed_flag)case(col_val,row_val)8'b11101110 : key_board_val <= 4'h0;8'b11101101 : key_board_val &l
17、t;= 4'h4;8'b11101011 : key_board_val <= 4'h8;8'b11100111 : key_board_val <= 4'hC;8'b11011110 : key_board_val <= 4'h1;8'b11011101 : key_board_val <= 4'h5;8'b11011011 : key_board_val <= 4'h9;8'b11010111 : key_board_val <= 4'hD;8'
18、;b10111110 : key_board_val <= 4'h2;8'b10111101 : key_board_val <= 4'h6;8'b10111011 : key_board_val <= 4'hA;8'b10110111 : key_board_val <= 4'hE;8'b01111110 : key_board_val <= 4'h3;8'b01111101 : key_board_val <= 4'h7;8'b01111011 : key_board_val <= 4'hB;8'b01110111 : key_board_val <= 4'hF;endcase/* */ 鍵盤值轉(zhuǎn)換為數(shù)碼管顯示/* */always * /(key_board_val)begincase(key_board_val)4'h0:dataout<=8'b11000000;/04'
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)計算機與網(wǎng)絡(luò)技術(shù)(網(wǎng)絡(luò)趨勢分析)試題及答案
- 2025年中職(建筑施工)建筑腳手架搭設(shè)試題及答案
- 2025年大學(xué)大一(社會學(xué)概論)社會流動試題及解析
- 2025年中職直播管理應(yīng)用(應(yīng)用技術(shù))試題及答案
- 2025年大學(xué)大一(心理學(xué))普通心理學(xué)基礎(chǔ)試題及答案
- 2025年大學(xué)大三(金融學(xué))國際金融試題及答案
- 2025年大學(xué)大三(建筑學(xué))建筑歷史基礎(chǔ)試題及解析
- 2025年大學(xué)運動解剖學(xué)(內(nèi)分泌系統(tǒng))試題及答案
- 2025年大學(xué)大一(倫理學(xué))倫理學(xué)基礎(chǔ)試題及解析
- 2025年大學(xué)茶藝與茶營銷(茶店經(jīng)營管理)試題及答案
- 2023北京石景山四年級(上)期末數(shù)學(xué)
- 國家開放大學(xué)2025秋《管理信息系統(tǒng)》形考任務(wù)答案
- 2025年部編八年級道德與法治上冊全冊知識點
- 黑龍江省龍東地區(qū)部分學(xué)校2026屆九年級上冊綜合練習(xí)(一)化學(xué)試題-附答案
- 口腔科耗材成本精細(xì)化管控技巧
- 保潔5S管理課件
- 子宮內(nèi)膜癌課件
- 2025年高考廣東卷物理真題(原卷版)
- 涉密計算機培訓(xùn)
- 企業(yè)財務(wù)中長期發(fā)展規(guī)劃書
- 國企后勤管理制度匯編
評論
0/150
提交評論