硬汉嵌入式论坛

 找回密码
 立即注册
查看: 418|回复: 0
收起左侧

[客户分享] RGB LED--AT_SURF案例No.2

[复制链接]

29

主题

5

回帖

92

积分

初级会员

积分
92
发表于 2022-5-18 19:49:29 | 显示全部楼层 |阅读模式
本帖最后由 danny 于 2022-5-18 20:00 编辑

RGB LED--AT_SURF案例No.2
简介
RGB LED 灯是以红绿蓝三色混光而成。以三原色共同交集成像,此外,也有蓝光LED 配合黄色荧光 粉,以及紫外LED 配合RGB 荧光粉。某些LED 背光板出现的颜色特别清楚而鲜艳,甚至有高画质电视的程度,这种情形,正是RGB 的特色,标榜红就是红、 绿就是绿、蓝就是蓝的特性,在光的混色上,具备更多元的特性。

RGB 是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好像有红、绿、蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于两者亮度之总和,越混合亮度越高,即加法混合。
红、绿、蓝三盏灯的叠加情况,中心三色最亮的叠加区为白色,加法混合的特点:越叠加越明亮。红、绿、蓝三个颜色通道每种色各分为256 阶亮度,在0 时“灯”最弱——是关掉的,而在255 时“灯”最亮。当三色灰度数值相同时,产生不同灰度值的灰色调,即三色灰度都为0 时,是最暗的黑色调;三色灰度都为255 时,是最亮的白色调。

RGB 颜色称为加成色,因为您通过将 R、G 和 B 添加在一起(即所有光线反射回眼睛)可产生白色。加成色用于照明光、电视和计算机显示器。例如,显示器通过红色、绿色和蓝色荧光粉发射光线产生颜色。绝大多数可视光谱都可表示为红、绿、蓝 (RGB) 三色光在不同比例和强度上的混合。这些颜色若发生重叠,则产生青、洋红和黄。

RGB LED 控制主要有两种方法:
方式一:普通GPIO 配置RGB LED 流程(常规模式)
PB10 控制RED 开闭,PD13 控制GREEN 开闭,PB5 控制BLUE 开闭。也可以通过两两组合,或三三组合,以达到控制不同颜色的目的。
该方式仅使用GPIO,不占用其他外设,控制简单,但不能进行亮度调节。
方式二:TMR 配置RGB LED 流程(呼吸灯模式)
TMR2 通道3 控制RED 开闭和亮度,TMR4 通道2 控制GREEN 开闭和亮度,TMR3 通道2 控制BLUE 开闭和亮度。不同通道组合以显示不同颜色,TMR 通道的占空比以控制RGB LED 亮度。
该方式需要使用GPIO 和TMR,可进行颜色和亮度调节。
本例程主要实现了第一种控制方式。

资源准备
硬件环境:
对应产品型号的AT-SURF-F437 Board
软件环境:
AT32F435_437_Firmware_Library_V2.x.x\project\at_start_f437\ examples\rgb_led

硬件设计
本案例使用的硬件资源有LCD 显示屏、RGB-LED 对应的引脚如下:
表2. 硬件资源使用
image.png

对应的电路原理如下:
图6. RGB-LED 电路原理图
image.png

软件设计
1) 使用普通GPIO 配置RGB LED 流程
配置GPIO 为推挽输出
配置GPIO 输出高低以控制RGB LED
2) 代码介绍
main 函数代码描述
[C] 纯文本查看 复制代码
int main(void)
{
        /* 初始化系统时钟 */
        system_clock_config();
        /* 初始化中断优先级分组 */
        nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
        /* 初始化延时函数 */
        delay_init();
        /* 初始化LCD */
        lcd_init(LCD_DISPLAY_VERTICAL);
        /* 显示信息 */
        lcd_string_show(10, 20, 200, 24, 24, (uint8_t *)"RGB LED Test");
        /* 初始化RGB LED */
        rgb_led_init();
        /* LED 关闭 */
        rgb_led_off();
        rgb_led_set(RGB_LED_GBLUE);
        delay_ms(500);
        rgb_led_set(RGB_LED_PURPLE);
        delay_ms(500);
        rgb_led_set(RGB_LED_WHITE);
        delay_ms(500);
        rgb_led_set(RGB_LED_YELLOE);
        delay_ms(500);
        while(1)
        {
                rgb_led_toggle(RGB_LED_RED);
                delay_ms(500);
        }
}


void rgb_led_init(void)函数代码描述
[C] 纯文本查看 复制代码
/**
* @brief initialize rgb led
* @param none
* @retval none
*/
void rgb_led_init(void)


void rgb_led_set(uint16_t color)函数代码描述
[C] 纯文本查看 复制代码
/**
* @brief set rgb led color,and turn on.
* @param color: rgb led corlor
* this parameter can be one of the following values:
* - RGB_LED_RED
* - RGB_LED_GREEN
* - RGB_LED_BLUE
* - RGB_LED_YELLOE
* - RGB_LED_GBLUE
* - RGB_LED_PURPLE
* - RGB_LED_WHITE
* @retval flag_status (SET or RESET)
*/
void rgb_led_set(uint16_t color)


void rgb_led_off(void)函数代码描述
[C] 纯文本查看 复制代码
/**
* @brief turn off reg led.
* @param none
* @retval none
*/
void rgb_led_off(void)


void rgb_led_toggle(uint16_t color)函数代码描述
[C] 纯文本查看 复制代码
/**
* @brief reg led toggle.
* @param none
* @retval none
*/
void rgb_led_toggle(uint16_t color)


下载验证
上电后可以观察到RGB LED 以常规模式进行不同颜色切换。

AN0049_AT_SURF_F437_Board_Application_Note_ZH_V2.0.1.pdf (6.66 MB, 下载次数: 2)




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-8 16:57 , Processed in 0.283339 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表