1nnocent 发表于 2022-7-30 09:07

06、安路SparkRoad国产FPGA测评【学习篇】RGB灯

本帖最后由 1nnocent 于 2022-7-27 15:44 编辑

<p>&nbsp; &nbsp; RGB三色灯例程实现的功能为R、G、B三种颜色交替点亮,个人比较想看到的是多种颜色灯的组合,但是历程并没有实现此功能。RGB灯其实非常简单,就是三个不同颜色的LED,在分析代码时顺便改下代码(具体功能为一个灯亮时,三个灯依次点亮;两个灯亮时,两两依次点亮;三个灯亮时,三个全亮,再三个全不亮。一共八种情况),实现多种颜色的组合。</p>

<p>&nbsp;</p>

<p>以下是硬件原理图和对应的FPGA引脚:</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; &nbsp; 接下来简单分析以下代码:输入接口为24M时钟,以及控制RGB三个灯的接口。该例程的计数器CNT的值为24 000 000,所以颜色切换的间隔时间为1S。</p>

<p>先定义常量,RGB灯每种状态对应一种状态,一共八种。</p>

<pre>
<code>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;</code></pre>

<p>每1S进行RGB灯的状态切换,state为灯的状态:</p>

<pre>
<code>always @(posedge clk_24m or negedge rst_n)
begin
        if (!rst_n)
        begin
          cnt_time &lt;= 0;
          state &lt;= S0;
        end
        else if(cnt_time == CNT - 1)
        begin
                cnt_time &lt;= 0;
                state &lt;= state + 1'b1;
        end
        else
                cnt_time &lt;= cnt_time + 1'b1;
end</code></pre>

<p>然后根据state的状态给RGB灯赋值:</p>

<pre>
<code>always@(*)
begin
        case(state)
                3'd0:led_rgb &lt;= S0;
                3'd1:led_rgb &lt;= S1;
                3'd2:led_rgb &lt;= S2;
                3'd3:led_rgb &lt;= S3;
                3'd4:led_rgb &lt;= S4;
                3'd5:led_rgb &lt;= S5;
                3'd6:led_rgb &lt;= S6;
                3'd7:led_rgb &lt;= S7;
                default:state &lt;= state;
        endcase
end
assign led_r = led_rgb;
assign led_g = led_rgb;
assign led_b = led_rgb;</code></pre>

<p>&nbsp; &nbsp; 以下为运行效果:</p>

<p>dc91ba9bae27b15e7b5d194079aabcf4<br />
&nbsp;</p>

1nnocent 发表于 2022-7-30 09:09

<p>最近几个例程都较简单,这里就不按照计划发帖了,这里进度会快一点</p>
页: [1]
查看完整版本: 06、安路SparkRoad国产FPGA测评【学习篇】RGB灯