2895|0

124

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

大家帮我看看 按键消抖的程序!谢谢 [复制链接]

简介:1*10个按键,按下其中任何一个都要产生一个100ms长的控制电平,无论高低,只做为下一级的时长控制,我用它来控制发射信号的脉宽。

思考:因为按下任何一个按键,考虑抖动和人的机械动作,很容易超过100ms,所以只能通过按键按下 或弹起的下降或上升沿来 产生这个100ms的控制电平,但是按键 的按下或弹起 都会有大量的抖动,因此如果能将有抖动的下降沿 变为干净的下降沿 就能保证控制电平的产生,并严格控制为100ms,所以对按下按键过程的消抖 就很重要。

 

大家帮我看看 我写的代码 可行否 或者 我哪儿考虑欠妥!谢谢

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity xiaodou is
port(
  clk: in std_logic;
  reset : in std_logic;
  din : in std_logic;
  dout : out std_logic
 );
end;
architecture one of xiaodou is
type state is(s0,s1,s2,s3,s4,s5);
signal current_state,next_state : state :=s0;

signal key_confirm : std_logic := '1';
signal delay_end : std_logic;
signal cnt : integer :=0;
begin
process(reset,clk)
begin
if reset = '0' then
 current_state <= s0;
 elsif rising_edge(clk) then
  current_state <= next_state;
  else
   null;
end if;
end process;

process(current_state,next_state,din,clk)
begin
case current_state is
when s0=>if din = '1' then --采到为高继续采
   next_state <= s0;
   elsif din = '0' then--采到为低 转入下个状态
   next_state <= s1;
  end if;

when s1=>if rising_edge(clk) then
   if cnt = 80 then--delay 8 ms clk is 1M
    cnt <= 0;
    delay_end <= '1';
   else
    cnt <= cnt + 1;
    delay_end <= '0';
   end if;
  end if;
  
   if delay_end = '1' then--开始延时
    next_state <= s2;
   else
    next_state <= s1;--延时结束,转入下个状态
   end if;

when s2=>if din = '0' then --第一次采到为低 转入下个状态
   next_state <= s3;
  elsif din = '1' then
   next_state <= s0;
  end if;

when s3=>if din = '0' then --第二次采到为低 转入下个状态
   next_state <= s4;
  elsif din='1' then
   next_state <= s0;
  end if;

when s4=>if din = '0' then  --第三次采到为低 转入下个状态
   next_state <= s5;
  elsif din='1' then
   next_state <= s0;
  end if;
when s5=>key_confirm<='0';
   if din = '0' then --按键未释放
   next_state <= s5;
   elsif din='1' then--按键已释放
   next_state <= s0;
   key_confirm<='1';
  end if;
end case;
end process;

dout <= key_confirm;

end one;

 

功能仿真 din的输入模拟 抖动 但是dout的输出 并未出现下降沿 问题出在哪儿 我也不知道 望大家帮忙指点。谢谢

 

未命名.bmp (1.63 MB, 下载次数: 0)

未命名.bmp
此帖出自FPGA/CPLD论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表