按键消抖stm32示例代码
module key_debounce(
input sys_clk ,
input sys_rst_n ,
input key , //外部输入的按键值
output reg key_value , //消抖后的按键值
output reg key_flag //消抖后的按键值的效标志
);
//reg define
reg [19:0] cnt ;
reg key_reg ;
//*****************************************************
//** main code
//*****************************************************
//按键值消抖
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n) begin
cnt <= 20'd0;
key_reg <= 1'b1;
end
else begin
key_reg <= key; //将按键值延迟一拍
if(key_reg != key) begin //如果当前按键值和前一拍的按键值不一样,即按键被按下或松开
cnt <= 20'd100_0000; //则将计数器置为20'd100_0000,
//即延时100_0000 * 20ns(1s/50MHz) = 20ms
end
else begin //如果当前按键值和前一个按键值一样,即按键没有发生变化
if(cnt > 20'd0) //则计数器递减到0
cnt <= cnt - 1'b1;
else
cnt <= 20'd0;
end
end
end
//将消抖后的最终的按键值送出去
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n) begin
key_value <= 1'b1;
key_flag <= 1'b0;
end
//在计数器递减到1时送出按键值
else if(cnt == 20'd1) begin
key_value <= key;
key_flag <= 1'b1;
end
else begin
key_value <= key_value;
key_flag <= 1'b0;
end
end
endmodule
本文作者:心比天高xzh
本文链接:https://www.cnblogs.com/xzh-personal-issue/p/17321275.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步