1 /******************************************** 2 ** ** 3 ** 按键消抖模块 ** 4 ** ** 5 ********************************************/ 6 7 module key_filter(clk,key_in,key_out ); 8 9 input clk; 10 input [3:0] key_in; 11 output [3:0] key_out; 12 13 reg [3:0] key_out; 14 15 reg [19:0] count; 16 17 always @ (posedge clk) 18 begin 19 if(key_in != 4'b1111) //判断是否有键按下 20 begin 21 count <= count+1'b1;//当检测到有键按下,计数器加1 22 key_out <= 4'b1111;//此时延时尚未达到,所以输出为高 23 24 if(count>=20'd1000000) 25 begin 26 count<=20'd1000001;//当达到延时200us(50MHZ)时,锁存key-count值 27 key_out <= key_in;//此时延时达到200us,输出为低 28 end 29 end 30 else 31 begin 32 key_out <= 4'b1111;//当没有键按下时, 输出为高 33 count <= 1'b0;//计数器清0 34 end 35 36 end 37 38 39 40 endmodule