一、module key /*此按键消抖方法,如果按键时间足够长的话会触发两次
就像计算机的键盘按着不放会一直触发的,
这也是符合人们习惯的,若用来驱动led,会出现闪烁状*/
(
input clk_50Hz,
input key_in,
output key_out
);
reg [2:0] cnt;
always@(posedge clk_50Hz)
begin
if(!key_in)
cnt<=cnt+1'b1;
else
cnt<=1'b0;
end
assign key_out=cnt[0]&&cnt[1]&&cnt[2];
endmodule
二、module key_jitter /*此种消抖方法,使用3个D触发器,实现方 便 只有按键弹起,停止计数,适用性强,按键弹起,led灭*/
(
input clk,
input pink,
output reg pink_out
);
reg [2:0] shifter;
always @(posedge clk)
begin
shifter[2:1]<=shifter[1:0];
shifter[0]<=pink;
end
always @(posedge clk)
begin
if(shifter[2:0]==3'b000)
pink_out<=1'b0;
else if(shifter[2:0]==3'b111)
pink_out<=1'b1;
else
pink_out<=pink_out;
end
endmodule
两种方法均需要适用较低的扫描频率
文章评论(0条评论)
登录后参与讨论