找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4635|回复: 44
收起左侧

WS2812BLED彩灯用STC15W204S-8单片机驱动流水灯源码

  [复制链接]
ID:63317 发表于 2022-7-24 06:14 | 显示全部楼层 |阅读模式
WS2812BLED4X4 16位彩灯用STC15W204S-8驱动流水灯源码
高手帮忙怎样改成4排同时都向左或向右逐个点亮
想做成转向灯3.3口控制右转黄色  3.2口控制左转黄色   5.4口控制全亮红色
制作出来的实物图如下:
1658616449019.jpg STC15W204S.jpg
2812.jpg
Keil代码下载: 带单片机8位全彩流水灯源码.rar (66.49 KB, 下载次数: 165)

评分

参与人数 2黑币 +62 收起 理由
catlu + 12
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:336378 发表于 2022-7-25 10:38 | 显示全部楼层
不会自已改下吗??。
回复

使用道具 举报

ID:88256 发表于 2022-7-26 00:51 | 显示全部楼层
你确定你的这个程序是可以点亮2812的吗?里面用到的DI、SNUM等都没进行定义,我才不相信编译可以通过。
如果连点亮都做不到,那么谈何花样显示?
等点亮后,学会在指定的一个2812上显示各种颜色,那么,剩下的花样编程就简单了不是吗?先脚踏实地一步步来吧,别想着一步登天。
回复

使用道具 举报

ID:88256 发表于 2022-7-26 01:22 | 显示全部楼层
不好意思!没注意到有附件,只看到贴出来的程序感觉不对。不过,贴出来的程序和附件的程序是不一样的,你这也是误导人啊。
回复

使用道具 举报

ID:63317 发表于 2022-7-26 06:31 | 显示全部楼层
cba_cba 发表于 2022-7-25 10:38
不会自已改下吗??。

呵呵没玩明白啊
回复

使用道具 举报

ID:63317 发表于 2022-7-26 06:33 | 显示全部楼层
hhdsdy 发表于 2022-7-26 00:51
你确定你的这个程序是可以点亮2812的吗?里面用到的DI、SNUM等都没进行定义,我才不相信编译可以通过。
如 ...

能编译的老师
回复

使用道具 举报

ID:88256 发表于 2022-7-26 21:51 | 显示全部楼层

看你玩单片机的时间也不短了,也不能完全照抄一点都不(会)改吧?贴出来的程序和附件的程序不同,灯数也不正确,明显是复制别人的,我搜索了一下,发现和本坛这帖是一模一样的,你好歹也得把下面的灯的数量改一下吧,还有花样数组的数量一起补上去,先完全点亮灯珠再进行下一步。
/*----------------------------灯珠串联个数设置--------------------------------*/  
#define SNUM 8

另外,得先确定灯珠在板上的排列顺序,这个程序是流水灯,在上电后就可以看到了(太快的话增加主程序56行上的延时),然后改主程序,让最右边的一列显示黄色(数组备注得很清楚),慢慢增改程序达到自己的要求。

评分

参与人数 1黑币 +5 收起 理由
WFX777888 + 5 但排流水灯能改四排同时向右流水就不会了

查看全部评分

回复

使用道具 举报

ID:99525 发表于 2022-7-26 23:41 | 显示全部楼层
以我的实践经验,2812.c中的发送1和0的时序肯定是错的!
T0H 0 code ,high voltage time 0.35us ±150ns
T1H 1 code ,high voltage time 0.7us ±150ns
T0L 0 code , low voltage time 0.8us ±150ns
T1L 1 code ,low voltage time 0.6us ±150ns
RES low voltage time Above 50μs
回复

使用道具 举报

ID:63317 发表于 2022-7-27 05:33 | 显示全部楼层
hhdsdy 发表于 2022-7-26 21:51
看你玩单片机的时间也不短了,也不能完全照抄一点都不(会)改吧?贴出来的程序和附件的程序不同,灯数也 ...

我在某一个宝买的4X4LED给我带的源码想做个山地车转向灯但是没改明白呵呵
回复

使用道具 举报

ID:88256 发表于 2022-7-27 14:23 | 显示全部楼层
问了两次,都不见你回答是否点亮,连程序里的灯数也没改,很怀疑你根本就没完全点亮过,难道是指望坛友们给你改好一个完整的程序?这不是学习单片机的方法啊,主程序那么简单,你的要求也不复杂,自己琢磨着改一下也不难啊。

评分

参与人数 1黑币 +5 收起 理由
WFX777888 + 5 没看见看见能不回复吗单个流水灯好使我想要.

查看全部评分

回复

使用道具 举报

ID:63317 发表于 2022-7-27 17:38 | 显示全部楼层
hhdsdy 发表于 2022-7-27 14:23
问了两次,都不见你回答是否点亮,连程序里的灯数也没改,很怀疑你根本就没完全点亮过,难道是指望坛友们给 ...

我想要成排的流水效果谢谢
回复

使用道具 举报

ID:88256 发表于 2022-7-27 21:51 | 显示全部楼层
是我俩不在一个频道上吗?你16个2812全部亮了吗?能不能全部亮黄色?搞清楚最右边的一列从上到下的序号是多少了吗?能不能单独点亮最右边的一列?什么情况都不知道,一抹黑的谁知道你是哪里不行了
回复

使用道具 举报

ID:88256 发表于 2022-7-27 22:18 | 显示全部楼层
完整程序是不可能给你的,论坛也禁止这样的做法,所以得靠你自己慢慢堆砌,何况这个也是简单的程序。
回复

使用道具 举报

ID:824490 发表于 2022-7-28 16:22 | 显示全部楼层
单片机之路,从点一个灯开始!你能点亮一个WS2812B了吗?
回复

使用道具 举报

ID:63317 发表于 2022-7-28 17:33 | 显示全部楼层
名字不是重点 发表于 2022-7-28 16:22
单片机之路,从点一个灯开始!你能点亮一个WS2812B了吗?

四排点亮了但是不同时享有流动有快有慢
  1.                for(i=0;i<4;i++)               
  2.                 {
  3.                         s[i][0]=5;                        //修改数组中的数据
  4.                         s[i][1]=50;
  5.                         s[i][2]=5;


  6.                         SendOneFrame(s);        //显示数组中的数据
  7.                         Delay100Ms(1);

  8.                         s[i][0]=50;
  9.                         s[i][1]=5;
  10.                         s[i][2]=5;

  11.                 }
  12.                           for(i=8;i>3;i--)               
  13.                 {
  14.                         s[i][0]=5;                        //修改数组中的数据
  15.                         s[i][1]=50;
  16.                         s[i][2]=5;


  17.                         SendOneFrame(s);        //显示数组中的数据
  18.                         Delay100Ms(1);

  19.                         s[i][0]=50;
  20.                         s[i][1]=5;
  21.                         s[i][2]=5;

  22.                 }
  23.                           for(i=5;i<12;i++)               
  24.                 {
  25.                         s[i][0]=5;                        //修改数组中的数据
  26.                         s[i][1]=50;
  27.                         s[i][2]=5;


  28.                         SendOneFrame(s);        //显示数组中的数据
  29.                         Delay100Ms(1);

  30.                         s[i][0]=50;
  31.                         s[i][1]=5;
  32.                         s[i][2]=5;

  33.                 }
  34.                         for(i=16;i>11;i--)               
  35.                 {
  36.                         s[i][0]=5;                        //修改数组中的数据
  37.                         s[i][1]=50;
  38.                         s[i][2]=5;


  39.                         SendOneFrame(s);        //显示数组中的数据
  40.                         Delay100Ms(1);

  41.                         s[i][0]=50;
  42.                         s[i][1]=5;
  43.                         s[i][2]=5;

  44.                 }
复制代码
回复

使用道具 举报

ID:88256 发表于 2022-7-29 10:09 | 显示全部楼层
WFX777888 发表于 2022-7-28 17:33
四排点亮了但是不同时享有流动有快有慢

这个点亮的是红色而不是黄色的吧?
你的点亮顺序是:
1:   0、1、2、3
2:   8、7、6、5、4
3:   5、6、7、8、9、10、11
4:   16、15、14、13、12


我不知道你板上的灯珠是怎么排列的,但明显点亮的灯数就不对了,这怎么会正常?

评分

参与人数 1黑币 +5 收起 理由
WFX777888 + 5 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:824490 发表于 2022-7-29 11:50 | 显示全部楼层
WFX777888 发表于 2022-7-28 17:33
四排点亮了但是不同时享有流动有快有慢

建议你用结构体的方式来操作,应该比你这方式清爽多了。
  1. #define led_num 24                   //彩灯点数

  2. struct p_color   //定义彩灯点的色值结构体,方便后期操作
  3. {
  4.   u8 ur;
  5.   u8 ug;
  6.   u8 ub;
  7. };
  8. struct p_color led_tabel[led_num] ;//彩灯色值结构体数组
  9. struct p_color temp_color;         //临时色值结构体


  10. //*************************

  11. //main:

  12.         for (i=0;i<led_num*3;i++) //初始化色值
  13.          {
  14.            led_tabel[i].ur=i*3;
  15.            led_tabel[i].ug=0;
  16.            led_tabel[i].ub=0;
  17.          }

  18.     p=led_tabel;  //设定指针,指向数组

  19.     while (1)
  20.     {
  21.     ws2812b_sendall(p,72);

  22.          if(!(++i%5))
  23.           {
  24.                   //彩灯色值数组环移
  25.             temp_color=led_tabel[0] ; //暂存(点0)的色值
  26.                   for(j=0;j<led_num-1;j++) led_tabel[j]=led_tabel[j+1];// 所有点的色值COPY后一个点
  27.                   led_tabel[led_num-1]=temp_color;// 最后一个点的色值改为暂存(点0)的色值
  28.            }
  29.   }
复制代码
ws2812.rar (1.17 MB, 下载次数: 41)

评分

参与人数 1黑币 +10 收起 理由
WFX777888 + 10 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:88256 发表于 2022-7-29 12:50 | 显示全部楼层
名字不是重点 发表于 2022-7-29 11:50
建议你用结构体的方式来操作,应该比你这方式清爽多了。
#define led_num 24                   //彩灯点数

他连 i=16 都出来了,你还让他直接上结构体,不是整更懵吗?
回复

使用道具 举报

ID:622100 发表于 2022-8-2 09:10 | 显示全部楼层
hhdsdy 发表于 2022-7-29 12:50
他连 i=16 都出来了,你还让他直接上结构体,不是整更懵吗?

那这样2812对他也太难了,上3528的了,这个点亮很简单,比较适合新手,别给他搞太难,放弃就不好了

评分

参与人数 1黑币 +5 收起 理由
WFX777888 + 5 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:63317 发表于 2022-8-2 17:41 | 显示全部楼层
吾心悦汝 发表于 2022-8-2 09:10
那这样2812对他也太难了,上3528的了,这个点亮很简单,比较适合新手,别给他搞太难,放弃就不好了

呵呵就是玩不明白怎样才能四排同时流水点亮


现在能实现四排流水点亮但是他不同时流水点亮就是一排走完2排亮 2排走完3排亮
回复

使用道具 举报

ID:88256 发表于 2022-8-2 20:34 | 显示全部楼层
WFX777888 发表于 2022-8-2 17:41
呵呵就是玩不明白怎样才能四排同时流水点亮

想得到帮助就得把你改的程序贴出来,空口白牙的不好猜
回复

使用道具 举报

ID:63317 发表于 2022-8-3 06:29 | 显示全部楼层
hhdsdy 发表于 2022-8-2 20:34
想得到帮助就得把你改的程序贴出来,空口白牙的不好猜

-------------------------------------------------------------------------------------*/

  1. #define Port P3
  2. #define GREEN 0
  3. #define RED 1
  4. #define BLUE 2

  5. /************************包含头文件***************************************************/

  6. #include "STC15W.h"
  7. #include "ws2812.h"
  8. #include "delay.h"
  9. #include "keypad.h"

  10. /************************主程序*******************************************************/

  11. void  main()
  12. {
  13.         unsigned char i;
  14.         unsigned char s[16][3]={{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},
  15.         {50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5}};//定义一个二维数组,每个括号内的三个数据对应一个像素点{G,R,B}

  16.         DelayMs(200);                                //上电等待延时

  17.         Port=0xff;                                        //初始化端口为高电平

  18.         while(1)
  19.         {
  20.                 for(i=0;i<4;i++)               
  21.                 {
  22.                         s[i][0]=5;                        //修改数组中的数据
  23.                         s[i][1]=50;
  24.                         s[i][2]=5;


  25.                         SendOneFrame(s);        //显示数组中的数据
  26.                         Delay100Ms(1);

  27.                         s[i+4][0]=0;
  28.                         s[i+4][1]=0;
  29.                         s[i+4][2]=0;

  30.                 }
  31.                 for(i=8;i>3;i--)               
  32.                 {
  33.                         s[i][0]=5;                        //修改数组中的数据
  34.                         s[i][1]=50;
  35.                         s[i][2]=5;


  36.                         SendOneFrame(s);        //显示数组中的数据
  37.                         Delay100Ms(1);

  38.                         s[i-4][0]=0;
  39.                         s[i-4][1]=0;
  40.                         s[i-4][2]=0;

  41.                 }
  42.                           for(i=8;i<12;i++)               
  43.                 {
  44.                         s[i][0]=5;                        //修改数组中的数据
  45.                         s[i][1]=50;
  46.                         s[i][2]=5;


  47.                         SendOneFrame(s);        //显示数组中的数据
  48.                         Delay100Ms(1);

  49.                         s[i+4][0]=0;
  50.                         s[i+4][1]=0;
  51.                         s[i+4][2]=0;

  52.                 }
  53.                                  for(i=15;i>11;i--)               
  54.                 {
  55.                         s[i][0]=5;                        //修改数组中的数据
  56.                         s[i][1]=50;
  57.                         s[i][2]=5;


  58.                         SendOneFrame(s);        //显示数组中的数据
  59.                         Delay100Ms(1);

  60.                         s[i-4][0]=0;
  61.                         s[i-4][1]=0;
  62.                         s[i-4][2]=0;

  63.                 }


  64.         }
  65. }






  66. #include "STC15W.h"
  67. #include <intrins.h>
  68. #include "ws2812.h"

  69. //-------------------------------------------------------------------------------
  70. //子程序名称:IO_Init(void)
  71. //功能:端口初始化
  72. //-------------------------------------------------------------------------------
  73. void IO_Init(void)
  74. {
  75.         ;
  76. }

  77. //-------------------------------------------------------------------------------
  78. //子程序名称:ResetDateFlow(void)
  79. //功能:复位,为下一次发送做准备,
  80. //说明:将DI置位为0后,延时约65us
  81. //-------------------------------------------------------------------------------
  82. void ResetDataFlow(void)
  83. {
  84.         unsigned char i,j;
  85.         DI=0;                                        //DI置为0后,延时50us以上,实现帧复位
  86.         for(i=0;i<15;i++)                //此处33Mhz时延时65us
  87.         {
  88.                 for(j=0;j<20;j++)
  89.                 {
  90.                         ;
  91.                 }
  92.         }
  93. }
  94. //-------------------------------------------------------------------------------
  95. //子程序名称:SendOnePix(unsigned char *ptr)
  96. //功能:发送一个像素点的24bit数据
  97. //参数:接收的参数是一个指针,此函数会将此指针指向的地址的连续的三个Byte的数据发送
  98. //说明:在主函数中直接调用此函数时,在整个帧发送开始前需要先执行 ResetDataFlow()
  99. //                数据是按归零码的方式发送,速率为800KBPS
  100. //-------------------------------------------------------------------------------
  101. void SendOnePix(unsigned char *ptr)
  102. {
  103.         unsigned char i,j;
  104.         unsigned char temp;

  105.         for(j=0;j<3;j++)
  106.         {
  107.                 temp=ptr[j];
  108.                 for(i=0;i<8;i++)
  109.                 {
  110.                         if(temp&0x80)                 //从高位开始发送
  111.                         {
  112.                                 DI=1;                         //发送“1”码
  113.                                 _nop_();                 //不可省略的nop(),延时指定时间作用,晶振频率33MHz
  114.                                 _nop_();
  115.                                 _nop_();
  116.                                 _nop_();
  117.                                 _nop_();
  118.                                 _nop_();
  119.                                 _nop_();
  120.                                 _nop_();
  121.                                 _nop_();
  122.                                 _nop_();
  123.                                 _nop_();
  124.                                 _nop_();
  125.                                 _nop_();
  126.                                 _nop_();
  127.                                 _nop_();
  128.                                 _nop_();
  129.                                 _nop_();
  130.                                 _nop_();
  131.                                 _nop_();
  132.                                 _nop_();

  133.                                 DI=0;
  134.                                 _nop_();
  135.                                 _nop_();
  136.                                 _nop_();
  137.                                 _nop_();
  138.                                 _nop_();
  139.                                 _nop_();
  140.                                 _nop_();
  141.                                 _nop_();
  142.                                 _nop_();
  143.                                 _nop_();
  144.                                 _nop_();
  145.                                 _nop_();
  146.                                 _nop_();
  147.                                 _nop_();
  148.                                 _nop_();
  149.                         }
  150.                         else                                //发送“0”码
  151.                         {
  152.                                 DI=1;
  153.                                 _nop_();
  154.                                 _nop_();
  155.                                 _nop_();
  156.                                 _nop_();
  157.                                 _nop_();
  158.                                 _nop_();
  159.                                 _nop_();

  160.                                 DI=0;
  161.                                 _nop_();
  162.                                 _nop_();
  163.                                 _nop_();
  164.                                 _nop_();
  165.                                 _nop_();
  166.                                 _nop_();
  167.                                 _nop_();
  168.                                 _nop_();
  169.                                 _nop_();
  170.                                 _nop_();
  171.                                 _nop_();
  172.                                 _nop_();
  173.                                 _nop_();
  174.                                 _nop_();
  175.                                 _nop_();
  176.                                 _nop_();
  177.                                 _nop_();
  178.                                 _nop_();
  179.                                 _nop_();
  180.                         }
  181.                         temp=(temp<<1);                 //左移位
  182.                 }
  183.         }


  184. }
  185. //-------------------------------------------------------------------------------
  186. //子程序名称:SendOneFrame(unsigned char *ptr)
  187. //功能:发送一帧数据(即发送整个数组的数据)
  188. //参数:接收的参数是一个指针,此函数会将此指针指向的地址的整个数组的数据发送
  189. //-------------------------------------------------------------------------------
  190. void SendOneFrame(unsigned char *ptr)
  191. {
  192.         unsigned char k;

  193.         ResetDataFlow();                                 //发送帧复位信号

  194.         for(k=0;k<SNUM;k++)                                 //发送一帧数据,SNUM是板子LED的个数
  195.         {
  196.                 SendOnePix(&ptr[(3*k)]);
  197.         }

  198.         ResetDataFlow();                                 //发送帧复位信号
  199. }

  200. //-------------------------------------------------------------------------------
  201. //子程序名称:SendSameColor(unsigned char *ptr,unsigned char cnt)
  202. //功能:相同颜色的点发送cnt次
  203. //参数:接收的参数是一个指针,指向像素点颜色数组,cnt传递发送个数
  204. //-------------------------------------------------------------------------------
  205. void SendSameColor(unsigned char *ptr,unsigned char cnt)
  206. {
  207.         unsigned char k;

  208.         ResetDataFlow();                                 //发送帧复位信号

  209.         for(k=0;k<cnt;k++)                                 //发送一帧数据,SNUM是板子LED的个数
  210.         {
  211.                 SendOnePix(&ptr[0]);
  212.         }

  213.         ResetDataFlow();                                 //发送帧复位信号
  214. }
  215. //-------------------------------------------------------------------------------
  216. //子程序名称:SendOneFrameFrom(unsigned char i,unsigned char *ptr)
  217. //功能:从指定的像素点开始发送一帧数据(即发送整个数组的数据)
  218. //参数:接收的参数是一个指针,此函数会将此指针指向的地址的整帧数据发送
  219. //                i:把数组的第0个像素数据发送到第i个像素点(第0个像素是板上标号为01的像素)
  220. //说明:即原本对应第一个像素的数据会发送到第i个像素点(LED)上
  221. //-------------------------------------------------------------------------------
  222. void SendOneFrameFrom(unsigned char i,unsigned char *ptr)
  223. {
  224.         unsigned char k;

  225.         ResetDataFlow();                                 //发送帧复位信号

  226.            for(k=(SNUM-i);k<SNUM;k++)                 //发送一帧数据
  227.         {
  228.                 SendOnePix(&ptr[(3*k)]);
  229.         }
  230.         for(k=0;k<(SNUM-i);k++)
  231.         {
  232.                 SendOnePix(&ptr[(3*k)]);
  233.         }

  234.         ResetDataFlow();                                 //发送帧复位信号
  235. }

  236. //-------------------------------------------------------------------------------
  237. //子程序名称:SendOneFrameSince(unsigned char i,unsigned char *ptr)
  238. //功能:从第i个像素点的数据开始发送一帧数据(即发送整个数组的数据)
  239. //参数:接收的参数是一个指针,此函数会将此指针指向的地址的整帧数据发送
  240. //                i:把数组的第i个像素数据发送到第1个像素点
  241. //说明:即原本对应第i像素的数据会发送到第1个像素点(LED)上,第i+1个像素点的数据
  242. //                发送到第2个像素上
  243. //-------------------------------------------------------------------------------
  244. void SendOneFrameSince(unsigned char i,unsigned char *ptr)
  245. {
  246.         unsigned char k;

  247.         ResetDataFlow();                                 //发送帧复位信号

  248.         for(k=i;k<SNUM;k++)                                 //发送一帧数据
  249.         {
  250.                 SendOnePix(&ptr[(3*k)]);
  251.         }
  252.         for(k=0;k<i;k++)
  253.         {
  254.                 SendOnePix(&ptr[(3*k)]);
  255.         }
  256.         ResetDataFlow();                                 //发送帧复位信号
  257. }
复制代码
回复

使用道具 举报

ID:824490 发表于 2022-8-3 17:48 | 显示全部楼层
WFX777888 发表于 2022-8-3 06:29
-------------------------------------------------------------------------------------*/

说实话,可能水平不够吧,你这代码的逻辑我看的有点晕。。。
有一点你不知你注意到了没:
WS2812在发数据过程中不要被打断,不能改几个值,发几个,再改几个,而是要一次性改完所有的点值,再一次性发出,发送过程中,中断都要关闭。

回复

使用道具 举报

ID:63317 发表于 2022-8-3 20:39 | 显示全部楼层
名字不是重点 发表于 2022-8-3 17:48
说实话,可能水平不够吧,你这代码的逻辑我看的有点晕。。。
有一点你不知你注意到了没:
WS2812在发数 ...

我买模块给我带的源码
这是我改的就是四行流水不同步
  1. unsigned char s[16][3]={{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},
  2.         {50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5}};//定义一个二维数组,每个括号内的三个数据对应一个像素点{G,R,B}

  3.         DelayMs(200);                                //上电等待延时

  4.         Port=0xff;                                        //初始化端口为高电平

  5.         while(1)
  6.         {
  7.                 for(i=0;i<4;i++)               
  8.                 {
  9.                         s[i][0]=5;                        //修改数组中的数据
  10.                         s[i][1]=50;
  11.                         s[i][2]=5;


  12.                         SendOneFrame(s);        //显示数组中的数据
  13.                         Delay100Ms(1);

  14.                         s[i+4][0]=0;
  15.                         s[i+4][1]=0;
  16.                         s[i+4][2]=0;

  17.                 }
  18.                 for(i=8;i>3;i--)               
  19.                 {
  20.                         s[i][0]=5;                        //修改数组中的数据
  21.                         s[i][1]=50;
  22.                         s[i][2]=5;


  23.                         SendOneFrame(s);        //显示数组中的数据
  24.                         Delay100Ms(1);

  25.                         s[i-4][0]=0;
  26.                         s[i-4][1]=0;
  27.                         s[i-4][2]=0;

  28.                 }
  29.                           for(i=8;i<12;i++)               
  30.                 {
  31.                         s[i][0]=5;                        //修改数组中的数据
  32.                         s[i][1]=50;
  33.                         s[i][2]=5;


  34.                         SendOneFrame(s);        //显示数组中的数据
  35.                         Delay100Ms(1);

  36.                         s[i+4][0]=0;
  37.                         s[i+4][1]=0;
  38.                         s[i+4][2]=0;

  39.                 }
  40.                                  for(i=15;i>11;i--)               
  41.                 {
  42.                         s[i][0]=5;                        //修改数组中的数据
  43.                         s[i][1]=50;
  44.                         s[i][2]=5;


  45.                         SendOneFrame(s);        //显示数组中的数据
  46.                         Delay100Ms(1);

  47.                         s[i-4][0]=0;
  48.                         s[i-4][1]=0;
  49.                         s[i-4][2]=0;

  50.                 }
复制代码
回复

使用道具 举报

ID:63317 发表于 2022-8-3 20:42 | 显示全部楼层
名字不是重点 发表于 2022-8-3 17:48
说实话,可能水平不够吧,你这代码的逻辑我看的有点晕。。。
有一点你不知你注意到了没:
WS2812在发数 ...

我就是爱好这东西没事玩玩
回复

使用道具 举报

ID:824490 发表于 2022-8-4 08:49 | 显示全部楼层
WFX777888 发表于 2022-8-3 20:42
我就是爱好这东西没事玩玩

16灯串(4行4列)单色单灯4段流水
流程
第1行
第2行
第3行
第4行
灯1
灯2
灯3
灯4
灯5
灯6
灯7
灯8
灯9
灯10
灯11
灯12
灯13
灯14
灯15
灯16
发送数组1(16灯*3=48B)
50,0,0
0,0,0
0,0,0
0,0,0
50,0,0
0,0,0
0,0,0
0,0,0
50,0,0
0,0,0
0,0,0
0,0,0
50,0,0
0,0,0
0,0,0
0,0,0
延时
发送数组2(16灯*3=48B)
0,0,0
50,0,0
0,0,0
0,0,0
0,0,0
50,0,0
0,0,0
0,0,0
0,0,0
50,0,0
0,0,0
0,0,0
0,0,0
50,0,0
0,0,0
0,0,0
延时
发送数组3(16灯*3=48B)
0,0,0
0,0,0
50,0,0
0,0,0
0,0,0
0,0,0
50,0,0
0,0,0
0,0,0
0,0,0
50,0,0
0,0,0
0,0,0
0,0,0
50,0,0
0,0,0
延时
发送数组4(16灯*3=48B)
0,0,0
0,0,0
0,0,0
50,0,0
0,0,0
0,0,0
0,0,0
50,0,0
0,0,0
0,0,0
0,0,0
50,0,0
0,0,0
0,0,0
0,0,0
50,0,0
这个表给你参考一下。就按你的板、2维数组的方式。

评分

参与人数 1黑币 +10 收起 理由
WFX777888 + 10 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:824490 发表于 2022-8-4 08:52 | 显示全部楼层
WFX777888 发表于 2022-8-3 20:42
我就是爱好这东西没事玩玩

我也是玩玩,这个不是我的专业。。。慢慢来,这个很简单的。
回复

使用道具 举报

ID:88256 发表于 2022-8-5 23:35 | 显示全部楼层
WFX777888 发表于 2022-8-2 17:41
呵呵就是玩不明白怎样才能四排同时流水点亮

“现在能实现四排流水点亮但是他不同时流水点亮就是一排走完2排亮 2排走完3排亮”   就不能加个标点符号?不太理解什么意思,是说第1排点亮一段时间后熄灭并亮起第2排,第2 排点亮一段时间后熄灭亮起第3排,而你则是想让亮起的不熄灭,到最后全部亮?
回复

使用道具 举报

ID:88256 发表于 2022-8-5 23:38 | 显示全部楼层
WFX777888 发表于 2022-8-3 20:42
我就是爱好这东西没事玩玩

26楼的方法你也试试
回复

使用道具 举报

ID:63317 发表于 2022-8-6 20:14 | 显示全部楼层
hhdsdy 发表于 2022-8-5 23:35
“现在能实现四排流水点亮但是他不同时流水点亮就是一排走完2排亮 2排走完3排亮”   就不能加个标点符号 ...

呵呵就是四排都能点亮了
就是第一排亮第二个灯
第二排亮第三个灯
第三排亮第四个灯
第四排亮第三个灯

正常事一排亮第一个灯  第二排亮第一个灯    第二排亮第一个灯   第三排亮第一个灯     第四排亮第一个灯
回复

使用道具 举报

ID:482083 发表于 2022-8-8 18:09 | 显示全部楼层
WFX777888 发表于 2022-8-2 17:41
呵呵就是玩不明白怎样才能四排同时流水点亮

因为同一时间就一个for在运行呀

评分

参与人数 1黑币 +5 收起 理由
WFX777888 + 5 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:63317 发表于 2022-8-9 06:11 | 显示全部楼层
cj2333 发表于 2022-8-8 18:09
因为同一时间就一个for在运行呀

对啊就是不会同一时间运行四个FOR啊
回复

使用道具 举报

ID:88256 发表于 2022-8-9 22:19 | 显示全部楼层
WFX777888 发表于 2022-8-6 20:14
呵呵就是四排都能点亮了
就是第一排亮第二个灯
第二排亮第三个灯

你的意思是能够流水,但是想亮第1个灯的却亮到第3个或者第4个灯去?你不是想要列方向流水显示吗,怎么变成从上到下了?拍个视频看看吧。
前面让你查看灯的排列顺序你看了没有?我都怀疑你是不是没去查看灯的排列走向,第一个灯是在第几排的第几个位置上?后面的15个呢?

评分

参与人数 1黑币 +10 收起 理由
WFX777888 + 10 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:63317 发表于 2022-8-10 06:23 | 显示全部楼层
hhdsdy 发表于 2022-8-9 22:19
你的意思是能够流水,但是想亮第1个灯的却亮到第3个或者第4个灯去?你不是想要列方向流水显示吗,怎么变 ...

这个就是流水灯视频

VID_20220810_061920.rar

3.44 MB, 下载次数: 15

回复

使用道具 举报

ID:88256 发表于 2022-8-10 12:36 | 显示全部楼层
别用评分代替回复啊,都不回答实质问题
回复

使用道具 举报

ID:161164 发表于 2022-8-10 16:39 | 显示全部楼层
WFX777888 发表于 2022-8-2 17:41
呵呵就是玩不明白怎样才能四排同时流水点亮

这样? ezgif.com-video-to-gif.gif

回复

使用道具 举报

ID:88256 发表于 2022-8-10 18:32 | 显示全部楼层
WFX777888 发表于 2022-8-10 06:23
这个就是流水灯视频

把延时增加5倍看看
回复

使用道具 举报

ID:63317 发表于 2022-8-10 19:30 | 显示全部楼层

对就要这样的
回复

使用道具 举报

ID:88256 发表于 2022-8-10 21:28 | 显示全部楼层

我发觉你还是理解不了原程序,所以就改得乱七八糟,连数组的初值都不改。
要达到最佳视觉效果,就要把整组数组的内容改完再一次性送显示,而不是改一个灯送显示一次。
12楼的行号20开始的那4行为什么加4?原程序是为了显示完恢复数组数据,你的呢?
回复

使用道具 举报

ID:63317 发表于 2022-8-11 06:12 | 显示全部楼层
hhdsdy 发表于 2022-8-10 21:28
我发觉你还是理解不了原程序,所以就改得乱七八糟,连数组的初值都不改。
要达到最佳视觉效果,就要把整 ...

加四减四用不用都可以
数组我是真搞不懂
我就是玩按键输入输出控制了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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