zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

K_A01_002 基于单片机驱动RGB模块颜色渐变显示

驱动模块单片机 基于 显示 颜色 rgb 渐变
2023-09-11 14:21:44 时间

目录

一、程序功能说明

二、基本参数

        1、参数

        2、模块引脚说明

三、PWM驱动说明

        时序:

        代码:

                STC89C52RC

                STM32F103C8T6

四、部分代码说明

        接线说明

                1.1、STC89C52RC+RGB模块

                1.2、STM32F103C8T6+RGB模块

五、相关资料链接

六、视频效果展示与程序资料获取

七、项目所有材料清单

八、注意事项

九、接线表格


一、程序功能说明

单片机型号

测试条件

模块名称

代码功能

STC89C52RC

1.晶振11.0592M

RGB模块

1、RGB模块彩灯渐变

STM32F103C8T6

1、晶振8M

2、系统时钟72M

RGB模块

二、基本参数

        1、参数

f1d5ebc67c5e4dd8890c138ba62871ad.png

237ef751d2854ff482d880521e79a81c.png

        2、模块引脚说明

RGB模块引脚

引脚说明

GND

GND引脚接开发板GND

R

红灯引脚 高电平亮 单片机引脚电流不够建议上拉

G

绿灯引脚 高电平亮 单片机引脚电流不够建议上拉

B

蓝灯引脚 高电平亮 单片机引脚电流不够建议上拉

三、PWM驱动说明

        时序:

          PWM信号占空比0-100% 周期可根据需要调整

2371e13758824587b98257659e80b2bf.png

        代码:

                STC89C52RC

                用定时器产生3路PWM信号

void tim0() interrupt 1
{
	TL0 = 0xD2;		//设置定时初始值
	TH0 = 0xFF;		//设置定时初始值

	times++;
	if(times<=Duty_R)
	{
	   Pwm_R=1;
	}
	else
	{
	   Pwm_R=0;
	} 

	
	if(times<=Duty_G)
	{
	   Pwm_G=1;
	}
	else
	{
	   Pwm_G=0;
	} 

	if(times<=Duty_B)
	{
	   Pwm_B=1;
	}
	else
	{
	   Pwm_B=0;
	} 

}

                STM32F103C8T6

        使用硬件PWM信号发生 4路PWM输出可选任意三路

/* ----------------   PWM信号 周期和占空比的计算--------------- */
// ARR :自动重装载寄存器的值
// CLK_cnt:计数器的时钟,等于 Fck_int / (psc+1) = 72M/(psc+1)
// PWM 信号的周期 T = ARR * (1/CLK_cnt) = ARR*(PSC+1) / 72M
// 占空比P=CCR/(ARR+1)

static void GENERAL_TIM_Mode_Config(void)
{
  // 开启定时器时钟,即内部时钟CK_INT=72M
	GENERAL_TIM_APBxClock_FUN(GENERAL_TIM_CLK,ENABLE);

/*--------------------时基结构体初始化-------------------------*/
	// 配置周期,这里配置为100K
	
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	// 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
	TIM_TimeBaseStructure.TIM_Period=GENERAL_TIM_Period;	
	// 驱动CNT计数器的时钟 = Fck_int/(psc+1)
	TIM_TimeBaseStructure.TIM_Prescaler= GENERAL_TIM_Prescaler;	
	// 时钟分频因子 ,配置死区时间时需要用到
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;		
	// 计数器计数模式,设置为向上计数
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;		
	// 重复计数器的值,没用到不用管
	TIM_TimeBaseStructure.TIM_RepetitionCounter=0;	
	// 初始化定时器
	TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);

	/*--------------------输出比较结构体初始化-------------------*/	
	// 占空比配置
	uint16_t CCR1_Val = 0;
	uint16_t CCR2_Val = 0;
	uint16_t CCR3_Val = 0;
	uint16_t CCR4_Val = 0;
	
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	// 配置为PWM模式1
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	// 输出使能
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	// 输出通道电平极性配置	
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	
	// 输出比较通道 1
	TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
	TIM_OC1Init(GENERAL_TIM, &TIM_OCInitStructure);
	TIM_OC1PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);
	
	// 输出比较通道 2
	TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
	TIM_OC2Init(GENERAL_TIM, &TIM_OCInitStructure);
	TIM_OC2PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);
	
	// 输出比较通道 3
	TIM_OCInitStructure.TIM_Pulse = CCR3_Val;
	TIM_OC3Init(GENERAL_TIM, &TIM_OCInitStructure);
	TIM_OC3PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);
	
	// 输出比较通道 4
	TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
	TIM_OC4Init(GENERAL_TIM, &TIM_OCInitStructure);
	TIM_OC4PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);
	
	// 使能计数器
	TIM_Cmd(GENERAL_TIM, ENABLE);
}

四、部分代码说明

        接线说明

        需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改

                1.1、STC89C52RC+RGB模块

sbit Pwm_R=P1^0;
sbit Pwm_G=P1^1;
sbit Pwm_B=P1^2;

                1.2、STM32F103C8T6+RGB模块

/************通用定时器TIM参数定义,只限TIM2、3、4、5************/
// 当使用不同的定时器的时候,对应的GPIO是不一样的,这点要注意
// 我们这里默认使用TIM3

#define            GENERAL_TIM                   TIM3
#define            GENERAL_TIM_APBxClock_FUN     RCC_APB1PeriphClockCmd
#define            GENERAL_TIM_CLK               RCC_APB1Periph_TIM3
#define            GENERAL_TIM_Period            254//254US
#define            GENERAL_TIM_Prescaler         71
// TIM3 输出比较通道1
#define            GENERAL_TIM_CH1_GPIO_CLK      RCC_APB2Periph_GPIOA
#define            GENERAL_TIM_CH1_PORT          GPIOA
#define            GENERAL_TIM_CH1_PIN           GPIO_Pin_6

// TIM3 输出比较通道2
#define            GENERAL_TIM_CH2_GPIO_CLK      RCC_APB2Periph_GPIOA
#define            GENERAL_TIM_CH2_PORT          GPIOA
#define            GENERAL_TIM_CH2_PIN           GPIO_Pin_7

// TIM3 输出比较通道3
#define            GENERAL_TIM_CH3_GPIO_CLK      RCC_APB2Periph_GPIOB
#define            GENERAL_TIM_CH3_PORT          GPIOB
#define            GENERAL_TIM_CH3_PIN           GPIO_Pin_0

// TIM3 输出比较通道4
#define            GENERAL_TIM_CH4_GPIO_CLK      RCC_APB2Periph_GPIOB
#define            GENERAL_TIM_CH4_PORT          GPIOB
#define            GENERAL_TIM_CH4_PIN           GPIO_Pin_1

五、相关资料链接

  1. STC89C52RC程序下载 直戳跳转
  2. STM32F103C8T6程序下载
    1. 串口下载                直戳跳转 
    2. ST-LINK下载             直戳跳转
    3. J-LINK下载              直戳跳转
    4. DAP-LINK下载            直戳跳转

六、视频效果展示与程序资料获取

        视频连接    直戳跳转

        资料获取            ( 滑到最后添加群号看公告免费获取) 

七、项目所有材料清单

STC89C52RC驱动方案

图片        

STM32F103C8T6驱动方案

图片

备注

K_A01_002

STC89C52RC系统板X1

f2d8f20cc9b648e48b30e3f4651d5e20.jpeg

STM32F103C8T6系统板X1

1、STM32系统板两根Micro USB线一根用于J-LINK下载器,另一根用于给系统板供电

2、杜邦线建议不用太长的

RGB模块X1

bb31de502e5d4b47adc3c1bbd00b98b6.jpeg

RGB模块X1

Micro USB线X1

f6c0418bede64dd9a0c293fe035f3661.jpeg

Micro USB线X2

母母杜邦线X4

cc4e976b4ed5483f9b831c3b39b4f9f8.jpeg

母母杜邦线X4

J-LINK下载器

         

八、注意事项

  1. VCC GND请勿接反,接反易烧
  2. 显示异常时,排除接线接触不良

九、接线表格

单片机型号

模块

对应引脚(上:模块引脚 下:单片机引脚)

STM32F103

C8T6

RGB模块

GND

R

G

B

GND

PA6

PA7

PB0

STC89C52RC

RGB模块

GND

R

G

B

GND

P1.0

P1.1

P1.2