欢迎光临散文网 会员登陆 & 注册

FPGA学习笔记-按键消抖

2023-06-29 16:42 作者:snow_404  | 我要投稿

        按键按下到稳定之前有一定时间的抖动若不消除这部分抖动容易导致按键不灵敏。

按键抖动的时候会被误认为多次触发按键。

        抖动时间的长短由按键的机械特性决定因此需要通过延时的方法来消抖只在中间稳定的某一时刻取一个使能值就可以很好的去抖。

        实现在按键按下的10ms左右取一个尖峰信号作为按键按下的标准就可以消除抖动,举例使用按键控制一个led灯的亮灭。

//代码实现

`timescale 1ns / 1ps


module key(

    input sysclk,

    input rst_n,

    input key,

    output reg led

    );

    

    parameter data=50_000_0;//芯片晶振10毫秒需要的次数

    reg [18:0] cnt;//计时器

    wire key_flag;//尖峰信号

 

 //按键按下10毫秒计时器

    always@(posedge sysclk or negedge rst_n)

        begin

            if (!rst_n)

                cnt<=0;

            else if (key == 0)//按键按下的时候

                begin

                    if (cnt == data-1)//计满10毫秒之后保持

                        cnt<=cnt;

                    else

                        cnt=cnt+1;

                end

            else

                cnt<=0;

        end

        

//取稳定时候的尖峰信号

    assign key_flag = (cnt == data-2)?1:0;//三目运算符

    

//当按键按下的尖峰信号为1的时候led灯取反

    always@(posedge sysclk or negedge rst_n)

        begin

            if (!rst_n)

                led<=0;

            else if (key_flag)

                led<=~led;

            else

                led<=led;

        end

        

endmodule

FPGA学习笔记-按键消抖的评论 (共 条)

分享到微博请遵守国家法律