下面是我的键盘去抖程序,根据特权同学的视频教程改编一下,其中没有复位信号,下载到de1的板子效果还不错。
module keytest(
CLOCK_50, // 50 MHz
////
KEY, // Pushbutton[3:0]
//////////////////// DPDT Switch ////////////////////
HEX0, // Seven Segment Digit 0
HEX1, // Seven Segment Digit 1
HEX2, // Seven Segment Digit 2
HEX3 , // Seven Segment Digit 3
key_en
);
//////////////////////// Clock Input ////////////////////////
input CLOCK_50; // 50 MHz
//////////////////////// Push Button ////////////////////////
input [3:0] KEY; // Pushbutton[3:0]
//////////////////////// 7-SEG Dispaly ////////////////////////
output [6:0] HEX0; // Seven Segment Digit 0
output [6:0] HEX1; // Seven Segment Digit 1
output [6:0] HEX2; // Seven Segment Digit 2
output [6:0] HEX3; // Seven Segment Digit 3
output key_en;
reg [4:0] counter1;
reg key_rst,key_rst_n;
reg [10:0] counter;
reg counter_en;
wire [15:0] mSEG7_DIG;
assign mSEG7_DIG=counter1;
assign key_en=key_rst_n+key_rst;//与特权同学的不同,我用与操作时不太好用
always@(posedge CLOCK_50)key_rst_n<=key_rst;
always@(posedge CLOCK_50)key_rst<=KEY[0];
always@(posedge CLOCK_50)
begin
if(key_en)counter_en=1;
if(counter_en)counter=counter+1;
if(counter=='b10000000000&&~KEY[0])//去抖验证成功
begin
counter1<=counter1+1;//延时计数
counter_en<=0;
counter<=0;
end
else if(counter=='b10000000000&&KEY[0])//验证失败
begin
counter<=0;
counter_en<=0;
end
end
SEG7_LUT_4 u0 ( HEX0,HEX1,HEX2,HEX3,counter1); //连接数码管的模块
endmodule