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

6x6矩阵键盘控制设计Verilog代码Quartus仿真

08/14 15:03
698
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240RQFF0591.doc

共1个文件

名称:6x6矩阵键盘控制设计Verilog代码Quartus仿真

软件:Quartus

语言:Verilog

代码功能:6x6矩阵键盘控制

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

1.要求

功能就是实现六乘六键盘输入

2.键盘电路,以4X4键盘为例

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

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

3.工程文件

4.程序代码

5.程序综合编译

6.RTL图

7.状态机

8.仿真

Testbench

仿真图

部分代码展示:

module key_6x6 
( 
clk_500KHz,//500KHZ 
rst_n,       //低电平复位
L_row,   //列 
H_col,   //行 
key_number//输出键值
); 
 
input clk_500KHz;//500KHZ 
input rst_n;  //低电平复位 
input [5:0] L_row;//列
output [5:0] H_col;//行
output [5:0] key_number;//输出键值
 
reg [5:0] H_col=6'd0; 
reg [5:0] key_number=6'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_L_row5=3'd5;
parameter s_L_row6=3'd6;
parameter s_LH=3'd7;
 
reg [2:0] state=s_L_all;  //状态标志 
reg key_flag=0;   //按键标志位 
reg [5:0] H_col_reg=6'd0;  //寄存扫描行值 
reg [5:0] L_row_reg=6'd0;//寄存扫描列值 
/************************************************************************ 
逐行扫描原理 
************************************************************************/ 
always @(posedge clk_500KHz or negedge rst_n) 
if(!rst_n)  
begin  
H_col<=6'b000000; 
H_col_reg<=6'b000000;   
L_row_reg<=6'b000000;  
state<=s_L_all; 
end 
else  
begin  
case (state) 
s_L_all:begin 
H_col[5:0]<=6'b000000; //行输出0
key_flag<=1'b0; 
if(L_row[5:0]!=6'b111111)  
begin  
state<=s_L_row1; 
H_col[5:0]<=6'b011111;//有键按下,扫描第一行 
end  
else  
state<=s_L_all; 
end  
s_L_row1:begin 
if(L_row[5:0]!=4'b111111)  
begin  
state<=s_LH;//判断是否是第一行 
end    
else   
begin  
state<=s_L_row2; 
H_col[5:0]<=6'b101111;  //扫描第二行 
end 
end  
s_L_row2:begin     
if(L_row[5:0]!=4'b111111)  
begin  
state<=s_LH;//判断是否是第二行 
end     
else   
begin  
state<=s_L_row3; 
H_col[5:0]<=6'b110111;//扫描第三行 
end   
end 
s_L_row3:begin     
if(L_row[5:0]!=6'b111111)  
begin  
state<=s_LH;//判断是否是第三行 
end    
else   
begin  
state<=s_L_row4; 
H_col[5:0]<=6'b111011;//扫描第四行 
end   
end 
s_L_row4:begin     
if(L_row[5:0]!=6'b111111)  
begin  
state<=s_LH;//判断是否是第四行 
end    
else   
begin  
state<=s_L_row5; 
H_col[5:0]<=6'b111101;//扫描第五行 
end   
end
s_L_row5:begin     
if(L_row[5:0]!=6'b111111)  
begin  
state<=s_LH;//判断是否是第五行 
end    
else   
begin  
state<=s_L_row6; 
H_col[5:0]<=6'b111110;//扫描第六行 
end   
end

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=981

  • 2-240RQFF0591.doc
    下载

相关推荐