vhdl按键消抖程序.docx

vhdl按键消抖程序.docx

ID:58676218

大小:13.78 KB

页数:6页

时间:2020-10-15

vhdl按键消抖程序.docx_第1页
vhdl按键消抖程序.docx_第2页
vhdl按键消抖程序.docx_第3页
vhdl按键消抖程序.docx_第4页
vhdl按键消抖程序.docx_第5页
资源描述:

《vhdl按键消抖程序.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.vhdl按键消抖程序一:延时性消抖在本例子中,input是按键的输入,output是消抖之后的按键输出是clk经历8个上升沿之后就让output输出一个CLK周期的高电平libraryieee;useieee.std_logic_1164.all;entityPWlockisport(clk:instd_logic;input:instd_logic;output:outstd_logic);endPWlock;architectureoneofPWlockissignala:std_logic;s

2、ignalcount:integerrange0to9;beginprocess(clk)beginifinput=‘0’thencount<=0;elsif(clk‘eventandclk=’1‘)thenifcount=9thencount<=count;elsecount<=count+1;endif;endif;-ifcount=8thena<=’0‘;elsea<=’1‘;endif;endprocess;output<=a;endone;1.vhdl按键消抖程序二一般按键延时在20ms左右,

3、根据时钟频率决定你的计数范围。程序非常简单,但经常用到,对于FPGA初学者要好好学习这部分。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityreseterisport(clk,reset_in:instd_logic;--按键按下时为0reset_out:outstd_logic:=‘0’);endreseter;architecturebehavofreseterisbeginPROCESS(clk

4、,reset_in)VARIABLECOUNT1:INTEGERRANGE0TO;BEGINIFreset_in=‘0’THENIFRISING_EDGE(clk)THENIFCOUNT1<10000THENCOUNT1:=COUNT1+1;ELSECOUNT1:=COUNT1;ENDIF;IFCOUNT1<=9999THENreset_out<=‘1’;ELSEreset_out<=‘0’;ENDIF;ENDIF;ELSECOUNT1:=0;reset_out<=‘1’;ENDIF;ENDPROCES

5、S;endbehav;1.vhdl按键消抖程序三:计数器型消抖电路(一)计数器型消抖电路是设置一个模值为(N+1)的控制计数器,clk在上升沿时,如果按键开关key_in=‘1’,计数器加1,key_in=‘0’时,计数器清零。当计数器值为2时,key_out输出才为1,其他值为0时。计数器值为N时处于保持状态。因此按键key_in持续时间大于N个clk时钟周期时,计数器输出一个单脉冲,否则没有脉冲输出。如果按键开关抖动产生的毛刺宽度小于N个时钟周期,因而毛刺作用不可能使计数器有输出,防抖动目的得以实现

6、。clk的时钟周期与N的值可以根据按键抖动时间由设计者自行设定。主要程序结构如下:if(clk’eventandclk=’1’)thenif(key_in=’1’)thenifcount=Nthencount<=count;elsecount<=count+1;endif;endif;elsecount<=0;endif;2.vhdl按键消抖程序四:计数器型消抖电路(二)计数器型消抖电路(二)是控制计数器工作一个循环周期(N+1个状态),且仅在计数器为0时输出为“1”。电路设计了连锁控制设施。在计数器处

7、于状态0时,此时若有按键操作,则计数器进入状态1,同时输出单脉冲(其宽度等于时钟周期)。计数器处于其他状态,都没有单脉冲输出。计数器处于状态N时,控制en=‘0’,导致计数器退出状态N,进入状态0。计数器能否保持状态0,取决于人工按键操作,若按键key_in=‘1’,控制en=‘1’(计数器能正常工作),key_in=‘0’,计数器状态保持。显见计数器处于状态0,人工不按键,则计数器保持状态0。主要程序结构如下:ifcount=Nthencount<=0;elsecount<=count+1;endif

8、;ifcount=0thenkey_out<=’0’;endif;endifendprocess;B:process(clk)beginif(clk’eventandclk=’1’)thenifcount

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。