- 做矩阵键盘的预备条件:按键消抖。
- 矩阵键盘的大体思路:
如果会独立按键的话,相对来说只是多了一个行遍历,检测是出具体行数就对应出了坐标,即特定按键。
独立按键原理图:
初始每个键位都输出逻辑“1”,那个按键被按下去,该按键对应的接口输出逻辑“0”。松开又为“1”。
矩阵键盘不过是原来一行现在变成了多行,处理办法就是从上到下依次给行接口置零,如果检测到有按键按下则重头开始遍历。具体可以采用状态机实现。
矩阵键盘原理图:
状态机
按键消抖代码略
module RowcontrollerAndValueout(
input clk,
input rst_n,
inout [3:0]list,
output reg [3:0]row,
output reg [15:0] value
);
listpress uut_listpress(
.clk(clk),
.rst_n(rst_n),
.list(list),
.press(press)
);
wire[3:0] press;
reg[3:0] nstate,cstate;
parameter K_IDLE = 4'd0; //空闲状态,等待
parameter K_H1OL = 4'd1;
parameter K_H2OL = 4'd2; //key_h[1]拉低
parameter K_H3OL = 4'd3;
parameter K_H4OL = 4'd4; //key_h[3]拉低
parameter K_CHCK = 4'd5;
always @(posedge clk or negedge rst_n)
if(!rst_n) cstate <= K_IDLE;
else cstate <= nstate;
always @(cstate or press