0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA学习系列:11. 按键消抖设计

FPGA学习交流 2018-06-07 13:51 次阅读

设计背景:

在我们的工程设计中我们会或多或少的用到开关,开关分为好多种,不管是哪一种开关在按下还是抬起都会有轻微的抖动,为了使我们的设计更加准确化,今天我们将学习按键消抖。

设计原理:

本次的设计是一个消抖的设计,在我们用的按键中,按下时低电平,抬起时高地平,可是在现实中按键的瞬间高低电平的变化并不是我们想的那样,而是下面的情况。

image.png



我们称按下到s的时候称为前抖,s到抬起后称为后抖,在正常的情况下就是上面电平变化波形,那么我们为了消除不必要的波形,我们就应该在s区域来判断按键是否按下也就是低电平,同理我们抬起的时候也要间隔一段时间后来确定按下,一般我们间隔的时间设置为 10ms ---- 20ms之间都可以,所以说消抖就是把现实中按下抬起的抖动消除,生成我们理想的高低高的波形。

设计架构图:

image.png 

设计状态转移图image.png 

设计代码:

设计模块

0modulekey_xiaodou(clk,rst_n,key,key_x);

1

2 inputclk; //输入输出

3 inputrst_n;

4 inputkey;

5

6 outputregkey_x;

7 //parameter T10ms = 500_000; //设计一个10ms的计数参数

8 parameterT10ms =50;

9

10 parameters0 =2'b00;//4个状态

11 parameters1 =2'b01;

12 parameters2 =2'b10;

13 parameters3 =2'b11;

14 reg[18:0]count;

15 reg[1:0]state;

16 always@(posedgeclk ornegedgerst_n)

17 if(!rst_n)

18 begin

19 count <=19'b0;

20 state <=2'b0;

21 key_x <=1'b1;

22 end

23 else

24 begin

25 case(state)

26 s0:begin

27 if(key)//判断是否按键按下

28 begin

29 count <=1'b0;

30 key_x <=1'b1;

31 end

32 else

33 begin

34 if(count <T10ms -1)//按下就计数10ms

35 begin

36 count <=count +1'b1;

37 key_x <=1'b1;

38 end

39 else

40 begin//计数到了后给输出赋值为 0

41 key_x <=1'b0;

42 state <=s1;

43 end

44 end

45 end

46 s1:begin

47 if(~key)//判断是否按键抬起

48 begin

49 count <=1'b0;

50 key_x <=1'b0;

51 end

52 else

53 begin

54 if(count <T10ms -1)//抬起就计数10ms

55 begin

56 count <=count +1'b1;

57 key_x <=1'b0;

58 end

59 else

60 begin

61 key_x <=1'b1;//计数到了后给输 出赋值为1

62 state <=s0;

63 end

64 end

65 end

66 default:state <=0;

67 endcase

68 end

69endmodule

测试模块

0`timescale1ns/1ps

1

2 modulexiaodou_tb();

3

4

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1598

    文章

    21265

    浏览量

    592745
收藏 人收藏

    评论

    相关推荐

    stm8触摸感应按键是怎样扫描的?

    stm8触摸感应 按键是怎样扫描,和怎样
    发表于 04-01 06:17

    stm32外部中断存在自身内部的吗?

    请问stm32外部中断存在自身内部的吗? 若存在请问如何配置
    发表于 03-11 06:15

    【每周一练】盘古1K开发板 练习二:按键控制LED灯实验

    对输入信号进行如下处理: 对按键信号做处理,的延时在20ms; 对检测到的按键信号进行计
    发表于 12-21 22:45

    【每周一练】+盘古1K开发板+2. 按键控制RGB led

    :led_rgb<=`UD 12\'b1111_1111_1111; endcase end 3 实验效果 下载代码,实现效果见视频 4 学习总结 通过该实验,学习按键
    发表于 12-17 11:33

    【每周一练】盘古1K开发板 练习二:按键控制RGB灯

    实验目的 掌握按键原理,实现按键控制RDB灯颜色更换 实验要求 设计 8 种彩灯效果,选择一个按键作为控制输入,按下一次换一种显示效果
    发表于 12-10 16:43

    单片机按键原理是什么?

    单片机按键原理
    发表于 11-06 06:57

    如何用一个单片机定时器扫描三个独立按键的?

    如何用一个单片机定时器扫描三个独立按键的?能不能给个例程
    发表于 11-06 06:01

    51单片机按键有没有什么简洁又完美的方法?

    51单片机按键有没有什么简洁又完美的方法
    发表于 11-01 07:21

    按键都有哪些处理方式?

    按键都有哪些处理方式除了硬件电路用软件怎么实现
    发表于 11-01 07:06

    按键除了用延时还可以用什么方式?

    按键除了用延时还可以用什么方式
    发表于 10-19 08:04

    STM32的外部中断捕获需要通过处理吗?

    捕获信号有相关的干扰信号是不是需要
    发表于 10-15 08:37

    MCU对按键长按的检测是否要呢?

    MCU对按键长按的检测,是否要
    发表于 10-13 08:14

    矩阵按键在识别的过程中是否要进行处理?

    矩阵按键在识别的过程中是否要进行处理
    发表于 10-11 06:30

    从零开始学习紫光同创FPGA——PGL22G开发板之按键(二)

    一、按键 1、实验目的 机械式弹片按键,在按下或松开时会有机械抖动,导致在按下或松开时按键的状态不稳定,在快速的变化,在使用
    发表于 06-15 14:38

    FPGA零基础学习之Vivado-按键使用教程

    大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、
    发表于 06-13 18:33