- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Verilog实现4x4矩阵按键检测
1 原理图
4x4 的矩阵按键,8个IO ,检测原理是IO63 、66、67、68作为输出信号,轮流赋值高电
平,IO59、60、61、62作为输入信号,检测对应的按键按下。比如,在IO68赋值高电平时,
检测到IO59信号为高电平,则表示按键K1被按下。拨码开关用于测试。
2 CPLD 代码
module key_array (
clk_24m,
reset_n,
Hline, //输出4bit按键赋高电平信号。
Vline, //输入4bit按键检测信号。
ledline, //测试使用LED点灯信号
switch //测试使用按键表现选择信号,因只有8个LED ,而按键有16个,通过此信号来选
择是表现K1-K8 ,还是K9-K16 。
);
input wire clk_24m;
第1 页, 共6 页
input wire reset_n;
output wire [3:0] Hline;
input wire [3:0] Vline;
output reg [7:0] ledline;
input wire switch;
/******************************************************************************
24M 时钟分频,用于内部控制及计数等。
******************************************************************************/
reg [14:0] count_div1;
wire condition_732; //732 Hz 时钟信号。
always @ (posedge clk_24m or negedge reset_n)
begin
if(reset_n == 1b0)
count_div1 = 15h0000;
else
count_div1 = count_div1 + 15h0001;
end
/******************************************************************************
condition_732:
732Hz时钟信号,高电平持续一个24MHz 时钟周期,其余时间为低电平。
******************************************************************************/
assign condition_732 = count_div1[14:0]; //24MHz/2^15=732Hz 。
/******************************************************************************
对输出IO轮流赋值,相当于分时,轮转速度要快。
******************************************************************************/
reg [3:0] Hshift;
always @ (posedge clk_24m or negedge reset_n)
begin
if(reset_n == 1b0)
Hshift = 4h1; //初值为1,时刻都只有一个bit为高。
else if (condition_732 == 1b1) //采用732Hz时钟, 对IO赋值进行轮转。
Hshift = { Hshift[2:0],Hshift[3] }; //通过移位实现输出IO轮流赋值。
else;
end
assign Hline = Hshift; //赋值状态输出到按键信号线上。
/******************************************************************************
按键输入的延迟去抖,每个按键输入检测8个24M时钟周期,都为高则表示有按键按下。
*********************************************************
文档评论(0)