STM32学习第一周之 循环显示RGBLED的七种颜色

写的第一个STM32程序,花了两天时间,最终还是蛮有成就感的
分享出来供大家一起学习,有好的优化建议还请不吝赐教

连接 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实现,不需要这一功能的朋友自行去除


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章