Verilog-HDL-之-矩陣鍵盤接口_第1頁
Verilog-HDL-之-矩陣鍵盤接口_第2頁
Verilog-HDL-之-矩陣鍵盤接口_第3頁
Verilog-HDL-之-矩陣鍵盤接口_第4頁
Verilog-HDL-之-矩陣鍵盤接口_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

VerilogHDL之矩陣鍵盤接口1、矩陣鍵盤的原理矩陣鍵盤又叫行列式鍵盤。用帶IO口的線組成行列結(jié)構(gòu),按鍵設(shè)置在行列的交點上。例如用4×4的行列式結(jié)構(gòu)可以構(gòu)成16個鍵的鍵盤。這樣,當按鍵數(shù)量平方增長時,I/O口只是線性增長,這樣就可以節(jié)省I/O口。矩陣鍵盤的原理圖如圖1.1所示:圖1.1矩陣鍵盤的原理圖按鍵設(shè)置在行列線交叉點,行列線分別連接到按鍵開關(guān)的兩端。列線通過上拉電阻接3.3V電壓,即列線的輸出被鉗位到高電平狀態(tài)。判斷鍵盤中有無按鍵按下式通過行線送入掃描線好然后從列線讀取狀態(tài)得到的。其方法是依次給行線送低電平,檢查列線的輸入。如果列線全是高電平,則代表低電平信號所在的行中無按鍵按下;如果列線有輸入為低電平,則代表低電平信號所在的行和出現(xiàn)低電平的列的交點處有按鍵按下。2、一個完整的鍵盤控制程序應(yīng)解決以下任務(wù):(1)檢測有無按鍵按下

(2)有鍵按下,在無硬件去抖得情況下,應(yīng)有軟件延時除去抖動影響

(3)鍵掃描程序

(4)將鍵編碼轉(zhuǎn)換成相應(yīng)建值

整個設(shè)計程序包括三個模塊:時鐘分頻、鍵盤掃描和鍵譯碼轉(zhuǎn)換。為了顯示,還必須在頂層添加顯示部分。

3、時鐘分頻由于使用的外部時鐘頻率為50MHz,這個頻率對掃描來說太高,所以這里需要一個分頻器來分得適合鍵盤掃描使用的頻率。//-------------------------------------------------------------------------------------------------//File:scan_clk.v//Generated:2011-07-20//Author:wangliang//-------------------------------------------------------------------------------------------------`timescale1ns/1psmodulescan_clk(clkout,clk,rst);inputrst;inputclk;wireclk;outputclkout;regclkout_r;parameterperiod=200000;//parameterperiod=10;reg[31:0]cnt;always@(posedgeclkornegedgerst)//分頻50Hzbeginif(!rst)begincnt<={31{1'b0}};clkout_r<=0;endelsebegincnt<=cnt+1;if(cnt==(period>>1)-1)//設(shè)定周期時間的一半clkout_r<=#11'b1;elseif(cnt==period-1)//設(shè)定的周期時間beginclkout_r<=#11'b0;cnt<=#1'b0;endendendassignclkout=clkout_r;Endmodule注:從上面可以看出,我們經(jīng)過分頻得到50HZ的時鐘,是為下一模塊鍵盤掃描提供的時鐘,之所以是50HZ,而不是其他的數(shù)值,是因為,人在按鍵的時候,其停留時間大概是20ms左右,鍵盤掃描時,會發(fā)送固定的數(shù)值碼,本例中是循環(huán)的發(fā)送4種數(shù)值,下面會提及到,50HZ轉(zhuǎn)化為時間是0.02S=20ms。圖1.2是分頻模塊。圖1.2分頻模塊4、鍵盤掃描鍵盤掃描電路是用于產(chǎn)生keydrv3~keydrv0信號,其變化順序是1110→1101→1011→0111→1110…周而復(fù)始地掃描。其停留時間大慨在20ms。更短的時間沒有必要,因為人為按鍵的時間大慨為20ms,不可能產(chǎn)生有更快的動作;另外,更短的停留時間還容易采集到抖動信號,會干擾判斷。而太長的時間容易丟失某些較快的按鍵動作。圖1.3是鍵盤掃描模塊。//-------------------------------------------------------------------------------------------------//File:key_scan.v//Generated:2011-07-20//Author:wangliang//-------------------------------------------------------------------------------------------------`timescale1ns/1psmodulekey_scan(clk,keydrv,rst);inputclk;inputrst;wireclk;output[3:0]keydrv;wire[3:0]keydrv;parameters1=4'b1110;parameters2=4'b1101;parameters3=4'b1011;parameters4=4'b0111;reg[3:0]current_state;reg[3:0]next_state;always@(posedgeclkornegedgerst)beginif(!rst)current_state<=s1;elsecurrent_state<=next_state;endalways@(current_state)begincase(current_state)s1:next_state<=s2;s2:next_state<=s3;s3:next_state<=s4;s4:next_state<=s1;default:next_state<=s1;endcaseendassignkeydrv=current_state;Endmodule圖1.3鍵盤掃描模塊5、鍵譯碼轉(zhuǎn)換

鍵盤譯碼電路是從keydrv3~keydrv0和keyin3~keyin0信號中譯碼出按鍵值的電路。clk是全局時鐘,由外部晶振提供。clk在系統(tǒng)的頻率是最高的,其他的時鐘由分頻產(chǎn)生。Keydrv表示鍵盤掃描信號,keyin為鍵盤輸入信號,keyvalue為鍵值。其外部接口如圖1.4所示。//-------------------------------------------------------------------------------------------------//File:top.v//Generated:2011-07-20//Author:wangliang//-------------------------------------------------------------------------------------------------`timescale1ns/1psmoduletop(KEYO,KEYI,clk,Y,rst);input[3:0]KEYO;//與原理圖一致,是鍵盤輸出端口給FPGAinputclk;inputrst;output[3:0]KEYI;//與原理圖一致,是FPGA輸出給鍵盤output[7:0]Y;wirekeypress;wirescanclk;wire[7:0]temp;wire[3:0]keydrv;reg[7:0]temp_r;reg[7:0]Y_r;reg[4:0]keyvalue;reg[3:0]scankey_o;reg[3:0]scankey_i;wiredis;regdis_pre;assigndis=&KEYO;scan_clkkey_clk(.clk(clk),.clkout(scanclk),.rst(rst));key_scankey_scan(.clk(scanclk),.keydrv(keydrv),.rst(rst));always@(posedgeclkornegedgerst)beginif(rst==1'b0)beginscankey_o<=4'b0;scankey_i<=4'b0;dis_pre<=dis;endelseif(clk==1'b1)begindis_pre<=dis;if((dis==1'b0)&&(dis_pre==1'b1))beginscankey_o<=keydrv;scankey_i<=KEYO;endendendassignKEYI=keydrv;assigntemp={scankey_o,scankey_i};always@(posedgeclkornegedgerst)beginif(rst==1'b0)begintemp_r<=8'b0;endelseif(clk==1'b1)temp_r<=temp;endalways@(temp_rorrst)beginif(rst==1'b0)begin//譯碼輸出keyvalue<=5'b0;endelsecase(temp_r)8'b0111_0111:keyvalue<=5'hb;//無用,僅作為復(fù)位8'b1110_1110:keyvalue<=5'h7;8'b1110_1101:keyvalue<=5'h8;8'b1110_1011:keyvalue<=5'h9;8'b1101_1110:keyvalue<=5'h4;8'b1101_1101:keyvalue<=5'h5;8'b1101_1011:keyvalue<=5'h6;8'b1011_1110:keyvalue<=5'h1;8'b1011_1101:keyvalue<=5'h2;8'b1011_1011:keyvalue<=5'h3;8'b0111_1101:keyvalue<=5'h0;8'b0111_1011:keyvalue<=5'b1_0001;//小數(shù)點default:keyvalue<=5'h0;endcaseendalways@(keyvalueorrst)beginif(rst==1'b0)//譯碼輸出Y_r<=8'b0000_0000;elsebeginY_r=8'b0000_0000;case(keyvalue)5'h0:Y_r=8'b0011_1111;//05'h1:Y_r=8'b0000_0110;//15'h2:Y_r=8'b0101_1011;//25'h3:Y_r=8'b0100_1111;//35'h4:Y_r=8'b0110_0110;//45'h5:Y_r=8'b0110_1101;//55'h6:Y_r=8'b0111_1101;//

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論