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; } } }