找回密码
 立即注册

QQ登录

只需一步,快速开始

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

WS2811灯光系统单片机程序 22路全彩控制器

  [复制链接]
跳转到指定楼层
楼主
WS2811灯光程序,单片机22路全彩控制器.
1、从左往右扫
2、从右往左扫
3、从中间向两边扫
4、从两边向中间扫
单片机源程序如下:
  1. #include "includes.h"
  2. //T_POINT idata szPoint[20];

  3. #if 0
  4.                 DelayN10ms(100);
  5.                 pt.r=10;pt.g=0,pt.b=0;
  6.                 memcpy(&szPoint[0],&pt,sizeof(T_POINT));
  7.                 pt.r=0;pt.g=10,pt.b=0;
  8.                 memcpy(&szPoint[1],&pt,sizeof(T_POINT));
  9.                 pt.r=0;pt.g=0,pt.b=10;
  10.                 memcpy(&szPoint[2],&pt,sizeof(T_POINT));
  11.                 WS2811_Setout(&szPoint,3);
  12. #endif


  13. T_POINT code Design2[]=
  14. {
  15. #if 1
  16.         {255,0,42},
  17.         {255,0,78},
  18.         {255,0,184},
  19.         {248,0,255},
  20.         {177,0,255},

  21.         {71,0,255},
  22.         {0,42,255},
  23.         {0,113,255},
  24.         {0,184,255},
  25.         {0,220,255},

  26.         {0,255,255},
  27.         {0,255,213},
  28.         {0,255,142},
  29.         {78,255,71},
  30.         {149,255,0},

  31.         {220,255,0},
  32.         {255,213,0},
  33.         {255,177,0},
  34.         {255,71,0},
  35.         {255,0,0},
  36. #else
  37.         {10,0,0},
  38.         {0,10,0},
  39.         {0,0,10},
  40.         {10,0,0},
  41.         {0,10,0},
  42.         {0,0,10},
  43.         {10,0,0},
  44.         {0,10,0},
  45.         {0,0,10},
  46.         {10,0,0},
  47.         {0,10,0},
  48.         {0,0,10},
  49.         {10,0,0},
  50.         {0,10,0},
  51.         {0,0,10},
  52.         {10,0,0},
  53.         {0,10,0},
  54.         {0,0,10},
  55.         {10,0,0},
  56.         {0,10,0},

  57. #endif
  58. };

  59. T_POINT code Design[]=
  60. {
  61.         {255,0,0},
  62.         {255,0,10},
  63.         {255,0,20},
  64.         {255,0,30},
  65.         {255,0,42},
  66.         {255,0,50},
  67.         {255,0,58},
  68.         {255,0,66},
  69.         {255,0,72},
  70.         {255,0,78},
  71.         {255,0,90},
  72.         {255,0,110},
  73.         {255,0,130},
  74.         {255,0,150},
  75.         {255,0,184},
  76.         {245,0,200},
  77.         {230,0,215},
  78.         {222,0,230},
  79.         {200,0,238},
  80.         {190,0,245},
  81.         {177,0,255},
  82.         {160,0,255},
  83.         {140,0,255},
  84.         {130,0,255},
  85.         {120,0,255},
  86.         {110,0,255},
  87.         {100,0,255},
  88.         {95,0,255},
  89.         {85,0,255},
  90.         {71,0,255},
  91.         {56,8,255},
  92.         {40,16,255},
  93.         {30,24,255},
  94.         {20,32,255},
  95.         {10,36,255},
  96.         {0,42,255},
  97.         {0,57,255},
  98.         {0,72,255},
  99.         {0,87,255},
  100.         {0,95,255},
  101.         {0,98,255},
  102.         {0,102,255},
  103.         {0,113,255},
  104.         {0,184,255},
  105.         {0,190,255},
  106.         {0,200,255},
  107.         {0,210,255},
  108.         {0,220,255},
  109.         {0,230,255},
  110.         {0,240,255},
  111.         {0,255,255},
  112.         {0,255,245},
  113.         {0,255,235},
  114.         {0,255,225},
  115.         {0,255,215},
  116.         {0,255,200},
  117.         {0,255,190},
  118.         {0,255,180},
  119.         {0,255,170},
  120.         {10,255,160},
  121.         {20,255,150},
  122.         {30,255,140},
  123.         {40,255,130},
  124.         {50,255,120},
  125.         {60,255,110},
  126.         {70,255,100},
  127.         {78,255,90},
  128.         {90,255,80},
  129.         {95,255,71},
  130.         {100,255,60},
  131.         {105,255,50},
  132.         {110,255,40},
  133.         {120,255,30},
  134.         {130,255,20},
  135.         {140,255,10},
  136.         {149,255,0},
  137.         {160,255,0},
  138.         {170,255,0},
  139.         {180,255,0},
  140.         {190,255,0},
  141.         {200,255,0},
  142.         {210,255,0},
  143.         {220,255,0},
  144.         {230,245,0},
  145.         {240,235,0},
  146.         {245,225,0},
  147.         {255,213,0},
  148.         {255,208,0},
  149.         {255,200,0},
  150.         {255,190,0},
  151.         {255,180,0},
  152.         {255,177,0},
  153.         {255,170,0},
  154.         {255,160,0},
  155.         {255,150,0},
  156.         {255,140,0},
  157.         {255,130,0},
  158.         {255,120,0},
  159.         {255,110,0},
  160.         {255,100,0},
  161.         {255,90,0},
  162.         {255,80,0},
  163.         {255,75,0},
  164.         {255,60,0},
  165.         {255,50,0},
  166.         {255,40,0},
  167.         {255,30,0},
  168.         {255,20,0},
  169.         {255,10,0},
  170.         {255,0,0},
  171. };
  172. void WS2811_Setout2(int index)
  173. {//748
  174.         int k=10;
  175.         uchar cnt=0;
  176.         while(1)
  177.         {
  178.                 WS2811_SendByte(Design[index].r);
  179.                 WS2811_SendByte(Design[index].b);
  180.                 WS2811_SendByte(Design[index].g);
  181.                 index++;
  182.                 if(index==110)
  183.                 {
  184.                         index=0;
  185.                 }
  186.                 if(++cnt==110)
  187.                 {
  188.                         break;
  189.                 }
  190.         }
  191.         IO_DIN=1;
  192.         IO_DIN=0;
  193.         while(k--)
  194.         {
  195.                 _nop_();               
  196.         }
  197. }
  198. void WS2811_Setout4(int index)
  199. {//748
  200.         int k=10;
  201.         uchar cnt=0;
  202.         while(1)
  203.         {
  204.                 WS2811_SendByte(Design[index].r);
  205.                 WS2811_SendByte(Design[index].b);
  206.                 WS2811_SendByte(Design[index].g);
  207.                 index+=2;
  208.                 if(index>=110)
  209.                 {
  210.                         index=0;
  211.                 }
  212.                 if(++cnt==55)
  213.                 {
  214.                         break;
  215.                 }
  216.         }
  217.         cnt=0;
  218.         while(1)
  219.         {
  220.                 WS2811_SendByte(Design[index].r);
  221.                 WS2811_SendByte(Design[index].b);
  222.                 WS2811_SendByte(Design[index].g);
  223.                 index-=2;
  224.                 if(index<0)
  225.                 {
  226.                         index=109;
  227.                 }
  228.                 if(++cnt==55)
  229.                 {
  230.                         break;
  231.                 }
  232.         }
  233.         IO_DIN=1;
  234.         IO_DIN=0;
  235.         while(k--)
  236.         {
  237.                 _nop_();               
  238.         }
  239. }

  240. void WS2811_Setout3(int index)
  241. {//748
  242.         int k=10;
  243.         uchar cnt=0,n;
  244.        
  245. //        while(1)
  246.         {
  247.                 //----------------
  248.                 for(n=0;n<4;n++)
  249.                 {
  250.                         WS2811_SendByte(Design2[index].r);
  251.                         WS2811_SendByte(Design2[index].b);
  252.                         WS2811_SendByte(Design2[index].g);
  253.                 }
  254.                 if(++index==20)
  255.                 {
  256.                         index=0;
  257.                 }
  258.                 //----------------
  259.                 for(n=0;n<4;n++)
  260.                 {
  261.                         WS2811_SendByte(Design2[index].r);
  262.                         WS2811_SendByte(Design2[index].b);
  263.                         WS2811_SendByte(Design2[index].g);
  264.                 }
  265.                 if(++index==20)
  266.                 {
  267.                         index=0;
  268.                 }
  269.                 //----------------
  270.                 for(n=0;n<3;n++)
  271.                 {
  272.                         WS2811_SendByte(Design2[index].r);
  273.                         WS2811_SendByte(Design2[index].b);
  274.                         WS2811_SendByte(Design2[index].g);
  275.                 }
  276.                 if(++index==20)
  277.                 {
  278.                         index=0;
  279.                 }
  280.                 //----------------
  281.                 for(n=0;n<3;n++)
  282.                 {
  283.                         WS2811_SendByte(Design2[index].r);
  284.                         WS2811_SendByte(Design2[index].b);
  285.                         WS2811_SendByte(Design2[index].g);
  286.                 }
  287.                 if(++index==20)
  288.                 {
  289.                         index=0;
  290.                 }
  291.                 //----------------
  292.                 for(n=0;n<3;n++)
  293.                 {
  294.                         WS2811_SendByte(Design2[index].r);
  295.                         WS2811_SendByte(Design2[index].b);
  296.                         WS2811_SendByte(Design2[index].g);
  297.                 }
  298.                 if(++index==20)
  299.                 {
  300.                         index=0;
  301.                 }
  302.                 //----------------
  303.                 for(n=0;n<2;n++)
  304.                 {
  305.                         WS2811_SendByte(Design2[index].r);
  306.                         WS2811_SendByte(Design2[index].b);
  307.                         WS2811_SendByte(Design2[index].g);
  308.                 }
  309.                 if(++index==20)
  310.                 {
  311.                         index=0;
  312.                 }
  313.                 //----------------
  314.                 for(n=0;n<2;n++)
  315.                 {
  316.                         WS2811_SendByte(Design2[index].r);
  317.                         WS2811_SendByte(Design2[index].b);
  318.                         WS2811_SendByte(Design2[index].g);
  319.                 }
  320.                 if(++index==20)
  321.                 {
  322.                         index=0;
  323.                 }
  324.                 //----------------
  325.                 for(n=0;n<2;n++)
  326.                 {
  327.                         WS2811_SendByte(Design2[index].r);
  328.                         WS2811_SendByte(Design2[index].b);
  329.                         WS2811_SendByte(Design2[index].g);
  330.                 }
  331.                 if(++index==20)
  332.                 {
  333.                         index=0;
  334.                 }
  335.                 //----------------
  336.                 for(n=0;n<2;n++)
  337.                 {
  338.                         WS2811_SendByte(Design2[index].r);
  339.                         WS2811_SendByte(Design2[index].b);
  340.                         WS2811_SendByte(Design2[index].g);
  341.                 }
  342.                 if(++index==20)
  343.                 {
  344.                         index=0;
  345.                 }
  346.                 //----------------
  347.                 for(n=0;n<2;n++)
  348.                 {
  349.                         WS2811_SendByte(Design2[index].r);
  350.                         WS2811_SendByte(Design2[index].b);
  351.                         WS2811_SendByte(Design2[index].g);
  352.                 }
  353.                 if(++index==20)
  354.                 {
  355.                         index=0;
  356.                 }
  357.                 //----------------
  358.                 for(n=0;n<2;n++)
  359.                 {
  360.                         WS2811_SendByte(Design2[index].r);
  361.                         WS2811_SendByte(Design2[index].b);
  362.                         WS2811_SendByte(Design2[index].g);
  363.                 }
  364.                 if(++index==20)
  365.                 {
  366.                         index=0;
  367.                 }
  368.                 //----------------
  369.                 for(n=0;n<2;n++)
  370.                 {
  371.                         WS2811_SendByte(Design2[index].r);
  372.                         WS2811_SendByte(Design2[index].b);
  373.                         WS2811_SendByte(Design2[index].g);
  374.                 }
  375.                 if(++index==20)
  376.                 {
  377.                         index=0;
  378.                 }
  379.                 //----------------
  380.                 for(n=0;n<5;n++)
  381.                 {
  382.                         WS2811_SendByte(Design2[index].r);
  383.                         WS2811_SendByte(Design2[index].b);
  384.                         WS2811_SendByte(Design2[index].g);
  385.                 }
  386.                 if(++index==20)
  387.                 {
  388.                         index=0;
  389.                 }
  390.                 //----------------
  391.                 for(n=0;n<8;n++)
  392.                 {
  393.                         WS2811_SendByte(Design2[index].r);
  394.                         WS2811_SendByte(Design2[index].b);
  395.                         WS2811_SendByte(Design2[index].g);
  396.                 }
  397.                 if(++index==20)
  398.                 {
  399.                         index=0;
  400.                 }
  401.                 //----------------
  402.                 for(n=0;n<7;n++)
  403.                 {
  404.                         WS2811_SendByte(Design2[index].r);
  405.                         WS2811_SendByte(Design2[index].b);
  406.                         WS2811_SendByte(Design2[index].g);
  407.                 }
  408.                 if(++index==20)
  409.                 {
  410.                         index=0;
  411.                 }
  412.                 //----------------
  413.                 for(n=0;n<7;n++)
  414.                 {
  415.                         WS2811_SendByte(Design2[index].r);
  416.                         WS2811_SendByte(Design2[index].b);
  417.                         WS2811_SendByte(Design2[index].g);
  418.                 }
  419.                 if(++index==20)
  420.                 {
  421.                         index=0;
  422.                 }
  423.                 //----------------
  424.                 for(n=0;n<5;n++)
  425.                 {
  426.                         WS2811_SendByte(Design2[index].r);
  427.                         WS2811_SendByte(Design2[index].b);
  428.                         WS2811_SendByte(Design2[index].g);
  429.                 }
  430.                 if(++index==20)
  431.                 {
  432.                         index=0;
  433.                 }
  434.                 //----------------
  435.                 for(n=0;n<4;n++)
  436.                 {
  437.                         WS2811_SendByte(Design2[index].r);
  438.                         WS2811_SendByte(Design2[index].b);
  439.                         WS2811_SendByte(Design2[index].g);
  440.                 }
  441.                 if(++index==20)
  442.                 {
  443.                         index=0;
  444.                 }
  445.                 //----------------
  446.                 for(n=0;n<3;n++)
  447.                 {
  448.                         WS2811_SendByte(Design2[index].r);
  449.                         WS2811_SendByte(Design2[index].b);
  450.                         WS2811_SendByte(Design2[index].g);
  451.                 }
  452.                 if(++index==20)
  453.                 {
  454.                         index=0;
  455.                 }
  456.                 //----------------
  457.                 //for(n=0;n<1;n++)
  458.                 {
  459.                         WS2811_SendByte(Design2[index].r);
  460.                         WS2811_SendByte(Design2[index].b);
  461.                         WS2811_SendByte(Design2[index].g);
  462.                 }



  463.         }
  464.         IO_DIN=1;
  465.         IO_DIN=0;
  466.         while(k--)
  467.         {
  468.                 _nop_();               
  469.         }
  470. }

  471. ucharc SPEED1[]={10,8, 6, 4,2,0};
  472. ucharc SPEED[]= {20,15,10,6,2,0};
  473. void main(void)
  474. {
  475.         int ind=19;
  476.         uchar cnt;
  477.     Init_Data();                // 初始化各种端口和数据
  478.     while(1)
  479.     {
  480. #if 1
  481. /*
  482. 1、从左往右扫
  483. 2、从右往左扫
  484. 3、从中间向两边扫
  485. 4、从两边向中间扫
  486. */
  487.                 for(cnt=0;cnt<3;cnt++)
  488.                 {
  489.                         for(ind=0;ind<110;ind++)
  490.                         {
  491.                                 WS2811_Setout2(ind);
  492.                                 DelayN10ms(SPEED1[gSpeed]);
  493.                         }
  494.                 }
  495.                 for(cnt=0;cnt<3;cnt++)
  496.                 {
  497.                         for(ind=109;ind>=0;ind--)
  498.                         {
  499.                                 WS2811_Setout2(ind);
  500.                                 DelayN10ms(SPEED1[gSpeed]);
  501.                         }
  502.                 }
  503.                 //33333333333
  504.                 for(cnt=0;cnt<3;cnt++)
  505.                 { //3.从55-110-1-54扫描
  506.                         for(ind=55;ind<110;ind++)
  507.                         {
  508.                                 WS2811_Setout2(ind);
  509.                                 DelayN10ms(SPEED1[gSpeed]);
  510.                         }
  511.                         for(ind=0;ind<55;ind++)
  512.                         {
  513.                                 WS2811_Setout2(ind);
  514.                                 DelayN10ms(SPEED1[gSpeed]);
  515.                         }
  516.                 }
  517.                 //444444444444444
  518.                 for(cnt=0;cnt<3;cnt++)
  519.                 {  //4.从54-1-110-55扫描
  520.                         for(ind=54;ind>=0;ind--)
  521.                         {
  522. ……………………

  523. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码




源码下载:
WS2811_LEDs.zip.7z (37.95 KB, 下载次数: 295)

评分

参与人数 3黑币 +60 收起 理由
b2329164 + 5 很给力!
zlscom + 5 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:89286 发表于 2017-1-4 21:22 | 只看该作者
Thanks for sharing, i like it
回复

使用道具 举报

板凳
ID:196720 发表于 2017-5-4 22:30 | 只看该作者
刚好需要,正在学单片机呢。谢谢分享
回复

使用道具 举报

地板
ID:194871 发表于 2017-5-4 23:13 | 只看该作者
谢谢分享
回复

使用道具 举报

5#
ID:208818 发表于 2017-6-8 15:14 | 只看该作者
谢谢楼主
回复

使用道具 举报

6#
ID:212044 发表于 2017-6-17 12:18 | 只看该作者
交流一下好嘛
回复

使用道具 举报

7#
ID:212044 发表于 2017-6-17 12:39 | 只看该作者
黑币不够,非常想下载这个资源,求通过
回复

使用道具 举报

8#
ID:231659 发表于 2017-9-7 14:26 | 只看该作者
謝大大分享 剛好正在使用
回复

使用道具 举报

9#
ID:252372 发表于 2017-11-23 16:50 | 只看该作者
LZ是用的,延时的方式还是PWM输出的方式控制?
回复

使用道具 举报

10#
ID:262595 发表于 2017-12-17 19:21 | 只看该作者
可以很强
回复

使用道具 举报

11#
ID:289056 发表于 2018-3-8 10:32 | 只看该作者
开始学习了
回复

使用道具 举报

12#
ID:161115 发表于 2018-4-18 13:43 | 只看该作者
好好学习一下,感谢楼主无私的分享!
回复

使用道具 举报

13#
ID:270200 发表于 2018-4-23 13:36 | 只看该作者
给力,下载看看
回复

使用道具 举报

14#
ID:270200 发表于 2018-4-23 13:38 | 只看该作者

学习一下感谢楼主无私的分享!
回复

使用道具 举报

15#
ID:202754 发表于 2018-6-29 14:56 | 只看该作者


学习一下感谢楼主无私的分享!
回复

使用道具 举报

16#
ID:578093 发表于 2019-7-4 20:09 | 只看该作者
正在学习这个IC的用法 赞一个!
回复

使用道具 举报

17#
ID:712612 发表于 2020-3-29 23:27 | 只看该作者
Thanks for sharing, i like it
回复

使用道具 举报

18#
ID:249416 发表于 2023-9-18 22:59 | 只看该作者
谢谢坛主。学习了。
回复

使用道具 举报

19#
ID:433219 发表于 2023-9-19 14:00 | 只看该作者
  一路多少颗灯珠?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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