|
呼吸灯 有点意思 我也发一个啊,为了值得大家学习,并能有所收获,我写成模块方式。PWM_LED这个模块是可以直接用,实际是我一个产品里面一部分。
module pwm_led(
input clk,
input [7:0] pwm_val ,
output reg led=0
);
reg [6:0] delay_cntr = 0; //这是一个预分频的计数器
reg [7:0] runner =0 ; //这是一用来和PWM数值进行比较从而决定LED是否亮的计数器
always @ (posedge clk) delay_cntr <= delay_cntr + 1 ;
always @ (posedge clk) if (delay_cntr ==0) runner <= runner+1 ;
always @ (posedge clk) led <= runner <pwm_val ;
endmodule
上面是一个控制小灯亮度的模块,我们调用它,之后不断的顺序的变化亮度就可以了。就设置一个变化比较慢的计数器就可以。
根据实际CLK的频率设置HI_BIT。决定闪烁快慢。
`define HI_BIT 25
module notify_led (input clk ,output led );
reg ['HI_BIT : 0 ] cntr ;always @(posedge clk) cntr<=cntr+1 ;
pwm_led u1( .clk(clk) , .pwm_va(cntr['HI_BIT:'HI_BIT-7]), .led(led) );
endmodule
视觉暂留,不能封边20MS以内的变化,所以不连续的亮灭间隔就让我们看到所谓的呼吸灯的效果。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|