按键去抖课程设计
按键消除抖动的措施
按键消除抖动的措施
按键消除抖动是指在使用电子设备中,当按下按键后可能会出
现的多次触发信号的问题。
为了解决这个问题,可以采取以下措施:
1. 软件滤波,在程序设计中,可以采用软件滤波的方法来消除
按键抖动。
软件滤波可以通过延时、状态机等方式来确保只有真正
的按键按下才会触发相应的操作,而忽略短暂的抖动信号。
2. 硬件滤波,在电路设计中,可以加入电容、电阻等元件来实
现硬件滤波,通过延长按键信号的上升沿或下降沿时间,从而消除
按键抖动带来的干扰。
3. 使用稳定的按键元件,选择质量好、稳定性高的按键元件,
可以减少按键抖动的发生。
4. 金属片设计,在按键设计中,可以添加金属片来增加按键的
稳定性,减少抖动。
5. 硬件消抖器,使用专门的硬件消抖器芯片,这些芯片可以自
动检测和消除按键抖动,提高按键的稳定性。
综上所述,消除按键抖动可以通过软件滤波、硬件滤波、选择稳定的按键元件、金属片设计以及使用硬件消抖器等多种措施来实现。
在实际应用中,可以根据具体情况选择合适的方法或者结合多种方法来解决按键抖动问题。
按键消抖实验
基于verilog按键消抖设计Aaron malone关于键盘的基础知识,我就以下面的一点资料带过,因为这个实在是再基础不过的东西了。
然后我引两篇我自己的博文,都是关于按键消抖的,代码也正是同目录下project里的。
这两篇博文都是ednchina的博客精华,并且在其blog 首页置顶多日,我想对大家会很有帮助的。
键盘的分类键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。
而靠软件编程来识别的称为非编码键盘。
在单片机组成的各种系统中,用的最多的是非编码键盘。
也有用到编码键盘的。
非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。
按键在闭合和断开时,触点会存在抖动现象:从上面的图形我们知道,在按键按下或者是释放的时候都会出现一个不稳定的抖动时间的,那么如果不处理好这个抖动时间,我们就无法处理好按键编码,所以如何才能有效的消除按键抖动呢?让下面的两篇博文日志给你答案吧。
经典的verilog键盘扫描程序从最基础的分频程序开始,但看到这个键盘扫描程序后,直呼经典,有相见恨晚的感觉,还想说一句:威百仕( VibesIC ),我很看好你!WHY?待我慢慢道来,这个程序的综合后是0error,0warning。
想想自己编码的时候那个warning是满天飞,现在才明白HDL设计有那么讲究了,代码所设计的不仅仅是简单的逻辑以及时序的关系,更重要的是你要在代码中不仅要表现出每一个寄存器,甚至每一个走线。
想想我写过的代码,只注意到了前者,从没有注意过后者,还洋洋自得以为自己也算是个高手了,现在想来,实在惭愧啊!学习学习在学习,这也重新激发了我对HDL设计的激情,威百仕给了我一个方向,那我可要开始努力喽!废话说了一大堆,看程序吧:(本代码经过ise7.1i综合并下载到SP306板上验证通过)//当三个独立按键的某一个被按下后,相应的LED被点亮;再次按下后,LED 熄灭,按键控制LED亮灭经过一次20ms的采样后判定为键盘按下。
按键消抖的原理和基于fpga的消抖设计
按键消抖1功能概述按键开关是各种电子设备不可或缺的人机接口,如电脑的键盘等。
实际应用中,按键开关通常为机械式弹性开关。
当机械点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定接通,断开时也不会马上断开,在闭合和断开的瞬间均伴随有一连串的抖动。
为保证系统及时正确识别,必须对这种情况作出相应处理。
我们称之为按键消抖。
按键消抖可分为硬件消抖和软件消抖。
硬件消抖的原理是在信号输入系统之前消除抖动干扰,在按键较少的情况下比较适宜。
如果按键较多,则使用软件消抖。
软件消抖的实质在于降低键盘输入端口的采样频率,将高频抖动略去。
需要注意的是,软件消抖需要占据一定的系统资源。
尽管硬件消抖和软件消抖能实现按键消抖功能,串行处理的方式都存在一定的局限性,显得不那么完美。
而硬件资源丰富的FPGA系统采用并行处理的模式,利用硬件来减轻软件工作量,通过硬件加速软件消抖处理,即可做到软件消抖并行化,因而在按键消抖处理方面具备非常明显的优势。
优秀的设计程序应该是用最简单的代码(架构、信号)实现功能。
在本例中,我们的只需要用4个信号界定,并用很短的代码即可。
下面我们先来看看功能要求:在系统设计中,消除按键抖动的方法五花八门,无论是硬件电路和软件设计都十分成熟。
在本项目中,我们将用Verilog语言给出具体实现过程,设计一个程序来检查键值,有效滤除按键抖动区间20 ms的毛刺脉冲。
2 设计思路一般按键所用开关为机械弹性开关,由于机械触点的弹性作用,每个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图。
抖动时间的长短由按键的机械特性决定,一般为5 ms~10 ms。
1图1 按键抖动过程示意当系统检测出按键闭合后,执行一个延时程序,产生5ms~10ms的延时;前沿抖动消失后,再一次检测键的状态;如果仍保持闭合状态电平,则确认为真正有键按下。
当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。
按键去抖课程设计
按键去抖课程设计一、课程目标知识目标:1. 学生能理解按键去抖的概念,掌握其工作原理;2. 学生能了解按键去抖在电路设计和编程中的应用;3. 学生能掌握相关电子元件的功能和电路连接方式。
技能目标:1. 学生能运用所学知识,设计并搭建简单的按键去抖电路;2. 学生能编写简单的程序,实现对按键去抖功能的控制;3. 学生能通过实际操作,分析并解决按键去抖过程中遇到的问题。
情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发创新意识;2. 培养学生动手实践、合作探究的学习态度;3. 培养学生严谨、细致、勇于克服困难的品质。
课程性质:本课程为电子技术实践课程,旨在帮助学生将理论知识与实际操作相结合,提高学生的动手能力和创新能力。
学生特点:学生处于初中阶段,具有一定的物理知识和电子元件基础,对电子技术有一定的好奇心和兴趣。
教学要求:结合学生特点,注重理论与实践相结合,以学生为主体,教师为主导,引导学生主动探究,培养学生的实践能力和创新精神。
通过本课程的学习,使学生能够将所学知识应用于实际生活中,提高解决实际问题的能力。
二、教学内容1. 按键去抖概念及工作原理- 理解按键抖动的产生原因及影响;- 掌握按键去抖的常用方法和技术;- 学习相关电子元件(如电容、电阻、二极管等)的作用和选型。
2. 按键去抖电路设计与搭建- 学习并应用电路图绘制软件;- 设计简单的按键去抖电路;- 搭建电路,进行实际测试和调试。
3. 按键去抖编程控制- 学习编程语言(如C语言、Arduino等)的基本语法;- 编写按键去抖的程序代码;- 调试程序,实现按键去抖功能。
4. 实际应用案例分析- 分析实际应用中按键去抖的解决方案;- 学习如何根据需求选择合适的按键去抖方法;- 探讨按键去抖在电子产品中的重要性。
教学内容安排与进度:第1课时:按键去抖概念及工作原理第2课时:按键去抖电路设计与搭建第3课时:按键去抖编程控制第4课时:实际应用案例分析及总结教材章节及内容:《电子技术基础》第四章第三节:按键去抖技术《电子技术实践》第二章第五节:按键去抖电路设计与搭建《编程语言》第一章:基本语法与结构《Arduino编程与实践》第三章:数字输入输出控制三、教学方法1. 讲授法:- 在介绍按键去抖的概念、工作原理及相关电子元件的基础知识时,采用讲授法进行教学,使学生在短时间内快速掌握理论要点。
按键消抖
状态机实现去抖动原理:按键去抖动关键在弄提取键稳定的电平状态,滤除前沿、后沿抖动毛刺。
对于一个按键信号,可以用一个脉冲对它进行取样,如果连续三次取样为低电平,可以认为信号已经处于键稳定状态,这时输出一个低电平的按键信号。
继续取样的过程如果不能满足连续三次取样为低,则认为键稳定状态结束,这时输出变为高电平。
设计的状态转换图如图所示。
Reset信号有效时,电路进入复位状态s0,这时认为取样没有检测到低电平,在输入取样过程中,每次检测到一个低电平,发生依次向下的状态转移,直到连续检测到三个低电平时,进s3态,这时输出置低(按键信号稳定态),在中间状态s1,s2时,一旦检测到高电平,就进入s0状态,重新检测。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity xiaod isport(clk : in std_logic ;reset : in std_logic ;din : in std_logic ;dout : out std_logic);end entity;architecture rtl of xiaod isTYPE state IS( s0,s1,s2,s3);SIGNAL pre_s, next_s: state;beginprocess( reset, clk )beginif reset = '0' thenpre_s <= s0;elsif rising_edge( clk ) thenpre_s <= next_s;elsenull;end if;end process;process( pre_s, next_s, din ) begincase pre_s iswhen s0 =>dout <= '1';if din = '1' thennext_s <= s0;elsenext_s <= s1;end if;when s1 =>dout <= '1';if din = '1' thennext_s <= s0;elsenext_s <= s2;end if;when s2 =>dout <= '1';if din = '1' thennext_s <= s0;elsenext_s <= s3;end if;when s3 =>dout <= '0';if din = '1' thennext_s <= s0;elsenext_s <= s1;end if;end case;end process ;end rtl;程序中din为要去抖动的热键信号,dou为去抖后输出的稳定信号。
按键去抖课程设计
.目录摘要 (1)第一章EDA技术简介 (2)第二章按键去抖设计要求 (4)第三章按键去抖分析 (4)第四章按键去抖设计方案 (5)第五章按键去抖模块 (6)5.1 去抖动电路模块 (6)5.2 去抖动电路模块程序 (6)5.3 按键扫描模块 (9)5.4 按键扫描程序 (10)第六章按键去抖的顶层原理图设计 (11)6.1 顶层原理图的源文件 (11)6.2顶层原理图的时序仿真图 (12)第七章学习心得 (13)课程设计评分表............................................................................................................... 错误!未定义书签。
摘要为了解决FPGA/ CPLD 系统的按键抖动问题, 用VH DL 语言有限状态机的方法, 在S0 状态下检测到有按键操作则转入延时状态S1 ,延时结束后, 用状态S2 , S3 , S4 对按键进行连续三次取样,如果三次取样均为低电平, 则转入状态S5并输出按键确认信号,否则, 返回状态S0。
电路经仿真分析, 并下载到, EPM7128ATC100 芯片进行了验证, 能够确保每次按键操作,产生一次按键确认, 有很好的按键消抖效果, 性能稳定。
主要创新点是用VHDL语言有限状态机设计按键的消抖。
关键词:按键消抖; 电路仿真; VH DL;状态机第一章EDA技术简介随着电子技术和计算机技术的飞速发展,电子线路的设计工作也日益显得重要。
经过人工设计、制作实验板、调试再修改的多次循环才定型的传统产品设计方法必然被计算机辅助设计所取代,因为这种费时费力又费资源的设计调试方法既增加了产品开发的成本,又受到实验工作场地及仪器设备的限制。
为了克服上述困难,加拿大Interactive Image Technologies公司推出的基于Windows 95/98/NT操作系统的EDA软件(Electronics Workbench“电子工作台”,EWB)。
按键消抖的原理和基于verilog的消抖设计
按键消抖的原理和基于verilog的消抖设计按键开关是各种电子设备不可或缺的人机接口。
在实际应用中,很大一部分的按键是机械按键。
在机械按键的触点闭合和断开时,都会产生抖动,为了保证系统能正确识别按键的开关,就必须对按键的抖动进行处理。
在系统设计中,有各种各样的消除按键抖动的设计方法,硬件电路和软件设计都很成熟。
不过我们这里要从另外一个角度来讨论按键的消抖,并给出一个用verilog给出一个具体的实现。
首先,看一个普通的机械按键的触点在闭合与断开时的波形(用示波器抓取)。
下面的四张图都是按键在闭合的时候抓到的波形。
可以看到两个明显的趋势:1. 按键在几个us之内就可以达到稳定状态,从高电平转换到底电平;2. 在高电平转换到低电平的过程中,触点有非常明显的抖动。
下面的两张图是按键在断开的时候抓到的波形。
也可以看到两个明显的趋势:1. 按键的变化趋势比较缓慢,从低电平变为高电平需要大概10~20ms的时间;2. 按键断开时没有闭合时那么大的抖动下面两张图是用手迅速闭合按键然后就断开时,按键的输出波形。
在处理按键抖动的程序中,必须同时考虑消除闭合和断开两种情况下的抖动。
所以,对于按键消抖的处理,必须按最差的情况来考虑。
我们从上面的图上可以看到,按键输出的信号的跳变时间(上升沿和下降沿)最大是在20ms左右。
按键一次闭合最短的时间大概是120ms 左右。
如果我们把按键的输出做为一个时钟域(时钟频率未知,但信号的slow rate是已知的,既最大20ms左右)的信号,用另外一个时钟来采集这个按键的输出,则就可以把按键的消抖归结为一个最基本的CDC问题来处理。
而问题的核心是如何确定采集时钟的频率。
假设采集时钟的周期小于20ms,那么,采集时钟就有可能两次采到按键断开时的不。
按键消抖电路瞬态分析和设计说明
按键消抖电路瞬态分析和设计按键是仪器仪表中普遍采用的人机输入接口电路。
在按键电路中必须考虑对按键的抖动进行软件消抖和硬件消抖。
软件消抖具有使用硬件数量少的优点,但也具有以下两个缺点:(1)在仪器键盘电路中,多个按键安装在仪器面板上,键盘的输出通过排线连接到主控板上,此时键盘导线寄生电感和寄生电容的存在,寄生电感寄生电容和排线电阻将组成二阶振荡系统,二阶振荡将形成负电平脉冲,而负电平脉冲很容易超出数字芯片的输入最大允许电平范围,导致数字芯片容易损坏。
(2)按键闭合和断开时,电压信号下降沿非常陡峭,剧烈变化的电压信号将通过互容传递到相邻导线上。
硬件消抖电路的设计主要是要考虑以下三个因素:(1)消除信号的抖动,确保按键电路输出信号的平整;(2)消除信号的下冲,因为下冲电平超出了后续数字芯片的最大输入电平范围;(3)降低信号变化的速度,避免在邻线上引起容性串扰;(4)不影响按键电路的正常功能。
常见的硬件消抖电路包括电容滤波消抖和触发器消抖。
电容滤波消抖采用电阻和电容组成低通滤波器,具有电路结构简单可靠的优点,因此本文将重点阐述该消抖电路。
1 按键消抖电路结构与电路模型图1为某仪器按键电路原理图,按键安装在仪器面板上,通过导线连接到主控板上,按键的一端接上拉电阻并连接后续电路,按键的另一端接地,当按键没有按下时,按键输出高电平,当按键按下时,按键输出低电平。
图2为加上滤波电容后的按键电路。
图1 某仪器按键电路图2 按键消抖电路图3为按键消抖电路的电路模型。
图中R0为连接按键导线的电阻,L 为导线电感,C0为导线对地电容,C f为滤波电容,C p为按键后续电路的输入电容,R i为按键后续电路的输入阻抗,R 为上拉电阻,V CC为电源电压,U为按键消抖电路的输出电压。
图3 按键消抖电路的电路模型当按键闭合时,其等效电路模型如图4所示。
当按键断开时,其等效电路模型如图5所示。
2 按键消抖电路数学模型设某一时刻按键合上,在此之前按键断开,整个电路处于稳态,即各个电容和电感上没有电流流动。
按键去抖说明教学提纲
由于机械触点的弹性振动,按键在按下时不会马上稳定地接通而在弹起时也不能一下子完全地断开,因而在按键闭合和断开的瞬间均会出现一连串的抖动,这称为按键的抖动干扰,其产生的波形如图5.3.1 所示,当按键按下时会产生前沿抖动,当按键弹起时会产生后沿抖动。
这是所有机械触点式按键在状态输出时的共性问题,抖动的时间长短取决于按键的机械特性与操作状态,一般为10~100ms,此为键处理设计时要考虑的一个重要参数。
按键的抖动会造成按一次键产生的开关状态被CPU 误读几次。
为了使CPU 能正确地读取按键状态,必须在按键闭合或断开时,消除产生的前沿或后沿抖动,去抖动的方法有硬件方法和软件方法两种。
1. 硬件方法硬件方法是设计一个滤波延时电路或单稳态电路等硬件电路来避开按键的抖动时间。
图5.3.2 是由R2 和C 组成的滤波延时消抖电路,设置在按键S 与CPU 数据线Di 之间。
按键S 未按下时,电容两端电压为0,即与非门输入V i 为0,输出V o 为1。
当S 按下时,由于C 两端电压不能突变,充电电压V i 在充电时间内未达到与非门的开启电压,门的输出V o将不会改变,直到充电电压V i 大于门的开启电压时,与非门的输出V o 才变为0,这段充电延迟时间取决于R1、R2 和C 值的大小,电路设计时只要使之大于或等于100ms 即可避开按键抖动的影响。
同理,按键S 断开时,即使出现抖动,由于C 的放电延迟过程,也会消除按键抖动的影响图5.3.2 中,V1 是未施加滤波电路含有前沿抖动、后沿抖动的波形,V2 是施加滤波电路后消除抖动的波形。
2. 软件方法软件方法是指编制一段时间大于100ms 的延时程序,在第一次检测到有键按下时,执行这段延时子程序使键的前沿抖动消失后再检测该键状态,如果该键仍保持闭合状态电平,则确认为该键已稳定按下,否则无键按下,从而消除了抖动的影响。
同理,在检测到按键释放后,也同样要延迟一段时间,以消除后沿抖动,然后转入对该按键的处理。
51单片机按键消抖程序原理
51单片机按键消抖程序原理一、引言按键消抖是嵌入式系统编程中常见的问题之一,尤其是在使用51单片机时。
51单片机是一款常用的微控制器,广泛应用于各种嵌入式系统中。
按键作为常见的输入设备,在51单片机应用中经常被使用。
由于按键的机械特性,当按键按下或释放时,会产生机械抖动,给系统带来误操作。
因此,了解并编写按键消抖程序对于保证系统的正常运行至关重要。
二、消抖原理按键消抖,简单来说,就是通过一定的算法,消除按键产生的机械抖动,从而准确识别按键的状态。
其原理主要基于以下两点:1.机械抖动的特点:按键的机械抖动主要表现为按键触点之间的快速开关,产生一系列微小的电信号。
这些信号通常包含真实的按键输入信号和噪声信号。
2.消抖算法:通过分析这些信号,识别出真实的按键输入信号,并忽略噪声信号,从而达到消除机械抖动的目的。
常用的消抖算法有阈值比较法、防抖延时法、防抖滤波法等。
三、消抖程序实现下面以51单片机为例,介绍一种简单的阈值比较法消抖程序实现:```cvoidkey_debounce(intkey_pin){//定义按键引脚intdebounce_time=50;//消抖时间,单位毫秒intthreshold=5;//阈值,可以根据实际情况调整intkey_state=0;//按键状态,初始化为0(未按下)intlast_key_state=0;//上一次的按键状态while(1){//读取按键状态key_state=digitalRead(key_pin);last_key_state=key_state;//判断按键是否按下if(key_state==LOW){//按键按下,开始消抖if(millis()-last_key_state>=debounce_time){//经过一定时间,确定按键状态if(key_state==digitalRead(key_pin)){//检测到真实的按键输入信号//这里可以进行相应的操作,例如点亮LED灯等}else{//检测到噪声信号或其他干扰,忽略}}else{//消抖时间不足,忽略当前状态}}else{//按键释放,忽略当前状态}}}```上述程序中,通过设置一个阈值和消抖时间,来判断按键状态是否发生变化。
单片机按键去抖动程序设计思路
单片机按键去抖动程序设计思路1.硬件电路设计为了能够较好地去抖动按键,我们可以在按键的输入引脚上加一个RC组合电路,以延迟触发信号的上升沿和下降沿,从而消除抖动。
RC组合电路一般由一个电阻R和一个电容C组成,其原理是通过RC的时间常数来控制信号的上升和下降过程。
2.软件设计在单片机程序中,我们需要采取一定的算法来检测按键的真实触发信号,下面是一个简单的按键去抖动的程序设计思路:(1)初始化首先,我们需要对按键的输入引脚进行初始化,配置为输入模式,并设置为上拉电阻模式。
这样可以确保在按键未按下时,输入引脚保持高电平。
(2)读取按键状态通过读取按键的输入引脚状态,来判断当前按键是否处于按下状态。
一般来说,输入引脚为高电平时表示按键未按下,为低电平时表示按键已按下。
(3)去抖动算法当检测到按键状态发生变化时,即从未按下到按下或从按下到未按下,可以认为触发了一次按键操作。
在这个过程中,我们需要使用去抖动算法来过滤掉抖动信号。
常见的去抖动算法有两种:软件延时法和状态延时法。
软件延时法是通过在检测到按键状态发生变化后,延时一段时间,再次读取按键状态来判断是否真正触发了按键操作。
通过调整延时时间,可以达到去抖动的效果。
但是使用软件延时法会占用较多CPU时间,因此在需要很高响应速度的系统中不适用。
状态延时法是通过引入一个状态变量,用来保存按键的状态。
在检测到按键状态发生变化后,将状态置为相反的值,并延时一段时间。
在延时结束后,读取按键状态和状态变量的值,如果相等则认为触发了按键操作,否则不触发。
需要注意的是,为了防止按键的持续震动导致多次触发,我们一般会设置一个最小的按键触发间隔。
即在两次按键操作之间需要间隔一段时间,才能再次触发。
(4)执行按键操作当确认触发了按键操作后,我们可以执行相应的操作,如触发一个中断、改变LED灯的状态等。
通过上述程序设计思路,可以实现按键去抖动的功能,从而得到准确的按键触发信号。
当然,具体的实现还需要根据具体的单片机平台和开发环境来进行调整。
多种波形发生器课程设计按键电路
多种波形发生器课程设计按键电路一、引言波形发生器是电子工程中常用的一种电路,它可以产生多种不同的波形信号,如正弦波、方波、三角波等。
在电子设计和测试中,波形发生器通常被用来产生标准信号或者测试信号。
本文将介绍多种波形发生器的课程设计,并着重介绍按键电路的设计。
二、多种波形发生器课程设计1. 正弦波发生器正弦波发生器是最基本的波形发生器之一,它可以产生一个连续变化的正弦信号。
在实际应用中,正弦波信号通常被用来作为参考信号或者测试信号。
正弦波发生器的基本原理是利用RC振荡电路来产生一个稳定的振荡频率,并且通过运算放大器对其进行放大。
具体实现方式可以采用集成电路或者离散元件进行搭建。
2. 方波发生器方波发生器可以产生一个由高低两个电平构成的方形脉冲信号。
在数字系统中,方波信号通常被用来表示“0”和“1”两个状态。
方波发生器的基本原理是利用开关电路来控制电路的通断,从而实现高低电平的切换。
具体实现方式可以采用集成电路或者离散元件进行搭建。
3. 三角波发生器三角波发生器可以产生一个由上升和下降两个斜率构成的三角形信号。
在音频系统中,三角波信号通常被用来作为音乐合成的基础信号。
三角波发生器的基本原理是利用积分电路来对方波信号进行积分,从而得到一个连续变化的三角形信号。
具体实现方式可以采用集成电路或者离散元件进行搭建。
4. 锯齿波发生器锯齿波发生器可以产生一个由上升和下降两个斜率构成的锯齿形信号。
在测试系统中,锯齿波信号通常被用来作为测试信号。
锯齿波发生器的基本原理是利用反向比例积分电路来对方波信号进行积分和反向放大,从而得到一个连续变化的锯齿形信号。
具体实现方式可以采用集成电路或者离散元件进行搭建。
三、按键电路设计在波形发生器的实际应用中,通常需要对波形信号进行调节和控制。
按键电路可以实现对波形发生器的控制和调节,使其更加灵活和方便。
按键电路的基本原理是利用开关电路来控制电路的通断,从而实现对波形发生器的控制。
实验05按键消抖
实验5 按键消抖1. 实验目的1. 掌握QuartusII的硬件描述语言设计方法2. 了解同步计数器的原理及应用3. 设计一个带使能输入、进位输出及同步清零的增1四位N (N<16)进制同步计数器2. 准备知识在按键使用的过程中,常常遇到按键抖动的问题,开关在闭合(断开)的瞬间,不能一接触就一直保持导通(断开),因为开关的机械特性,重要经历接触-断开-再接触-再断开,最终稳定在接触位置,这就是开关的抖动,即虽然只是按下按键一次然后放掉,结果在按键信号稳定前后,竟出现了一些不该存在的噪声,这样就会引起电路的误动作。
在很多应用按键的场合,要求具有消抖措施。
按键抖动与开关的机械特性有关,其抖动期一般为5-10ms。
图5.1 按键电平抖动示意图按键的消除抖动分为硬件消除抖动和软件消除抖动。
硬件消除抖动一般采用滤波的方法,通常在按键两端并联一个1~10u左右的电容,有时这样也不能完全消除按键的抖动。
软件消除抖动的方法有多种,常用的是延时扫描和定时器扫描。
延时扫描其原理为:检测到按键操作后延时一端时间(如10ms)后,再检测是否为仍然为同样的按键操作状态,如果相同,就认为是进行了按键操作,然后对该操作进行相应的处理。
定时器扫描的原理是:每隔一端时间(几毫秒)扫描一次键盘,如果连续两次(或3次)的所获得的按键状态相同,就输出按键状态,然后再对这种按键状态进行处理,这里的扫描时间间隔和连续判断按键状态的次数是有关系的,一般总时间要大于按键的抖动期。
如果总时间太长,则感觉按键迟钝,太短可能不能完全消除抖动,要根据实际的情况合适的选择。
在实际电路设计中,经常采用的是软硬件相结合对按键进行消除抖动的处理方法。
本实验采用的方法:实验箱按键的硬件电路是共阳极电路,按下按键时输出到FPGA管脚的电平为低电平,松开按键时为高电平。
我们采用5ms的定时器扫描FPGA管脚电平,如果连续3次为低电平时,存储连续按键状态的次数CNT的值加1,直到该计数值等于10(或再大一些),就不再累加(防止长按该值溢出而重新计数),此时认为按键已稳定,输出按键操作标志;在该过程中,一旦FPGA管脚电平为低电平就对CNT复位清零并同时对按键操作标志位复位,即一个异步复位。
实验2:按键消抖
基于verilog按键消抖设计关于键盘的基础知识,我就以下面的一点资料带过,因为这个实在是再基础不过的东西了。
然后我引两篇我自己的博文,都是关于按键消抖的,代码也正是同目录下project里的。
这两篇博文都是ednchina的博客精华,并且在其blog 首页置顶多日,我想对大家会很有帮助的。
键盘的分类键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。
而靠软件编程来识别的称为非编码键盘。
在单片机组成的各种系统中,用的最多的是非编码键盘。
也有用到编码键盘的。
非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。
按键在闭合和断开时,触点会存在抖动现象:从上面的图形我们知道,在按键按下或者是释放的时候都会出现一个不稳定的抖动时间的,那么如果不处理好这个抖动时间,我们就无法处理好按键编码,所以如何才能有效的消除按键抖动呢?让下面的两篇博文日志给你答案吧。
经典的verilog键盘扫描程序拿到威百仕( VibesIC )的板子后就迫不及待的开始我的学习计划,从最基础的分频程序开始,但看到这个键盘扫描程序后,直呼经典,有相见恨晚的感觉,还想说一句:威百仕( VibesIC ),我很看好你!WHY?待我慢慢道来,这个程序的综合后是0error,0warning。
想想自己编码的时候那个warning是满天飞,现在才明白HDL设计有那么讲究了,代码所设计的不仅仅是简单的逻辑以及时序的关系,更重要的是你要在代码中不仅要表现出每一个寄存器,甚至每一个走线。
想想我写过的代码,只注意到了前者,从没有注意过后者,还洋洋自得以为自己也算是个高手了,现在想来,实在惭愧啊!学习学习在学习,这也重新激发了我对HDL设计的激情,威百仕给了我一个方向,那我可要开始努力喽!废话说了一大堆,看程序吧:(本代码经过ise7.1i综合并下载到SP306板上验证通过)//当三个独立按键的某一个被按下后,相应的LED被点亮;再次按下后,LED 熄灭,按键控制LED亮灭`TImescale 1ns/1nsmodule keyscan(clk,rst_n,sw1_n,sw2_n,sw3_n,//outputled_d3,led_d4,led_d5);input clk; //主时钟信号,48MHzinput rst_n; //复位信号,低有效input sw1_n,sw2_n,sw3_n; //三个独立按键,低表示按下output led_d3,led_d4,led_d5; //发光二极管,分别由按键控制// ---------------------------------------------------------------------------reg [19:0] cnt; //计数寄存器always @ (posedge clk or negedge rst_n)if (!rst_n) //异步复位cnt <= 20'd0;elsecnt <= cnt + 1'b1;reg [2:0] low_sw;always @(posedge clk or negedge rst_n)if (!rst_n)low_sw <= 3'b111;else if (cnt == 20'hfffff) //满20ms,将按键值锁存到寄存器low_sw中low_sw <= {sw3_n,sw2_n,sw1_n};// ---------------------------------------------------------------------------reg [2:0] low_sw_r; //每个时钟周期的上升沿将low_sw信号锁存到lo w_sw_r中always @ ( posedge clk or negedge rst_n )if (!rst_n)low_sw_r <= 3'b111;elselow_sw_r <= low_sw;//当寄存器low_sw由1变为0时,led_ctrl的值变为高,维持一个时钟周期wire [2:0] led_ctrl = low_sw_r[2:0] & ( ~low_sw[2:0]);reg d1;reg d2;reg d3;always @ (posedge clk or negedge rst_n)if (!rst_n)begind1 <= 1'b0;d2 <= 1'b0;d3 <= 1'b0;endelsebegin //某个按键值变化时,LED将做亮灭翻转if ( led_ctrl[0] ) d1 <= ~d1;if ( led_ctrl[1] ) d2 <= ~d2;if ( led_ctrl[2] ) d3 <= ~d3;endassign led_d5 = d1 ? 1'b1 : 1'b0; //LED翻转输出assign led_d3 = d2 ? 1'b1 : 1'b0;assign led_d4 = d3 ? 1'b1 : 1'b0;endmodule也许初看起来这段代码似乎有点吃力,好多的always好多的wire啊,而我们通常用得最多的判断转移好像不是主流。
按键去抖课程设计报告书
目录摘要 (1)第一章 EDA技术简介 (2)第二章按键去抖设计要求 (3)第三章按键去抖分析 (3)第四章按键去抖设计方案 (4)第五章按键去抖模块 (5)5.1 去抖动电路模块 (5)5.2 去抖动电路模块程序 (5)5.3 按键扫描模块 (6)5.4 按键扫描程序 (7)第六章按键去抖的顶层原理图设计 (8)6.1 顶层原理图的源文件 (8)6.2顶层原理图的时序仿真图 (9)第七章学习心得 (10)课程设计评分表............................................................................................... 错误!未定义书签。
摘要为了解决FPGA/ CPLD 系统的按键抖动问题, 用VH DL 语言有限状态机的方法, 在S0 状态下检测到有按键操作则转入延时状态S1 ,延时结束后, 用状态S2 , S3 , S4 对按键进行连续三次取样,如果三次取样均为低电平, 则转入状态S5并输出按键确认信号,否则, 返回状态S0。
电路经仿真分析, 并下载到, EPM7128ATC100 芯片进行了验证, 能够确保每次按键操作,产生一次按键确认, 有很好的按键消抖效果, 性能稳定。
主要创新点是用VHDL语言有限状态机设计按键的消抖。
关键词:按键消抖; 电路仿真; VH DL;状态机第一章 EDA技术简介随着电子技术和计算机技术的飞速发展,电子线路的设计工作也日益显得重要。
经过人工设计、制作实验板、调试再修改的多次循环才定型的传统产品设计方法必然被计算机辅助设计所取代,因为这种费时费力又费资源的设计调试方法既增加了产品开发的成本,又受到实验工作场地及仪器设备的限制。
为了克服上述困难,加拿大Interactive Image Technologies公司推出的基于Windows 95/98/NT操作系统的EDA软件(Electronics Workbench“电子工作台”,EWB)。
按键消抖程序设计在单片机中的运用
按键消抖程序设计在单片机中的运用【摘要】按键开关在电子类的开发者中运用较多,但它却专有一个按键抖动的特性。
由于机械触点的弹性作用,按键开关断开或闭合时不会马上稳定地断开或接通,而是不断的抖动,即不断的闭合、断开。
这一连串的抖动给系统带来一些不稳定的因素,甚至是错误的结果,为了不产生这种现象而需采取相应消抖措施。
【关键词】按键抖动;消抖措施;单片机运用1.按键开关开发单片机系统的人都知道,按键开关共有四个引脚,分别是两个引脚短路作为一端,不分正负极,焊接时只需将短路一端焊接在电路的一个焊盘,将另外一个短路端口焊接在电路的另外一个焊盘即可,即为开关的两端。
在电路设计中或者是软件编写程序过程中如果遇到按键,则需要考虑按键的抖动情况。
因为按键开关是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,不会马上稳定地接通或者断开。
2.按键抖动及影响按键开关抖动时间的长短主要是由按键的机械特性决定的,一般时间为为5ms~10ms。
按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。
键抖动会引起一次按键被误读多次,即在按键的过程中被误认为是有多次的断开和闭合,为确保CPU对按键的一次闭合仅作一次处理,所以必须去除键抖动。
在按键闭合稳定时才读取键的状态,并且必须判别到键释放稳定后再作处理。
3.消抖措施为了消除按键抖动及其带来的不利影响,一般可以用以下两种措施。
3.1电路消抖可采用设计硬件电路方法消除按键的抖动。
最常用的就是用RS触发器。
设计原理是:利用两个“与非”门构成一个RS触发器。
当按键未按下时,输出为“1”;当键按下时,输出为“0”。
此时即使按键的机械性能,使按键因弹性抖动而产生瞬时断开,按键不返回原始状态,双稳态电路的状态不会改变,继而输出保持为“0”,这样就不会产生抖动的波形,消除抖动带来的影响。
3.2程序消抖若系统的按键较多,可采用编写程序的方法进行去抖,即软件消抖。
5_按键防抖动电路设计
一、实验电路图、状态图、流程图、程序代码、仿真代码、仿真波形图(可以只写出核心功能代码,代码要有注释)
设计思路:
在第一个状态时,等待按键按下,一旦有按键按下(按键下降沿到来),便跳转到第二个状态,抖动滤除状态。
在第二个状态,有检测到高电平(上升沿),就会被认为是毛刺,进而返回第一个状态继续等待下降沿。
等毛刺被滤除后(计数满)则进入按下稳定状态。
在按下稳定状态,等待释放(上升沿),同按键按下的状态,再次滤除释放按键的抖动。
等抖动滤除后,恢复到第一个状态。
状态转移图:
程序代码:
译码器模块:
Modelsim测试代码:
Modelsim功能仿真波形图:。
如何设计按键消抖
在使用单片机搭建有人机交互的系统时需要用到键盘,因为单片机工作时间都是纳秒与毫秒级别,但是我们人体的反应时间最少要0.2秒,之间差距很大,现实过程中也会不小心碰到按键,正常的按下按键应该是持续数十秒的稳定。
一、按键电路常用的非编码键盘,每个在使用单片机搭建有人机交互的系统时需要用到键盘,因为单片机工作时间都是纳秒与毫秒级别,但是我们人体的反应时间最少要0.2秒,之间差距很大,现实过程中也会不小心碰到按键,正常的按下按键应该是持续数十秒的稳定。
一、按键电路常用的非编码键盘,每个键都是一个常开开关电路。
计数器输入脉冲最好不要直接接普通的按键开关,因为记数器的记数速度非常快,按键、触点等接触时会有多次接通和断开的现象。
我们感觉不到,可是记数器却都记录了下来。
例如,虽然只按了1下,记数器可能记了3下。
因此,使用按键的记数电路都会增加单稳态电路避免记数错误。
二、按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号小型如下图。
由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合与断开的瞬间均伴随有一连串的抖动,如下图。
抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。
这是一个很重要的时间参数,在很多场合都要用到。
按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。
键抖动会引起一次按键被误读多次。
为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。
在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。
按键的抖动,可用硬件或软件两种方法。
三、硬件消抖在键数较少时可用硬件方法消除键抖动。
下图所示的RS触发器为常用的硬件去抖。
消抖电路如下图中两个“与非”门构成一个RS触发器。
当按键未按下时,输出为1;当键按下时,输出为0。
此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。
单片机按键去抖动程序设计思路
单片机按键去抖动程序设计思路
1.去抖动原理:按键在按下和松开的瞬间会产生震动,导致按键信号在短时间内出现多次转换,给程序带来困扰。
为了解决这个问题,需要对按键信号进行去抖动处理,即在按键按下和松开时,只记录一次按键状态变化。
2.软件去抖动方法:软件去抖动方法主要通过软件延时来判断按键信号是否稳定。
具体来说,可以通过以下步骤实现软件去抖动:-初始化按键引脚为输入模式,并使能内部上拉电阻;
-设定一个延时时间阈值t,用于判断按键是否稳定;
-读取按键引脚的电平,如果为低电平,说明按键按下;
-进入一个循环,每次循环读取一次按键引脚的电平,并与前一次读取的电平进行比较;
-如果连续读取到的电平与前一次相同,说明按键信号稳定;
-如果连续读取到的电平与前一次不同,则说明按键信号还在抖动,继续读取直到连续读取到的电平与前一次相同;
-当稳定的电平持续时间超过延时时间阈值t时,认为按键信号已稳定,可以进行相应的处理。
3. 硬件去抖动方法:硬件去抖动方法主要通过电路设计来实现。
常见的硬件去抖动电路包括RC滤波电路和Schmitt触发器电路。
其中,RC 滤波电路利用电容和电阻的特性,对按键信号进行平滑处理;Schmitt触发器电路则通过正反馈的方式,将不稳定的信号转换为稳定的信号。
这两种方法可以根据实际需求选择。
总结:
按键去抖动程序设计可以通过软件去抖动和硬件去抖动两种方式实现。
软件去抖动主要通过软件延时判断按键信号是否稳定,而硬件去抖动则通
过电路设计实现。
根据具体的应用场景和需求,可以选择适合的方法来设
计按键去抖动程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.目录摘要 (1)第一章EDA技术简介 (2)第二章按键去抖设计要求 (4)第三章按键去抖分析 (4)第四章按键去抖设计方案 (5)第五章按键去抖模块 (6)5.1 去抖动电路模块 (6)5.2 去抖动电路模块程序 (6)5.3 按键扫描模块 (9)5.4 按键扫描程序 (10)第六章按键去抖的顶层原理图设计 (11)6.1 顶层原理图的源文件 (11)6.2顶层原理图的时序仿真图 (12)第七章学习心得 (13)课程设计评分表............................................................................................................... 错误!未定义书签。
摘要为了解决FPGA/ CPLD 系统的按键抖动问题, 用VH DL 语言有限状态机的方法, 在S0 状态下检测到有按键操作则转入延时状态S1 ,延时结束后, 用状态S2 , S3 , S4 对按键进行连续三次取样,如果三次取样均为低电平, 则转入状态S5并输出按键确认信号,否则, 返回状态S0。
电路经仿真分析, 并下载到, EPM7128ATC100 芯片进行了验证, 能够确保每次按键操作,产生一次按键确认, 有很好的按键消抖效果, 性能稳定。
主要创新点是用VHDL语言有限状态机设计按键的消抖。
关键词:按键消抖; 电路仿真; VH DL;状态机第一章EDA技术简介随着电子技术和计算机技术的飞速发展,电子线路的设计工作也日益显得重要。
经过人工设计、制作实验板、调试再修改的多次循环才定型的传统产品设计方法必然被计算机辅助设计所取代,因为这种费时费力又费资源的设计调试方法既增加了产品开发的成本,又受到实验工作场地及仪器设备的限制。
为了克服上述困难,加拿大Interactive Image Technologies公司推出的基于Windows 95/98/NT操作系统的EDA软件(Electronics Workbench“电子工作台”,EWB)。
他可以将不同类型的电路组合成混合电路进行仿真。
EWB 是用在计算机上作为电子线路设计模拟和仿真的新的软件包,是一个具有很高实用价值的计算机辅助设计工具。
目前已在电子工程设计等领域得到了广泛地应用。
与目前流行的电路仿真软件相比较,EWB具有界面直观、操作方便等优点。
他改变了有些电路仿真软件输入电路采用文本方式的不便之处,该软件在创建电路、选用元器件的测试仪器等均可以直接从屏幕图形中选取,而且测试仪器的图形与实物外形基本相似,从而大大提高了电子设计工作的效率。
此外,从另一角度来看,随着计算机技术和集成电路技术的发展,现代电子与电工设计,已经步入了电子设计自动化(EDA)的时代,采用虚拟仿真的手段对电子产品进行前期工作的调试,已成为一种发展的必然趋势。
通过对实际电子线路的仿真分析,从而提高对电路的分析、设计和创新能力。
按键开关是电子设备实现人机对话的重要器件之一。
由于大部分按键是机械触点, 在触点闭合和断开时都会产生抖动。
为避免抖动引起误动作造成系统的不稳定,就要求消除按键的抖动, 确保按键每按一次只做一次响应[ 1, 2] 。
随着可编程逻辑器件的综合性能的不断提高,它已经象单片机一样, 广泛应用在各种数字逻辑领域。
用可编程逻辑器件直接获取键盘信息也得到广泛的应用。
这里提出用VHDL 语言编程的有限状态机的设计方法来实现按键的消抖, 经仿真分析和下载实现,这种方法设计的消抖电路能够很好地实现电路功能,进行快速按键时都能保证每按一次做一次的响应, 且性能稳定。
本课程设计的具体要求如下:(1) 设计一个4路独立键盘输入电路,读取键盘的键值并通过发光二极管显示出来。
(2) 输入为时钟信号CLK(50MHz),按键状态KEY1,KEY2,KEY3,KEY4。
(3) 输出为D1,D2,D3,D4。
根据按键的状态控制发光二极管的亮灭。
第三章按键去抖分析按键消抖的关键是提取稳定的低电平(或高电平) 状态, 滤除按键稳定前后的抖动脉冲。
在用基于VHDL 语言的时序逻辑电路设计按键消抖电路时, 可以用一个时钟脉冲信号对按键状态进行取样,当第一次采样到低电平时,启动延时电路,延时结束后,再对按键信号进行连续三次取样, 如果三次取样都为低电平,则可以认为按键已经处在稳定状态, 这时输出一个低电平的按键确认信号,如果连续三次的取样中, 至少有一次是高电平,则认为按键仍处在抖动状态, 此时不进行按键确认,按键输出信号为高电平。
按键消抖一般采用硬件和软件消抖两种方法。
硬件消抖是利用电路滤波的原理实现,软件消抖是通过按键延时来实现。
在微机系统中一般都采用软件延时的消抖方法。
在用可编程逻辑器件FPGA/ CPLD 设计数字系统中, 也可以用VHDL 语言设计相应的时序和逻辑电路,对按键信号进行处理,同样可以达到消抖目的。
本文利用Altera公司的可编程逻辑器件CPLD 和Quartus,设计性能可靠的按键消抖电路。
该控制电路采用VH DL 语言的有限状态机的设计法来描述和实现, 其状态转换图如图1所示。
图1 按键去状态转换图电路的复位信号Reset 有效时,电路进入复位状态S0 ,在S0 状态下时钟信号CLK 以一定的频率采样按键输入信号Key in,如果采样到Key in= 1 则停留在S0状态,并继续采样按键输入信号的状态,一旦采样到输入信号是低电平,即Key in= 0 ,则转入S1 延时状态,进行消抖延时,当延时结束时Delay end= 1 ,则转入在S2 状态,在此状态下时钟信号CLK 以一定频率采样按键输入Key in 的状态,如果采样到Key in 为高电平即Key in= 1 则转回状态S0 ,表示按键仍处在抖动状态,如果采样到Key in= 0 , 则转入状态S3 ; 状态S3 , S4 的转换过程和条件跟S2 相同, 在S4 状态下, 如果Key in= 0 则转入S5 状态, 当到达状态S5 时,表示经过S2 , S3 , S4 三个连续状态检测按键输入Key in的状态都为0 ,则认为按键处在稳定状态, 并在S5 输出按键确认信号Key conf i rm= 1 。
同时在状态S5下时钟信号CLK 检测按键输入状态,当检测到按键输入Key in= 0 ,表示按键仍未释放, 则停留在S5 继续检测按键输入信号状态,如果检测到Key in= 1 , 表示按键已经释放, 则转回状态 S0 , 等待下一次按键操作。
第五章 按键去抖模块5.1 去抖动电路模块clk :时钟,reset :复位信号,din :按键信号输入,dout :按键去抖动信号输出。
由于按键抖动的时间一般为5到10ms ,因此输入时钟clk 使用200Hz 时钟脉冲(周期为5ms ),即5ms 采样一次按键信号,当连续两次采样到的按键信号都为低电平时,认为按键稳定的按下。
在按键稳定按下后,采样到按键为高电平时,认为按键释放 5.2 去抖动电路模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity debounce isdebounceinst clkresetdindoutport(clk,reset:IN std_logic;din: IN std_logic;dout: OUT std_logic);end debounce;architecture a of debounce istype state is (s0,s1,s2);signal current: state;beginprocess(clk,reset,din)beginif(reset='1') thencurrent <= s0;dout <= '1';elsif(clk'event and clk='1') then case current iswhen s0 =>dout <= '1';if(din='0') thencurrent <=s1;elsecurrent <= s0; end if;when s1=> dout <='1';if(din='0') then current <= s2; elsecurrent <= s0; end if;when s2 => dout <='0';if(din='0') then current <= s2; elsecurrent <= s0; end if;when others => dout <='1'; current <=s0; end case;end if;end process;end a;5.3 按键扫描模块输入信号:clk :时钟,50MHz ;reset :复位信号;key1, key2, key3, key4:按键信号输入。
输出信号:led1, led2, led3, led4:发光二极管信号输出。
keypadinst clkresetkey1key2key3key4led1led2led3led45.4 按键扫描程序第六章按键去抖的顶层原理图设计6.1 顶层原理图的源文件6.2顶层原理图的时序仿真图消抖电路的仿真图如上图所示。
当复位信号Reset= 0 时, 状态机Key 处在S0 状态, 同时以CLK的时钟频率采样按键输入信号Din 的状态, 当CLK 第一次采样到Din 为低电平时,此时可能发生了按键操作, 随即状态机Key 进入S1 消抖延时状态,当延时结束时delay end= 1 (延时结束信号) ,跟接着状态机KEY 的S2 , S3 , S4 连续三个状态对按键输入信号Din进行采样,当三个状态下采样到Din 信号都是低电平, 则转入S5 状态,并产生按键确认信号Key conf irm= 1 ,同时在S5 状态下等待按键释放, 在此状态下当CLK 时钟信号检测到Din 为高电平时转回状态S0。
因按键释放瞬间也会发生抖动, 所以由波形图可以看出当按键释放瞬间由状态S5 转回状态S0 , 在S0 状态下因按键抖动CLK 时钟又检测到Din 为低电平, 随即转入S1 进行消抖延时, 经过S1 的消抖延时后, 按键已经稳定, Din 为稳定的高电平, 所以在状态S2 检测到Din为高电平,则转入S0 状态, 到此时完成一次按键的操作, 等待下一次按键操作,如果没有按键操作,即按键没按下,则一直保持在状态S0。