找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4398|回复: 4
打印 上一主题 下一主题
收起左侧

stc单片机控制4引脚Ws2812b RGB灯(VSS VDD DIN DOUT)完整纯净驱动程序

  [复制链接]
跳转到指定楼层
楼主
800ns 400ns  可通过示波器进行自主调节,简单易用易学
单片机源程序如下:
  1. #include <STC8.H>
  2. #include "intrins.h"

  3. sbit ws2812b_IO=P3^3;  //控制WS2812数据输出口
  4. u8 Loop_Speed=120; //流水灯延时变量
  5. unsigned char bdata LED_DAT; //可位操作的数据发送缓存变量

  6. sbit bit0=LED_DAT^0; //被发送数据的各位定义
  7. sbit bit1=LED_DAT^1;
  8. sbit bit2=LED_DAT^2;
  9. sbit bit3=LED_DAT^3;
  10. sbit bit4=LED_DAT^4;
  11. sbit bit5=LED_DAT^5;
  12. sbit bit6=LED_DAT^6;
  13. sbit bit7=LED_DAT^7;

  14. //*******************发送1码**********************// 1, 18n ,0,6n              //STC烧录器设置24M,,,不同单片机 选择不同个数的NOP。
  15. //一个)_NOP_()为40ns 高码850ns低码400ns
  16. #define CODE_1 {ws2812b_IO=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();ws2812b_IO=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}            

  17.         //*******************发送0码**********************//1 ,9n,0,15n
  18. //一个)_NOP_()为40ns 高码400ns低码850ns
  19. #define CODE_0 {ws2812b_IO=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();ws2812b_IO=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}     

  20. void SendData(u8 dat)
  21. {
  22.         LED_DAT = dat;
  23.         if(bit7==1){CODE_1} else{CODE_0}
  24.         if(bit6==1){CODE_1} else{CODE_0}
  25.         if(bit5==1){CODE_1} else{CODE_0}
  26.         if(bit4==1){CODE_1} else{CODE_0}
  27.         if(bit3==1){CODE_1} else{CODE_0}
  28.         if(bit3==1){CODE_1} else{CODE_0}
  29.         if(bit1==1){CODE_1} else{CODE_0}
  30.         if(bit0==1){CODE_1} else{CODE_0}

  31. }

  32. void ON_LED(u8 GG,u8 RR,u8 BB)// 先绿色 后红  后蓝  
  33. {        
  34.                         SendData(GG);   
  35.                         SendData(RR);
  36.                         SendData(BB);        
  37. }

  38. void Delay1ms(u16 k)                //@24.000MHz       Delay1ms(50);//实测50ms
  39. {
  40.         unsigned char i, j, m;
  41.         for(m=0;m<k;m++)
  42.         {
  43.                 _nop_();
  44.                 i = 32;
  45.                 j = 40;
  46.                 do
  47.                 {
  48.                         while (--j);
  49.                 } while (--i);
  50.         }
  51. }

  52. void Delay1us(u16 v)                //@24.000MHz      Delay1us(50);//重置最小时间,实测60us
  53. {
  54.         unsigned char i ,m;
  55.         for(m=0;m<v;m++)
  56.         {
  57.                 i = 6;
  58.                 while (--i);
  59.         }
  60. }

  61. void init ()
  62. {
  63.           P3M0=0;
  64.                 P3M1=0;
  65.                 P5M0=0;
  66.                 P5M1=0;
  67. }

  68. void main()
  69. {
  70.         init();
  71.         while(1)
  72.         {
  73.                 ON_LED(0X00,0XFF,0X00);//一行代码对应一个灯, 三个255数字对应3灯亮度,可以组合任意颜色 ,重置发送数据时间间隔  Delay1us(50);就重新从第一个地址为发送。
  74.                 ON_LED(0X00,0XFF,0X00);
  75.                 ON_LED(0X00,0XFF,0X00);
  76.                 ON_LED(0X00,0XFF,0X00);
  77.                 ON_LED(0X00,0XFF,0X00);
  78.                
  79.                 ON_LED(0X00,0X00,0XFF);
  80.                 ON_LED(0X00,0X00,0XFF);
  81.                 ON_LED(0X00,0X00,0XFF);
  82.                 ON_LED(0X00,0X00,0XFF);
  83.                 ON_LED(0X00,0X00,0XFF);
  84.                
  85.                 ON_LED(0XFF,0X00,0X00);
  86.                 ON_LED(0XFF,0X00,0X00);
  87.                 ON_LED(0XFF,0X00,0X00);
  88.                 ON_LED(0XFF,0X00,0X00);
  89.                 ON_LED(0XFF,0X00,0X00);
  90.                
  91.                 ON_LED(0X00,0XFF,0XFF);
  92.                 ON_LED(0X00,0XFF,0XFF);
  93.                 ON_LED(0X00,0XFF,0XFF);
  94.                 ON_LED(0X00,0XFF,0XFF);
  95.                 ON_LED(0X00,0XFF,0XFF);
  96.                 while(1);
  97.         }


  98. }

复制代码


企业51hei截图_16366951833416.png (34.87 KB, 下载次数: 79)

企业51hei截图_16366951833416.png

企业51hei截图_16366951983577.png (42.38 KB, 下载次数: 73)

企业51hei截图_16366951983577.png

评分

参与人数 3黑币 +77 收起 理由
catlu + 12
lkc8210 + 15 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏21 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:418515 发表于 2022-8-9 22:44 | 只看该作者
这个比较精确
回复

使用道具 举报

板凳
ID:64089 发表于 2022-9-19 15:32 | 只看该作者
经测试非常好用,学习到了,不过设置成1T的时候需要在>6M时再自己测试一下时间间隔,谢谢分享!
回复

使用道具 举报

地板
ID:1038987 发表于 2023-4-16 20:37 | 只看该作者
这个代码应该好研究。谢谢
回复

使用道具 举报

5#
ID:807361 发表于 2024-4-28 22:32 | 只看该作者
这个代码应该好研究。谢谢
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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