【随笔】用Verilog写的按键消抖

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

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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

转载于:https://www.cnblogs.com/hclmcu/archive/2010/08/15/1799890.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值