天天看點

RVB2601應用開發實戰系列二: 跑馬燈

  1. 前言

基于RVB2601的跑馬燈程式是利用通過控制一顆RGB LED燈珠實作三色跑馬燈效果。

建議在在看本文之前,先詳細看下RVB2601資源。本例程名為ch2601_marquee_demo,可以通過CDK直接從OCC拉取。

  1. 硬體配置

三色LED通過PIN引腳 PA7、PA25、PA4與CH2601主晶片GPIO控制器連通,主要可以通過對PA7、PA25和PA4的GPIO PIN的操作,可以實作三色LED不同顔色的閃爍。LED硬體原理圖如下:

RVB2601應用開發實戰系列二: 跑馬燈
  1. 跑馬燈開發

3.1 例程下載下傳

打開CDK,點選HOME圖示,查找ch2601_marquee_demo後,打開工程可以看到以下目錄

RVB2601應用開發實戰系列二: 跑馬燈

3.2 LED配置

led_pinmux_init

該功能函數位于app/src/led.c, 用于初始化三色LED燈的IO管腳。配置三色燈的PA7、PA25和PA4為IO模式,為每個IO管腳配置PWM通道以及占空比時間。

void led_pinmux_init()

{

//7
csi_pin_set_mux(PA7, PA7_PWM_CH7);
csi_pin_set_mux(PA25, PA25_PWM_CH2);
csi_pin_set_mux(PA4, PA4_PWM_CH4);
ret = csi_pwm_init(&r, 0);
ret = csi_pwm_out_config(&r, 7 / 2, 300, 100, PWM_POLARITY_HIGH);
ret = csi_pwm_out_start(&r, 7 / 2);
    //25
ret = csi_pwm_out_config(&r, 2 / 2, 300, 100, PWM_POLARITY_HIGH);
ret = csi_pwm_out_start(&r, 2 / 2);
    //4
ret = csi_pwm_out_config(&r, 4 / 2, 300, 100, PWM_POLARITY_HIGH);
ret = csi_pwm_out_start(&r, 4 / 2);

led_refresh           

該功能函數位于app/src/led.c, 用于依次閃爍LED。利用g_ctr計數器來判斷閃爍LED燈。通過操作三根IO管腳來确定顯示指定顔色的燈。

void led_refresh()

g_ctr++;
if (g_ctr == 3) {
        g_ctr = 0;
}
if (g_ctr == 0)
{
    csi_pwm_out_start(&r, 7 / 2);
    csi_pwm_out_stop(&r, 2 / 2);
    csi_pwm_out_stop(&r, 4 / 2);
}
else if (g_ctr == 1)
{        
    csi_pwm_out_start(&r, 2 / 2);
    csi_pwm_out_stop(&r, 7 / 2);
    csi_pwm_out_stop(&r, 4 / 2);
}
else //2
{
    csi_pwm_out_start(&r, 4 / 2);
    csi_pwm_out_stop(&r, 7 / 2);
    csi_pwm_out_stop(&r, 2 / 2);
}           

}

demo_task

該功能函數位于app/src/main.c, 用于周期性點亮LED燈,在主函數裡調用。

static void demo_task(void *arg)

lv_init();
oled_init();
lable_test();
led_pinmux_init();
while (1)
{
    lv_task_handler();
    udelay(1000 * 1000);
    lv_tick_inc(1);
    led_refresh();
}           

3.3. 編譯運作

編譯通過後,點選下載下傳成功,複位運作。可看左下角的燈依次閃爍。

RVB2601應用開發實戰系列二: 跑馬燈
  1. 總結

本例程介紹了如何通過CSI接口配置IO管腳來控制LED燈,進而實作依次閃爍,達到跑馬燈的效果。後續還有更多的開發例程,敬請期待!

繼續閱讀