当前位置: 首页 > news >正文

FPGA(Verilog)实现按键消抖

实现按键消抖功能:

1.滤除按键按下时的噪声和松开时的噪声信号。

2.获取已消抖的按键按下的标志信号。

3.实现已消抖的按键的连续功能。

Verilog实现

模块端口

key_filter(input	wire 	clk		,input	wire 	rst_n	,input	wire 	key_in	,	//按下按键时为0output 	reg 	key_flag,	//第一次按下的标志信号(已消抖)output 	reg 	key_out	,	//输出按键信号(已消抖)output 	reg 	key_cont	//输出连续按键信号(已消抖)-计时一段时间拉高1次
);

20ms计数

always@(posedge clk or negedge rst_n)if(!rst_n) cnt_20ms <= 20'd0;else if(key_in)	//松下按键cnt_20ms <= 20'd0;else if(cnt_20ms == CNT_20MS_MAX)	//达到消抖时间cnt_20ms <= CNT_20MS_MAX;elsecnt_20ms <= cnt_20ms+20'd1;

按键第一次按下的标志信号

always@(posedge clk or negedge rst_n)if(!rst_n) key_flag<=1'b0;else if(cnt_20ms == CNT_20MS_MAX-20'd1)	//已消抖,拉高key_flag一个周期key_flag<= 1'b1;else key_flag<=1'b0;

已消抖的按键信号

always@(posedge clk or negedge rst_n)if(!rst_n) key_out<=1'b0;else if(key_in)	//松下按键key_out<= 1'b0;else if(key_flag)	//已消抖key_out<= 1'b1;else ;

连续信号所需计数器

always@(posedge clk or negedge rst_n)if(!rst_n) cnt_cont <= 20'd0;else if(key_out) begin	//已消抖if(cnt_cont == CNT_CONT_MAX)cnt_cont <= 20'd0;else cnt_cont <= cnt_cont+20'd1;endelsecnt_cont <= 20'd0;

连续按键信号(已消抖)-计时一段时间拉高1次

always@(posedge clk or negedge rst_n)if(!rst_n) key_cont<=1'b0;else if(key_flag)key_cont <= 1'b1;else if(key_out) begin	//已消抖if(cnt_cont == CNT_CONT_MAX)	//连续按下一定时间,拉高key_cont一个周期key_cont <= 1'b1;else key_cont <= 1'b0;endelsekey_cont <= 1'b0;

testbench:

`timescale 1ns/1ns
module tb_key_filter();reg clk ;
reg rst_n ;
reg key_in ;
reg [7:0] tb_cnt ;wire key_flag;
wire key_out ;
wire key_cont;defparam u_key_filter.CNT_20MS_MAX = 20'd9;
defparam u_key_filter.CNT_CONT_MAX = 24'd49;initial begin clk = 1'b1 ;rst_n = 1'b0;#20rst_n = 1'b1;#(20*199+100)$stop;
endalways #10 clk=~clk;always@(posedge clk or negedge rst_n)if(!rst_n) tb_cnt <=8'b0;else if(tb_cnt ==8'd199)tb_cnt <=8'b0;elsetb_cnt <= tb_cnt +8'b1;always@(posedge clk or negedge rst_n)if(!rst_n) key_in <= 1'b1 ; else if(((tb_cnt>=8'd9) && (tb_cnt<=8'd39))||((tb_cnt>=8'd159) && (tb_cnt<=8'd179)))key_in<={$random}%2;else if((tb_cnt<8'd9)||(tb_cnt>8'd179))key_in<=1'b1;elsekey_in<=1'b0;key_filter u_key_filter(.clk		(clk		),.rst_n		(rst_n		),.key_in		(key_in		), .key_flag	(key_flag	),	//第一次按下的标志信号(已消抖).key_out	(key_out	),	//输出按键信号(已消抖).key_cont	(key_cont	)	//输出连续按键信号(已消抖)-计时一段时间拉高1次
);endmodule

仿真波形:

相关文章:

FPGA(Verilog)实现按键消抖

实现按键消抖功能&#xff1a; 1.滤除按键按下时的噪声和松开时的噪声信号。 2.获取已消抖的按键按下的标志信号。 3.实现已消抖的按键的连续功能。 Verilog实现 模块端口 key_filter(input wire clk ,input wire rst_n ,input wire key_in , //按下按键时为0output …...

第十二届蓝桥杯大赛软件赛省赛C/C++大学B组

第十二届蓝桥杯大赛软件赛省赛C/C 大学 B 组 文章目录 第十二届蓝桥杯大赛软件赛省赛C/C 大学 B 组1、空间2、卡片3、直线4、货物摆放5、路径6、时间显示7、砝码称重8、杨辉三角形9、双向排序10、括号序列 1、空间 1MB 1024KB 1KB 1024byte 1byte8bit // cout<<"2…...

面了钉钉搜广增算法岗(暑期实习),秒挂。。。。

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…...

前端实现流文件下载的完整指南

在现代Web开发中&#xff0c;经常会遇到需要从服务器下载文件的情况。有时候这些文件是事先存储好的&#xff0c;可以通过简单的URL链接直接下载&#xff1b;但有时候&#xff0c;我们需要从数据流中动态生成文件并将其提供给用户。本篇博客将介绍如何在前端实现流文件下载的完…...

Kotlin:常用标准库函数(let、run、with、apply、also)

一、let 扩展函数 Kotlin标准库函数let可用于范围确定和空检查。当调用对象时&#xff0c;let执行给定的代码块并返回其最后一个表达式的结果。对象可以通过引用(默认情况下)或自定义名称在块中访问。 let扩展函数源码 let.kt文件代码 fun main() {println("isEmpty $is…...

雷军给年轻人的五点建议

前言 拿来激励自己,没事就看一看,给自己高一点的要求. 致刚入门的程序员五点建议 每个IT企业&#xff0c;尤其是初创企业&#xff0c;非常苦恼&#xff1a;找不到好的程序员。现在大学、软件学院及各种培训机构&#xff0c;每年培养几十万的程序员&#xff0c;毕业的每个人都…...

Unity DOTS物理引擎的核心分析与详解

最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎&#xff0c;今天我们来给大家分享和介绍一下这个物理引擎的使用。 Unity.Physics的设计哲学 Unity.Physics是基于DOTS设计思想的一个高性能C#物理引擎的实现, 包含了物理刚体的迭代计算与碰撞检测等查…...

C++ //练习 12.4 在我们的check函数中,没有检查i是否大于0。为什么可以忽略这个检查?

C Primer&#xff08;第5版&#xff09; 练习 12.4 练习 12.4 在我们的check函数中&#xff0c;没有检查i是否大于0。为什么可以忽略这个检查&#xff1f; 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 解释 size_type类型是无符号整…...

达梦备份与恢复

达梦备份与恢复 基础环境 操作系统&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本&#xff1a;DM Database Server 64 V8 架构&#xff1a;单实例1 设置bak_path路径 --创建备份文件存放目录 su - dmdba mkdir -p /dm8/backup--修改dm.ini 文件…...

iOS App Store审核要求与Flutter应用的兼容性分析

本文探讨了使用Flutter开发的iOS应用能否上架&#xff0c;以及上架的具体流程。苹果提供了App Store作为正式上架渠道&#xff0c;同时也有TestFlight供开发者进行内测。合规并通过审核后&#xff0c;Flutter应用可以顺利上架。但上架过程可能存在一些挑战&#xff0c;因此可能…...

javaScript常见对象方法总结

1&#xff0c;object.assign() 用于合并对象的属性。它可以将一个或多个源对象的属性复制到目标对象中&#xff0c;实现属性的合并。 语法 Object.assign(target, ...sources); 1,target&#xff1a;目标对象&#xff0c;将属性复制到该对象中。 2,sources&#xff1a;一个…...

使用Java流API构建树形结构数据

简介&#xff1a; 在实际开发中&#xff0c;构建树状层次结构是常见需求&#xff0c;如组织架构、目录结构或菜单系统。本教案通过解析给定的Java代码&#xff0c;展示如何使用Java 8 Stream API将扁平化的菜单数据转换为具有层级关系的树形结构。 1. 核心类定义 - Menu Data…...

蓝桥杯备考

1.1 输入输出 cin/cout scanf/printf 万能头文件 #include<bits/stdc.h> cin/cout 速度相对慢&#xff0c;需要关同步,代码如下 #include<bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int x,y;cin>>x…...

Linux云计算之Linux基础1——操作系统理论基础

目录 1、UNIX 的诞生和广泛使用 2、CPU 架构类型 3、CPU 指令 4、计算机程序设计和执行过程 5、操作统OS 6、编程层次 7、程序的内部运行接口 8、UI程序接口(人机交互接口) 9、程序的运行模式: 10、POSIX&#xff1a;可移植操作系统规范 11、计算机开源领域 12、Li…...

大模型从入门到应用——OpenAI基础调用

摘要&#xff1a;这是OpenAI的基本调用&#xff0c;通过文章了解大模型的一个基础使用 1. 调用说明 在大型语言模型&#xff08;LLM&#xff09;的应用中&#xff0c;OpenAI的基础调用是入门的关键一步。通过调用OpenAI的API&#xff0c;我们可以利用其强大的语言处理能力&am…...

前端学习<三>CSS进阶——0102-CSS布局样式

前言 css 进阶的主要内容如下。 1、css 非布局样式 html 元素的分类和特性 css 选择器 css 常见属性&#xff08;非布局样式&#xff09; 2、css 布局相关 css 布局属性和组合解析 常见布局方案 三栏布局案例 3、动画和效果 属于 css 中最出彩的内容。 多背景多投影特…...

关于51单片机TMOD定时器的安全配置

定时器介绍&#xff1a; -------------------------------------------------------------------------------------------------------------------------- 首先配置的是控制寄存器 TCON 说直白点&#xff0c;这个寄存器就是用来计数的&#xff0c;打开计时器&#xff0c;关…...

Unity 主线程和其他线程之间的数据访问

在Unity中&#xff0c;主线程和其他线程之间的数据访问需要小心处理&#xff0c;因为在多线程环境下&#xff0c;不当的数据访问可能导致竞争条件和数据不一致性。 在Unity中&#xff0c;主线程通常用于处理用户输入、更新游戏逻辑和渲染。其他线程通常用于执行耗时的计算、加…...

电商系列之风控安全

> 插&#xff1a;AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…...

计算机网络针对交换机的配置

实验 目的 交换机的基本配置&#xff0c;交换机VLAN配置 实验条件 Windows&#xff0c;Cisco packet tracer 实验 内容 交换机的基本配置&#xff0c;交换机VLAN配置 实验 过程 一、交换机的基本配置 进入特权模式 Switch>enable 进入配置模式 Switch#configure ter…...

GME-Qwen2-VL-2B-Instruct代码实例:自定义指令前缀‘Find an image that matches...’注入方法

GME-Qwen2-VL-2B-Instruct代码实例&#xff1a;自定义指令前缀‘Find an image that matches...’注入方法 1. 项目背景与价值 在实际的图文匹配场景中&#xff0c;我们经常需要判断一张图片与多个文本描述之间的匹配程度。GME-Qwen2-VL-2B-Instruct作为一个强大的多模态模型…...

从农田到实验室:大疆P4M多光谱数据与ASD地物波谱仪实测数据对比实操指南

从农田到实验室&#xff1a;大疆P4M多光谱数据与ASD地物波谱仪实测数据对比实操指南 当无人机掠过农田上空&#xff0c;搭载的多光谱传感器正在以厘米级分辨率记录作物的生理状态。这些数据能否真实反映地表反射特性&#xff1f;本文将以大疆P4M多光谱无人机与ASD FieldSpec系…...

windows 下使用 arthas 排查接口慢的问题

文章目录1、windows 如何安装 arthas2、在排查问题之前&#xff0c;先启动 arthas3、排查某个慢接口&方法4、更多功能参考官网文档1、windows 如何安装 arthas 进入 https://github.com/alibaba/arthas/releases&#xff0c;点击 arthas-bin.zip 进行下载。 解压下载完成后…...

SiameseUIE中文-base效果对比:在CLUE-NER和COTE-ABSA双基准测试

SiameseUIE中文-base效果对比&#xff1a;在CLUE-NER和COTE-ABSA双基准测试 想找一个开箱即用、效果又好的中文信息抽取工具&#xff1f;今天我们来聊聊阿里巴巴达摩院出品的SiameseUIE中文-base模型。这可不是一个普通的模型&#xff0c;它是一个“通用信息抽取”模型&#x…...

Chandra OCR多平台部署指南:Windows WSL2/Mac Metal/Linux Docker全搞定

Chandra OCR多平台部署指南&#xff1a;Windows WSL2/Mac Metal/Linux Docker全搞定 1. Chandra OCR核心能力解析 Chandra是Datalab.to在2025年10月开源的布局感知OCR模型&#xff0c;与传统OCR工具最大的区别在于它能完整保留文档的排版结构信息。想象一下&#xff1a;当你扫…...

使用Cosmos-Reason1-7B分析网络协议交互逻辑:以TCP三次握手为例

使用Cosmos-Reason1-7B分析网络协议交互逻辑&#xff1a;以TCP三次握手为例 最近在尝试用大模型来理解一些复杂的系统交互逻辑&#xff0c;发现了一个挺有意思的用法。我们团队在测试Cosmos-Reason1-7B时&#xff0c;没有让它写代码或者生成文案&#xff0c;而是给了它一个更“…...

Wan2.2-I2V-A14B效果展示:复杂提示词‘雨夜霓虹街道行人撑伞行走’生成效果

Wan2.2-I2V-A14B效果展示&#xff1a;复杂提示词雨夜霓虹街道行人撑伞行走生成效果 1. 模型能力概览 Wan2.2-I2V-A14B是一款专为高质量视频生成设计的先进模型&#xff0c;能够将文字描述转化为生动的动态画面。这款模型特别擅长处理复杂场景和细腻氛围的渲染&#xff0c;在以…...

3PEAK思瑞浦 TPT1051V-SO1R SOP8 CAN收发器

特性 符合IS011898标准支持CAN FD和最高达5 Mbps的数据速率典型环路延迟:110纳秒5V电源供应&#xff0c;3.0V~5.5VI0接口接收器共模输入电压:士30V总线故障保护:42VCAN网络最多支持110个节点结温范围从-40C到150C闩锁性能超过500mA总线引脚ESD保护:-8kV人体模型 -1.5kV充电设备…...

【C语言】memmove()函数实战:如何安全高效地处理内存重叠拷贝

1. 为什么需要memmove()函数&#xff1f; 在C语言中处理内存拷贝时&#xff0c;我们经常会遇到一个棘手的问题&#xff1a;当源内存块和目标内存块存在重叠区域时&#xff0c;使用memcpy()函数可能会导致数据被意外覆盖。想象一下你在整理书架&#xff0c;想把第三层到第五层的…...

Phi-4-mini-reasoning实操手册:针对数学题优化的token长度设置技巧

Phi-4-mini-reasoning实操手册&#xff1a;针对数学题优化的token长度设置技巧 1. 模型特点与适用场景 Phi-4-mini-reasoning是一个专为推理任务优化的文本生成模型&#xff0c;特别适合处理需要多步分析的数学题和逻辑题。与通用聊天模型不同&#xff0c;它被设计为直接输出…...