完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` 本帖最后由 梁聪聪2014 于 2017-4-4 15:43 编辑 程序如下: 去抖 去抖可分位硬件去抖和软件去抖,顾名思义硬件去抖就是通过硬件来达到去抖的目的,一般是用施密特触发器来实现,需要消耗硬件资源,在一些成本限制的时候,往往采用软件去抖。 软件去抖原理:一般按键的抖动频率是几十khz(故状态转移间隔为ms级,程序中我们采用20ms)整体思路是跳过这一段抖动,我们设计的去抖状态机如下: 假如按键按下时为低电平,idle为初始状态,当检测到有按键按下时即key_pre==0,进入delay1状态(注意:状态从idle到delay1需要20ms,相等于跳过抖动),若此时key_pre仍为0,则我们认为是按键按下,则进入下一状态,否则回到idle认为时抖动,到此为按下去抖。在press状态下,若检测到按键抬起即key_pre==1,则进入delay2状态,否则仍在press状态(防止有长时间按下),在delay2状态,若key_pre仍为1,则认为按键以抬起,则进入下一状态taiqi,至此完成抬起去抖,可以产生去抖后的信号。 程序关键点: 第一:delay信号的产生 delay信号的高电平时间,只是一个主时钟的宽度,所以当delay==1时,状态转移alw块只会触发一次,而不是多次。 第二:去抖后信号key_out的产生(输出高电平表示按下)。 程序中我们采用 assign key_out=(state==taiqi && delay==1)?1'b1:1'b0; 有人认为当状态到taiqi是直接就可输出,为什么还要有delay==1这个条件呢?我们先看一下这两种仿真结果: 未加delay==1 加上delay==1 从图中我们可以明显看出,未加delay==1,key_out为1有很宽的脉宽,在以clk_50M为敏感信号是,会造成多次触发,而加上delay==1,key_out的宽度只为一个clk_50M主时钟宽度,达到去抖效果。 给大家推荐一个微信公众号 名字 FPGA干货, 每天都发送fpga干货,共同学习。 |
|
相关推荐
|
|
|
|
|
|
|
|
1512 浏览 1 评论
1295 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1503 浏览 0 评论
922 浏览 0 评论
2300 浏览 0 评论
1452 浏览 35 评论
5640 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 01:14 , Processed in 0.620537 second(s), Total 70, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号