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. 硬件资源使用
对应的电路原理如下:
图6. RGB-LED 电路原理图
软件设计
1) 使用普通GPIO 配置RGB LED 流程
配置GPIO 为推挽输出
配置GPIO 输出高低以控制RGB LED
2) 代码介绍
main 函数代码描述
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)函数代码描述
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] initialize rgb led
* @param none
* @retval none
*/
void rgb_led_init(void)
void rgb_led_set(uint16_t color)函数代码描述
/**
* @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)函数代码描述
/**
* @brief turn off reg led.
* @param none
* @retval none
*/
void rgb_led_off(void)
void rgb_led_toggle(uint16_t color)函数代码描述
/**
* @brief reg led toggle.
* @param none
* @retval none
*/
void rgb_led_toggle(uint16_t color)
下载验证
上电后可以观察到RGB LED 以常规模式进行不同颜色切换。
|