键盘去抖程序

下面是我的键盘去抖程序,根据特权同学的视频教程改编一下,其中没有复位信号,下载到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

原文地址:https://www.cnblogs.com/azprobert/p/1857601.html