1. 实现按键消抖
参见 http://www.stepfpga.com/doc/altera_7deb
1)模拟不消除抖动的状态
module top(
key, //按键输入
rst, //复位输入
led //led输出
);
input key,rst;
output reg led;
always @(key or rst)
if (!rst) //复位时led熄灭
led = 1;
else if(key == 0)
led = ~led; //按键按下时led翻转
else
led = led;
endmodule
ctrl+k通过之后assignments->pinplanners布局布线,然后start complication。
连上小脚丫,开始烧录。(视频传不上来,大概意思就是会发现,有的时候即使松开了按键,led仍旧亮着)
2)延时去抖
主代码如下
module top (clk,rst,key,led);
input clk;
input rst;
input key;
output reg led;
wire key_pulse;
//当按键按下时产生一个高脉冲,翻转一次led
always @(posedge clk or negedge rst)
begin
if (!rst)
led <= 1'b1;
else if (key_pulse)
led <= ~led;
else
led <= led;
end
//例化消抖module,这里没有传递参数N,采用了默认的N=1
debounce u1 (
.clk (clk),
.rst (rst),
.key (key),
.key_pulse (key_pulse)
);
endmodule
然后直接在刚刚创建的那个project里面new file Verilog HDL。
module debounce (clk,rst,key,key_pulse);
parameter N = 1; //要消除的按键的数量
input clk;
input rst;
input [N-1:0] key; //输入的按键
output [N-1:0] key_pulse; //按键动作产生的脉冲
reg [N-1:0] key_rst_pre; //定义一个寄存器型变量存储上一个触发时的按键值
reg [N-1:0] key_rst; //定义一个寄存器变量储存储当前时刻触发的按键值
wire [N-1:0] key_edge; //检测到按键由高到低变化是产生一个高脉冲

本文详细介绍了在FPGA中实现按键消抖、流水灯和呼吸灯的设计方法。首先,通过延时去抖动模块解决按键抖动问题,确保LED响应准确。接着,利用3-8译码器和时钟分频器实现8位流水灯。最后,通过两个计数器和标志位变化产生呼吸灯效果,实现LED亮度的渐变。这些实例展示了FPGA在数字逻辑控制中的应用。
最低0.47元/天 解锁文章
2274

被折叠的 条评论
为什么被折叠?



