按键消抖模块

 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

 

posted @ 2012-06-24 17:07  sky1991  阅读(392)  评论(0编辑  收藏  举报