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

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

[复制链接]
  • TA的每日心情
    开心
    15 小时前
  • 签到天数: 168 天

    [LV.7]常住居民III

    67

    主题

    848

    回帖

    2844

    积分

    金牌会员

    积分
    2844
    发表于 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, 下载次数: 9

    回复 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-13 23:54 , Processed in 0.054450 second(s), 31 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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