欢迎来到天天文库
浏览记录
ID:58676218
大小:13.78 KB
页数:6页
时间:2020-10-15
《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
此文档下载收益归作者所有