接上篇:https://developer.aliyun.com/article/1222365?groupCode=t-headocc
3)控制一颗RGB LED灯珠实现跑马灯效果
基于RVB2601的跑⻢灯程序是利⽤通过控制⼀颗RGB LED灯珠实现三⾊跑⻢灯效果。本例程名为ch2601_marquee_demo,可以通过CDK直接从OCC拉取。
a) 硬件配置
三⾊LED通过PIN引脚PA7、PA25、PA4与CH2601主芯⽚GPIO控制器连通,主控可以通过对PA7、PA25和PA4的GPIO PIN的操作,可以实现三⾊LED不同颜⾊的闪烁。LED硬件原理图如下:
b) 跑马灯开发
① 打开CDK软件。点击⼯具栏最右侧的平头哥图标,搜索找到对应的工程后点击【创建工程】。
② 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(); } }
③ 编译运行
编译通过后,点击下载成功,复位运⾏。可看左下⻆的灯依次闪烁。
关于RVB2601开发板控制一颗RGB LED灯珠实现跑马灯效果的详细说明可以进入芯片开放社区(OCC)查看。