一、背景
- RGB LED:透過紅、綠、藍三種顏色組合發光的LED,可以理解由三個不同發光屬性的LED組成,這個是LCD平板顯示原理的基礎,一個LED相當於螢幕上面的一個畫素
- FRDM-MCXN947整合了一塊RGB LED,它由三個GPIO口驅動,這裡由於GPIO的電平只能是0或者1,所以這裡的RGB LED並不能像LCD的單個畫素那樣合成256x256x256種顏色
二、顏色表
三原色合成顏色關係表如圖所示
顏色組合關係表
顏色 | Red | Green | Blue | 英文名 |
---|---|---|---|---|
紅 | 1 | 0 | 0 | Red |
綠 | 0 | 1 | 0 | Green |
藍 | 0 | 0 | 1 | Blue |
品紅 | 1 | 0 | 1 | Pink |
黃 | 1 | 1 | 0 | Yellow |
青 | 0 | 1 | 1 | Cyan |
白 | 1 | 1 | 1 | White |
三、電路
電路引腳對應關係:R -> P0_10,G -> P0_27,B -> P1_2
驅動方式:上拉接VCC,透過灌電流方式接入GPIO,低電平發光
四、程式設計
初始化RGB LED
#include "drv_pin.h"
#define LEDR_PIN ((0*32)+10)
#define LEDG_PIN ((0*32)+27)
#define LEDB_PIN ((1*32)+2)
......
{
rt_pin_mode(LEDR_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */
rt_pin_mode(LEDG_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */
rt_pin_mode(LEDB_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */
}
動態展示各種混合顏色
while (1)
{
// Red
rt_pin_write(LEDR_PIN, PIN_LOW);
rt_pin_write(LEDG_PIN, PIN_HIGH);
rt_pin_write(LEDB_PIN, PIN_HIGH);
rt_thread_mdelay(delay);
// Green
rt_pin_write(LEDR_PIN, PIN_HIGH);
rt_pin_write(LEDG_PIN, PIN_LOW);
rt_pin_write(LEDB_PIN, PIN_HIGH);
rt_thread_mdelay(delay);
// Blue
rt_pin_write(LEDR_PIN, PIN_HIGH);
rt_pin_write(LEDG_PIN, PIN_HIGH);
rt_pin_write(LEDB_PIN, PIN_LOW);
rt_thread_mdelay(delay);
// Yellow
rt_pin_write(LEDR_PIN, PIN_LOW);
rt_pin_write(LEDG_PIN, PIN_LOW);
rt_pin_write(LEDB_PIN, PIN_HIGH);
rt_thread_mdelay(delay);
// Pink
rt_pin_write(LEDR_PIN, PIN_LOW);
rt_pin_write(LEDG_PIN, PIN_HIGH);
rt_pin_write(LEDB_PIN, PIN_LOW);
rt_thread_mdelay(delay);
// Cyan
rt_pin_write(LEDR_PIN, PIN_HIGH);
rt_pin_write(LEDG_PIN, PIN_LOW);
rt_pin_write(LEDB_PIN, PIN_LOW);
rt_thread_mdelay(delay);
// White
rt_pin_write(LEDR_PIN, PIN_LOW);
rt_pin_write(LEDG_PIN, PIN_LOW);
rt_pin_write(LEDB_PIN, PIN_LOW);
rt_thread_mdelay(delay);
}
五、總結
紙上得來終覺淺,絕知此事要躬行,曾經在大學學過LCD平板顯示原理,知道畫素的顯示原理,知道三原色,但一直沒有機會實操,我也不大清楚青色(cyan)居然由綠色(green)和藍色(blue)合成的
六、術語
- RGB:red green blue,紅色、綠色、藍色三種顏色的通稱
- LED:light emittiing diode,發光二極體
- LCD:Liquid Crystal Display,液晶顯示
- pink:品紅、粉紅
- cyan:青色