![](https://img.kancloud.cn/9b/e7/9be729fac546c8e97740722d404bf9ce_1238x514.png)

` `未经过消抖的程序下载到小脚丫上会发现按键有时不能够控制led翻转,这是因为按键的抖动造成了led状态变化不可控,所以我们必须将抖动消除。下面是一种延时去抖的程序。

```

// ********************************************************************

// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<

// ********************************************************************

// File name : debounce.v

// Module name : debounce

// Author : STEP

// Description :

// Web : www.stepfpga.com

//

// --------------------------------------------------------------------

// Code Revision History :

// --------------------------------------------------------------------

// Version: |Mod. Date: |Changes Made:

// V1.0 |2017/03/02 |Initial ver

// --------------------------------------------------------------------

// Module Function:按键消抖

module debounce (clk,rst,key,key_pulse);

parameter N = 1; //要消除的按键的数量

input clk;

input rst;

input [N-1:0] key; //输入的按键

output [N-1:0] key_pulse; //按键动作产生的脉冲

reg [N-1:0] key_rst_pre; //定义一个寄存器型变量存储上一个触发时的按键值

reg [N-1:0] key_rst; //定义一个寄存器变量储存储当前时刻触发的按键值

wire [N-1:0] key_edge; //检测到按键由高到低变化是产生一个高脉冲

//利用非阻塞赋值特点,将两个时钟触发时按键状态存储在两个寄存器变量中

always @(posedge clk or negedge rst)

begin

if (!rst) begin

key_rst <= {N{1'b1}}; //初始化时给key_rst赋值全为1,{}中表示N个1

key_rst_pre <= {N{1'b1}};

end

else begin

key_rst <= key; //第一个时钟上升沿触发之后key的值赋给key_rst,同时key_rst的值赋给key_rst_pre

key_rst_pre <= key_rst; //非阻塞赋值。相当于经过两个时钟触发,key_rst存储的是当前时刻key的值,key_rst_pre存储的是前一个时钟的key的值

end

end

assign key_edge = key_rst_pre & (~key_rst);//脉冲边沿检测。当key检测到下降沿时,key_edge产生一个时钟周期的高电平

reg[17:0] cnt; //产生延时所用的计数器,系统时钟12MHz,要延时20ms左右时间,至少需要18位计数器

//产生20ms延时,当检测到key_edge有效是计数器清零开始计数

always @(posedge clk or negedge rst)

begin

if(!rst)

cnt <= 18'h0;

else if(key_edge)

cnt <= 18'h0;

else

cnt <= cnt + 1'h1;

end

reg [N-1:0] key_sec_pre; //延时后检测电平寄存器变量

reg [N-1:0] key_sec;

//延时后检测key,如果按键状态变低产生一个时钟的高脉冲。如果按键状态是高的话说明按键无效

always @(posedge clk or negedge rst)

begin

if (!rst)

key_sec <= {N{1'b1}};

else if (cnt==18'h3ffff)

key_sec <= key;

end

always @(posedge clk or negedge rst)

begin

if (!rst)

key_sec_pre <= {N{1'b1}};

else

key_sec_pre <= key_sec;

end

assign key_pulse = key_sec_pre & (~key_sec);

endmodule

```

c语言实现按键的抖动与消除,7.3 按键消抖相关推荐

  1. c语言实现按键的抖动与消除,【Verilog HDL 训练】第 09 天(按键消抖)

    5月7日 按键防抖 1. 用verilog实现按键抖动消除电路,抖动小于15ms,输入时钟12MHz. 在编写Verilog代码之前,先分析下一些前提问题,首先是几个按键(1个,多个),我们以1个和三 ...

  2. c语言实现按键的抖动与消除,8051单片机实验2——按键识别(一)

    按键识别方法之一 1. 实验任务 每按下一次开关SP1,计数值加1,通过AT89S51 单片机的P1 端口的P1.0 到P1.3显示出其的二进制计数值. 2. 电路原理图 图2.1 按键识别方法一 3 ...

  3. 【STM32】按键抖动及消除

    由于按键的抖动会导致一次按键动作被当成多次按键,为确保MCU对按键的一次闭合仅作一次处理,必须消除按键的抖动,在按键处于稳定状态时读取按键的状态. 按键的去抖动,通常有硬件消抖和软件消抖两种方式. ( ...

  4. HUN工训中心:开关电路和按键信号抖动

    工训中心的牛马实验 1.实验目的: 1) 认识开关电路,掌握按键状态判别.开关电路中逻辑电平测量.逻辑值和逻辑函数电路. 2) 掌握按键信号抖动简单处理方法. 3) 实现按键计数电路. 2.实验资源: ...

  5. 单片机c语言按键调整时钟,关于单片机电子时钟按键部分(调时间的)如何设计...

    给你一个示例参考 //实验平台:TX-1C开发板(板子上是有源蜂鸣器,程序按无源编写的,不影响正常使用) //K1键调整选择,K2键+,长按连+,K3键-,长按连-,K4键闹钟设置 //定时器初始化程 ...

  6. Verilog功能模块 —— 按键消抖

    一. 什么是按键消抖 按键消抖_百度百科 (baidu.com) 按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开.闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断 ...

  7. 单片机按键“消抖”的思考

    初学单片机时,讲到了一个按键"消抖"概念,视屏教程中只是说到要确定按键是不是真正按下,所以需要加一个延时来判断. 附上延时消抖程序代码: 代码1 void keypros() {i ...

  8. 按键消抖+点亮led灯

    文章目录 前言 一.按键消抖 二.任务描述 三.系统框图 四.模块描述 五.模块代码 六.项目仿真 七.管脚信息 八.运行效果 总结 前言   本课程是按键消抖的一个扩展内容,主要是通过实验观察按键消 ...

  9. 单片机入门资料,按键消抖方式,按键怎么消抖

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

  10. FPGA学习-Verilog实现独立按键消抖

    文章目录 前言 一.独立按键消抖原理 二.按键消抖程序实现(Verilog) 1.按键触发判断 2.计数器模块实现 3.按键状态更新 4.按键控制led亮灭 三.仿真测试文件编写 四.编译结果 前言 ...

最新文章

  1. JSP:1. 指令(page  ;include ;taglib)2. 内置对象
  2. 《基于张量网络的机器学习入门》学习笔记1
  3. ML:MLOps系列讲解之《MLOps原则—迭代增量过程/自动化/持续部署/版本控制/实验跟踪/测试/监控/“ML成绩”系统/可再现性/松散耦合架构(模块化)/基于ML的软件交付指标等》解读
  4. [Cocoa]深入浅出 Cocoa 之 Core Data(1)- 框架详解
  5. 定了!这个专业研究生扩招,博士生待遇要提高!已有多所高校新增…
  6. idea代码补全声明代码_用了这么多年idea,竟然不知道这些代码补全功能
  7. linux时间树,linux小知识之查看系统时间
  8. 白话设计模式--结构型模式之 适配器模式(Adapter)
  9. Win7系统经常报错怎样解决?
  10. LinkedList和 ArrayList的大数据面试资料(面试题)
  11. 有感于Oracle 9i的QueryHints
  12. 深入理解Yii2.0 (2)事件Event
  13. 湖南麒麟实时操作系统调优指南
  14. Kali-Linux windows 双系统的安装
  15. Xunsearch体验Demo
  16. 升级macos beta_如何选择退出macOS开发人员或公开Beta版
  17. 地震应急综合解决方案
  18. vue实现刷新页面,页面回到顶部
  19. java免费浏览器,Java swing实现简单的浏览器源码免费分享
  20. FFmpeg 直播黑屏问题分析解决

热门文章

  1. Springboot整合七牛云上传图片
  2. 解决Xshell6 Xftp 6 强制更新,无法更新使用问题
  3. 大型天燃气供应商遭勒索攻击、Log4Shell正在突变|12月15日全球网络安全热点
  4. 史上最全正则表达式语法,文末附常用表达式!
  5. Latex中文简历制作
  6. kux格式怎么转换成mp3_kux格式怎么转换?kux完美转换成MP3音频的技巧分享
  7. 格式转换器怎么修改视频文件?把kux格式转换成mp4的技巧
  8. 工业相机选型、高速摄像机选型、相机参数接口总结
  9. matlab排序算法,相同位置返回元素排名
  10. android游戏存档在哪里,网易安卓模拟器游戏存档在哪个文件夹的详细解析