找回密码
 立即注册
查看: 540|回复: 0

STC8H1K17T-TSSOP20系列实验之六----用PWM驱动ws2812

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2025-05-02 09:38:13

109

主题

1900

回帖

5214

积分

论坛元老

积分
5214
发表于 2024-1-23 19:31:34 | 显示全部楼层 |阅读模式
本帖最后由 xxkj2010 于 2024-1-23 19:38 编辑

代码完全是参考坛友发表的文章 https://www.stcaimcu.com/forum.p ... 2812&extra=#pid1745

原代码用的是PWM2,而本例中使用的是PWM8。
主要代码:
  1. void PWMB_config(void)
  2. {
  3.         P_SW2 |= 0x80;                //SFR enable   
  4. //PWM8配置
  5.         PWMB_CCMR4  = 0x60;                // 通道模式配置, PWM模式1, 预装载允许
  6.         PWMB_CCER2 = 0x30;                // 开启比较输出, 高电平有效
  7.         PWMB_ENO   |= 0x40;                //0100 0000  ENO8P
  8.         PWMB_PS    |= (1<<6);        // 选择P3.4
  9.         PWMB_ARR = 30;        // 控制PWM周期  
  10.         PWMB_CCR4   = 8;                // 控制占空比(高电平时钟数)        
  11. PWMB_BKR    = 0x80;                // 主输出使能
  12.         PWMB_CR1    = 0x88;                // 单次脉冲
  13. }
  14. void WS2812_WriteByte(u8 dat)
  15. {
  16.         u8 i;
  17.         for(i=0;i<8;i++)
  18.         {
  19.                 if(dat & 0x80)
  20.                         PWMB_CCR4   = 8;
  21.                 else
  22.                         PWMB_CCR4   = 22;
  23.                 PWMB_CR1    |= 0x01;
  24.                 dat = dat<<1;
  25.                 while(PWMB_CR1 &0x01);
  26.         }
  27. }
  28. void WS2812_Rand_color(u8 R,u8 G,u8 B)
  29. {
  30.         WS2812_WriteByte(R);
  31.         WS2812_WriteByte(G);
  32.         WS2812_WriteByte(B);
  33. }
复制代码
测试效果:

20240123.mp4

14.81 MB, 下载次数: 68

回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 12:43 , Processed in 0.127933 second(s), 48 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表