STC8H1K17T-TSSOP20系列实验之六----用PWM驱动ws2812
本帖最后由 xxkj2010 于 2024-1-23 19:38 编辑代码完全是参考坛友发表的文章 https://www.stcaimcu.com/forum.p ... 2812&extra=#pid1745
原代码用的是PWM2,而本例中使用的是PWM8。
主要代码:
void PWMB_config(void)
{
P_SW2 |= 0x80; //SFR enable
//PWM8配置
PWMB_CCMR4= 0x60; // 通道模式配置, PWM模式1, 预装载允许
PWMB_CCER2 = 0x30; // 开启比较输出, 高电平有效
PWMB_ENO |= 0x40; //0100 0000ENO8P
PWMB_PS |= (1<<6); // 选择P3.4
PWMB_ARR = 30; // 控制PWM周期
PWMB_CCR4 = 8; // 控制占空比(高电平时钟数)
PWMB_BKR = 0x80; // 主输出使能
PWMB_CR1 = 0x88; // 单次脉冲
}
void WS2812_WriteByte(u8 dat)
{
u8 i;
for(i=0;i<8;i++)
{
if(dat & 0x80)
PWMB_CCR4 = 8;
else
PWMB_CCR4 = 22;
PWMB_CR1 |= 0x01;
dat = dat<<1;
while(PWMB_CR1 &0x01);
}
}
void WS2812_Rand_color(u8 R,u8 G,u8 B)
{
WS2812_WriteByte(R);
WS2812_WriteByte(G);
WS2812_WriteByte(B);
}测试效果:
页:
[1]