找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DIY光立方设计

[复制链接]
跳转到指定楼层
楼主
ID:105332 发表于 2016-3-30 17:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
效果网址:http://www.tudou.com/programs/view/Z0e4FqTXdP8/


程序:
  1. #include <REG52.H>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar display[8][8];//此处的disply为一个空数组用于存放64个数据(8*8*8光立方底座共64个引脚,分别接8片573的8个引脚)
  6. /*rank:A,1,2,3,4,I,心,U*/
  7. uchar code table_cha[8][8]={0x51,0x51,0x51,0x4a,0x4a,0x4a,0x44,0x44,0x18,0x1c,0x18,0x18,0x18,0x18,0x18,0x3c,0x3c,0x66,0x66,0x30,0x18,0xc,0x6,0xf6,0x3c,0x66,0x60,0x38,0x60,0x60,0x66,0x3c,0x30,0x38,0x3c,0x3e,0x36,0x7e,0x30,0x30,0x3c,0x3c,0x18,0x18,0x18,0x18,0x3c,0x3c,0x66,0xff,0xff,0xff,0x7e,0x3c,0x18,0x18,0x66,0x66,0x66,0x66,0x66,0x66,0x7e,0x3c};
  8. /*the "ideasoft"*/
  9. uchar code table_id[40]={0x81,0xff,0x81,0x00,0xff,0x81,0x81,0x7e,0x00,0xff,0x89,0x89,0x00,0xf8,0x27,0x27,0xf8,0x00,0x8f,0x89,0x89,0xf9,0x00,0xff,0x81,0x81,0xff,0x00,0xff,0x09,0x09,0x09,0x01,0x0,0x01,0x01,0xff,0x01,0x01,0x00};
  10. /*railway*/
  11. uchar code dat[128]={0x00,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xbc,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4,0x25,0x45,0x65,0x85,0xa5,0xc5,0xc9,0xcd,0xd1,0xd5,0xd9,0xb9,0x99,0x79,0x59,0x39,0x35,0x31,0x2d,0x29,0x4a,0x6a,0x8a,0xaa,0xae,0xb2,0xb6,0x96,0x76,0x56,0x52,0x4e,0x6f,0x8f,0x93,0x73,0x6f,0x8f,0x93,0x73,0x4a,0x6a,0x8a,0xaa,0xae,0xb2,0xb6,0x96,0x76,0x56,0x52,0x4e,0x25,0x45,0x65,0x85,0xa5,0xc5,0xc9,0xcd,0xd1,0xd5,0xd9,0xb9,0x99,0x79,0x59,0x39,0x35,0x31,0x2d,0x29,0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xbc,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4};
  12. /*railway 2*/
  13. uchar code dat2[28]={0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xbc,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4};

  14. /*railway 3*/
  15. uchar code dat3[24]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x16,0x26,0x36,0x46,0x56,0x66,0x65,0x64,0x63,0x62,0x61,0x60,0x50,0x40,0x30,0x20,0x10};

  16. /*3p char*/
  17. uchar code table_3p[3][8]={0xff,0x89,0xf5,0x93,0x93,0xf5,0x89,0xff,0x0e,0x1f,0x3f,0x7e,0x7e,0x3f,0x1f,0x0e,0x18,0x3c,0x7e,0xff,0x18,0x18,0x18,0x18};
  18. /*        //初始化
  19. 这是初始化程序。
  20. 这是写在单片机设置定时器。所以程序可以更新光立方在固定时间使用中断函数。
  21. //中断函数控制LED亮灭的速度。*/
  22. void sinter()

  23. {

  24.          IE=0x82;

  25.          TCON=0x01;

  26.          TH0=0xF5;

  27.          TL0=0;

  28.          TR0=1;

  29. }
  30. //误差 -0.026765046296us STC 1T 22.1184Mhz
  31. void delay5us(void)   
  32. {
  33.     unsigned char a,b;
  34.     for(b=7;b>0;b--)
  35.         for(a=2;a>0;a--);
  36. }
  37. //12t的mcu 注释这个延时即可
  38. void delay(uint i)

  39. {                                                                                                     

  40.          while (i--){
  41.                  delay5us();}
  42. }

  43. /**********判断数字的位***********/

  44. uchar judgebit(uchar num,uchar b)

  45. {

  46.          char n;

  47.          num=num&(1<<b);

  48.          if (num)

  49.          n=1;

  50.          else

  51.          n=0;

  52.          return n;

  53. }

  54. /*To figure out the round number*///计算出圆的数量

  55. uchar abs(uchar a)

  56. {

  57.          uchar b;

  58.          b=a/10;

  59.          a=a-b*10;

  60.          if (a>=5)

  61.          b++;

  62.          return b;

  63. }

  64. //找出的绝对值

  65. uchar abss(char a)

  66. {

  67.          if (a<0)

  68.          a=-a;

  69.          return a;

  70. }

  71. /*可以比较。和删除后面的大。 */
  72. void max(uchar *a,uchar *b)
  73. {
  74.    uchar t;
  75.    if ((*a)>(*b))
  76.    {
  77.        t=(*a);
  78.        (*a)=(*b);
  79.        (*b)=t;   
  80.    }
  81. }

  82. //函数是找出最大数量和返回它。
  83. uchar maxt(uchar a,uchar b,uchar c)
  84. {
  85.          if (a<b)
  86.          a=b;
  87.          if (a<c)
  88.          a=c;
  89.          return a;
  90. }
  91. /*le控制573 le为P2(位清零)*/
  92. void clear(char le)
  93. {
  94.          uchar i,j;
  95.          for (j=0;j<8;j++)
  96.          {
  97.                for (i=0;i<8;i++)
  98.                display[j][i]=le;
  99.          }
  100. }
  101. /*******此函数将display[][]数组中的值显示出来*******/
  102. void trailler(uint speed)
  103. {
  104.          char i,j;
  105.          for(i=6;i>=-3;i--)
  106.          {

  107.                    if (i>=0)

  108.                    {

  109.                             for (j=0;j<8;j++)

  110.                             display[j][i]=display[j][i+1];

  111.                    }

  112.                    if (i<4)

  113.                    {

  114.                             for (j=0;j<8;j++)

  115.                             display[j][i+4]=0;

  116.                    }

  117.                    delay(speed);

  118.          }

  119. }
  120. //光立法灯的立体坐标以及控制其亮的LE端
  121. void point(uchar x,uchar y,uchar z,uchar le)
  122. {
  123.      uchar ch1,ch0;
  124.      ch1=1<<x;
  125.      ch0=~ch1;
  126.      if (le)
  127.      display[z][y]=display[z][y]|ch1;
  128.      else
  129.      display[z][y]=display[z][y]&ch0;
  130. }
  131. /**y表示第几个,cha表示第几个数组(字模原理每个数字或者图形产生8个16进制数)***/
  132. void type(uchar cha,uchar y)

  133. {        

  134.          uchar xx;

  135.          for (xx=0;xx<8;xx++)

  136.          {

  137.                  display[xx][y]=table_cha[cha][xx];//将取模好的数字或者图形的字模16进制,放入显示的数组。

  138.          }

  139. }
  140. /*第一个变量是中点的距离。第二个是层。第三是LED走的速度每两个点之间的时间。*/
  141. void cirp(char cpp,uchar dir,uchar le)
  142. {

  143.          uchar a,b,c,cp;

  144.          if ((cpp<128)&(cpp>=0))

  145.          {

  146.                if (dir)

  147.                cp=127-cpp;

  148.                else

  149.                cp=cpp;

  150.                a=(dat[cp]>>5)&0x07;

  151.                b=(dat[cp]>>2)&0x07;

  152.                c=dat[cp]&0x03;

  153.                if (cpp>63)

  154.                c=7-c;

  155.                point (a,b,c,le);

  156.          }

  157. }

  158. void line(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar le)
  159. {
  160.      char t,a,b,c,a1,b1,c1,i;
  161.      a1=x2-x1;
  162.      b1=y2-y1;
  163.      c1=z2-z1;
  164.      t=maxt(abss(a1),abss(b1),abss(c1));
  165.      a=x1*10;
  166.      b=y1*10;
  167.      c=z1*10;
  168.      a1=a1*10/t;
  169.      b1=b1*10/t;
  170.      c1=c1*10/t;
  171.      for (i=0;i<t;i++)
  172.      {
  173.                    point(abs(a),abs(b),abs(c),le);
  174.                    a+=a1;
  175.                    b+=b1;
  176.                    c+=c1;
  177.      }
  178.      point(x2,y2,z2,le);
  179. }

  180. void box(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar fill,uchar le)

  181. {

  182.          uchar i,j,t=0;

  183.          max(&x1,&x2);

  184.          max(&y1,&y2);

  185.          max(&z1,&z2);

  186.          for (i=x1;i<=x2;i++)

  187.                    t|=1<<i;

  188.          if (!le)

  189.                    t=~t;

  190.          if (fill)

  191.          {

  192.                    if (le)

  193.                    {

  194.                             for (i=z1;i<=z2;i++)

  195.                             {

  196.                                      for (j=y1;j<=y2;j++)

  197.                                                display[j][i]|=t;

  198.                             }

  199.                    }

  200.                    else

  201.                    {

  202.                             for (i=z1;i<=z2;i++)

  203.                             {

  204.                                      for (j=y1;j<=y2;j++)

  205.                                                display[j][i]&=t;

  206.                             }

  207.                    }

  208.          }

  209.          else

  210.          {

  211.                    if (le)

  212.                    {

  213.                             display[y1][z1]|=t;

  214.                             display[y2][z1]|=t;

  215.                             display[y1][z2]|=t;

  216.                             display[y2][z2]|=t;

  217.                    }

  218.                    else

  219.                    {

  220.                             display[y1][z1]&=t;

  221.                             display[y2][z1]&=t;

  222.                             display[y1][z2]&=t;

  223.                             display[y2][z2]&=t;

  224.                    }

  225.                    t=(0x01<<x1)|(0x01<<x2);

  226.                    if (!le)

  227.                             t=~t;

  228.                    if (le)

  229.                    {

  230.                             for (j=z1;j<=z2;j+=(z2-z1))

  231.                             {

  232.                                      for (i=y1;i<=y2;i++)

  233.                                                display[i][j]|=t;

  234.                             }

  235.                             for (j=y1;j<=y2;j+=(y2-y1))

  236.                             {

  237.                                      for (i=z1;i<=z2;i++)

  238.                                                display[j][i]|=t;

  239.                             }

  240.                    }

  241.                    else

  242.                    {

  243.                             for (j=z1;j<=z2;j+=(z2-z1))

  244.                             {

  245.                                      for (i=y1;i<=y2;i++)

  246.                                      {

  247.                                      display[i][j]&=t;

  248.                                      }

  249.                             }

  250.                             for (j=y1;j<=y2;j+=(y2-y1))

  251.                             {

  252.                                      for (i=z1;i<=z2;i++)

  253.                                      {

  254.                                      display[j][i]&=t;

  255.                                      }

  256.                             }

  257.                    }

  258.          }

  259. }

  260. void box_apeak_xy(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar fill,uchar le)
  261. {
  262.      uchar i;
  263.      max(&z1,&z2);//比较z1 = 0和z2 = 7;
  264.      if(fill) //fill为标志
  265.      {
  266.            for(i=z1;i<=z2;i++)
  267.            {
  268.                line (x1,y1,i,x2,y2,i,le);
  269.            }
  270.      }
  271.      else
  272.      {
  273.                line (x1,y1,z1,x2,y2,z1,le);
  274.                line (x1,y1,z2,x2,y2,z2,le);
  275.                line (x2,y2,z1,x2,y2,z2,le);
  276.                line (x1,y1,z1,x1,y1,z2,le);
  277.      }
  278. }

  279. void poke(uchar n,uchar x,uchar y)
  280. {

  281.          uchar i;

  282.          for (i=0;i<8;i++)

  283.          {

  284.           point(x,y,i,judgebit(n,i));

  285.          }

  286. }
  287. /**********仅仅进行三面显示,字母*******/
  288. void boxtola(char i,uchar n)

  289. {

  290.          if ((i>=0)&(i<8))

  291.          {

  292.                    poke(n,0,7-i);//在最边缘的地方显示第一面。

  293.          }

  294.          if ((i>=8)&(i<16))

  295.          {

  296.                    poke(n,i-8,0);//在最边缘的地方显示第二面。

  297.          }

  298.          if ((i>=16)&(i<24))

  299.          {

  300.                    poke(n,7,i-16);//在最边缘的地方显示第三面。

  301.          }
  302. /***此处也可以写第四面也显示,但是在下一个函数中a的值为3*8=24,仅仅3面*****/


  303. }
  304. /**按speed速度将table_id[]中的字母显示出来**/
  305. void rolldisplay(uint speed)
  306. {

  307.          uchar j;

  308.          char i,a;
  309.                  //以下语句是仅显示3面,如果显示4面则i的值需要改变。
  310.          for (i=23;i>-40;i--)//i的值一共为64个

  311.          {

  312.                    for (j=0;j<40;j++)//j为数组table_id[]的容量。

  313.                    {

  314.                             a=i+j;

  315.                             if ((a>=0)&(a<24))

  316.                             boxtola(a,table_id[j]);//该函数是在指定面显示出字母

  317.                    }

  318.                    delay(speed);

  319.          }

  320. }

  321. void roll_apeak_yz(uchar n,uint speed)
  322. {

  323.          uchar i;

  324.          switch(n)

  325.          {

  326.                    case 1:

  327.                             for (i=0;i<7;i++)

  328.                             {

  329.                                      display[i][7]=0;

  330.                                      display[7][6-i]=255;

  331.                                      delay(speed);

  332.                             };

  333.                             break;

  334.                    case 2:

  335.                             for (i=0;i<7;i++)

  336.                             {

  337.                                      display[7][7-i]=0;

  338.                                      display[6-i][0]=255;

  339.                                      delay(speed);

  340.                             };

  341.                             break;

  342.                    case 3:

  343.                             for (i=0;i<7;i++)

  344.                             {

  345.                                      display[7-i][0]=0;

  346.                                      display[0][i+1]=255;

  347.                                      delay(speed);

  348.                             };

  349.                             break;

  350.                    case 0:

  351.                             for (i=0;i<7;i++)

  352.                             {

  353.                                      display[0][i]=0;

  354.                                      display[i+1][7]=255;

  355.                                      delay(speed);

  356.                             };

  357.          }

  358. }

  359. void roll_apeak_xy(uchar n,uint speed)

  360. {

  361.          uchar i;

  362.          switch(n)

  363.          {

  364.                    case 1:

  365.                             for (i=0;i<7;i++)

  366.                             {

  367.                                      line(0,i,0,0,i,7,0);

  368.                                      line(i+1,7,0,i+1,7,7,1);

  369.                                      delay(speed);

  370.                             };

  371.                             break;

  372.                    case 2:

  373.                             for (i=0;i<7;i++)

  374.                             {

  375.                                      line(i,7,0,i,7,7,0);

  376.                                      line(7,6-i,0,7,6-i,7,1);

  377.                                      delay(speed);

  378.                             };

  379.                             break;

  380.                    case 3:

  381.                             for (i=0;i<7;i++)

  382.                             {

  383.                                      line(7,7-i,0,7,7-i,7,0);

  384.                                      line(6-i,0,0,6-i,0,7,1);

  385.                                      delay(speed);

  386.                             };

  387.                             break;

  388.                    case 0:

  389.                             for (i=0;i<7;i++)

  390.                             {

  391.                                      line(7-i,0,0,7-i,0,7,0);

  392.                                      line(0,i+1,0,0,i+1,7,1);

  393.                                      delay(speed);

  394.                             };

  395.          }

  396. }

  397. void roll_3_xy(uchar n,uint speed)

  398. {

  399.          uchar i;

  400.          switch(n)

  401.          {

  402.                    case 1:

  403.                             for (i=0;i<8;i++)

  404.                             {

  405.                                      box_apeak_xy (0,i,0,7,7-i,7,1,1);

  406.                                      delay(speed);

  407.                                      if (i<7)

  408.                                      box_apeak_xy (3,3,0,0,i,7,1,0);

  409.                             };

  410.                             break;

  411.                    case 2:

  412.                             for (i=0;i<8;i++)

  413.                             {

  414.                                       box_apeak_xy (7-i,0,0,i,7,7,1,1);

  415.                                      delay(speed);

  416.                                      if (i<7)

  417.                                      box_apeak_xy (3,4,0,i,7,7,1,0);

  418.                             };

  419.                             break;

  420.                    case 3:

  421.                             for (i=0;i<8;i++)

  422.                             {

  423.                                      box_apeak_xy (0,i,0,7,7-i,7,1,1);

  424.                                      delay(speed);

  425.                                      if (i<7)

  426.                                      box_apeak_xy (4,4,0,7,7-i,7,1,0);

  427.                             };

  428.                             break;

  429.                    case 0:

  430.                             for (i=0;i<8;i++)

  431.                             {

  432.                                      box_apeak_xy (7-i,0,0,i,7,7,1,1);

  433.                                      delay(speed);

  434.                                      if (i<7)

  435.                                      box_apeak_xy (4,3,0,7-i,0,7,1,0);

  436.                             };

  437.          }

  438. }

  439. void trans(uchar z,uint speed)

  440. {

  441.          uchar i,j;

  442.          for (j=0;j<8;j++)

  443.          {

  444.                    for (i=0;i<8;i++)

  445.                    {

  446.                             display[z][i]>>=1;

  447.                    }

  448.                    delay(speed);//亮的时间

  449.          }

  450. }

  451. void tranoutchar(uchar c,uint speed)

  452. {

  453.          uchar i,j,k,a,i2=0;

  454.          for (i=0;i<8;i++)

  455.          {

  456.                    if (i<7)

  457.                    box_apeak_xy (i+1,0,0,i+1,7,7,1,1);

  458.                    box_apeak_xy (i2,0,0,i2,7,7,1,0);

  459.                    a=0;

  460.                    i2=i+1;

  461.                    for (j=0;j<=i;j++)

  462.                    {

  463.                             a=a|(1<<j);

  464.                    }

  465.                    for (k=0;k<8;k++)

  466.                    {

  467.                             display[k][3]|=table_cha[c][k]&a;

  468.                             display[k][4]|=table_cha[c][k]&a;

  469.                    }

  470.                    delay(speed);

  471.          }

  472. }
  473. /*64个数据依次放入数组disply中*/
  474. void transss()

  475. {

  476.          uchar i,j;

  477.          for (i=0;i<8;i++)

  478.          {

  479.                    for (j=0;j<8;j++)

  480.                    display[i][j]<<=1;

  481.          }

  482. }




  483. void flash_1()
  484. {
  485.          clear(0);

  486.          type(1,4);//定位1显示到第四排

  487.          delay(60000);

  488.          type(2,4);//定位2显示到第四排

  489.          delay(60000);

  490.          type(3,4);//定位3显示到第四排

  491.          delay(60000);

  492.          type(4,4);//定位4显示到第四排

  493.          delay(60000);

  494.                  
  495.          type(5,4);//定位大写字母I显示到第四排

  496.          delay(60000);

  497.          type(6,4);//定位“心”显示到第四排

  498.          delay(60000);

  499.          type(7,4);//定位大写字母U显示到第四排

  500.          delay(60000);

  501.          delay(60000);

  502.          clear(0);

  503.          rolldisplay(30000);

  504.          type(0,7);

  505.          delay(60000);

  506.          trailler(6000);

  507.          delay(60000);

  508. }

  509. void flash_2()
  510. {
  511.          uchar i;
  512. /*         for (i=129;i>0;i--)//此处为2个为1组,一起闪。走一圈
  513.          {

  514.                    cirp(i-2,0,1);

  515.                    delay(8000);

  516.                    cirp(i-1,0,0);

  517.          }

  518.          delay(8000);     

  519.          for (i=0;i<136;i++)//此处为8个为一组亮136 = 128 + 8;走一圈。
  520.          {

  521.                    cirp(i,1,1);

  522.                    delay(8000);

  523.                    cirp(i-8,1,0);
  524.                                                
  525.          }

  526.          delay(8000); */

  527.          for (i=129;i>0;i--)//此处为走一圈亮一圈
  528.          {

  529.                    cirp(i-2,0,1);

  530.                    delay(8000);

  531.          }

  532.          delay(8000);

  533.         for (i=0;i<128;i++)//此处为灭一圈
  534.         {

  535.                    cirp(i-8,1,0);

  536.                    delay(8000);

  537.          }

  538.          delay(60000);  

  539. }

  540. void flash_3()
  541. {
  542.      char i;
  543.      for(i=0;i<8;i++)
  544.      {
  545.            box_apeak_xy(0,i,0,7,i,7,1,1);//0层-6层以delay(20000)的依次亮。
  546.            delay(20000);
  547.            if(i<7)
  548.            box_apeak_xy(0,i,0,7,i,7,1,0);//到第7层时就到下一个for语句。
  549.      }
  550.      for (i=7;i>=0;i--)
  551.      {
  552.            box_apeak_xy(0,i,0,7,i,7,1,1);//7层-1层以delay(20000)的依次亮。
  553.            delay(20000);
  554.            if (i>0)
  555.            box_apeak_xy(0,i,0,7,i,7,1,0);//到第0层时就到下一个for语句。
  556.      }

  557.      for (i=0;i<8;i++)//倾斜的亮(每层只有一排亮,依次错开)
  558.      {
  559.            box_apeak_xy(0,i,0,7,i,7,1,1);
  560.            delay(20000);
  561.            if (i<7)
  562.            box_apeak_xy(0,i,0,7,i,7,1,0);
  563.      }

  564. }

  565. void flash_4()//向内凹陷和向外凹陷的显示
  566. {
  567.          char i,j,an[8];
  568.          for(j=7;j<15;j++)
  569.               an[j-7]=j;//装入0-7值
  570.          for(i=0;i<=16;i++)
  571.          {
  572.                for(j=0;j<8;j++)
  573.                {
  574.                     if((an[j]<8)&(an[j]>=0))
  575.                     line(0,an[j],j,7,an[j],j,1);
  576.                }
  577.                for(j=0;j<8;j++)
  578.                {
  579.                     if(((an[j]+1)<8)&(an[j]>=0))
  580.                     line(0,an[j]+1,j,7,an[j]+1,j,0);
  581.                }
  582.                for (j=0;j<8;j++)
  583.                {
  584.                     if (an[j]>0)
  585.                     an[j]--;
  586.                }
  587.             delay(15000);
  588.          }
  589.          for(j=0;j<8;j++)
  590.              an[j]=1-j;
  591.          for(i=0;i<=16;i++)
  592.          {
  593.                for(j=0;j<8;j++)
  594.                {
  595.                     if((an[j]<8)&(an[j]>=0))
  596.                     line(0,an[j],j,7,an[j],j,1);
  597.                }
  598.                for(j=0;j<8;j++)
  599.                {
  600.                     if(((an[j]-1)<7)&(an[j]>0))
  601.                     line(0,an[j]-1,j,7,an[j]-1,j,0);
  602.                }
  603.                for(j=0;j<8;j++)
  604.                {
  605.                     if(an[j]<7)
  606.                     an[j]++;
  607.                }
  608.              delay(15000);
  609.          }
  610. }

  611. void flash_5()
  612. {

  613.          uint a=15000;//a=delay

  614.          char i=8,j,an[4];

  615.          //1 1-4为4个面循环的转。

  616.          for (j=7;j<11;j++)

  617.                    an[j-7]=j;

  618.          while(i--)

  619.          {

  620.                    for (j=0;j<4;j++)

  621.                    {

  622.                             if (an[j]<8)

  623.                             box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);

  624.                             if (an[j]<7)

  625.                             box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);

  626.                    }

  627.                    for (j=0;j<4;j++)

  628.                    {

  629.                             if (an[j]>3)

  630.                             an[j]--;

  631.                    }

  632.                    delay(a);

  633.          }

  634.          //2

  635.          i=3;

  636.          for (j=0;j<4;j++)

  637.          an[j]=5-j;

  638.          while(i--)

  639.          {

  640.                    for (j=1;j<4;j++)

  641.                    {

  642.                             if (an[j]<4)

  643.                             box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);

  644.                             if (an[j]<3)

  645.                             box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);

  646.                    }

  647.                    for (j=0;j<4;j++)

  648.                    {

  649.                             if (an[j]>0)

  650.                             an[j]--;

  651.                    }

  652.                    delay(a);

  653.          }

  654.          //3

  655.          i=3;

  656.          for (j=1;j<4;j++)

  657.          an[j]=4-j;

  658.          while(i--)

  659.          {

  660.                    for (j=1;j<4;j++)

  661.                    {

  662.                             if (an[j]>=0)

  663.                             box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);

  664.                             if (an[j]>0)

  665.                             box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);

  666.                    }

  667.                    for (j=1;j<4;j++)

  668.                    {

  669.                             if (an[j]<3)

  670.                             an[j]++;

  671.                    }

  672.                    delay(a);

  673.          }



  674.          //4

  675.          i=3;

  676.          for (j=0;j<4;j++)

  677.          an[j]=j+1;

  678.          while(i--)

  679.          {

  680.                    for (j=1;j<4;j++)

  681.                    {

  682.                             if (an[j]>3)

  683.                             box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);

  684.                             if (an[j]>3)

  685.                             box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);

  686.                    }

  687.                    for (j=0;j<4;j++)

  688.                             an[j]++;

  689.                    delay(a);

  690.          }

  691.          //5

  692.          i=3;

  693.          for (j=3;j<6;j++)

  694.                    an[j-2]=j;

  695.          while(i--)

  696.          {

  697.                    for (j=1;j<4;j++)

  698.                    {

  699.                             box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);

  700.                             box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);

  701.                    }

  702.                    for (j=0;j<4;j++)

  703.                    {

  704.                             if (an[j]>3)

  705.                             an[j]--;

  706.                    }

  707.                    delay(a);

  708.          }

  709.          //6

  710.          i=3;

  711.          for (j=0;j<4;j++)

  712.          an[j]=5-j;

  713.          while(i--)

  714.          {

  715.                    for (j=1;j<4;j++)

  716.                    {

  717.                             if (an[j]<4)

  718.                             box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);

  719.                             if (an[j]<3)

  720.                             box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);

  721.                    }

  722.                    for (j=0;j<4;j++)

  723.                    {

  724.                             if (an[j]>0)

  725.                             an[j]--;

  726.                    }

  727.                    delay(a);

  728.          }

  729.          //7

  730.          i=3;

  731.          for (j=0;j<4;j++)

  732.          an[j]=3-j;

  733.          an[0]=2;

  734.          while(i--)

  735.          {

  736.                    for (j=0;j<3;j++)

  737.                    {

  738.                             if (an[j]>=0)

  739.                                      box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);

  740.                             if (an[j]>=0)

  741.                                      box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);

  742.                    }

  743.                    for (j=0;j<4;j++)

  744.                    {

  745.                             if (j<5-i)

  746.                             an[j]--;

  747.                    }

  748.                    delay(a);

  749.          }

  750.          //8

  751.          i=10;

  752.          for (j=0;j<4;j++)

  753.                    an[j]=j-2;

  754.          while(i--)

  755.          {

  756.                    for (j=0;j<4;j++)

  757.                    {

  758.                             if (an[j]>=0)

  759.                             box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);

  760.                             if (an[j]>=0)

  761.                             box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);

  762.                    }

  763.                    for (j=0;j<4;j++)

  764.                    {

  765.                             if (an[j]<7)

  766.                             an[j]++;

  767.                    }

  768.                    delay(a);

  769.          }

  770. }

  771. /*void flash_6()

  772. {

  773.       uchar i,j,k,z;

  774.       roll_apeak_yz(1,10000);

  775.       roll_apeak_yz(2,10000);

  776.       roll_apeak_yz(3,10000);

  777.       roll_apeak_yz(0,10000);

  778.       roll_apeak_yz(1,10000);

  779.       roll_apeak_yz(2,10000);

  780.       roll_apeak_yz(3,10000);

  781.       for (i=0;i<3;i++)

  782.                {

  783.                          for (j=0;j<8;j++)

  784.                          {

  785.                                   for (k=0;k<8;k++)

  786.                                   {

  787.                                            if ((table_3p[i][j]>>k)&1)

  788.                                            {

  789.                                                      for (z=1;z<8;z++)

  790.                                                               {

  791.                                                                        point (j,7-k,z,1);

  792.                                                                        if (z-1)

  793.                                                                        point (j,7-k,z-1,0);

  794.                                                                        delay(5000);

  795.                                                               }

  796.                                            }

  797.                                   }

  798.                          }

  799.                          trans(7,15000);

  800.                }

  801. }

  802. void flash_7()

  803. {

  804.       uchar i;

  805.       uint a=3000;

  806.       roll_apeak_yz(0,10000);

  807.       roll_apeak_yz(1,10000);

  808.       roll_apeak_yz(2,10000);

  809.       roll_apeak_yz(3,10000);

  810.       roll_apeak_yz(0,10000);

  811.       roll_apeak_yz(1,10000);

  812.       roll_apeak_yz(2,10000);

  813.       roll_apeak_yz(3,10000);

  814.       roll_apeak_yz(0,10000);

  815.       roll_apeak_yz(1,10000);

  816.       roll_apeak_yz(2,10000);

  817.       roll_apeak_xy(0,10000);

  818.       roll_apeak_xy(1,10000);

  819.       roll_apeak_xy(2,10000);

  820.       roll_apeak_xy(3,10000);

  821.       roll_apeak_xy(0,10000);

  822.       roll_apeak_xy(1,10000);

  823.       roll_apeak_xy(2,10000);

  824.       roll_apeak_xy(3,10000);

  825.       for (i=0;i<8;i++)

  826.       {

  827.                box_apeak_xy (0,i,0,7-i,i,7,1,1);

  828.                delay(a);

  829.       }

  830.       delay(30000);

  831.       roll_3_xy(0,a);

  832.       delay(30000);

  833.       roll_3_xy(1,a);

  834.       delay(30000);

  835.       roll_3_xy(2,a);

  836.       delay(30000);

  837.       roll_3_xy(3,a);

  838.       delay(30000);

  839.       roll_3_xy(0,a);

  840.       delay(30000);

  841.       roll_3_xy(1,a);

  842.       delay(30000);

  843.       roll_3_xy(2,a);

  844.       delay(30000);

  845.       roll_3_xy(3,a);

  846.       for (i=7;i>0;i--)

  847.       {

  848.                box_apeak_xy(i,0,0,i,7,7,1,0);

  849.                delay(a);

  850.       }

  851. }*/

  852. void flash_8()

  853. {

  854.       uchar i;

  855.       for (i=5;i<8;i++)

  856.       {

  857.                tranoutchar(i,10000);

  858.                delay(60000);

  859.                delay(60000);

  860.       }

  861. }

  862. void flash_9()

  863. {

  864.       char i;

  865.       uchar j,an[8],x,y,t,x1,y1;

  866.       for (i=0;i<8;i++)

  867.       {

  868.                box_apeak_xy (i,0,0,i,7,7,1,1);

  869.                if (i)

  870.                box_apeak_xy (i-1,0,0,i-1,7,7,1,0);

  871.                delay(10000);

  872.       }

  873.       roll_apeak_xy(3,10000);

  874.       roll_apeak_xy(0,10000);

  875.       roll_apeak_xy(1,10000);

  876.       for (i=0;i<7;i++)

  877.       {

  878.                line(6-i,6-i,0,6-i,6-i,7,1);

  879.                line(i,7,0,i,7,7,0);

  880.                delay(10000);

  881.       }

  882.       for (i=0;i<8;i++)

  883.                an[i]=14;

  884.       for (i=0;i<85;i++)

  885.       {

  886.                clear(0);

  887.                for (j=0;j<8;j++)

  888.                {

  889.                          t=an[j]%28;

  890.                          x=dat2[t]>>5;

  891.                          y=(dat2[t]>>2)&0x07;

  892.                          t=(an[j]-14)%28;

  893.                          x1=dat2[t]>>5;

  894.                          y1=(dat2[t]>>2)&0x07;

  895.                          line(x,y,j,x1,y1,j,1);

  896.                }

  897.                for (j=0;j<8;j++)

  898.                {

  899.                if ((i>j)&(j>i-71))

  900.                an[j]++;

  901.                }

  902.                delay(5000);

  903.       }

  904.       for (i=0;i<85;i++)

  905.       {

  906.                clear(0);

  907.                for (j=0;j<8;j++)

  908.                {

  909.                          t=an[j]%28;

  910.                          x=dat2[t]>>5;

  911.                          y=(dat2[t]>>2)&0x07;

  912.                          t=(an[j]-14)%28;

  913.                          x1=dat2[t]>>5;

  914.                          y1=(dat2[t]>>2)&0x07;

  915.                          line(x,y,j,x1,y1,j,1);

  916.                }

  917.                for (j=0;j<8;j++)

  918.                {

  919.                if ((i>j)&(j>i-71))

  920.                an[j]--;

  921.                }

  922.                delay(5000);

  923.       }

  924.       for (i=0;i<29;i++)

  925.       {

  926.                clear(0);



  927.                t=an[0]%28;

  928.                x=dat2[t]>>5;

  929.                y=(dat2[t]>>2)&0x07;

  930.                t=(an[0]-14)%28;

  931.                x1=dat2[t]>>5;

  932.                y1=(dat2[t]>>2)&0x07;

  933.                box_apeak_xy(x,y,0,x1,y1,7,0,1);

  934.                box_apeak_xy(x,y,1,x1,y1,6,0,1);

  935.                an[0]++;

  936.                delay(5000);

  937.       }

  938.       for (i=0;i<16;i++)

  939.       {

  940.                clear(0);



  941.                t=an[0]%28;

  942.                x=dat2[t]>>5;

  943.                y=(dat2[t]>>2)&0x07;

  944.                t=(an[0]-14)%28;

  945.                x1=dat2[t]>>5;

  946.                y1=(dat2[t]>>2)&0x07;

  947.                box_apeak_xy(x,y,0,x1,y1,7,1,1);

  948.                an[0]--;

  949.                delay(5000);

  950.       }

  951.       for (i=0;i<8;i++)

  952.       {

  953.                line(i,i,0,0,0,i,0);

  954.                delay(5000);

  955.       }

  956.       for (i=1;i<7;i++)

  957.       {

  958.                line(i,i,7,7,7,i,0);

  959.                delay(5000);

  960.       }

  961.       for (i=1;i<8;i++)

  962.       {

  963.                clear(0);

  964.                box(7,7,7,7-i,7-i,7-i,0,1);

  965.                delay(10000);

  966.       }

  967.       for (i=1;i<7;i++)

  968.       {

  969.                clear(0);

  970.                box(0,0,0,7-i,7-i,7-i,0,1);

  971.                delay(10000);

  972.       }

  973.       for (i=1;i<8;i++)

  974.       {

  975.                clear(0);

  976.                box(0,0,0,i,i,i,0,1);

  977.                delay(10000);

  978.       }

  979.       for (i=1;i<7;i++)

  980.       {

  981.                clear(0);

  982.                box(7,0,0,i,7-i,7-i,0,1);

  983.                delay(10000);

  984.       }

  985.       for (i=1;i<8;i++)

  986.       {

  987.                box(7,0,0,7-i,i,i,1,1);

  988.                delay(10000);

  989.       }

  990.       for (i=1;i<7;i++)

  991.       {

  992.                clear(0);

  993.                box(0,7,7,7-i,i,i,1,1);

  994.                delay(10000);

  995.       }

  996. }

  997. void flash_10()

  998. {

  999.       uchar i,j,an[4],x,y,t;

  1000.       for (i=1;i<7;i++)

  1001.       {

  1002.                

  1003.                clear(0);

  1004.                box(0,6,6,1,7,7,1,1);

  1005.                box(i,6,6-i,i+1,7,7-i,1,1);

  1006.                box(i,6,6,i+1,7,7,1,1);

  1007.                box(0,6,6-i,1,7,7-i,1,1);

  1008.                box(0,6-i,6,1,7-i,7,1,1);

  1009.                box(i,6-i,6-i,i+1,7-i,7-i,1,1);

  1010.                box(i,6-i,6,i+1,7-i,7,1,1);

  1011.                box(0,6-i,6-i,1,7-i,7-i,1,1);

  1012.                delay(30000);

  1013.       }

  1014.       for (i=0;i<4;i++)

  1015.       {

  1016.                an[i]=6*i;

  1017.       }

  1018.       for (i=0;i<35;i++)

  1019.       {

  1020.                clear(0);

  1021.                for(j=0;j<4;j++)

  1022.                {

  1023.                          t=an[j]%24;

  1024.                          x=dat3[t]>>4;

  1025.                          y=dat3[t]&0x0f;

  1026.                          box(x,y,0,x+1,y+1,1,1,1);

  1027.                          box(x,y,6,x+1,y+1,7,1,1);

  1028.                }

  1029.                for (j=0;j<4;j++)

  1030.                an[j]++;

  1031.                delay(10000);

  1032.       }

  1033.       for (i=0;i<35;i++)

  1034.       {

  1035.                clear(0);

  1036.                for(j=0;j<4;j++)

  1037.                {

  1038.                          t=an[j]%24;

  1039.                          x=dat3[t]>>4;

  1040.                          y=dat3[t]&0x0f;

  1041.                          box(x,y,0,x+1,y+1,1,1,1);

  1042.                          box(x,y,6,x+1,y+1,7,1,1);

  1043.                }

  1044.                for (j=0;j<4;j++)

  1045.                an[j]--;

  1046.                delay(10000);

  1047.       }

  1048.       for (i=0;i<35;i++)

  1049.       {

  1050.                clear(0);

  1051.                for(j=0;j<4;j++)

  1052.                {

  1053.                          t=an[j]%24;

  1054.                          x=dat3[t]>>4;

  1055.                          y=dat3[t]&0x0f;

  1056.                          box(x,0,y,x+1,1,y+1,1,1);

  1057.                          box(x,6,y,x+1,7,y+1,1,1);

  1058.                }

  1059.                for (j=0;j<4;j++)

  1060.                an[j]++;

  1061.                delay(10000);

  1062.       }

  1063.       for (i=0;i<36;i++)

  1064.       {

  1065.                clear(0);

  1066.                for(j=0;j<4;j++)

  1067.                {

  1068.                          t=an[j]%24;

  1069.                          x=dat3[t]>>4;

  1070.                          y=dat3[t]&0x0f;

  1071.                          box(x,0,y,x+1,1,y+1,1,1);

  1072.                          box(x,6,y,x+1,7,y+1,1,1);

  1073.                }

  1074.                for (j=0;j<4;j++)

  1075.                an[j]--;

  1076.                delay(10000);

  1077.       }

  1078.       for (i=6;i>0;i--)

  1079.       {

  1080.                

  1081.                clear(0);

  1082.                box(0,6,6,1,7,7,1,1);

  1083.                box(i,6,6-i,i+1,7,7-i,1,1);

  1084.                box(i,6,6,i+1,7,7,1,1);

  1085.                box(0,6,6-i,1,7,7-i,1,1);

  1086.                box(0,6-i,6,1,7-i,7,1,1);

  1087.                box(i,6-i,6-i,i+1,7-i,7-i,1,1);

  1088.                box(i,6-i,6,i+1,7-i,7,1,1);

  1089.                box(0,6-i,6-i,1,7-i,7-i,1,1);

  1090.                delay(30000);

  1091.       }

  1092. }

  1093. void flash_11()

  1094. {

  1095.       uchar i,j,t,x,y;

  1096.       uchar code daa[13]={0,1,2,0x23,5,6,7,6,5,0x23,2,1,0};

  1097.       for (j=0;j<5;j++)

  1098.       {

  1099.                for (i=0;i<13;i++)

  1100.                {

  1101.                          if (daa[i]>>4)

  1102.                          {

  1103.                                   t=daa[i]&0x0f;

  1104.                                   line (0,0,t+1,0,7,t+1,1);

  1105.                          }

  1106.                          else

  1107.                                   t=daa[i];

  1108.                          line (0,0,t,0,7,t,1);

  1109.                          transss();

  1110.                          delay(10000);

  1111.                }

  1112.       }

  1113.       for (j=1;j<8;j++)

  1114.       {

  1115.                if (j>3)

  1116.                          t=4;

  1117.                else

  1118.                          t=j;

  1119.                for (i=0;i<24;i+=j)

  1120.                {

  1121.                          x=dat3[i]>>4;

  1122.                          y=dat3[i]&0x0f;

  1123.                          box_apeak_xy(0,x,y,0,x+1,y+1,1,1);

  1124.                          transss();

  1125.                          delay(10000);

  1126.                }

  1127.       }

  1128.       for (j=1;j<8;j++)

  1129.       {

  1130.                if (j>3)

  1131.                          t=4;

  1132.                else

  1133.                          t=j;

  1134.                for (i=0;i<24;i+=j)

  1135.                {

  1136.                          x=dat3[i]>>4;

  1137.                          y=dat3[i]&0x0f;

  1138.                          point (0,x,y,1);

  1139.                          transss();

  1140.                          delay(10000);

  1141.                }

  1142.       }

  1143. }

  1144. void main()

  1145. {
  1146.                
  1147.          sinter();
  1148.                  while(1){
  1149.         // clear(0);

  1150.          /*play list*/

  1151.          flash_1();

  1152.          clear(0);

  1153.          flash_2();

  1154.          flash_3();

  1155.          flash_4();

  1156.          flash_4();

  1157.          flash_5();

  1158.       flash_5();

  1159. //      flash_6();

  1160. //     flash_7();

  1161.       flash_8();

  1162.       flash_9();

  1163.       flash_10();

  1164.       clear (0);

  1165.       flash_11();

  1166.       flash_9();

  1167.       flash_5();

  1168. //      flash_7();

  1169.       flash_5();

  1170. //      flash_6();

  1171.       flash_8();

  1172.       flash_9();

  1173.       flash_10();

  1174.          }

  1175. }

  1176. //P0;   //573 in
  1177. //P1;  //uln2803
  1178. //P2;  //573 LE

  1179. void print() interrupt 1

  1180. {

  1181.          uchar i;

  1182.          static uchar layer=0;

  1183.          P1=0;

  1184.          for (i=0;i<8;i++)

  1185.          {

  1186.                    P2=1<<i;

  1187.                    delay(3);

  1188.                    P0=display[layer][i];

  1189.                    delay(3);

  1190.          }

  1191.          P1=1<<layer;

  1192.          if (layer<7)

  1193.                    layer++;

  1194.          else

  1195.                    layer=0;

  1196.          TH0=0xF5;

  1197.          TL0=0;

  1198. }
复制代码


光立方程序.zip

85.65 KB, 下载次数: 51, 下载积分: 黑币 -5

DIY光立方设计

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:137554 发表于 2016-10-7 13:21 | 只看该作者
牛人  这程序不错 收下了
回复

使用道具 举报

板凳
ID:173689 发表于 2017-3-20 22:07 来自手机 | 只看该作者
真真厉害我也想做一个。
回复

使用道具 举报

地板
ID:193719 发表于 2017-5-17 20:59 | 只看该作者
这个用89C52就能做吗?
回复

使用道具 举报

5#
ID:294624 发表于 2018-4-26 19:35 | 只看该作者
心累  B 下载了  唉
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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