本文的主要开发内容是对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