[求助] 请教一个循环流水灯的设计

littleshrimp   2018-11-26 17:36 楼主
比如有10个灯,连续点亮3个灯,从第1个开始亮,1,12,123,234,345,456,567,678,789,89 10,9 10 1,10 1 2,123……这样
原来是通过循环数组实现的,后来觉得那种方法有点二,多少个点就需要多长的数组
于是准备通过计算实现,可能是岁数大了,今天怎么想也没想出来应该怎么弄
有了解的麻烦指点一二,谢谢
虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复评论 (6)

10个二进制,每位对应一个灯
初始送入3个1
10个二进制位循环移位
点赞  2018-11-26 17:44
引用: huo_hu 发表于 2018-11-26 17:44
10个二进制,每位对应一个灯
初始送入3个1
10个二进制位循环移位

每果每一个字节对应一个灯呢?
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2018-11-26 17:45
引用: huo_hu 发表于 2018-11-26 17:44
10个二进制,每位对应一个灯
初始送入3个1
10个二进制位循环移位

比如i代表1~10的灯
index代表当前灯的位置
count = 3代表亮灯的数量

当index=0时,只有i=8,9,0时输出1
index=1时,只有i=9,0,1时输出1
index=2时,只有i=0,1,2时输出1
index=3时,只有i=1,2,3时输出1
大概这样
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2018-11-26 17:50
自己解决了
  1. #include <stdint.h>
  2. uint8_t test_array[50];
  3. void test(uint16_t index)
  4. {
  5.   int32_t light_count = 10;
  6.   int32_t start_index = index;
  7.   uint16_t hightlight_count = 5;
  8.   int32_t i;
  9.   for(i=0;i<light_count;i++)
  10.   {
  11.     if((start_index >= hightlight_count) ? (i <= start_index && i > ((start_index >= hightlight_count) ? start_index - hightlight_count : light_count + (start_index - hightlight_count))) : (i<= start_index || i > ((start_index >= hightlight_count) ? start_index - hightlight_count:light_count + (start_index - hightlight_count))))
  12.     {
  13.       test_array[i] = 1;
  14.     }
  15.     else
  16.     {
  17.       test_array[i] = 0;
  18.     }
  19.   }  
  20. }
  21. int main()
  22. {
  23.   uint16_t i;
  24.   while(1)
  25.   {
  26.     for(i=0;i<10;i++)
  27.     {
  28.       test(i);
  29.     }
  30.   }
  31. }



虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2018-11-26 21:07
弄个循环队列就可以了
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
点赞  2018-11-27 10:35
围观学习,拿点威望看资料。
作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅!
点赞  2018-12-14 16:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复