• 按键消抖电路设计——你们遇到的都是伪消抖


       最近要用上一个key消抖的功能。于是找到了之前写的并放入博客的程序,发现居然全部有问题。http://www.cnblogs.com/sepeng/p/3477215.html —— 有问题,包括很多的网上程序也是有问题,不缺乏一些有名气的网咖的程序。包括某权某金等。

      绝大部分程序是      相隔N久采集一次和上一次采集的数据进行比较,而不是在N的这个时间段检测这输入数据是不是稳定的。

    所以今天上传一个正确的代码,0->1   1->0 都可以消抖。

     1 module key_data_in  (
     2                     clock ,
     3                     rst_n ,
     4                     key_in ,
     5                     key_data
     6                     );
     7 input         clock ; 
     8 input         rst_n ; 
     9 input         key_in ; 
    10 
    11 output     reg    key_data ; 
    12 
    13 reg     key_reg0, key_reg1 ; 
    14 wire     key_h  , key_l ; 
    15 always @ (posedge clock or negedge rst_n)
    16     if (!rst_n) begin 
    17             key_reg0     <= 1'd0 ; 
    18             key_reg1     <= 1'd0 ; 
    19             end 
    20     else begin 
    21             key_reg1     <= key_reg0 ; 
    22             key_reg0     <= key_in ; 
    23             end
    24 assign key_h = (key_reg0 & key_reg1) ? 1'd1 : 1'd0 ; 
    25 assign key_l = (~(key_reg0 | key_reg1)) ? 1'd1 : 1'd0 ; 
    26 
    27 reg     [18:0]  tim_cnt ; 
    28 always @ (posedge clock or negedge rst_n)
    29     if (!rst_n) begin 
    30             tim_cnt        <= 19'd0 ; 
    31             key_data     <= 1'd0 ; 
    32             end 
    33     else  if (key_h| key_l)begin
    34             if (&tim_cnt) 
    35                 key_data<= key_reg1 ; 
    36             else 
    37                 tim_cnt <= tim_cnt + 19'd1 ; 
    38             end 
    39     else 
    40             tim_cnt        <= 19'd0 ;     
    41             
    42 endmodule 

      之所以用19bit计时,是因为我的是50m时钟, f=20ns。所以这个程序最大消抖2^19*20ns=10ms

          需要者根据自己的需要来修改延时值

    欢迎加入: FPGA广东交流群:162664354

          FPGA开发者联盟: 485678884

        微信公众号:FPGA攻城狮之家

     

     

  • 相关阅读:
    RxJava系列7(最佳实践)
    异步编程 z
    利用WCF的双工通讯实现一个简单的心跳监控系统 z
    c#深拷贝
    MEF load plugin from directory
    C# 文件操作 把文件读取到字节数组
    code md5
    gridview转成EXCEL文件保存(多页)
    Getting started with SciPy for .NET
    IronPython调用C# DLL函数方法
  • 原文地址:https://www.cnblogs.com/sepeng/p/5795270.html
Copyright © 2020-2023  润新知