连接 RGB LED模块,使得该模块能够依次显示 7 种颜色的光,并且可以循环显示。
注意:添加一个 RGBLED.c 和 RGBLED.h 文件
RGBLED.h 文件里面,对 RGBLED 使用的引脚和端口进行宏定义
RGBLED.c 文件里面,设计一个 RGBLED_Init 函数,一个 RGBLED_Display(颜色值)
函数
RGBLED.h
#ifndef __RGBLED_H
#define __RGBLED_H
#include "sys.h"
#define R PEout(7)
#define G PEout(8)
#define B PEout(9)
#define RED 1
#define GREEN 2
#define BLUE 3
#define YELLOW 4
#define NAVY 5
#define PURPLE 6
#define WHITE 7
void RGBLED_Init(void);
void RGBLED_Display(u8 colour, int state);
#endif
#include "RGBLED.h"
//LED IO初始化
void RGBLED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //R-->PE.7 端口配置
GPIO_Init(GPIOE, &GPIO_InitStructure); //根据设定参数初始化GPIOE.7
GPIO_SetBits(GPIOE,GPIO_Pin_7); //PE.7 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //G-->PE.8 端口配置, 推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz
GPIO_SetBits(GPIOE,GPIO_Pin_8); //PE.8 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //B-->PE.9 端口配置, 推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz
GPIO_SetBits(GPIOE,GPIO_Pin_9); //PE.9 输出高
}
RGBLED.c
void RGBLED_Display(u8 colour, int state) //state = 1;表示灯亮,state = 0;表示灯灭
{
switch(colour){
case RED:
if(state){
R = 0; G = 1; B = 1;
}
else{
R = 1; G = 0; B = 0;
}
break;
case GREEN:
if(state){
R = 1; G = 0; B = 1;
}
else{
R = 0; G = 1; B = 0;
}
break;
case BLUE:
if(state){
R = 1; G = 1; B = 0;
}
else {
R = 0; G = 0; B = 1;
}
break;
case YELLOW:
if(state){
R = 0; G = 0; B = 1;
}
else{
R = 1; G = 1; B = 0;
}
break;
case NAVY:
if(state){
R = 1; G = 0; B = 0;
}
else{
R = 0; G = 1; B = 1;
}
break;
case PURPLE:
if(state){
R = 0; G = 1; B = 0;
}
else{
R = 1; G = 0; B = 1;
}
break;
case WHITE:
if(state){
R = 0; G = 0; B = 0;
}
else{
R = 1; G = 1; B = 1;
}
break;
default:
break;
}
}
后边会设计利用按键矩阵来控制小灯的亮灭,在这利用state实现,不需要这一功能的朋友自行去除
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』