ISE 下按键消抖实验

实验原理

按键做为基本的人机输入接口,在很多电子设计中都能见到,由于机械特性,在按键按下或 松开的时候,按键输入值是有抖动的,无论按下去是多平稳,都难以消除抖动,按键消抖方式有 很多,本实验主要是通过 FPGA 计时来消抖。实验中设计了一个计数器,当按键输入有变化时, 计时器清零,否则就累加,直到加到一个预定值(例如 10ms),就认为按键稳定,输出按键值, 这样就得到以后没有抖动的按键值。由于在很多地方需要用到按键下降沿或上升沿的检测,按键 消抖模块直接集成了上升沿和下降沿检测的功能。

 程序设计 如下图所示,通过按键消抖后,在按键按下时,十进制计数器加 1,通过数码管译码扫描后 显示出来。

按键消抖部分的原理在上节已经讲过,按键消抖部分代码写的非常精炼,阅读起来稍显费解, 建议结合仿真波形去读代码。在提供的例程文件下的 sim 文件夹中同时提供了仿真文件,可以通 过添加仿真文件来进行仿真观察代码中信号的变化。

 

 

仿真

这里我们添加了一个串口接收的激励程序 key_debounce_tb.v 文件,用来仿真按键 key 的输入。 仿真的结果如下,我们看到按键一共有 5 次被按下,但是因为前面 4 次按键按下的低电平保持时 间都小于 20ms, 这 4 次的按下都被程序判断为抖动,只有第 5 次的按键按下时间大于了 20ms, 才 判断为按键有按下,这时 button_negedge 信号产生了一个脉冲。 

module count_m10(
                 input          clk,
                 input          rst_n,
                 input          en,    //Counter enable
                 input          clr,   //Counter synchronous reset   
                 output reg[3:0]data,  //counter value
                 output reg     t      // carry enable signal
                );
always@(posedge clk or negedge rst_n) 
begin
    if(rst_n==0)
    begin
        data <= 4'd0;
        t <= 1'd0;
    end
    else if(clr)
    begin
        data <= 4'd0;
        t <= 1'd0;      
    end
    else if(en)
    begin
        if(data==4'd9)
        begin
            t<= 1'b1;    //Counter to 9 to generate carry
            data <= 4'd0;//Counter to 9 reset
        end
        else
        begin
            t <= 1'b0;
            dat
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值