2021/10/14 智能家具 嵌入式实训 第四天 RGB彩灯(3)

 

 

 

 

 

 

 R:red

G:green

B:blue

三原色 用三个接口

#ifndef __RGB_H
#define __RGB_H

#include "stm32f10x.h"
#include "led.h"

/* 管脚宏定义 */
#define B_PORT            GPIOA
#define    B_PIN            GPIO_Pin_6

#define G_PORT            GPIOA
#define    G_PIN            GPIO_Pin_7

#define R_PORT            GPIOA
#define    R_PIN            GPIO_Pin_8

 

1-打开 0关闭

因为引用led.h

enum LED_CONDITION{OFF,ON};

可以写 OFF-0 ON-1

/* 操作宏定义 */
#define RGB_Red(x)        (x)?GPIO_ResetBits(R_PORT,R_PIN):GPIO_SetBits(R_PORT,R_PIN)
#define RGB_Green(x)    (x)?GPIO_ResetBits(G_PORT,G_PIN):GPIO_SetBits(G_PORT,G_PIN)
#define RGB_Blue(x)        (x)?GPIO_ResetBits(B_PORT,B_PIN):GPIO_SetBits(B_PORT,B_PIN)

 

/* 函数接口 */
void RGB_Config(void);
void RGB_Test(void);

#endif

 

 

接下来写RGB.c

 

使能

#include "rgb.h"

/***********************************************************************************
函数功能:RGB彩灯初始化
形参:无
返回值:无
***********************************************************************************/
void RGB_Config(void)
{
    //时钟使能
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    //配置GPIO初始化参数 + 初始化
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Pin = R_PIN;
    GPIO_Init(R_PORT, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin = G_PIN;
    GPIO_Init(G_PORT, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin = B_PIN;
    GPIO_Init(B_PORT, &GPIO_InitStructure);

 

    //初始状态
      RGB_Red(OFF);
    RGB_Green(ON);
    RGB_Blue(OFF);
}

 

/***********************************************************************************
函数功能:RGB彩灯接口函数
形参:无
返回值:无
***********************************************************************************/

/***********************************************************************************
函数功能:RGB彩灯接口函数
形参:无
返回值:无
***********************************************************************************/
/* 
*RGB彩灯测试
*/
void RGB_Test(void)
{
    static u8 count = 0;
    switch(count)
    {
        case 0:
            GPIO_ResetBits(R_PORT,R_PIN);
            GPIO_SetBits(G_PORT,G_PIN);
            GPIO_SetBits(B_PORT,B_PIN);
            break;
        case 1:
            GPIO_SetBits(R_PORT,R_PIN);
            GPIO_ResetBits(G_PORT,G_PIN);
            GPIO_SetBits(B_PORT,B_PIN);
            break;
        case 2:
            GPIO_SetBits(R_PORT,R_PIN);
            GPIO_SetBits(G_PORT,G_PIN);
            GPIO_ResetBits(B_PORT,B_PIN);            
        break;
    }
    count++;
    count %= 3;//0%3=0 1%3=1 2%3=2 3%3=0 保持count是0123
}

 

最后在主函数main中添加

#include "main.h"

/***********************************************************************************
函数功能:main函数
形参:无
返回值:无
***********************************************************************************/
int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);               //配置NVIC中断优先级组
    Systick_Config(72000);
    LED_Config(ON); 
    Beep_Config(OFF);
    KEY_Config();
    RGB_Config();
    while(1)
    {       
        /* 时间片任务 */
        if(TASK_Test[0]>=TASK_Test[1])
        {
            RGB_Test();
            TASK_Test[0]=0;
        }
        
    }
}

 

posted @ 2021-10-17 10:04  halfup  阅读(64)  评论(0编辑  收藏  举报