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實現,不需要這一功能的朋友自行去除


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