K_A01_002 基于单片机驱动RGB模块颜色渐变显示
目录
一、程序功能说明
单片机型号 | 测试条件 | 模块名称 | 代码功能 |
STC89C52RC | 1.晶振11.0592M | RGB模块 | 1、RGB模块彩灯渐变 |
STM32F103C8T6 | 1、晶振8M 2、系统时钟72M | RGB模块 |
二、基本参数
1、参数
2、模块引脚说明
RGB模块引脚 | 引脚说明 |
GND | GND引脚接开发板GND |
R | 红灯引脚 高电平亮 单片机引脚电流不够建议上拉 |
G | 绿灯引脚 高电平亮 单片机引脚电流不够建议上拉 |
B | 蓝灯引脚 高电平亮 单片机引脚电流不够建议上拉 |
三、PWM驱动说明
时序:
PWM信号占空比0-100% 周期可根据需要调整
代码:
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
五、相关资料链接
- STC89C52RC程序下载 直戳跳转
- STM32F103C8T6程序下载
- 串口下载 直戳跳转
- ST-LINK下载 直戳跳转
- J-LINK下载 直戳跳转
- DAP-LINK下载 直戳跳转
六、视频效果展示与程序资料获取
视频连接 直戳跳转
资料获取 ( 滑到最后添加群号看公告免费获取)
七、项目所有材料清单
STC89C52RC驱动方案 | 图片 | STM32F103C8T6驱动方案 | 图片 | 备注 K_A01_002 |
STC89C52RC系统板X1 | ![]() | STM32F103C8T6系统板X1 | ![]() | 1、STM32系统板两根Micro USB线一根用于J-LINK下载器,另一根用于给系统板供电 2、杜邦线建议不用太长的 |
RGB模块X1 | ![]() | RGB模块X1 | ![]() | |
Micro USB线X1 | ![]() | Micro USB线X2 | ![]() | |
母母杜邦线X4 | ![]() | 母母杜邦线X4 | ![]() | |
J-LINK下载器 | ![]() |
八、注意事项
- VCC GND请勿接反,接反易烧
- 显示异常时,排除接线接触不良
九、接线表格
单片机型号 | 模块 | 对应引脚(上:模块引脚 下:单片机引脚) | |||
STM32F103 C8T6 | RGB模块 | GND | R | G | B |
GND | PA6 | PA7 | PB0 | ||
STC89C52RC | RGB模块 | GND | R | G | B |
GND | P1.0 | P1.1 | P1.2 |
相关文章
- 未来的智能嵌入式设备将由 Java 驱动
- 管理平台与黑科技双轮驱动,华为云让混合云管理更简单
- MSP430FR6972驱动模块模组调试
- 没有技术驱动型公司 | 每个人都得加班 | 关注软技能
- 【刷题】面筋-测开-驱动模块和桩模块
- 大数据在企业中发挥的作用,以及如何驱动企业创新
- 第三方驱动备份与还原
- 提升N倍!如何用技术驱动企业提效?
- 【刷题】面筋-测开-驱动模块和桩模块
- 领域驱动设计(DDD)的实践经验分享之持久化透明
- 168. 用 SAP UI5 Select 控件(下拉列表),来驱动表格控件(Table)刷新的一个实战例子
- SD等存储设备驱动常用调试方法
- android 键盘驱动编写
- Qt数据库驱动层
- 【四旋翼飞行器】约束驱动的生产线植绒方法:V形作为节能策略研究(Matlab代码实现)
- usb 驱动
- 嵌入式Linux,cat1模组,EC200S-CN内核驱动开发
- EXSI自定义第三方驱动生成镜像——筑梦之路
- 自动化测试架构设计 &&自动化持续集成测试任务实战[线性测试、模块驱动测试、数据驱动测试、关键字驱动测试]
- SiC MOSFET驱动电压的分析
- 驱动代码使用Makefile的宏
- 驱动模块传参
- S090-针对车载系统电气化应用的电磁阀和电机驱动模块