本文的主要开发内容是对RGB LED的编程驱动以及循环点亮,首先需要了解这个外设连接在MCU哪些引脚上,下图为RGB LED的电路原理图 
在原理图中,可以看到RGB LED分别连接在PA13、PA26、PA27引脚上,并且是共阴极接法,在控制LED点亮过程中需要置引脚电平为高位。三色LED中其他两种或多种颜色可以组合出不同的颜色,加之控制任意一个LED的亮度显示,就能组合出更多的色彩显示。
打开CCS工具,按照课程一导入空白模板工程库,并修改工程名称

在syscfg文件中配置RGB灯的端口、引脚,RGB LED连接着主控芯片的PORTA,为了提高程序可读性,将端口命名为PORT_LED_x。
源代码:
#include "ti_msp_dl_config.h"
#define DELAY_TIME 16000000
#define PORT_LED_R GPIOA
#define PORT_LED_G GPIOA
#define PORT_LED_B GPIOA
#define LED_SET_ONE(GPIOx,PINx) DL_GPIO_setPins(GPIOx,PINx)
#define LED_CLEAR_TWO(GPIOx,PINx) DL_GPIO_clearPins(GPIOx,PINx)
#define LED_SET_TWO(GPIOx,PINx) DL_GPIO_setPins(GPIOx,PINx)
#define LED_CLEAR_ONE(GPIOx,PINx) DL_GPIO_clearPins(GPIOx,PINx)
uint32_t RGB_LED_PIN_List[]={PORT_LED_R_PIN_LED_R_PIN,PORT_LED_G_PIN_LED_G_PIN,PORT_LED_B_LED_LED_B_PIN};//RGB三色灯
uint8_t PIN_List_Length=sizeof(RGB_LED_PIN_List)/sizeof(uint32_t);
/**
* @brief 循环点亮RGB单灯
*
* @param[in] None
*
*/
void RGB_LED_Display_Loop(void){
delay_cycles(DELAY_TIME);
LED_SET_ONE(GPIOA,PORT_LED_R_PIN_LED_R_PIN); //点亮LED_R
LED_CLEAR_TWO(GPIOA,PORT_LED_G_PIN_LED_G_PIN|PORT_LED_B_LED_LED_B_PIN); //熄灭LED_G、LED_B
delay_cycles(DELAY_TIME);
LED_SET_ONE(GPIOA,PORT_LED_G_PIN_LED_G_PIN);
LED_CLEAR_TWO(GPIOA,PORT_LED_R_PIN_LED_R_PIN|PORT_LED_B_LED_LED_B_PIN);
delay_cycles(DELAY_TIME);
LED_SET_ONE(GPIOA,PORT_LED_B_LED_LED_B_PIN);
LED_CLEAR_TWO(GPIOA,PORT_LED_R_PIN_LED_R_PIN|PORT_LED_G_PIN_LED_G_PIN);
}
/**
* @brief 循环点亮RGB双灯
*
* @param[in] None
*
*/
int main(void)
{
SYSCFG_DL_init();
while (1) {
delay_cycles(32000000);
RGB_LED_Display_Loop();
RGB_LED_Display_Loop_Two();
}
}程序中除了定时1秒循环点亮Red、Green、Blue颜色外,还增加了品红、深空蓝、黄色颜色点亮,一共循环点亮6种颜色。源代码中实现思路是将循环点亮三色灯的逻辑代码封装成一个函数,函数当中主要依赖调用库函数完成输出引脚的高低电平切换。



根据三原色原理,黄色Yellow可由红色R和绿色G组合而成;红色,绿色组合形成品红Magenta;绿色,蓝色组合形成深天蓝DeppSkyBlue



我要赚赏金
