找回密码
 立即注册

QQ登录

只需一步,快速开始

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

光立方原理图和PCB及源程序 全套资料下载

  [复制链接]
跳转到指定楼层
楼主


自己做的光立方的pcb文件和原理图,已经打样而且运行成功了的.下面有很多实物图片
LED板.rar (515.61 KB, 下载次数: 139)
共阳极的光立方程序:
动画程序.rar (4.15 KB, 下载次数: 88)

驱动电路PCB.pdf (871.21 KB, 下载次数: 72)


驱动板和LED板是分开的


下面是原理图:


源程序:
  1. /*Ideasoft
  2. http://2013mcu.taobao.com/
  3. edition:v1
  4. Display memery:display[8][8];
  5. */
  6. #include "reg52.h"
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. uchar xdata display[8][8];
  10. /*rank:A,1,2,3,4,I,D?,U*/
  11. 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};
  12. /*the "ideasoft"*/
  13. 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};
  14. /*railway*/
  15. uchar code dat[128]={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,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};
  16. /*railway 2*/
  17. 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};
  18. /*railway 3*/
  19. 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};
  20. /*3p char*/
  21. 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};
  22. /*initializtion
  23. That is to initialize the program .
  24. It is write to set the timer in c52 mcu.
  25. So the program can renovate the led_3d_cube in fixed time use the interrupt function.*/
  26. void sinter()
  27. {
  28.         IE=0x82;
  29.         TCON=0x01;
  30.         TH0=0xc0;
  31.         TL0=0;
  32.         TR0=1;
  33. }
  34. void delay5us(void)   //误差 -0.026765046296us STC 1T 22.1184Mhz
  35. {
  36.     unsigned char a,b;
  37.     for(b=3;b>0;b--)
  38.         for(a=1;a>0;a--);
  39. }

  40. void delay(uint i)

  41. {                                                                                                     

  42.          while (i--){delay5us();}//12t的mcu 注释这个延时即可
  43. }
  44. /*To judge the num bit*/
  45. uchar judgebit(uchar num,uchar b)
  46. {
  47.         char n;
  48.         num=num&(1<<b);
  49.         if (num)
  50.         n=1;
  51.         else
  52.         n=0;
  53.         return n;
  54. }
  55. /*To figure out the round number*/
  56. uchar abs(uchar a)
  57. {
  58.         uchar b;
  59.         b=a/10;
  60.         a=a-b*10;
  61.         if (a>=5)
  62.         b++;
  63.         return b;
  64. }
  65. /*To figure out the absolute value*/
  66. uchar abss(char a)
  67. {
  68.         if (a<0)
  69.         a=-a;
  70.         return a;
  71. }
  72. /*The function can comparat the character.
  73. And remove the big one to the back.*/
  74. void max(uchar *a,uchar *b)
  75. {
  76.    uchar t;
  77.    if ((*a)>(*b))
  78.    {
  79.                 t=(*a);
  80.                 (*a)=(*b);
  81.                 (*b)=t;   
  82.    }
  83. }
  84. /*The function is to figure out the max number and return it.*/
  85. uchar maxt(uchar a,uchar b,uchar c)
  86. {
  87.         if (a<b)
  88.         a=b;
  89.         if (a<c)
  90.         a=c;
  91.         return a;
  92. }
  93. void clear(char le)
  94. {
  95.         uchar i,j;
  96.         for (j=0;j<8;j++)
  97.         {
  98.                 for (i=0;i<8;i++)
  99.                 display[j][i]=le;
  100.         }
  101. }
  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. void point(uchar x,uchar y,uchar z,uchar le)
  121. {
  122.         uchar ch1,ch0;
  123.         ch1=1<<x;
  124.         ch0=~ch1;
  125.         if (le)
  126.         display[z][y]=display[z][y]|ch1;
  127.         else
  128.         display[z][y]=display[z][y]&ch0;
  129. }
  130. void type(uchar cha,uchar y)
  131. {        
  132.         uchar xx;
  133.         for (xx=0;xx<8;xx++)
  134.         {
  135.         display[xx][y]=table_cha[cha][xx];
  136.         }
  137. }
  138. /*The first variable is the distance from the midpoint.
  139. The second is the layer.
  140. the third is the flash speed of the time between each two point.
  141. The forth is the enable io,it controls weather draw or claen.*/
  142. void cirp(char cpp,uchar dir,uchar le)
  143. {
  144.         uchar a,b,c,cp;
  145.         if ((cpp<128)&(cpp>=0))
  146.         {
  147.                 if (dir)
  148.                 cp=127-cpp;
  149.                 else
  150.                 cp=cpp;
  151.                 a=(dat[cp]>>5)&0x07;
  152.                 b=(dat[cp]>>2)&0x07;
  153.                 c=dat[cp]&0x03;
  154.                 if (cpp>63)
  155.                 c=7-c;
  156.                 point (a,b,c,le);
  157.         }
  158. }
  159. void line(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar le)
  160. {
  161.         char t,a,b,c,a1,b1,c1,i;
  162.         a1=x2-x1;
  163.         b1=y2-y1;
  164.         c1=z2-z1;
  165.         t=maxt(abss(a1),abss(b1),abss(c1));
  166.         a=x1*10;
  167.         b=y1*10;
  168.         c=z1*10;
  169.         a1=a1*10/t;
  170.         b1=b1*10/t;
  171.         c1=c1*10/t;
  172.         for (i=0;i<t;i++)
  173.         {
  174.                 point(abs(a),abs(b),abs(c),le);
  175.                 a+=a1;
  176.                 b+=b1;
  177.                 c+=c1;
  178.         }
  179.         point(x2,y2,z2,le);
  180. }
  181. void box(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar fill,uchar le)
  182. {
  183.         uchar i,j,t=0;
  184.         max(&x1,&x2);
  185.         max(&y1,&y2);
  186.         max(&z1,&z2);
  187.         for (i=x1;i<=x2;i++)
  188.                 t|=1<<i;
  189.         if (!le)
  190.                 t=~t;
  191.         if (fill)
  192.         {
  193.                 if (le)
  194.                 {
  195.                         for (i=z1;i<=z2;i++)
  196.                         {
  197.                                 for (j=y1;j<=y2;j++)
  198.                                         display[j][i]|=t;
  199.                         }
  200.                 }
  201.                 else
  202.                 {
  203.                         for (i=z1;i<=z2;i++)
  204.                         {
  205.                                 for (j=y1;j<=y2;j++)
  206.                                         display[j][i]&=t;
  207.                         }
  208.                 }
  209.         }
  210.         else
  211.         {
  212.                 if (le)
  213.                 {
  214.                         display[y1][z1]|=t;
  215.                         display[y2][z1]|=t;
  216.                         display[y1][z2]|=t;
  217.                         display[y2][z2]|=t;
  218.                 }
  219.                 else
  220.                 {
  221.                          display[y1][z1]&=t;
  222.                         display[y2][z1]&=t;
  223.                         display[y1][z2]&=t;
  224.                         display[y2][z2]&=t;
  225.                 }
  226.                 t=(0x01<<x1)|(0x01<<x2);
  227.                 if (!le)
  228.                         t=~t;
  229.                 if (le)
  230.                 {
  231.                         for (j=z1;j<=z2;j+=(z2-z1))
  232.                         {
  233.                                 for (i=y1;i<=y2;i++)
  234.                                         display[i][j]|=t;
  235.                         }
  236.                         for (j=y1;j<=y2;j+=(y2-y1))
  237.                         {
  238.                                 for (i=z1;i<=z2;i++)
  239.                                         display[j][i]|=t;
  240.                         }
  241.                 }
  242.                 else
  243.                 {
  244.                         for (j=z1;j<=z2;j+=(z2-z1))
  245.                         {
  246.                                 for (i=y1;i<=y2;i++)
  247.                                 {
  248.                                 display[i][j]&=t;
  249.                                 }
  250.                         }
  251.                         for (j=y1;j<=y2;j+=(y2-y1))
  252.                         {
  253.                                 for (i=z1;i<=z2;i++)
  254.                                 {
  255.                                 display[j][i]&=t;
  256.                                 }
  257.                         }
  258.                 }
  259.         }
  260. }
  261. void box_apeak_xy(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar fill,uchar le)
  262. {
  263.         uchar i;
  264.         max(&z1,&z2);
  265.         if (fill)
  266.         {
  267.                 for (i=z1;i<=z2;i++)
  268.                 {
  269.                         line (x1,y1,i,x2,y2,i,le);
  270.                 }
  271.         }
  272.         else
  273.         {
  274.                 line (x1,y1,z1,x2,y2,z1,le);
  275.                 line (x1,y1,z2,x2,y2,z2,le);
  276.                 line (x2,y2,z1,x2,y2,z2,le);
  277.                 line (x1,y1,z1,x1,y1,z2,le);
  278.         }
  279. }
  280. void poke(uchar n,uchar x,uchar y)
  281. {
  282.         uchar i;
  283.         for (i=0;i<8;i++)
  284.         {
  285.          point(x,y,i,judgebit(n,i));
  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. }
  303. void rolldisplay(uint speed)
  304. {
  305.         uchar j;
  306.         char i,a;
  307.         for (i=23;i>-40;i--)
  308.         {
  309.                 for (j=0;j<40;j++)
  310.                 {
  311.                         a=i+j;
  312.                         if ((a>=0)&(a<24))
  313.                         boxtola(a,table_id[j]);
  314.                 }
  315.                 delay(speed);
  316.         }
  317. }
  318. void roll_apeak_yz(uchar n,uint speed)
  319. {
  320.         uchar i;
  321.         switch(n)
  322.         {
  323.                 case 1:
  324.                         for (i=0;i<7;i++)
  325.                         {
  326.                                 display[i][7]=0;
  327.                                 display[7][6-i]=255;
  328.                                 delay(speed);
  329.                         };
  330.                         break;
  331.                 case 2:
  332.                         for (i=0;i<7;i++)
  333.                         {
  334.                                 display[7][7-i]=0;
  335.                                 display[6-i][0]=255;
  336.                                 delay(speed);
  337.                         };
  338.                         break;
  339.                 case 3:
  340.                         for (i=0;i<7;i++)
  341.                         {
  342.                                 display[7-i][0]=0;
  343.                                 display[0][i+1]=255;
  344.                                 delay(speed);
  345.                         };
  346.                         break;
  347.                 case 0:
  348.                         for (i=0;i<7;i++)
  349.                         {
  350.                                 display[0][i]=0;
  351.                                 display[i+1][7]=255;
  352.                                 delay(speed);
  353.                         };
  354.         }
  355. }
  356. void roll_apeak_xy(uchar n,uint speed)
  357. {
  358.         uchar i;
  359.         switch(n)
  360.         {
  361.                 case 1:
  362.                         for (i=0;i<7;i++)
  363.                         {
  364.                                 line(0,i,0,0,i,7,0);
  365.                                 line(i+1,7,0,i+1,7,7,1);
  366.                                 delay(speed);
  367.                         };
  368.                         break;
  369.                 case 2:
  370.                         for (i=0;i<7;i++)
  371.                         {
  372.                                 line(i,7,0,i,7,7,0);
  373.                                 line(7,6-i,0,7,6-i,7,1);
  374.                                 delay(speed);
  375.                         };
  376.                         break;
  377.                 case 3:
  378.                         for (i=0;i<7;i++)
  379.                         {
  380.                                 line(7,7-i,0,7,7-i,7,0);
  381.                                 line(6-i,0,0,6-i,0,7,1);
  382.                                 delay(speed);
  383.                         };
  384.                         break;
  385.                 case 0:
  386.                         for (i=0;i<7;i++)
  387.                         {
  388.                                 line(7-i,0,0,7-i,0,7,0);
  389.                                 line(0,i+1,0,0,i+1,7,1);
  390.                                 delay(speed);
  391.                         };
  392.         }
  393. }
  394. void roll_3_xy(uchar n,uint speed)
  395. {
  396.         uchar i;
  397.         switch(n)
  398.         {
  399.                 case 1:
  400.                         for (i=0;i<8;i++)
  401.                         {
  402.                                 box_apeak_xy (0,i,0,7,7-i,7,1,1);
  403.                                 delay(speed);
  404.                                 if (i<7)
  405.                                 box_apeak_xy (3,3,0,0,i,7,1,0);
  406.                         };
  407.                         break;
  408.                 case 2:
  409.                         for (i=0;i<8;i++)
  410.                         {
  411.                                 box_apeak_xy (7-i,0,0,i,7,7,1,1);
  412.                                 delay(speed);
  413.                                 if (i<7)
  414.                                 box_apeak_xy (3,4,0,i,7,7,1,0);
  415.                         };
  416.                         break;
  417.                 case 3:
  418.                         for (i=0;i<8;i++)
  419.                         {
  420.                                 box_apeak_xy (0,i,0,7,7-i,7,1,1);
  421.                                 delay(speed);
  422.                                 if (i<7)
  423.                                 box_apeak_xy (4,4,0,7,7-i,7,1,0);
  424.                         };
  425.                         break;
  426.                 case 0:
  427.                         for (i=0;i<8;i++)
  428.                         {
  429.                                 box_apeak_xy (7-i,0,0,i,7,7,1,1);
  430.                                 delay(speed);
  431.                                 if (i<7)
  432.                                 box_apeak_xy (4,3,0,7-i,0,7,1,0);
  433.                         };
  434.         }
  435. }
  436. void trans(uchar z,uint speed)
  437. {
  438.         uchar i,j;
  439.         for (j=0;j<8;j++)
  440.         {
  441.                 for (i=0;i<8;i++)
  442.                 {
  443.                         display[z][i]>>=1;
  444.                 }
  445.                 delay(speed);
  446.         }
  447. }
  448. void tranoutchar(uchar c,uint speed)
  449. {
  450.         uchar i,j,k,a,i2=0;
  451.         for (i=0;i<8;i++)
  452.         {
  453.                 if (i<7)
  454.                 box_apeak_xy (i+1,0,0,i+1,7,7,1,1);
  455.                 box_apeak_xy (i2,0,0,i2,7,7,1,0);
  456.                 a=0;
  457.                 i2=i+1;
  458.                 for (j=0;j<=i;j++)
  459.                 {
  460.                         a=a|(1<<j);
  461.                 }
  462.                 for (k=0;k<8;k++)
  463.                 {
  464.                         display[k][3]|=table_cha[c][k]&a;
  465.                         display[k][4]|=table_cha[c][k]&a;
  466.                 }
  467.                 delay(speed);
  468.         }
  469. }
  470. void transss()
  471. {
  472.         uchar i,j;
  473.         for (i=0;i<8;i++)
  474.         {
  475.                 for (j=0;j<8;j++)
  476.                 display[i][j]<<=1;
  477.         }
  478. }

  479. /*From now on,the function below is to display the flash.*/
  480. void flash_1()
  481. {

  482.         clear(0);
  483.         type(1,0);
  484.         delay(60000);
  485.         type(2,0);
  486.         delay(60000);
  487.         type(3,0);
  488.         delay(60000);
  489.         type(4,0);
  490.         delay(60000);
  491.         delay(60000);
  492.         clear(0);
  493.         rolldisplay(30000);
  494.         type(0,7);
  495.         delay(60000);
  496.         trailler(6000);
  497.         delay(60000);
  498. }
  499. void flash_2()
  500. {
  501.         uchar i;
  502.         for (i=129;i>0;i--)
  503.         {
  504.                 cirp(i-2,0,1);
  505.                 delay(8000);
  506.                 cirp(i-1,0,0);
  507.         }
  508.         delay(8000);        
  509.         for (i=0;i<136;i++)
  510.         {
  511.                 cirp(i,1,1);
  512.                 delay(8000);
  513.                 cirp(i-8,1,0);
  514.         }
  515.         delay(8000);
  516.                 for (i=129;i>0;i--)
  517.         {
  518.                 cirp(i-2,0,1);
  519.                 delay(8000);
  520.         }
  521.         delay(8000);
  522.                 for (i=0;i<128;i++)
  523.         {
  524.                 cirp(i-8,1,0);
  525.                 delay(8000);
  526.         }
  527.         delay(60000);        
  528. }
  529. void flash_3()
  530. {
  531.         char i;
  532.         for (i=0;i<8;i++)
  533.         {
  534.                 box_apeak_xy(0,i,0,7,i,7,1,1);
  535.                 delay(20000);
  536.                 if (i<7)
  537.                 box_apeak_xy(0,i,0,7,i,7,1,0);
  538.         }
  539.         for (i=7;i>=0;i--)
  540.         {
  541.                 box_apeak_xy(0,i,0,7,i,7,1,1);
  542.                 delay(20000);
  543.                 if (i>0)
  544.                 box_apeak_xy(0,i,0,7,i,7,1,0);
  545.         }
  546.         for (i=0;i<8;i++)
  547.         {
  548.                 box_apeak_xy(0,i,0,7,i,7,1,1);
  549.                 delay(20000);
  550.                 if (i<7)
  551.                 box_apeak_xy(0,i,0,7,i,7,1,0);
  552.         }
  553. }
  554. void flash_4()
  555. {
  556.         char i,j,an[8];
  557.         for (j=7;j<15;j++)
  558.                 an[j-7]=j;
  559.         for (i=0;i<=16;i++)
  560.         {
  561.                 for (j=0;j<8;j++)
  562.                 {
  563.                         if ((an[j]<8)&(an[j]>=0))
  564.                         line(0,an[j],j,7,an[j],j,1);
  565.                 }
  566.                 for (j=0;j<8;j++)
  567.                 {
  568.                         if (((an[j]+1)<8)&(an[j]>=0))
  569.                         line(0,an[j]+1,j,7,an[j]+1,j,0);
  570.                 }
  571.                 for (j=0;j<8;j++)
  572.                 {
  573.                         if (an[j]>0)
  574.                         an[j]--;
  575.                 }
  576.                 delay(15000);
  577.         }
  578.         for (j=0;j<8;j++)
  579.                 an[j]=1-j;
  580.         for (i=0;i<=16;i++)
  581.         {
  582.                 for (j=0;j<8;j++)
  583.                 {
  584.                         if ((an[j]<8)&(an[j]>=0))
  585.                         line(0,an[j],j,7,an[j],j,1);
  586.                 }
  587.                 for (j=0;j<8;j++)
  588.                 {
  589.                         if (((an[j]-1)<7)&(an[j]>0))
  590.                         line(0,an[j]-1,j,7,an[j]-1,j,0);
  591.                 }
  592.                 for (j=0;j<8;j++)
  593.                 {
  594.                         if (an[j]<7)
  595.                         an[j]++;
  596.                 }
  597.                 delay(15000);
  598.         }
  599. }
  600. void flash_5()
  601. {
  602.         uint a=15000;//a=delay
  603.         char i=8,j,an[4];
  604.         //1
  605.         for (j=7;j<11;j++)
  606.                 an[j-7]=j;
  607.         while(i--)
  608.         {
  609.                 for (j=0;j<4;j++)
  610.                 {
  611.                         if (an[j]<8)
  612.                         box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  613.                         if (an[j]<7)
  614.                         box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);
  615.                 }
  616.                 for (j=0;j<4;j++)
  617.                 {
  618.                         if (an[j]>3)
  619.                         an[j]--;
  620.                 }
  621.                 delay(a);
  622.         }
  623.         //2
  624.         i=3;
  625.         for (j=0;j<4;j++)
  626.         an[j]=5-j;
  627.         while(i--)
  628.         {
  629.                 for (j=1;j<4;j++)
  630.                 {
  631.                         if (an[j]<4)
  632.                         box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  633.                         if (an[j]<3)
  634.                         box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);
  635.                 }
  636.                 for (j=0;j<4;j++)
  637.                 {
  638.                         if (an[j]>0)
  639.                         an[j]--;
  640.                 }
  641.                 delay(a);
  642.         }
  643.         //3
  644.         i=3;
  645.         for (j=1;j<4;j++)
  646.         an[j]=4-j;
  647.         while(i--)
  648.         {
  649.                 for (j=1;j<4;j++)
  650.                 {
  651.                         if (an[j]>=0)
  652.                         box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  653.                         if (an[j]>0)
  654.                         box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);
  655.                 }
  656.                 for (j=1;j<4;j++)
  657.                 {
  658.                         if (an[j]<3)
  659.                         an[j]++;
  660.                 }
  661.                 delay(a);
  662.         }

  663.         //4
  664.         i=3;
  665.         for (j=0;j<4;j++)
  666.         an[j]=j+1;
  667.         while(i--)
  668.         {
  669.                 for (j=1;j<4;j++)
  670.                 {
  671.                         if (an[j]>3)
  672.                         box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  673.                         if (an[j]>3)
  674.                         box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);
  675.                 }
  676.                 for (j=0;j<4;j++)
  677.                         an[j]++;
  678.                 delay(a);
  679.         }
  680.         //5
  681.         i=3;
  682.         for (j=3;j<6;j++)
  683.                 an[j-2]=j;
  684.         while(i--)
  685.         {
  686.                 for (j=1;j<4;j++)
  687.                 {
  688.                         box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  689.                         box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);
  690.                 }
  691.                 for (j=0;j<4;j++)
  692.                 {
  693.                         if (an[j]>3)
  694.                         an[j]--;
  695.                 }
  696.                 delay(a);
  697.         }
  698.         //6
  699.         i=3;
  700.         for (j=0;j<4;j++)
  701.         an[j]=5-j;
  702.         while(i--)
  703.         {
  704.                 for (j=1;j<4;j++)
  705.                 {
  706.                         if (an[j]<4)
  707.                         box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  708.                         if (an[j]<3)
  709.                         box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);
  710.                 }
  711.                 for (j=0;j<4;j++)
  712.                 {
  713.                         if (an[j]>0)
  714.                         an[j]--;
  715.                 }
  716.                 delay(a);
  717.         }
  718.         //7
  719.         i=3;
  720.         for (j=0;j<4;j++)
  721.         an[j]=3-j;
  722.         an[0]=2;
  723.         while(i--)
  724.         {
  725.                 for (j=0;j<3;j++)
  726.                 {
  727.                         if (an[j]>=0)
  728.                                 box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  729.                         if (an[j]>=0)
  730.                                 box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);
  731.                 }
  732.                 for (j=0;j<4;j++)
  733.                 {
  734.                         if (j<5-i)
  735.                         an[j]--;
  736.                 }
  737.                 delay(a);
  738.         }
  739.         //8
  740.         i=10;
  741.         for (j=0;j<4;j++)
  742.                 an[j]=j-2;
  743.         while(i--)
  744.         {
  745.                 for (j=0;j<4;j++)
  746.                 {
  747.                         if (an[j]>=0)
  748.                         box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  749.                         if (an[j]>=0)
  750.                         box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);
  751.                 }
  752.                 for (j=0;j<4;j++)
  753.                 {
  754.                         if (an[j]<7)
  755.                         an[j]++;
  756.                 }
  757.                 delay(a);
  758.         }
  759. }
  760. void flash_6()
  761. {
  762.         uchar i,j,k,z;
  763.         roll_apeak_yz(1,10000);
  764.         roll_apeak_yz(2,10000);
  765.         roll_apeak_yz(3,10000);
  766.         roll_apeak_yz(0,10000);
  767.         roll_apeak_yz(1,10000);
  768.         roll_apeak_yz(2,10000);
  769.         roll_apeak_yz(3,10000);
  770.         for (i=0;i<3;i++)
  771.                 {
  772.                         for (j=0;j<8;j++)
  773.                         {
  774.                                 for (k=0;k<8;k++)
  775.                                 {
  776.                                         if ((table_3p[i][j]>>k)&1)
  777.                                         {
  778.                                                 for (z=1;z<8;z++)
  779.                                                         {
  780.                                                                 point (j,7-k,z,1);
  781.                                                                 if (z-1)
  782.                                                                 point (j,7-k,z-1,0);
  783.                                                                 delay(5000);
  784.                                                         }
  785.                                         }
  786.                                 }
  787.                         }
  788.                         trans(7,15000);
  789.                 }
  790. }
  791. void flash_7()
  792. {
  793.         uchar i;
  794.         uint a=3000;
  795.         roll_apeak_yz(0,10000);
  796.         roll_apeak_yz(1,10000);
  797.         roll_apeak_yz(2,10000);
  798.         roll_apeak_yz(3,10000);
  799.         roll_apeak_yz(0,10000);
  800.         roll_apeak_yz(1,10000);
  801.         roll_apeak_yz(2,10000);
  802.         roll_apeak_yz(3,10000);
  803.         roll_apeak_yz(0,10000);
  804.         roll_apeak_yz(1,10000);
  805.         roll_apeak_yz(2,10000);
  806.         roll_apeak_xy(0,10000);
  807.         roll_apeak_xy(1,10000);
  808.         roll_apeak_xy(2,10000);
  809.         roll_apeak_xy(3,10000);
  810.         roll_apeak_xy(0,10000);
  811.         roll_apeak_xy(1,10000);
  812.         roll_apeak_xy(2,10000);
  813.         roll_apeak_xy(3,10000);
  814.         for (i=0;i<8;i++)
  815.         {
  816.                 box_apeak_xy (0,i,0,7-i,i,7,1,1);
  817.                 delay(a);
  818.         }
  819.         delay(30000);
  820.         roll_3_xy(0,a);
  821.         delay(30000);
  822.         roll_3_xy(1,a);
  823.         delay(30000);
  824.         roll_3_xy(2,a);
  825.         delay(30000);
  826.         roll_3_xy(3,a);
  827.         delay(30000);
  828.         roll_3_xy(0,a);
  829.         delay(30000);
  830.         roll_3_xy(1,a);
  831.         delay(30000);
  832.         roll_3_xy(2,a);
  833.         delay(30000);
  834.         roll_3_xy(3,a);
  835.         for (i=7;i>0;i--)
  836.         {
  837.                 box_apeak_xy(i,0,0,i,7,7,1,0);
  838.                 delay(a);
  839.         }
  840. }
  841. void flash_8()
  842. {
  843.         uchar i;
  844.         for (i=5;i<8;i++)
  845.         {
  846.                 tranoutchar(i,10000);
  847.                 delay(60000);
  848.                 delay(60000);
  849.         }
  850. }
  851. void flash_9()
  852. {
  853.         char i;
  854.         uchar j,an[8],x,y,t,x1,y1;
  855.         for (i=0;i<8;i++)
  856.         {
  857.                 box_apeak_xy (i,0,0,i,7,7,1,1);
  858.                 if (i)
  859.                 box_apeak_xy (i-1,0,0,i-1,7,7,1,0);
  860.                 delay(10000);
  861.         }
  862.         roll_apeak_xy(3,10000);
  863.         roll_apeak_xy(0,10000);
  864.         roll_apeak_xy(1,10000);
  865.         for (i=0;i<7;i++)
  866.         {
  867.                 line(6-i,6-i,0,6-i,6-i,7,1);
  868.                 line(i,7,0,i,7,7,0);
  869.                 delay(10000);
  870.         }
  871.         for (i=0;i<8;i++)
  872.                 an[i]=14;
  873.         for (i=0;i<85;i++)
  874.         {
  875.                 clear(0);
  876.                 for (j=0;j<8;j++)
  877.                 {
  878.                         t=an[j]%28;
  879.                         x=dat2[t]>>5;
  880.                         y=(dat2[t]>>2)&0x07;
  881.                         t=(an[j]-14)%28;
  882.                         x1=dat2[t]>>5;
  883.                         y1=(dat2[t]>>2)&0x07;
  884.                         line(x,y,j,x1,y1,j,1);
  885.                 }
  886.                 for (j=0;j<8;j++)
  887.                 {
  888.                 if ((i>j)&(j>i-71))
  889.                 an[j]++;
  890.                 }
  891.                 delay(5000);
  892.         }
  893.         for (i=0;i<85;i++)
  894.         {
  895.                 clear(0);
  896.                 for (j=0;j<8;j++)
  897.                 {
  898.                         t=an[j]%28;
  899.                         x=dat2[t]>>5;
  900.                         y=(dat2[t]>>2)&0x07;
  901.                         t=(an[j]-14)%28;
  902.                         x1=dat2[t]>>5;
  903.                         y1=(dat2[t]>>2)&0x07;
  904.                         line(x,y,j,x1,y1,j,1);
  905.                 }
  906.                 for (j=0;j<8;j++)
  907.                 {
  908.                 if ((i>j)&(j>i-71))
  909.                 an[j]--;
  910.                 }
  911.                 delay(5000);
  912.         }
  913.         for (i=0;i<29;i++)
  914.         {
  915.                 clear(0);

  916.                 t=an[0]%28;
  917.                 x=dat2[t]>>5;
  918.                 y=(dat2[t]>>2)&0x07;
  919.                 t=(an[0]-14)%28;
  920.                 x1=dat2[t]>>5;
  921.                 y1=(dat2[t]>>2)&0x07;
  922.                 box_apeak_xy(x,y,0,x1,y1,7,0,1);
  923.                 box_apeak_xy(x,y,1,x1,y1,6,0,1);
  924.                 an[0]++;
  925.                 delay(5000);
  926.         }
  927.         for (i=0;i<16;i++)
  928.         {
  929.                 clear(0);

  930.                 t=an[0]%28;
  931.                 x=dat2[t]>>5;
  932.                 y=(dat2[t]>>2)&0x07;
  933.                 t=(an[0]-14)%28;
  934.                 x1=dat2[t]>>5;
  935.                 y1=(dat2[t]>>2)&0x07;
  936.                 box_apeak_xy(x,y,0,x1,y1,7,1,1);
  937.                 an[0]--;
  938.                 delay(5000);
  939.         }
  940.         for (i=0;i<8;i++)
  941.         {
  942.                 line(i,i,0,0,0,i,0);
  943.                 delay(5000);
  944.         }
  945.         for (i=1;i<7;i++)
  946.         {
  947.                 line(i,i,7,7,7,i,0);
  948.                 delay(5000);
  949.         }
  950.         for (i=1;i<8;i++)
  951.         {
  952.                 clear(0);
  953.                 box(7,7,7,7-i,7-i,7-i,0,1);
  954.                 delay(10000);
  955.         }
  956.         for (i=1;i<7;i++)
  957.         {
  958.                 clear(0);
  959.                 box(0,0,0,7-i,7-i,7-i,0,1);
  960.                 delay(10000);
  961.         }
  962.         for (i=1;i<8;i++)
  963.         {
  964.                 clear(0);
  965.                 box(0,0,0,i,i,i,0,1);
  966.                 delay(10000);
  967.         }
  968.         for (i=1;i<7;i++)
  969.         {
  970.                 clear(0);
  971.                 box(7,0,0,i,7-i,7-i,0,1);
  972.                 delay(10000);
  973.         }
  974.         for (i=1;i<8;i++)
  975.         {
  976.                 box(7,0,0,7-i,i,i,1,1);
  977.                 delay(10000);
  978.         }
  979.         for (i=1;i<7;i++)
  980.         {
  981.                 clear(0);
  982.                 box(0,7,7,7-i,i,i,1,1);
  983.                 delay(10000);
  984.         }
  985. }
  986. void flash_10()
  987. {
  988.         uchar i,j,an[4],x,y,t;
  989.         for (i=1;i<7;i++)
  990.         {
  991.                
  992.                 clear(0);
  993.                 box(0,6,6,1,7,7,1,1);
  994.                 box(i,6,6-i,i+1,7,7-i,1,1);
  995.                 box(i,6,6,i+1,7,7,1,1);
  996.                 box(0,6,6-i,1,7,7-i,1,1);
  997.                 box(0,6-i,6,1,7-i,7,1,1);
  998.                 box(i,6-i,6-i,i+1,7-i,7-i,1,1);
  999.                 box(i,6-i,6,i+1,7-i,7,1,1);
  1000.                 box(0,6-i,6-i,1,7-i,7-i,1,1);
  1001.                 delay(30000);
  1002.         }
  1003.         for (i=0;i<4;i++)
  1004.         {
  1005.                 an[i]=6*i;
  1006.         }
  1007.         for (i=0;i<35;i++)
  1008.         {
  1009.                 clear(0);
  1010.                 for(j=0;j<4;j++)
  1011.                 {
  1012.                         t=an[j]%24;
  1013.                         x=dat3[t]>>4;
  1014.                         y=dat3[t]&0x0f;
  1015.                         box(x,y,0,x+1,y+1,1,1,1);
  1016.                         box(x,y,6,x+1,y+1,7,1,1);
  1017.                 }
  1018.                 for (j=0;j<4;j++)
  1019.                 an[j]++;
  1020.                 delay(10000);
  1021.         }
  1022.         for (i=0;i<35;i++)
  1023.         {
  1024.                 clear(0);
  1025.                 for(j=0;j<4;j++)
  1026.                 {
  1027.                         t=an[j]%24;
  1028.                         x=dat3[t]>>4;
  1029.                         y=dat3[t]&0x0f;
  1030.                         box(x,y,0,x+1,y+1,1,1,1);
  1031.                         box(x,y,6,x+1,y+1,7,1,1);
  1032.                 }
  1033.                 for (j=0;j<4;j++)
  1034.                 an[j]--;
  1035.                 delay(10000);
  1036.         }
  1037.         for (i=0;i<35;i++)
  1038.         {
  1039.                 clear(0);
  1040.                 for(j=0;j<4;j++)
  1041.                 {
  1042.                         t=an[j]%24;
  1043.                         x=dat3[t]>>4;
  1044.                         y=dat3[t]&0x0f;
  1045.                         box(x,0,y,x+1,1,y+1,1,1);
  1046.                         box(x,6,y,x+1,7,y+1,1,1);
  1047.                 }
  1048.                 for (j=0;j<4;j++)
  1049.                 an[j]++;
  1050.                 delay(10000);
  1051.         }
  1052.         for (i=0;i<36;i++)
  1053.         {
  1054.                 clear(0);
  1055.                 for(j=0;j<4;j++)
  1056.                 {
  1057.                         t=an[j]%24;
  1058.                         x=dat3[t]>>4;
  1059.                         y=dat3[t]&0x0f;
  1060.                         box(x,0,y,x+1,1,y+1,1,1);
  1061.                         box(x,6,y,x+1,7,y+1,1,1);
  1062.                 }
  1063.                 for (j=0;j<4;j++)
  1064.                 an[j]--;
  1065.                 delay(10000);
  1066.         }
  1067.         for (i=6;i>0;i--)
  1068.         {
  1069.                
  1070.                 clear(0);
  1071.                 box(0,6,6,1,7,7,1,1);
  1072.                 box(i,6,6-i,i+1,7,7-i,1,1);
  1073.                 box(i,6,6,i+1,7,7,1,1);
  1074.                 box(0,6,6-i,1,7,7-i,1,1);
  1075.                 box(0,6-i,6,1,7-i,7,1,1);
  1076.                 box(i,6-i,6-i,i+1,7-i,7-i,1,1);
  1077.                 box(i,6-i,6,i+1,7-i,7,1,1);
  1078.                 box(0,6-i,6-i,1,7-i,7-i,1,1);
  1079.                 delay(30000);
  1080.         }
  1081. }
  1082. void flash_11()
  1083. {
  1084.         uchar i,j,t,x,y;
  1085.         uchar code daa[13]={0,1,2,0x23,5,6,7,6,5,0x23,2,1,0};
  1086.         for (j=0;j<5;j++)
  1087.         {
  1088.                 for (i=0;i<13;i++)
  1089.                 {
  1090.                         if (daa[i]>>4)
  1091.                         {
  1092.                                 t=daa[i]&0x0f;
  1093.                                 line (0,0,t+1,0,7,t+1,1);
  1094.                         }
  1095.                         else
  1096.                                 t=daa[i];
  1097.                         line (0,0,t,0,7,t,1);
  1098.                         transss();
  1099.                         delay(10000);
  1100.                 }
  1101.         }
  1102.         for (j=1;j<8;j++)
  1103.         {
  1104.                 if (j>3)
  1105.                         t=4;
  1106.                 else
  1107.                         t=j;
  1108.                 for (i=0;i<24;i+=j)
  1109.                 {
  1110.                         x=dat3[i]>>4;
  1111.                         y=dat3[i]&0x0f;
  1112.                         box_apeak_xy(0,x,y,0,x+1,y+1,1,1);
  1113.                         transss();
  1114.                         delay(10000);
  1115.                 }
  1116.         }
  1117.         for (j=1;j<8;j++)
  1118.         {
  1119.                 if (j>3)
  1120.                         t=4;
  1121.                 else
  1122.                         t=j;
  1123.                 for (i=0;i<24;i+=j)
  1124.                 {
  1125.                         x=dat3[i]>>4;
  1126.                         y=dat3[i]&0x0f;
  1127.                         point (0,x,y,1);
  1128.                         transss();
  1129.                         delay(10000);
  1130.                 }
  1131.         }
  1132. }
  1133. void main()
  1134. {
  1135.         sinter();
  1136.         clear(0);
  1137.         /*play list*/
  1138.         flash_1();
  1139.         clear(0);
  1140.         flash_2();
  1141.         flash_3();
  1142.         flash_4();
  1143.         flash_4();
  1144.         flash_5();
  1145.         flash_5();
  1146.         flash_6();
  1147.         flash_7();
  1148.         flash_8();
  1149.         flash_9();
  1150.         flash_10();
  1151.         clear (0);
  1152.         flash_11();
  1153.         flash_9();
  1154.         flash_5();
  1155.         flash_7();
  1156.         flash_5();
  1157.         flash_6();
  1158.         flash_8();
  1159.         flash_9();
  1160.         flash_10();
  1161.         while(1);
  1162. }
  1163. void print() interrupt 1
  1164. {
  1165.         uchar i;
  1166.         static uchar layer=0;
  1167.         P1=0xff;
  1168.         for (i=0;i<8;i++)
  1169.         {
  1170.                 P2=1<<i;
  1171.                 delay(3);
  1172.                 P1=~display[layer][i];
  1173.                 delay(3);
  1174.         }
  1175.         P0=1<<layer;
  1176.         if (layer<8)
  1177.                 layer++;
  1178.         else
  1179.                 layer=0;
  1180.         TH0=0xc0;
  1181.         TL0=0;
  1182. }
复制代码





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

使用道具 举报

沙发
ID:140725 发表于 2016-10-20 20:01 | 只看该作者
光立方呼吸灯程序
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4.       
  5. int i=0;
  6. uchar code table[]={
  7. 0,0,1,2,3,4,5,6,7,8,9,10,
  8. 11,12,13,14,15,16,17,18,
  9. 19,20,21,22,23,24,25,26,27,
  10. 28,29,30,31,32,33,34,35,36,
  11. 37,38,39,40,41,42,43,44,45,
  12. 46,47,48,49,50,51,52,53,54,
  13. 55,56,57,58,59,60,61,62,63,
  14. 64,65,66,67,68,69,70,71,72,
  15. 73,74,75,76,77,78,79,80,81,82,
  16. 83,84,85,86,87,88,89,90,91,
  17. 92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,
  18. 110,111,112,113,114,115,116,117,118,119,120,121,122,123,124};
  19. void delay(uint z)
  20. {
  21.         uint x,y;
  22.         for(x=15;x>0;x--)
  23.         for(y=z;y>0;y--);
  24. }
  25. void light1(uchar num1)
  26. {
  27.         uchar j;
  28.         P2=0xff;
  29.         P1=0x00;
  30.         P2=0x00;
  31.         j = table[num1];
  32.         delay(j);
  33.         P2=0xff;
  34.         P1=0xff;
  35.         P2=0x00;
  36.         delay(126-j);
  37. }

  38. void light2(uchar num2)
  39. {
  40.         uchar j;
  41.         P2=0xff;
  42.         P1=0xff;
  43.         P2=0x00;
  44.         j = table[num2];
  45.         delay(j);
  46.         P2=0xff;
  47.         P1=0x00;
  48.         P2=0x00;
  49.         delay(126-j);
  50. }
  51. void main()
  52. {      
  53.         while(1)
  54.         {          for(i=0;i<126;i++)
  55.                 {
  56.                         light2(i);
  57.                 }
  58.                 P2=0xff;
  59.                 P1=0xff;
  60.                 P2=0x00;
  61.                 delay(100);
  62.                 for(i=0;i<126;i++)
  63.                 {
  64.                         light1(i);
  65.                 }      

  66.                
  67.         }
  68. }
复制代码
回复

使用道具 举报

板凳
ID:143958 发表于 2016-10-29 22:47 | 只看该作者
赞一个,做工很厉害啊
回复

使用道具 举报

地板
ID:94133 发表于 2017-11-7 20:11 | 只看该作者
这个是真心的赞。太好了
回复

使用道具 举报

5#
ID:164385 发表于 2018-10-13 14:09 | 只看该作者
很赞的制作,很棒啊!
回复

使用道具 举报

6#
ID:446674 发表于 2018-12-27 17:14 | 只看该作者
不错不错,这几天我一直想做一个,正在疯狂的搜集资料,多谢楼主
回复

使用道具 举报

7#
ID:436850 发表于 2019-8-11 09:57 | 只看该作者
赞&#128077;,超棒
回复

使用道具 举报

8#
ID:510943 发表于 2019-12-4 15:42 | 只看该作者
请问,可不可以把器件清单可以发我一下呢?
邮箱1226231427@qq.com
万分感谢!
回复

使用道具 举报

9#
ID:612563 发表于 2020-4-24 10:34 来自手机 | 只看该作者
用的是什么mcu
回复

使用道具 举报

10#
ID:612563 发表于 2020-4-30 15:18 来自手机 | 只看该作者
很精妙
回复

使用道具 举报

11#
ID:704585 发表于 2020-5-3 14:06 | 只看该作者
多谢楼主分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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