找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机完美设计之光立方仿真 含proteus仿真文件及程序

[复制链接]
跳转到指定楼层
楼主
利用课余时间做的51单片机仿真光立方如下:






制作过程详解:http://www.51hei.com/bbs/dpj-50791-1.html
光立方仿真文件下载:http://www.51hei.com/bbs/dpj-50777-1.html

光立方程序:
  1. #include <REG52.H>
  2. #include <intrins.h>
  3. #define uchar unsigned char

  4. #define uint unsigned int

  5. uchar display[8][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]={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};

  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. /*initializtion

  19. That is to initialize the program .

  20. It is write to set the timer in c52 mcu.

  21. So the program can renovate the led_3d_cube in fixed time use the interrupt function.*/

  22. void sinter()

  23. {

  24.          IE=0x82;

  25.          TCON=0x01;

  26.          TH0=0xc0;

  27.          TL0=0;

  28.          TR0=1;

  29. }

  30. void delay5us(void)   //误差 -0.026765046296us STC 1T 22.1184Mhz
  31. {  
  32.     unsigned char a,b;
  33.     for(b=1;b>0;b--)
  34.         for(a=1;a>0;a--);         
  35. }                                                         

  36. void delay(uint i)

  37. {                                                                                                   
  38.                  i /= 5;
  39.          while (i--){
  40.                  delay5us();}//12t的mcu 注释这个延时即可                 
  41. }

  42. /*To judge the num bit*/

  43. uchar judgebit(uchar num,uchar b)

  44. {

  45.          char n;

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

  47.          if (num)

  48.          n=1;

  49.          else

  50.          n=0;

  51.          return n;

  52. }

  53. /*To figure out the round number*/

  54. uchar abs(uchar a)

  55. {

  56.          uchar b;

  57.          b=a/10;

  58.          a=a-b*10;

  59.          if (a>=5)

  60.          b++;

  61.          return b;

  62. }

  63. /*To figure out the absolute value*/

  64. uchar abss(char a)

  65. {

  66.          if (a<0)

  67.          a=-a;

  68.          return a;

  69. }

  70. /*The function can comparat the character.

  71. And remove the big one to the back.*/

  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. /*The function is to figure out the max number and return it.*/

  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. void clear(char le)

  92. {

  93.          uchar i,j;

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

  95.          {

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

  97.                    display[j][i]=le;

  98.          }

  99. }

  100. void trailler(uint speed)

  101. {

  102.          char i,j;

  103.          for (i=6;i>=-3;i--)

  104.          {

  105.                    if (i>=0)

  106.                    {

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

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

  109.                    }

  110.                    if (i<4)

  111.                    {

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

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

  114.                    }

  115.                    delay(speed);

  116.          }

  117. }

  118. void point(uchar x,uchar y,uchar z,uchar le)

  119. {

  120.          uchar ch1,ch0;

  121.          ch1=1<<x;

  122.          ch0=~ch1;

  123.          if (le)

  124.          display[z][y]=display[z][y]|ch1;

  125.          else

  126.          display[z][y]=display[z][y]&ch0;

  127. }

  128. void type(uchar cha,uchar y)

  129. {        

  130.          uchar xx;

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

  132.          {

  133.          display[xx][y]=table_cha[cha][xx];

  134.          }

  135. }

  136. /*The first variable is the distance from the midpoint.

  137. The second is the layer.

  138. the third is the flash speed of the time between each two point.

  139. The forth is the enable io,it controls weather draw or claen.*/

  140. void cirp(char cpp,uchar dir,uchar le)

  141. {

  142.          uchar a,b,c,cp;

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

  144.          {

  145.                    if (dir)

  146.                    cp=127-cpp;

  147.                    else

  148.                    cp=cpp;

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

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

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

  152.                    if (cpp>63)

  153.                    c=7-c;

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

  155.          }

  156. }

  157. void line(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar le)

  158. {

  159.          char t,a,b,c,a1,b1,c1,i;

  160.          a1=x2-x1;

  161.          b1=y2-y1;

  162.          c1=z2-z1;

  163.          t=maxt(abss(a1),abss(b1),abss(c1));

  164.          a=x1*10;

  165.          b=y1*10;

  166.          c=z1*10;

  167.          a1=a1*10/t;

  168.          b1=b1*10/t;

  169.          c1=c1*10/t;

  170.          for (i=0;i<t;i++)

  171.          {

  172.                    point(abs(a),abs(b),abs(c),le);

  173.                    a+=a1;

  174.                    b+=b1;

  175.                    c+=c1;

  176.          }

  177.          point(x2,y2,z2,le);

  178. }

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

  180. {

  181.          uchar i,j,t=0;

  182.          max(&x1,&x2);

  183.          max(&y1,&y2);

  184.          max(&z1,&z2);

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

  186.                    t|=1<<i;

  187.          if (!le)

  188.                    t=~t;

  189.          if (fill)

  190.          {

  191.                    if (le)

  192.                    {

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

  194.                             {

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

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

  197.                             }

  198.                    }

  199.                    else

  200.                    {

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

  202.                             {

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

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

  205.                             }

  206.                    }

  207.          }

  208.          else

  209.          {

  210.                    if (le)

  211.                    {

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

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

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

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

  216.                    }

  217.                    else

  218.                    {

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

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

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

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

  223.                    }

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

  225.                    if (!le)

  226.                             t=~t;

  227.                    if (le)

  228.                    {

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

  230.                             {

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

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

  233.                             }

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

  235.                             {

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

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

  238.                             }

  239.                    }

  240.                    else

  241.                    {

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

  243.                             {

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

  245.                                      {

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

  247.                                      }

  248.                             }

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

  250.                             {

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

  252.                                      {

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

  254.                                      }

  255.                             }

  256.                    }

  257.          }

  258. }

  259. void box_apeak_xy(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar fill,uchar le)

  260. {

  261.          uchar i;

  262.          max(&z1,&z2);

  263.          if (fill)

  264.          {

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

  266.                    {

  267.                             line (x1,y1,i,x2,y2,i,le);

  268.                    }

  269.          }

  270.          else

  271.          {

  272.                    line (x1,y1,z1,x2,y2,z1,le);

  273.                    line (x1,y1,z2,x2,y2,z2,le);

  274.                    line (x2,y2,z1,x2,y2,z2,le);

  275.                    line (x1,y1,z1,x1,y1,z2,le);

  276.          }

  277. }

  278. void poke(uchar n,uchar x,uchar y)

  279. {

  280.          uchar i;

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

  282.          {

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

  284.          }

  285. }

  286. void boxtola(char i,uchar n)

  287. {

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

  289.          {

  290.                    poke(n,0,7-i);

  291.          }

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

  293.          {

  294.                    poke(n,i-8,0);

  295.          }

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

  297.          {

  298.                    poke(n,7,i-16);

  299.          }



  300. }

  301. void rolldisplay(uint speed)

  302. {

  303.          uchar j;

  304.          char i,a;

  305.          for (i=23;i>-40;i--)

  306.          {

  307.                    for (j=0;j<40;j++)

  308.                    {

  309.                             a=i+j;

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

  311.                             boxtola(a,table_id[j]);

  312.                    }

  313.                    delay(speed);

  314.          }

  315. }

  316. void roll_apeak_yz(uchar n,uint speed)

  317. {

  318.          uchar i;

  319.          switch(n)

  320.          {

  321.                    case 1:

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

  323.                             {

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

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

  326.                                      delay(speed);

  327.                             };

  328.                             break;

  329.                    case 2:

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

  331.                             {

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

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

  334.                                      delay(speed);

  335.                             };

  336.                             break;

  337.                    case 3:

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

  339.                             {

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

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

  342.                                      delay(speed);

  343.                             };

  344.                             break;

  345.                    case 0:

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

  347.                             {

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

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

  350.                                      delay(speed);

  351.                             };

  352.          }

  353. }

  354. void roll_apeak_xy(uchar n,uint speed)

  355. {

  356.          uchar i;

  357.          switch(n)

  358.          {

  359.                    case 1:

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

  361.                             {

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

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

  364.                                      delay(speed);

  365.                             };

  366.                             break;

  367.                    case 2:

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

  369.                             {

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

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

  372.                                      delay(speed);

  373.                             };

  374.                             break;

  375.                    case 3:

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

  377.                             {

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

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

  380.                                      delay(speed);

  381.                             };

  382.                             break;

  383.                    case 0:

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

  385.                             {

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

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

  388.                                      delay(speed);

  389.                             };

  390.          }

  391. }

  392. void roll_3_xy(uchar n,uint speed)

  393. {

  394.          uchar i;

  395.          switch(n)

  396.          {

  397.                    case 1:

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

  399.                             {

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

  401.                                      delay(speed);

  402.                                      if (i<7)

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

  404.                             };

  405.                             break;

  406.                    case 2:

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

  408.                             {

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

  410.                                      delay(speed);

  411.                                      if (i<7)

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

  413.                             };

  414.                             break;

  415.                    case 3:

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

  417.                             {

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

  419.                                      delay(speed);

  420.                                      if (i<7)

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

  422.                             };

  423.                             break;

  424.                    case 0:

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

  426.                             {

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

  428.                                      delay(speed);

  429.                                      if (i<7)

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

  431.                             };

  432.          }

  433. }

  434. void trans(uchar z,uint speed)

  435. {

  436.          uchar i,j;

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

  438.          {

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

  440.                    {

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

  442.                    }

  443.                    delay(speed);

  444.          }

  445. }

  446. void tranoutchar(uchar c,uint speed)

  447. {

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

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

  450.          {

  451.                    if (i<7)

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

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

  454.                    a=0;

  455.                    i2=i+1;

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

  457.                    {

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

  459.                    }

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

  461.                    {

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

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

  464.                    }

  465.                    delay(speed);

  466.          }

  467. }

  468. void transss()

  469. {

  470.          uchar i,j;

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

  472.          {

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

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

  475.          }

  476. }



  477. /*From now on,the function below is to display the flash.*/

  478. void flash_1()

  479. {



  480.          clear(0);

  481.          type(1,0);

  482.          delay(60000);

  483.          type(2,0);

  484.          delay(60000);

  485.          type(3,0);

  486.          delay(60000);

  487.          type(4,0);

  488.          delay(60000);

  489.          delay(60000);

  490.          clear(0);

  491.          rolldisplay(30000);

  492.          type(0,7);

  493.          delay(60000);

  494.          trailler(6000);

  495.          delay(60000);

  496. }

  497. void flash_2()

  498. {

  499.          uchar i;

  500.          for (i=129;i>0;i--)

  501.          {

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

  503.                    delay(8000);

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

  505.          }

  506.          delay(8000);     

  507.          for (i=0;i<136;i++)

  508.          {

  509.                    cirp(i,1,1);

  510.                    delay(8000);

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

  512.          }

  513.          delay(8000);

  514.                   for (i=129;i>0;i--)

  515.          {

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

  517.                    delay(8000);

  518.          }

  519.          delay(8000);

  520.                    for (i=0;i<128;i++)

  521.          {

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

  523.                    delay(8000);

  524.          }

  525.          delay(60000);  

  526. }

  527. void flash_3()

  528. {

  529.          char i;

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

  531.          {

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

  533.                    delay(20000);

  534.                    if (i<7)

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

  536.          }

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

  538.          {

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

  540.                    delay(20000);

  541.                    if (i>0)

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

  543.          }

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

  545.          {

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

  547.                    delay(20000);

  548.                    if (i<7)

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

  550.          }

  551. }

  552. void flash_4()

  553. {

  554.          char i,j,an[8];

  555.          for (j=7;j<15;j++)

  556.                    an[j-7]=j;

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

  558.          {

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

  560.                    {

  561.                             if ((an[j]<8)&(an[j]>=0))

  562.                             line(0,an[j],j,7,an[j],j,1);

  563.                    }

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

  565.                    {

  566.                             if (((an[j]+1)<8)&(an[j]>=0))

  567.                             line(0,an[j]+1,j,7,an[j]+1,j,0);

  568.                    }

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

  570.                    {

  571.                             if (an[j]>0)

  572.                             an[j]--;

  573.                    }

  574.                    delay(15000);

  575.          }

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

  577.                    an[j]=1-j;

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

  579.          {

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

  581.                    {

  582.                             if ((an[j]<8)&(an[j]>=0))

  583.                             line(0,an[j],j,7,an[j],j,1);

  584.                    }

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

  586.                    {

  587.                             if (((an[j]-1)<7)&(an[j]>0))

  588.                             line(0,an[j]-1,j,7,an[j]-1,j,0);

  589.                    }

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

  591.                    {

  592.                             if (an[j]<7)

  593.                             an[j]++;

  594.                    }

  595.                    delay(15000);

  596.          }

  597. }

  598. void flash_5()

  599. {

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

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

  602.          //1

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

  604.                    an[j-7]=j;

  605.          while(i--)

  606.          {

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

  608.                    {

  609.                             if (an[j]<8)

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

  611.                             if (an[j]<7)

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

  613.                    }

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

  615.                    {

  616.                             if (an[j]>3)

  617.                             an[j]--;

  618.                    }

  619.                    delay(a);

  620.          }

  621.          //2

  622.          i=3;

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

  624.          an[j]=5-j;

  625.          while(i--)

  626.          {

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

  628.                    {

  629.                             if (an[j]<4)

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

  631.                             if (an[j]<3)

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

  633.                    }

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

  635.                    {

  636.                             if (an[j]>0)

  637.                             an[j]--;

  638.                    }

  639.                    delay(a);

  640.          }

  641.          //3

  642.          i=3;

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

  644.          an[j]=4-j;

  645.          while(i--)

  646.          {

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

  648.                    {

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

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

  651.                             if (an[j]>0)

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

  653.                    }

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

  655.                    {

  656.                             if (an[j]<3)

  657.                             an[j]++;

  658.                    }

  659.                    delay(a);

  660.          }



  661.          //4

  662.          i=3;

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

  664.          an[j]=j+1;

  665.          while(i--)

  666.          {

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

  668.                    {

  669.                             if (an[j]>3)

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

  671.                             if (an[j]>3)

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

  673.                    }

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

  675.                             an[j]++;

  676.                    delay(a);

  677.          }

  678.          //5

  679.          i=3;

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

  681.                    an[j-2]=j;

  682.          while(i--)

  683.          {

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

  685.                    {

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

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

  688.                    }

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

  690.                    {

  691.                             if (an[j]>3)

  692.                             an[j]--;

  693.                    }

  694.                    delay(a);

  695.          }

  696.          //6

  697.          i=3;

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

  699.          an[j]=5-j;

  700.          while(i--)

  701.          {

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

  703.                    {

  704.                             if (an[j]<4)

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

  706.                             if (an[j]<3)

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

  708.                    }

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

  710.                    {

  711.                             if (an[j]>0)

  712.                             an[j]--;

  713.                    }

  714.                    delay(a);

  715.          }

  716.          //7

  717.          i=3;

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

  719.          an[j]=3-j;

  720.          an[0]=2;

  721.          while(i--)

  722.          {

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

  724.                    {

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

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

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

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

  729.                    }

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

  731.                    {

  732.                             if (j<5-i)

  733.                             an[j]--;

  734.                    }

  735.                    delay(a);

  736.          }

  737.          //8

  738.          i=10;

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

  740.                    an[j]=j-2;

  741.          while(i--)

  742.          {

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

  744.                    {

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

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

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

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

  749.                    }

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

  751.                    {

  752.                             if (an[j]<7)

  753.                             an[j]++;

  754.                    }

  755.                    delay(a);

  756.          }

  757. }

  758. void flash_6()

  759. {

  760.       uchar i,j,k,z;

  761.       roll_apeak_yz(1,10000);

  762.       roll_apeak_yz(2,10000);

  763.       roll_apeak_yz(3,10000);

  764.       roll_apeak_yz(0,10000);

  765.       roll_apeak_yz(1,10000);

  766.       roll_apeak_yz(2,10000);

  767.       roll_apeak_yz(3,10000);

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

  769.                {

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

  771.                          {

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

  773.                                   {

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

  775.                                            {

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

  777.                                                               {

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

  779.                                                                        if (z-1)

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

  781.                                                                        delay(5000);

  782.                                                               }

  783.                                            }

  784.                                   }

  785.                          }

  786.                          trans(7,15000);

  787.                }

  788. }

  789. void flash_7()

  790. {

  791.       uchar i;

  792.       uint a=3000;

  793.       roll_apeak_yz(0,10000);

  794.       roll_apeak_yz(1,10000);

  795.       roll_apeak_yz(2,10000);

  796.       roll_apeak_yz(3,10000);

  797.       roll_apeak_yz(0,10000);

  798.       roll_apeak_yz(1,10000);

  799.       roll_apeak_yz(2,10000);

  800.       roll_apeak_yz(3,10000);

  801.       roll_apeak_yz(0,10000);

  802.       roll_apeak_yz(1,10000);

  803.       roll_apeak_yz(2,10000);

  804.       roll_apeak_xy(0,10000);

  805.       roll_apeak_xy(1,10000);

  806.       roll_apeak_xy(2,10000);

  807.       roll_apeak_xy(3,10000);

  808.       roll_apeak_xy(0,10000);

  809.       roll_apeak_xy(1,10000);

  810.       roll_apeak_xy(2,10000);

  811.       roll_apeak_xy(3,10000);

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

  813.       {

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

  815.                delay(a);

  816.       }

  817.       delay(30000);

  818.       roll_3_xy(0,a);

  819.       delay(30000);

  820.       roll_3_xy(1,a);

  821.       delay(30000);

  822.       roll_3_xy(2,a);

  823.       delay(30000);

  824.       roll_3_xy(3,a);

  825.       delay(30000);

  826.       roll_3_xy(0,a);

  827.       delay(30000);

  828.       roll_3_xy(1,a);

  829.       delay(30000);

  830.       roll_3_xy(2,a);

  831.       delay(30000);

  832.       roll_3_xy(3,a);

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

  834.       {

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

  836.                delay(a);

  837.       }

  838. }

  839. void flash_8()

  840. {

  841.       uchar i;

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

  843.       {

  844.                tranoutchar(i,10000);

  845.                delay(60000);

  846.                delay(60000);

  847.       }

  848. }

  849. void flash_9()

  850. {

  851.       char i;

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

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

  854.       {

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

  856.                if (i)

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

  858.                delay(10000);

  859.       }

  860.       roll_apeak_xy(3,10000);

  861.       roll_apeak_xy(0,10000);

  862.       roll_apeak_xy(1,10000);

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

  864.       {

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

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

  867.                delay(10000);

  868.       }

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

  870.                an[i]=14;

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

  872.       {

  873.                clear(0);

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

  875.                {

  876.                          t=an[j]%28;

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

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

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

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

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

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

  883.                }

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

  885.                {

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

  887.                an[j]++;

  888.                }

  889.                delay(5000);

  890.       }

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

  892.       {

  893.                clear(0);

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

  895.                {

  896.                          t=an[j]%28;

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

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

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

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

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

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

  903.                }

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

  905.                {

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

  907.                an[j]--;

  908.                }

  909.                delay(5000);

  910.       }

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

  912.       {

  913.                clear(0);



  914.                t=an[0]%28;

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

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

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

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

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

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

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

  922.                an[0]++;

  923.                delay(5000);

  924.       }

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

  926.       {

  927.                clear(0);



  928.                t=an[0]%28;

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

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

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

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

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

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

  935.                an[0]--;

  936.                delay(5000);

  937.       }

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

  939.       {

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

  941.                delay(5000);

  942.       }

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

  944.       {

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

  946.                delay(5000);

  947.       }

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

  949.       {

  950.                clear(0);

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

  952.                delay(10000);

  953.       }

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

  955.       {

  956.                clear(0);

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

  958.                delay(10000);

  959.       }

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

  961.       {

  962.                clear(0);

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

  964.                delay(10000);

  965.       }

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

  967.       {

  968.                clear(0);

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

  970.                delay(10000);

  971.       }

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

  973.       {

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

  975.                delay(10000);

  976.       }

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

  978.       {

  979.                clear(0);

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

  981.                delay(10000);

  982.       }

  983. }

  984. void flash_10()

  985. {

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

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

  988.       {

  989.                

  990.                clear(0);

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

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

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

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

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

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

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

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

  999.                delay(30000);

  1000.       }

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

  1002.       {

  1003.                an[i]=6*i;

  1004.       }

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

  1006.       {

  1007.                clear(0);

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

  1009.                {

  1010.                          t=an[j]%24;

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

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

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

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

  1015.                }

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

  1017.                an[j]++;

  1018.                delay(10000);

  1019.       }

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

  1021.       {

  1022.                clear(0);

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

  1024.                {

  1025.                          t=an[j]%24;

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

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

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

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

  1030.                }

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

  1032.                an[j]--;

  1033.                delay(10000);

  1034.       }

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

  1036.       {

  1037.                clear(0);

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

  1039.                {

  1040.                          t=an[j]%24;

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

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

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

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

  1045.                }

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

  1047.                an[j]++;

  1048.                delay(10000);

  1049.       }

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

  1051.       {

  1052.                clear(0);

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

  1054.                {

  1055.                          t=an[j]%24;

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

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

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

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

  1060.                }

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

  1062.                an[j]--;

  1063.                delay(10000);

  1064.       }

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

  1066.       {

  1067.                

  1068.                clear(0);

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

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

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

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

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

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

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

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

  1077.                delay(30000);

  1078.       }

  1079. }

  1080. void flash_11()

  1081. {

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

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

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

  1085.       {

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

  1087.                {

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

  1089.                          {

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

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

  1092.                          }

  1093.                          else

  1094.                                   t=daa[i];

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

  1096.                          transss();

  1097.                          delay(10000);

  1098.                }

  1099.       }

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

  1101.       {

  1102.                if (j>3)

  1103.                          t=4;

  1104.                else

  1105.                          t=j;

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

  1107.                {

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

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

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

  1111.                          transss();

  1112.                          delay(10000);

  1113.                }

  1114.       }

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

  1116.       {

  1117.                if (j>3)

  1118.                          t=4;

  1119.                else

  1120.                          t=j;

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

  1122.                {

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

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

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

  1126.                          transss();

  1127.                          delay(10000);

  1128.                }

  1129.       }

  1130. }

  1131. void main()

  1132. {
  1133.                
  1134.          sinter();
  1135.                  while(1){
  1136.         clear(0);

  1137.          

  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.          }

  1162. }

  1163. //P0;   //573 in
  1164. //P1;  //uln2803
  1165. //P2;  //573 LE

  1166. void print() interrupt 1

  1167. {

  1168.          uchar i;

  1169.          static uchar layer=0;

  1170.          P1=0;

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

  1172.          {

  1173.                    P2=1<<i;

  1174.                    delay(3);

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

  1176.                    delay(3);

  1177.          }

  1178.          P1=1<<layer;

  1179.          if (layer<7)

  1180.                    layer++;

  1181.          else

  1182.                    layer=0;

  1183.          TH0=0xc0;

  1184.          TL0=0;

  1185. }
复制代码



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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