首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

消除按键抖动问题

消除按键抖动问题

大家有没有做过消除抖动的vhdl程序,今天我折腾了半天觉得还是不行:请各位高手指点一二;

具体要求:首先防抖(如果某一按键按了屏蔽0.25秒),其次如果按键一直按的话,只认为是一次操作。输入为:两个按键K1,K2, clk 为标准8hz,现在拿俩个计数器计数,K11,K22。 K1按了K11计数,K2按了K22计数 。

谢谢!

好像只利用边缘还是不行:
   我自己也写了一个程序,拜托高手看看:为了简化描述:我假设只对按键K1,进行识别计数;按键clr为清零信号。clk为8hz。输出计数counter《0 to 3》.
  程序如下:
 signal count: std_logic_vector(1 downto 0);
 signal flag,countenable,k11,clr1:std_logic;

  P1:process(clk,clr)
begin

if(clr='0') then
flag<='0';
count<="00";
else if(clk'event and clk='1') then
 if (flag='1') then
 count<=count+'1';
 if(count="11") then
 flag<='0';
 end if;
end if;
 end if;
 end if;
 end process;
 
 
 2:process(k1,clr)
 begin
 if(flag='0') then
 flag<='1';---------------------某个键按了后FLAG=1,等待0.5s后flag=0,
 if(clk'event and clk='1') then
 
if(k1='0') then----------对按键锁存
 k11<='0';
 else
 k11<='1';
 end if;

if(clr='0') then
 clr1<='0';
 else
 clr1<='1';
 end if;
end if;
 end if;
end process;

P3 :process(k11)
begin
counter<=counter+'1';
end process;

这个程序在ISE8.2 check syntax 能通过,但在ISE8.1就不行了,不知道怎么回事?

[em06][em06]

消除抖动可以用延时一段时间再检测按键信号来判断是不是真实的按键信号;

一直按键只产生一个信号可以使用微分电路:按键信号key延时一个或者几个时钟周期得到key_delay,!key AND key_delay就可以得到固定长度的按键信号;

[此贴子已经被作者于2006-12-2 18:08:22编辑过]

美梦成真-->噩梦降临!
返回列表