hclmcu

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

废话少说,直接贴代码:(如需转载请注明出处)

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Company: hclmcu
// Engineer:
//
// Create Date:    09:07:47 08/15/2010
// Design Name:   按键消抖
// Module Name:    key_filter
// Description:   由此模块作为按键消抖模块时,当按键一直按下时,key_out的值一直为低,所以当使用时,可以用
//       (negedge key_out)来实现即使按皱键一直按着,操作(此处指led或说是count)只进行一次。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//module key_filter(clk,key_in,key_out );
module key_filter(clk,key_in,led );
  
  input clk,key_in;
  output [7:0] led;
  reg key_out;
  reg [19:0] key_count; 
  reg [7:0] count;   //灯显示计数
  wire [7:0] led;
 
always @ (posedge clk)
begin
 if(key_in==0)    //判断是否有键按下
 begin
  key_count<=key_count+1'b1;//当检测到有键按下,计数器加1
  key_out<=1'b1;//此时延时尚未达到,所以输出为高
  if(key_count>=20'd1000000)
  begin
   key_count<=20'd1000001;//当达到延时20ms(50MHZ)时,锁存key-count值
   key_out<=1'b0;//此时延时达到200us,输出为低
  end
 end
 else
 begin
  key_out<=1'b1;//当没有键按下时, 输出为高
  key_count<=1'b0;//计数器清0
 end
end
//**********下面模块为由led灯来检测按键消抖是否成功*************************************
always @(negedge key_out)
begin
 count<=count+1'b1;
end
assign led=count;

endmodule

posted on 2010-08-15 09:24  hclmcu  阅读(1114)  评论(0编辑  收藏  举报