【连载】 FPGA Verilog HDL 系列实例--------矩阵键盘接口

【连载】 FPGA Verilog HDL 系列实例  

Verilog HDL 之 矩阵键盘接口

 

1、矩阵键盘的原理

  矩阵键盘又叫行列式键盘。用带IO口的线组成行列结构,按键设置在行列的交点上。例如用4×4的行列式结构可以构成16个键的键盘。这样,当按键数量平方增长时,I/O口只是线性增长,这样就可以节省I/O口。矩阵键盘的原理图如图1.1所示:

         

【连载】 FPGA Verilog HDL 系列实例--------矩阵键盘接口

                           图1.1  矩阵键盘的原理图

  按键设置在行列线交叉点,行列线分别连接到按键开关的两端。列线通过上拉电阻接3.3V电压,即列线的输出被钳位到高电平状态。   判断键盘中有无按键按下式通过行线送入扫描线好然后从列线读取状态得到的。其方法是依次给行线送低电平,检查列线的输入。如果列线全是高电平,则代表低电平信号所在的行中无按键按下;如果列线有输入为低电平,则代表低电平信号所在的行和出现低电平的列的交点处有按键按下。

2、一个完整的键盘控制程序应解决以下任务:

  (1)检测有无按键按下
  (2)有键按下,在无硬件去抖得情况下,应有软件延时除去抖动影响
  (3)键扫描程序
  (4)将键编码转换成相应建值
  整个设计程序包括三个模块:时钟分频、键盘扫描和键译码转换。为了显示,还必须在顶层添加显示部分。


3、时钟分频

  由于使用的外部时钟频率为50MHz,这个频率对扫描来说太高,所以这里需要一个分频器来分得适合键盘扫描使用的频率。

【连载】 FPGA Verilog HDL 系列实例--------矩阵键盘接口

【连载】 FPGA Verilog HDL 系列实例--------矩阵键盘接口

scan_clk.v

1 //-------------------------------------------------------------------------------------------------
2 // File : scan_clk.v
3 // Generated : 2011-07-20
4 // Author : wangliang
5 //-------------------------------------------------------------------------------------------------
6 `timescale 1 ns /1 ps
7
8 module scan_clk ( clkout ,clk ,rst );
9
10 input rst ;
11 input clk ;
12 wire clk ;
13
14 output clkout ;
15
16 reg clkout_r ;
17
18 parameter period=200000;
19 //parameter period= 10;
20 reg [31:0] cnt;
21
22 always @( posedge clk or negedge rst) //分频50Hz
23 begin
24 if ( !rst )
25 begin
26 cnt <= {31{1\'b0}} ;
27 clkout_r <=0 ;
28 end
29 else begin
30 cnt<= cnt+1;
31 if (cnt == (period >>1) -1) //设定周期时间的一半
32 clkout_r <= #11\'b1;
33 elseif (cnt == period -1) //设定的周期时间
34 begin
35 clkout_r <= #11\'b0;
36 cnt <= #1\'b0;
37 end
38
39 end
40 end
41 assign clkout = clkout_r ;
42
43 endmodule

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjxzd.html