• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

4x4矩阵键盘设计Verilog矩阵式键盘控制

04/28 10:25
1571
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1-23101523461A59.doc

共1个文件

名称:4x4矩阵键盘设计Verilog矩阵式键盘控制(代码在文末付费下载)

软件:Quartus

语言:Verilog

代码功能:

键盘控制电路设计,设计一个4x4矩阵式键盘控制电路,并实现按键的显示。

演示视频:

部分代码展示

module key_4x4 
( 
clk_500KHz,//500KHZ 
reset,       //低电平复位
L_row,   //行 
H_col,   //列 
display_led8//数码管显示
); 
 
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;  //状态标志 
reg key_flag=0;   //按键标志位 
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;//判断是否是第二行

设计文档:

1.要求

2.键盘电路

其中H0~H3为FPGA输出,L0~L3为FPGA输入,采用行扫描法。

在上电默认情况下,L[3:0] =1111,因为上拉了3.3V,而默认情况下H[3:0]为低电平;一旦有某一个按键被按下,则对应L会拉低。因此可以通过对每一行H输出的控制,来检索是哪一个按键被按下了。

3.工程文件

4.程序代码

5.程序综合编译

6.RTL图

7.状态机

8.仿真

  • 1-23101523461A59.doc
    下载

相关推荐