数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 49|回复: 0

[C51] STC8H驱动单颗WS2812(PWM模式)

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
自制的板子单片机用STC8H8K64U-SOP16,WS2812b接的是P10(PWM1P),系统频率为24MHz。
PWM初始化:
  1. void PWMA_config(void)//PWM模式初始化
  2. {

  3.         P_SW2 |= 0x80;               
  4.         PWMA_PSCR = 0;        
  5.         PWMA_CCMR1  =  0x70;               
  6.         PWMA_CCER1  = 0x05;        
  7.         PWMA_ENO   |= 0x01;               
  8.         PWMA_PS |= 0x00;                                                // 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
  9.         PWMA_ARR = 30;         
  10.         PWMA_CCR1   = 8;        
  11.         PWMA_BKR    = 0x80;               
  12.         PWMA_CR1    = 0x88;               
  13. }
复制代码
发送八位数据:
  1. void SendData(u8 dat)
  2. {
  3.         u8 i;
  4.         for(i=0;i<8;i++)
  5.         {
  6.                 if(dat & 0x80)
  7.                         PWMA_CCR1   = 7;               
  8.                 else
  9.                         PWMA_CCR1   = 23;               
  10.                 PWMA_CR1    |= 0x01;  
  11.                 dat = dat<<1;
  12.                 while(PWMA_CR1 &0x01);        
  13.         }
  14. }
复制代码



发送24位数据:

  1. void WS2812_rand_color(u8 R,u8 G,u8 B)
  2. {
  3.         SendData(G);
  4.         SendData(R);
  5.         SendData(B);
  6. }
复制代码
延时函数:
  1. void delay_ms(unsigned int ms)   //@24.000MHz
  2. {
  3.          unsigned int i;
  4.     do
  5.     {
  6.         i=24000000/10000;                //STC8
  7.          while(--i)        ;
  8.             }
  9.     while(--ms);
  10.                     
  11. }
复制代码
主函数:
  1. void main(void)
  2. {
  3.     PWMA_config(); // 初始化
  4.     while(1)
  5.     {
  6.                         WS2812_rand_color(1,0,0);
  7.                         delay_ms(500);
  8.                         WS2812_rand_color(0,1,0);
  9.                         delay_ms(500);
  10.                         WS2812_rand_color(0,0,1);
  11.                         delay_ms(500);                        
  12.     }
  13. }
复制代码
欢迎各位大神赐教,谢谢!
2026.7.17



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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|数码之家-技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-7-17 13:56 , Processed in 0.062401 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

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