找回密码
 立即注册

QQ登录

只需一步,快速开始

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

4x4x4光立方制作 附单片机源码

  [复制链接]
跳转到指定楼层
楼主
第一次做光立方,走了些弯路,但好在做出来了,效果还不错。
材料清单:5mm雾状灯珠64个,9x15cm洞洞板,STC12C5A60S2单片机,20p插针两个,5VDC电源座一个,开关一个,导线若干。


直接用单片机驱动,不用任何其他芯片。灯一定不要贪小便宜,之前买的30块钱1000个3mm的灯珠,用之前是好的,焊成一排后发现很多都不亮,第一次做还以为因为没上电,结果焊到板子上还是不亮,耽误了几天,跟客服还吵了一架,郁闷


采用层共阴束共阳接法,未用P0口驱动小灯,用P1和P3口控制束,P2口控制层。


写程序就容易多了,人眼的视觉暂留嘛,简单说就是把自己想要的动画分成帧,每一时帧后加延时就好了。

原理图

单片机源程序如下:
  1. #include<reg51.h>

  2. typedef unsigned char uchar;
  3. typedef unsigned int  uint;
  4. sbit led1=P2^4;
  5. sbit led2=P2^5;
  6. sbit led3=P2^6;
  7. sbit led4=P2^7;
  8. sbit gongyin1=P2^3;         //最顶层
  9. sbit gongyin2=P2^2;         //第三层
  10. sbit gongyin3=P2^1;  //第二层
  11. sbit gongyin4=P2^0;         //最底层

  12. uchar wei1[]={1,0,1,0,1,0,1,0,1};
  13. uchar wei2[]={0,1,1,1,0,1,1,1};
  14. uchar wei3[]={0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1};
  15. uchar gongyang10[]={0x0f,0x8e,0x8c,0x88,0x80,0x00,0x00,0x00,0x10,0x11,0x60,0x40,0x00,0x20};
  16. uchar gongyang30[]={0x00,0x00,0x08,0x88,0xc8,0xe8,0xf0,0x71,0x31,0x11,0x00,0x04,0x06,0x02};
  17. uchar gongyang11[]={0x01,0x33,0x77,0xff,0xe0,0x00,0x00,0x08,0xcc,0xee,0xff,0x70,0x00,0x00};
  18. uchar gongyang31[]={0x00,0x00,0x07,0xff,0xee,0xcc,0x80,0x00,0x00,0x0e,0xff,0x77,0x33,0x10};
  19. uchar gongyang12[]={0x48,0x44,0x22,0x21,0x30,0xc0};
  20. uchar gongyang32[]={0x12,0x22,0x44,0x84,0x0c,0x03};
  21. uchar gongyang13[]={0x0f,0x8e,0x8c,0x88,0x80,0x00,0x00,0x00,0x10,0x11,0x12,0x17};
  22. uchar gongyang33[]={0x00,0x00,0x08,0x88,0xc8,0xe8,0xf0,0x71,0x31,0x11,0x01,0x00};

  23. void delay(uint time)   //延时函数
  24. {
  25.     unsigned int i,j;
  26.     for(i=0;i<time;i++)
  27.         for(j=0;j<250;j++);
  28. }


  29. void display1()                        //动画1:全亮并闪烁
  30. {
  31.   uchar i,j;
  32.   j=10;
  33.   while(j--)
  34.   {
  35.   for(i=0;i<2;i++)
  36.   {
  37.         gongyin1=wei1[i];
  38.         gongyin2=wei1[i+2];
  39.         gongyin3=wei1[i+4];
  40.         gongyin4=wei1[i+6];
  41.         P1=0XFF;
  42.         P3=0XFF;
  43.         delay(350);
  44.   }
  45.   }
  46. }

  47. void display2()          //动画2:上下每层闪动
  48. {
  49.    uint i,j;
  50.    j=5;
  51.    while(j--)
  52.    {
  53.    for(i=0;i<4;i++)
  54.    {
  55.          gongyin1=wei2[i];
  56.          gongyin2=wei2[i+3];
  57.          gongyin3=wei2[i+2];
  58.          gongyin4=wei2[i+1];
  59.          P1=0XFF;
  60.          P3=0XFF;
  61.          delay(800);
  62.    }
  63.    }
  64. }
  65. void display3()           //动画3:从上旋转而下,一直有四个灯亮
  66. {
  67.   uint i,j;
  68.   for(i=0;i<4;i++)
  69.   {
  70.     gongyin1=wei2[i];
  71.         gongyin2=wei2[i+3];
  72.         gongyin3=wei2[i+2];
  73.         gongyin4=wei2[i+1];
  74.         for(j=0;j<9;j++)
  75.         {
  76.           P1=gongyang10[j];
  77.           P3=gongyang30[j];
  78.           delay(300);
  79.         }
  80.   }
  81. }
  82. void display4()         //动画4:四面循环,由外向内
  83. {
  84.   uint i,j;
  85.   j=3;
  86.   while(j--)
  87.   {
  88.   for(i=0;i<14;i++)
  89.   {
  90.         gongyin1=0;
  91.         gongyin2=0;
  92.         gongyin3=0;
  93.         gongyin4=0;
  94.         P1=gongyang10[i];
  95.         P3=gongyang30[i];
  96.         delay(350);
  97.   }
  98.     delay(200);
  99.   }
  100. }




  101. void display5()          //动画5:由外角向内点亮
  102. {
  103.   uchar i=10;
  104.   while(i--)
  105.   {
  106.   gongyin1=0;
  107.   gongyin2=1;
  108.   gongyin3=1;
  109.   gongyin4=0;
  110.   P1=0x09;
  111.   P3=0x90;
  112.   delay(450);
  113.   gongyin1=1;
  114.   gongyin2=0;
  115.   gongyin3=0;
  116.   gongyin4=1;
  117.   P1=0x60;
  118.   P3=0x06;
  119.   delay(450);
  120.   }
  121. }

  122. void display6()           //动画6:角对角
  123. {
  124.   uint i,j,k;
  125.   k=1;
  126.   while(k--)
  127.   {
  128.   for(i=0;i<14;i++)
  129.   {
  130.     gongyin1=wei3[i];
  131.         gongyin2=wei3[i+6];
  132.         gongyin3=wei3[i+5];
  133.         gongyin4=wei3[i+4];
  134.         P1=gongyang11[i];
  135.         P3=gongyang31[i];
  136.         delay(500);
  137.   }
  138.   for(j=13;j>0;j--)
  139.   {
  140.     gongyin1=wei3[j];
  141.         gongyin2=wei3[j+6];
  142.         gongyin3=wei3[j+5];
  143.         gongyin4=wei3[j+4];
  144.         P1=gongyang11[j];
  145.         P3=gongyang31[j];
  146.         delay(500);
  147.   }
  148.     delay(200);
  149.   }
  150. }

  151. void display7()          //动画7:一竖排旋转
  152. {
  153.   uint i,j=
  154.   j=5;
  155.   while(j--)
  156.   {
  157.    for(i=0;i<6;i++)
  158.    {
  159.         gongyin1=0;
  160.         gongyin2=0;
  161.         gongyin3=0;
  162.         gongyin4=0;
  163.         P1=gongyang12[i];
  164.         P3=gongyang32[i];
  165.         delay(350);
  166.    }
  167.    delay(200);
  168.   }
  169. }


  170. void display8()                //动画8:竖排左右
  171. {
  172.    uint a=2;
  173.    while(a--)
  174.    {
  175. …………
  176. …………
  177. …………限于本文篇幅 余下代码请从51黑下载附件…………
  178.          delay(70);
  179.   }
  180.   z3=3;
  181.   while(z3--)
  182.   {
  183.   gongyin1=0;
  184.      gongyin2=1;
  185.      gongyin3=1;
  186.      gongyin4=1;
  187.          P1=0xff;
  188.          P3=0xff;
  189.          delay(15);
  190.          gongyin1=1;
  191.      gongyin2=1;
  192.      gongyin3=1;
  193.      gongyin4=0;
  194.          P1=0x09;
  195.          P3=0x00;
  196.          delay(70);
  197.   }
  198.   z4=3;
  199.   while(z4--)
  200.   {
  201.   gongyin1=0;
  202.      gongyin2=1;
  203.      gongyin3=1;
  204.      gongyin4=1;
  205.          P1=0xff;
  206.          P3=0xff;
  207.          delay(70);
  208.   }
  209.   }
  210. }


  211. void main()
  212. {
  213.    while(1)
  214.    {
  215.       led1=1;
  216.           led2=1;
  217.           led3=1;
  218.           led4=1;
  219.           display1(); //动画1:全亮并闪烁
  220.           display2(); //动画2:上下每层闪动
  221.           display3(); //动画3:从上旋转而下,一直有四个灯亮
  222.           display4(); //动画4:四面循环,由外向内
  223.           display5(); //动画5:由外角向内点亮
  224.           display6();  //动画6:角对角
  225.           display7();  //动画7:一竖排旋转
  226.           display16(); //动画16:四侧面循环
  227.           display17();  //动画17:四底面循环-两排
  228.           display8();        //动画8:竖排左右
  229.       display9();         //动画9:左右波浪
  230.       display10();        //动画10:前后波浪
  231.           display18();  //动画18:四底面循环 -单排
  232.           display11();        //动画11:X字形前后左右
  233.           display6();  //动画6:角对角
  234.           display19();  //动画19:随机下落
  235.       display12();        //动画12:正方体大小变换
  236.           display13();         //动画13:方框大小变换
  237.           display14();        //动画14:方块随机移动
  238.           display15();        //动画15:方块形成大方块
  239.          
  240.    }
  241. }
复制代码

所有资料51hei提供下载:
程序2.zip (109.32 KB, 下载次数: 125)




评分

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

查看全部评分

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

使用道具 举报

沙发
ID:433534 发表于 2018-11-26 17:10 | 只看该作者
正在做这个,万分感谢
回复

使用道具 举报

板凳
ID:433823 发表于 2018-11-26 23:14 | 只看该作者
这个是用楼主用自己的材料制作的,不是从淘宝上买的套装组装起来的,楼主很厉害,值得推荐,过程很详细,适合像我这样的业余爱好者练习,从里面学...
回复

使用道具 举报

地板
ID:404720 发表于 2018-11-27 08:20 | 只看该作者
不是套件好评
回复

使用道具 举报

5#
ID:261148 发表于 2019-4-1 09:04 | 只看该作者
实物图与原理图怎么对不上?
回复

使用道具 举报

6#
ID:432687 发表于 2019-4-22 07:55 来自手机 | 只看该作者
灵感和学习效果的完美页面..我对这项创新感到非常惊讶好主意,和我们在一起!不幸的是,我不懂你的语言,我严重依赖翻译。谢谢分享。
回复

使用道具 举报

7#
ID:518809 发表于 2019-4-22 17:44 | 只看该作者
不用焊三极管吗
回复

使用道具 举报

8#
ID:520323 发表于 2019-4-24 13:28 | 只看该作者
楼主厉害
回复

使用道具 举报

9#
ID:343137 发表于 2019-7-21 09:48 | 只看该作者
可以,起码不用靠淘宝,自己动手好啊
回复

使用道具 举报

10#
ID:811998 发表于 2020-9-2 16:06 来自手机 | 只看该作者
你好,我有两个问题不明白想请问一下,第一层是怎么排列的方阵,从左到右,从前到后,从下到上依次引脚应该是多少。这有个疑惑原理图P24,P25,P26,P27是对应的一二三四层,但程序里标注的又是P20,P21,P22,P23。。
回复

使用道具 举报

11#
ID:1042173 发表于 2022-9-3 08:50 | 只看该作者
请问,用那个软件给取模的?
回复

使用道具 举报

12#
ID:1042582 发表于 2022-9-4 10:59 | 只看该作者
可以加个按键切换循环模式就好,不要一直10几种动画一直循环
回复

使用道具 举报

13#
ID:1043730 发表于 2022-9-29 22:31 | 只看该作者
正在教人做这个,万分感谢
回复

使用道具 举报

14#
ID:1043730 发表于 2022-9-29 22:32 | 只看该作者
正在制作,感谢
回复

使用道具 举报

15#
ID:1045889 发表于 2022-9-30 14:35 | 只看该作者
新手提问,这种led不用串限流电阻吗?
回复

使用道具 举报

16#
ID:1045889 发表于 2022-9-30 14:36 | 只看该作者
我也是使用的led 3mm的,焊接完毕坏了好多,有的重新焊接了好几次,最后的结果是灯亮度不同,不知道是我串的电阻阻值有差别还是灯的原因
回复

使用道具 举报

17#
ID:1050704 发表于 2022-11-6 11:47 | 只看该作者
正在做这个,万分感谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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