名稱:4x4矩陣鍵盤設(shè)計(jì)Verilog矩陣式鍵盤控制(代碼在文末付費(fèi)下載)
軟件:Quartus
語(yǔ)言:Verilog
代碼功能:
鍵盤控制電路設(shè)計(jì),設(shè)計(jì)一個(gè)4x4矩陣式鍵盤控制電路,并實(shí)現(xiàn)按鍵的顯示。
演示視頻:
部分代碼展示
module?key_4x4? (? clk_500KHz,//500KHZ? reset,???????//低電平復(fù)位 L_row,???//行? H_col,???//列? display_led8//數(shù)碼管顯示 );? ? input?clk_500KHz; input?reset;?? input?[3:0]?L_row;//行 output?[3:0]?H_col;//列 output?[8:0]?display_led8;//[7:0]:a,b,c,d,e,f,g,an0? ? reg?[3:0]?H_col=4'd0;? reg?[7:0]?display_led8=8'd0;? parameter?s_L_all=3'd0; parameter?s_L_row1=3'd1; parameter?s_L_row2=3'd2; parameter?s_L_row3=3'd3; parameter?s_L_row4=3'd4; parameter?s_LH=3'd5; ? reg?[2:0]?state=s_L_all;??//狀態(tài)標(biāo)志? reg?key_flag=0;???//按鍵標(biāo)志位? reg?[3:0]?H_col_reg=4'd0;??//寄存掃描列值? reg?[3:0]?L_row_reg=4'd0;//寄存掃描行值? /************************************************************************? 逐行掃描原理? ************************************************************************/? always?@(posedge?clk_500KHz?or?negedge?reset)? if(!reset)?? begin?? H_col<=4'b0000;? H_col_reg<=4'b0000;??? L_row_reg<=4'b0000;?? state<=s_L_all;? end? else?? begin?? case?(state)? s_L_all:begin? H_col[3:0]<=4'b0000;? key_flag<=1'b0;? if(L_row[3:0]!=4'b1111)?? begin?? state<=s_L_row1;? H_col[3:0]<=4'b0111;//有鍵按下,掃描第一行? end?? else?? state<=s_L_all;? end?? s_L_row1:begin? if(L_row[3:0]!=4'b1111)?? begin?? state<=s_LH;//判斷是否是第一行? end???? else??? begin?? state<=s_L_row2;? H_col[3:0]<=4'b1011;??//掃描第二行? end? end?? s_L_row2:begin????? if(L_row[3:0]!=4'b1111)?? begin?? state<=s_LH;//判斷是否是第二行
設(shè)計(jì)文檔:
1.要求
2.鍵盤電路
其中H0~H3為FPGA輸出,L0~L3為FPGA輸入,采用行掃描法。
在上電默認(rèn)情況下,L[3:0] =1111,因?yàn)樯侠?.3V,而默認(rèn)情況下H[3:0]為低電平;一旦有某一個(gè)按鍵被按下,則對(duì)應(yīng)L會(huì)拉低。因此可以通過(guò)對(duì)每一行H輸出的控制,來(lái)檢索是哪一個(gè)按鍵被按下了。
3.工程文件
4.程序代碼
5.程序綜合編譯
6.RTL圖
7.狀態(tài)機(jī)圖
8.仿真
閱讀全文