X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
FPGA/CPLD
[原创] 使用状态机的按键消抖[源码分享]
k331922164
2014-3-18 00:29
楼主
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity debounce_FSM is
generic (fclk : integer :=50000000);
port(
n_rst : in std_logic;
clk : in std_logic;
key_in : in std_logic; --key is valid by low
pulse : out std_logic --output single pulse
);
end debounce_FSM;
architecture rtl of debounce_FSM is
type m_state is(
idle,
delay,
output,
key_up
);
signal cs,ns: m_state;
signal key_reg : std_logic;
constant n : integer :=fclk/100; --100Hz,means to delay 10 ms
signal delay_cnt : integer range 0 to n-1;
begin
--three section FSM
--timing sequence part of FSM
process(n_rst,clk)
begin
if(n_rst='0')then
cs<=idle;
elsif(clk'event and clk='1')then
cs<=ns;
end if;
end process;
--combination part of FSM
process(cs,key_in,delay_cnt)
begin
case (cs) is
when idle => if(key_in='0')then
ns<=delay; --when key is down
else
ns<=idle;
end if;
when delay => if(delay_cnt=n-1)then
ns<=output;
else
ns<=delay;
end if;
when output => ns<=key_up;
when key_up => if(key_in='1')then --waiting key being up
ns<=idle;
else
ns<=key_up;
end if;
when others => ns<=idle;
end case;
end process;
--register output part of FSM
process(n_rst,clk)
begin
if(n_rst='0')then
key_reg <='0';
delay_cnt<=0;
elsif(clk'event and clk='1')then
case (ns) is
when idle => key_reg <='0';delay_cnt<=0;
when delay => key_reg <='0';delay_cnt<=delay_cnt+1;
when output => if(key_in='0')then
key_reg <='1';
else
key_reg <='0';
end if;
delay_cnt<=delay_cnt;
when key_up => key_reg <='0';delay_cnt<=0;
when others => key_reg <='0';delay_cnt<=0;
end case;
end if;
end process;
pulse<=key_reg;
end rtl;
点赞
回复评论 (3)
沙发
john_wang
谢谢楼主分享 。看看
点赞
2014-3-18 11:42
板凳
k331922164
引用:
john_wang 发表于 2014-3-18 11:42
谢谢楼主分享 。看看
一起学习,一起分享。
点赞
2014-3-18 13:48
4楼
david69
Great! Thank for sharing.
点赞
2014-4-26 14:30
最新活动
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
随便看看
PLC与运动控制器的运动控制区别
电子开发设计心得
CC2530数据手册(中文版本)
新手求助,例子中遇到的一个问题
諮詢數字電源的情況
RC充电测温的原理
64bit windows 7 VMWare+ 64bit Ubuntu12.04 uboot ,kernel,android编译环境搭...
(高频电路)基于m606设计的数字高频对讲机
LCD背光已经点亮了,但别的显示不行,是什么原因?
普通示波器及数字示波器基础知识
鼠标奖品收到了,很漂亮,可是却用不了~
SOSO姐亲启
TI官方两相LLC交错并联程序的几个关键点(to be continued)
uCOS-ii移植
18B20显示FFF
EEWORLD官方竞价活动第三期——图书竞价
linux 0.1~各版本镜像
对于linux下system()函数的深度理解
D类音频放大器的输出低通滤波器设计
TI教室每天限时使用吗?
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复