
这其实是用一个计数器来判断输入的脉冲的宽度,如果宽度大于3个脉冲,则认为这次输入有效,输出一个脉冲宽度的脉冲来替代输入信号,否则认为该次输入无效!
library ieee;
use ieeestd_logic_1164all;
entity xiaodou is
port(clk,input: in std_logic;
output: out std_logic);
end xiaodou;
architecture xiaodou_arc of xiaodou is
signal cp:std_logic;
signal count:integer range 0 to 3;
begin
process(clk)
begin
if(clk'event and clk='1') then 检测上升沿
if(input='1')then 如果有输入信号
if(count=3)then count<=count; 当计数达到3时,保持计数值不变
else count<=count+1; 当其小于3时,进行加1处理
end if;
if(count=2)then cp<='1'; 如果计数达到2,cp置1
else cp<='0'; 其余情况全部为0
end if;
else count<=0; 如果计数出现非法状况,进行清零复位
end if;
end if;
output<=cp; 信号输出
end process;
end xiaodou_arc
其实,消抖与数字钟没有什么关系,与定时器更没有关系。,
消抖是针对按键的,因电子钟中要用按键,用来调时,也要用定时器,所以,你才误把这三者联系在一起了。
按键是金属片机械接触的,所以,在按下的时候,会因为机械抖动,产生多次的接触,本来是只按一次,应该是接触一次的,但实际上是接触很多次,还是未知的。造成的现象就是,本来按一下键,但却好像 按了n 次一样,这就是所谓的抖动。
消抖动就是克服按键的多次接触,保证每次按键只识别出一次接触。
消抖动的 方法就是写程序时,每当判断有按键按下后,先延时一段时间,再判断一次,如果还保证有按键才有效。这样写
if(key==0) //第一次判断按键被按下,key就是按键
{
delay(); //延时
if(key==0) //第二次判断按键被按下
{
//从这开始写按键后程序
while(key==0); //等待按键松开
}
}
以上就是关于vhdl消抖程序意思全部的内容,包括:vhdl消抖程序意思、单片机数字钟设计时的消抖问题、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)