用verilog编写按键消抖代码

这篇具有很好参考价值的文章主要介绍了用verilog编写按键消抖代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本代码在按键按下和松开情况下均能消抖,消抖延时20ms(时钟频率为100MHz时)。

代码如下

module key3_led2(
//from system input
    input    clk,
    input    rstn,
//from external input to pl
    input    ex_key1,        //按键从PL端输入
//from pl to ps
    output    reg    pl_key1    //处理后的按键信号传给PS端

    
);

parameter    delay_t=21'd2_00;//0_000;    //时钟100MHz,延时20ms
//按键输入信号异步转同步(消除亚稳态)
reg [1:0]        key1_r;
//捕捉按键跳变沿
wire        key1_change;
//按键消抖延时计数
reg [20:0]        delay_key1_cnt;
//按键状态
wire        key1_state_down;//(按键未按时为1,按下为0)检测按下时的下降沿
wire        key1_state_up;    //检测按键松开时的上升沿。

//key1消抖
//消除亚稳态,单bit信号异步转同步
always@(posedge clk or negedge rstn)
begin
    if(!rstn)
        begin
            key1_r<=1;
        end
    else
        begin
            key1_r<={key1_r[0],ex_key1};
        end
end

//边沿检测上升沿和下降沿

assign key1_change=(~key1_r[1]&key1_r[0]) | (key1_r[1] & ~key1_r[0]);

//延时20ms
always@(posedge clk or negedge rstn)
begin
    if(!rstn)
        begin
            delay_key1_cnt<=0;
        end
    else if(key1_change==1'b1)
        begin
            delay_key1_cnt<=0;    
        end
           else if (delay_key1_cnt == delay_t)
            begin
                delay_key1_cnt<=delay_t;
            end
                  else
            begin
                delay_key1_cnt<=delay_key1_cnt+1'b1;
            end
end
//按键状态输出,key1_state_a假定按键默认状态为1,按下为0;
assign    key1_state_down = ((delay_key1_cnt == delay_t)&&(key1_r[1] == 1'b0))?1'b0:1'b1;
assign    key1_state_up = ((delay_key1_cnt == delay_t)&&(key1_r[1] == 1'b1))?1'b1:1'b0;

always@(posedge clk or negedge rstn)
begin
    if(!rstn)
        begin
            pl_key1<=1'd1;
        end
    else
       if(pl_key1)
            pl_key1<=key1_state_down;
        else
          pl_key1<=key1_state_up;
end
endmodule

用该代码扩展到3个按键,仿真结果如下图,按键信号输入名称ex_key1、ex_key2、ex_key4;按键边沿检测信号key1_change、key2_change、key4_change;消抖后的信号pl_key1、pl_key2、pl_key4。

用verilog编写按键消抖代码

 文章来源地址https://www.toymoban.com/news/detail-432433.html

到了这里,关于用verilog编写按键消抖代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • verilog实现滚动显示学号(含按键消抖)

    经过了前前后后将近十个小时的时间,总算能够正确上板并写完了最终的实验报告。花费了我大量时间的实验我觉得有必要记录并分享出来。声明: 本人写verilog的能力不强,看我花了这么多时间就知道了,如果代码有问题感谢指正,代码是在这位学长的基础上修改的 零时的

    2024年02月04日
    浏览(32)
  • Qt编写的小软件:一个模拟按键按下和鼠标(左键)按下的小工具

    最近玩SLG游戏的时候有大量对剧情推进无意义的对话想要跳过的时候只能狂按空格键或者狂点鼠标,还好本人好歹是程序员,于是写了个小工具来处理。 下载地址:Qt编写的模拟鼠标按下和按键按下的小工具-C++文档类资源-CSDN下载 上面的资源包含打包好的程序和代码。 界面

    2024年02月11日
    浏览(45)
  • 蓝桥杯单片机类按键代码讲解和考点探究(三行代码消抖讲解)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 CON3中将1,2用跳线帽短接是矩阵键盘,可用范围为S4到S19。将2,3短接则是独立按键,可用范围是S4到S7. 按键原理讲解 单取一个按键,一端接到GND,一段接到单片机的IO口上(以下称I口,输入口)。当按

    2023年04月20日
    浏览(67)
  • 【蓝桥杯嵌入式】定时器实现按键单击,双击,消抖以及长按的代码实现

    🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 -  蓝桥杯嵌入式_勾栏听曲_0的博客 🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️ 📌个人主

    2024年01月17日
    浏览(46)
  • 单片机入门资料,按键消抖方式,按键怎么消抖

     1.什么是按键消我们先来看一下按键按下去的波形图   1.按键消抖原理 我们可以看到当按键按下的那一时刻和松开的时候有类似于锯齿的形状那就是按键抖动,这个抖动不是我们人为能控制得了的,所以我们只能对进行硬件消抖或者进行软件消抖.          上图中我们可以

    2024年02月08日
    浏览(39)
  • 单片机之独立按键(多种按键代码编写)

    单片机之独立按键原理:按键右端接GND,左边接到单片机的IO口,同时接了一个上拉电阻,当按键未按下时,P2.0为高电平(学过模电的人都应该知道为什么吧)当按键按下时,相当于P2.0口与GND相连为 低电平。

    2024年02月03日
    浏览(58)
  • Arduino程序设计(四)按键消抖+按键计数

    本文主要介绍两种按键控制LED实验: 第一种是采用软件消抖的方法检测按键按下的效果; 第二种是根据按键按下次数,四个LED灯呈现不同的流水灯效果。 按键在按下时,由于机械和物理特定的原因,经常会产生一些开关变换,而这些变换会让程序误认为是短时间内进行了多

    2024年02月10日
    浏览(73)
  • FPGA开发:按键消抖

    相关阅读 FPGA开发专栏 https://blog.csdn.net/weixin_45791458/category_12388695.html?spm=1001.2014.3001.5482         按键是FPGA开发板上的重要交互元件,因为按键的内部的结构设计,在按下和松开按键时,按键会无法避免地产生机械抖动,因此要对按键输入进行特殊处理,否则可能会因为机械

    2024年02月15日
    浏览(50)
  • FPGA按键消抖

    按键是输入设备,一般来说,按键在没有按下的时候是高电平;当按键按下的时候,为低电平。 在 DE2-70 User Manual 中 Each switch provides a high logic level (3.3 volts) when it is not pressed, and provides a low logic level (0 volts) when depressed. Since the pushbutton switches are debounced, they are appropriate for use

    2024年02月15日
    浏览(51)
  • 基于FPGA的按键消抖

    按键抖动:按键抖动通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。当按下一次按键,可能在A点检测到一

    2024年02月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包