06、安路SparkRoad国产FPGA测评【学习篇】RGB灯
[复制链接]
本帖最后由 1nnocent 于 2022-7-27 15:44 编辑
RGB三色灯例程实现的功能为R、G、B三种颜色交替点亮,个人比较想看到的是多种颜色灯的组合,但是历程并没有实现此功能。RGB灯其实非常简单,就是三个不同颜色的LED,在分析代码时顺便改下代码(具体功能为一个灯亮时,三个灯依次点亮;两个灯亮时,两两依次点亮;三个灯亮时,三个全亮,再三个全不亮。一共八种情况),实现多种颜色的组合。
以下是硬件原理图和对应的FPGA引脚:
接下来简单分析以下代码:输入接口为24M时钟,以及控制RGB三个灯的接口。该例程的计数器CNT的值为24 000 000,所以颜色切换的间隔时间为1S。
先定义常量,RGB灯每种状态对应一种状态,一共八种。
parameter S0 = 3'b110;
parameter S1 = 3'b101;
parameter S2 = 3'b011;
parameter S3 = 3'b100;
parameter S4 = 3'b001;
parameter S5 = 3'b010;
parameter S6 = 3'b000;
parameter S7 = 3'b111;
每1S进行RGB灯的状态切换,state为灯的状态:
always @(posedge clk_24m or negedge rst_n)
begin
if (!rst_n)
begin
cnt_time <= 0;
state <= S0;
end
else if(cnt_time == CNT - 1)
begin
cnt_time <= 0;
state <= state + 1'b1;
end
else
cnt_time <= cnt_time + 1'b1;
end
然后根据state的状态给RGB灯赋值:
always@(*)
begin
case(state)
3'd0:led_rgb <= S0;
3'd1:led_rgb <= S1;
3'd2:led_rgb <= S2;
3'd3:led_rgb <= S3;
3'd4:led_rgb <= S4;
3'd5:led_rgb <= S5;
3'd6:led_rgb <= S6;
3'd7:led_rgb <= S7;
default:state <= state;
endcase
end
assign led_r = led_rgb[0];
assign led_g = led_rgb[1];
assign led_b = led_rgb[2];
以下为运行效果:
RGB
|