xxkj2010 发表于 2024-1-23 19:31:34

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]
查看完整版本: STC8H1K17T-TSSOP20系列实验之六----用PWM驱动ws2812