呼吸灯是利用人的视觉图像滞留效应,控制led灯的通过电流以控制led灯的亮灭程度,从而实现呼吸灯的效果。归根结底,需要控制led灯两端电压,实现占空比(高电平时长)如同呼吸一样的消长。
附上Verilog程序:
module breath_led(
input sys_clk,
input rst_n,
output reg led
);
reg flag; //控制呼or吸
reg [13:0] cnt;
reg [13:0] breath_time;
always @ (posedge sys_clk or negedge rst_n)begin
if(!rst_n)begin
cnt <= 14'b0;
breath_time <= 14'b0;
flag <= 1'b0;
end
else
if(cnt < 14'd10000)
cnt <= cnt + 1'b1;
else begin
cnt <= 14'b0;
if(breath_time < 14'd10000 && flag==0 )
breath_time <= breath_time +1'b1;
else if(breath_time > 14'd0 && flag==1)
breath_time <= breath_time - 1'b1;
else
flag <=~flag;
end
end
always @ (posedge sys_clk or negedge rst_n)begin
if(!rst_n)
led <= 1'b0;
else
if(cnt < breath_time)
led <= 1'b1;
else
led <= 1'b0;
end
endmodule