一段按键消抖程序

来源:本站
导读:目前正在解读《一段按键消抖程序》的相关信息,《一段按键消抖程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《一段按键消抖程序》的详细说明。
简介:这篇文章主要介绍了 一段按键消抖程序,先讲解了主题的思路,使学习者能更好的了解,接下来介绍了这个程序编写的内容。

总体思路:

1.先探测按键是否按下与松开

2.计时,计到一定数值(一般为10-20ms)再计进行探测,如果仍为按下或松开的值,则识别为按键的确有变化,否则为毛刺.

对于第一步没有什么疑问,都是要先进行按键是否变化的一个判断,对于第二步,在网上产生了大致两种思路:

1.第一次探测到按键变化,则进行计数计数到10ms,然后输出此时的按键值

2.每探测到变化,均重新使能计数器计数,当计数器达到10ms后输出此时的按值.

在网上看到一篇按键消抖的文章, 作者在里面贴出了一段老外写的代码,是VHDL写的,我觉得比较简练,暂时也没有想到什么弊端.我把代码转成了verilog语言,如下:

module debounce_style2 (

clk,

rst_n,

pin_in,

pin_out

);

input clk, rst_n;

input pin_in;

output pin_out;

parameter DELAY_TIME_10MS = 16'd199_999;

reg pin_reg;

reg [15:0] delay_counter;

always @(posedge clk or negedge rst_n) begin

if (!rst_n)

pin_reg <= 1'b1;

else if (delay_counter == DELAY_TIME_10MS)

pin_reg <= ~pin_reg;

end

always @(posedge clk or negedge rst_n) begin

if (!rst_n)

delay_counter <= 'd0;

else if (delay_counter == DELAY_TIME_10MS)

delay_counter <= 'd0;

else if (pin_reg ^ pin_in)

delay_counter <= delay_counter + 1;

else

delay_counter <= 'd0;

end

assign pin_out = pin_reg;

endmodule

提醒:《一段按键消抖程序》最后刷新时间 2024-03-14 01:02:39,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《一段按键消抖程序》该内容的真实性请自行鉴别。