没有合适的资源?快使用搜索试试~ 我知道了~
FPGA4*4矩阵键盘电路设计
4星 · 超过85%的资源 需积分: 10 60 下载量 25 浏览量
2011-06-11
15:27:16
上传
评论
收藏 11KB TXT 举报
温馨提示
试读
17页
个人作品,FPGA矩阵键盘。FPGA4*4矩阵键盘电路设计
资源推荐
资源详情
资源评论
module jz_keys(
input clk,
input rst,
input [3:0] row, // 矩阵键盘 行
output reg [3:0] col, // 矩阵键盘 列
output reg [6:0] keyboard_val // 键盘值
);
//++++++++++++++++++++++++++++++++++++++
// 状态机部分 开始
//++++++++++++++++++++++++++++++++++++++
// 状态编码
parameter NO_KEY_PRESSED = 6'b000_001; // 没有按键按下
parameter SCAN_COL0 = 6'b000_010; // 扫描第0列
parameter SCAN_COL1 = 6'b000_100; // 扫描第1列
parameter SCAN_COL2 = 6'b001_000; // 扫描第2列
parameter SCAN_COL3 = 6'b010_000; // 扫描第3列
parameter KEY_PRESSED = 6'b100_000; // 有按键按下
parameter delay = 6'b111_111; //延时5ms
reg [5:0] current_state, next_state; // 现态、次态
reg key_pressed_flag; // 键盘按下标志
reg [3:0] col_reg, row_reg; // 列值、行值
reg delay_en; //延时5ms后使能端为1,否则为0
reg [10:0]c0;
reg clk0;
always @(posedge clk or negedge rst)
if(!rst)
current_state<=NO_KEY_PRESSED;
else
input clk,
input rst,
input [3:0] row, // 矩阵键盘 行
output reg [3:0] col, // 矩阵键盘 列
output reg [6:0] keyboard_val // 键盘值
);
//++++++++++++++++++++++++++++++++++++++
// 状态机部分 开始
//++++++++++++++++++++++++++++++++++++++
// 状态编码
parameter NO_KEY_PRESSED = 6'b000_001; // 没有按键按下
parameter SCAN_COL0 = 6'b000_010; // 扫描第0列
parameter SCAN_COL1 = 6'b000_100; // 扫描第1列
parameter SCAN_COL2 = 6'b001_000; // 扫描第2列
parameter SCAN_COL3 = 6'b010_000; // 扫描第3列
parameter KEY_PRESSED = 6'b100_000; // 有按键按下
parameter delay = 6'b111_111; //延时5ms
reg [5:0] current_state, next_state; // 现态、次态
reg key_pressed_flag; // 键盘按下标志
reg [3:0] col_reg, row_reg; // 列值、行值
reg delay_en; //延时5ms后使能端为1,否则为0
reg [10:0]c0;
reg clk0;
always @(posedge clk or negedge rst)
if(!rst)
current_state<=NO_KEY_PRESSED;
else
current_state<=next_state;
always @*
begin
case(current_state)
NO_KEY_PRESSED:
if(row!=4'b1111) next_state=SCAN_COL0;
else begin next_state=NO_KEY_PRESSED;end
SCAN_COL0:begin
if(row!=4'b1111) next_state=delay;
else if((row!=4'b1111)&&(delay_en==1))
next_state=KEY_PRESSED;
else next_state=SCAN_COL1; end
SCAN_COL1: begin
if(row!=4'b1111) next_state=delay;
else if((row!=4'b1111)&&(delay_en==1))
next_state=KEY_PRESSED;
else next_state=SCAN_COL2; end
SCAN_COL2: begin
if(row!=4'b1111) next_state=delay;
else if((row!=4'b1111)&&(delay_en==1))
next_state=KEY_PRESSED;
else next_state=SCAN_COL3; end
SCAN_COL3: begin
if(row!=4'b1111) next_state=delay;
else if((row!=4'b1111)&&(delay_en==1))
next_state=KEY_PRESSED;
else next_state=NO_KEY_PRESSED; end
KEY_PRESSED:begin
if((row!=4'b1111)&&(delay_en==1))
always @*
begin
case(current_state)
NO_KEY_PRESSED:
if(row!=4'b1111) next_state=SCAN_COL0;
else begin next_state=NO_KEY_PRESSED;end
SCAN_COL0:begin
if(row!=4'b1111) next_state=delay;
else if((row!=4'b1111)&&(delay_en==1))
next_state=KEY_PRESSED;
else next_state=SCAN_COL1; end
SCAN_COL1: begin
if(row!=4'b1111) next_state=delay;
else if((row!=4'b1111)&&(delay_en==1))
next_state=KEY_PRESSED;
else next_state=SCAN_COL2; end
SCAN_COL2: begin
if(row!=4'b1111) next_state=delay;
else if((row!=4'b1111)&&(delay_en==1))
next_state=KEY_PRESSED;
else next_state=SCAN_COL3; end
SCAN_COL3: begin
if(row!=4'b1111) next_state=delay;
else if((row!=4'b1111)&&(delay_en==1))
next_state=KEY_PRESSED;
else next_state=NO_KEY_PRESSED; end
KEY_PRESSED:begin
if((row!=4'b1111)&&(delay_en==1))
剩余16页未读,继续阅读
资源评论
- Luke_skywalker1152014-05-20有一点参考价值,大概是硬件不同的关系。
- wpjwpj122014-03-03对我有很大帮助,适合初学者!
- csw3542014-03-07有一点启发吧
- mixwill82015-10-23还是比较简单的,比较通行的做法
lamchiu
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功