本帖最后由 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 0000 ENO8P
- 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);
- }
复制代码
测试效果:
|