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

fpga初学:键盘去抖动问题

fpga初学:键盘去抖动问题

大家好:

          刚开始学习fpga,现在有个问题想请教一下。

          将按键按下次数在数码管上显示出来。开始写的运行还算正常   ,但有时按一次数码管上的数字增加好几个,我考虑是键盘抖动,但不知道用vhdl如何编这段程序,请大家帮帮忙。。。谢谢!

用一个计数器,如果在>=N个CLK后,仍然输入的是同一个值,就可以认为输入的是你要输入的,负责就让其等于一个无效值。CLK一般取1K以下

能否给出这样一段vhdl的程序阿,昨天就是按照这个意图写的,运行不正常阿。。[em04]

--开始位检测
process(clk,cs_n,idle)
variable counta:std_logic_vector(3 downto 0);
begin
 if(cs_n='0')then
  counta:="0000";
  work_op<='0';--0:不接受数据
 else
  if(idle='0')then
   work_op<='1';
   counta:="0000";
  else
   if(clk'event and clk='0') then
    case counta is
     when "1100"=>work_op<='1';
     when others=>if(rs232_din='0')then
          counta:=counta+1;
          else
         counta:="0000";
          end if;
          work_op<='0';
    end case;
   end if;
  end if;
 end if;

这是我串口检测信号的程序,差不多,你看看吧,应该有帮助的吧

            

每一天都是新的开始,每一天都有新的收获

 

[em01]

Thanks.

好用就行

我也懒得再编

每一天都是新的开始,每一天都有新的收获

我觉得用一个20ms(根据实际情况设定具体值)作为触发时钟的D触发器,对输入信号进行采样的效果很好,又简单可靠!

[此贴子已经被作者于2008-12-8 11:27:49编辑过]

好,这个好。
用D触发器,或用状态机也可实现,网上有这样的程序,可以查一下
返回列表