找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 25659|回复: 39
收起左侧

光立方程序源码下载(烟花+雨滴+旋转效果)带视频

  [复制链接]
ID:74827 发表于 2015-3-18 20:39 | 显示全部楼层 |阅读模式
本帖最后由 my_way_old 于 2015-5-2 21:36 编辑


简单的显示功能,网上查资料,整理,编程,结合大家的智慧,可以说是站在巨人的肩膀在行动


可以说这次是个很好的学习过程

原理图+PCB : guanglifa_PCB.rar (1.41 MB, 下载次数: 530)

评分

参与人数 1黑币 +7 收起 理由
张小帅1126 + 7 很给力!

查看全部评分

回复

使用道具 举报

ID:74827 发表于 2015-3-18 20:41 | 显示全部楼层
主程序:
  1. #include "STC.h"         //STC12C5A60S2头文件
  2. #include "MyType.h"      //常用数据类型定义
  3. #include "led_do.h"         //LED驱动头文件
  4. #include "intrins.h"
  5. #include "shuzu.h"     //字模数据
  6. int flag=0,flag1=0,a=0;
  7. void LED_Init();
  8. void ON_OFF();
  9. void Delayms(uint16 n);
  10. void Delay(uint16 z);
  11. bit kk1;



  12. //X 片选   Y 数据  Z 2803
  13. void main()
  14. {
  15.         uint8 i,j;       
  16.         Z=0;       
  17.    while(k2==1);
  18.    LED_Init();
  19.    for(i=0;i<2;i++)
  20.            DOT_PWM(0,0,0,120);
  21.         Delayms(800);
  22.         CUBE_LOG6(NUM2,3);         // 倒数321
  23.         CLEAR();
  24.         while(1)
  25.         {
  26.                 zimu(number,13,20,1);   //LED CUBE       
  27.                 CLEAR();
  28.                 denghuo(3);         //逐亮逐灭               
  29.                 CUBE_LOG5();   //一个府面的LED,从下向上
  30.                 Delayms(100);
  31.                 LOG18();                  //从顶层,向下一层层点亮,到全亮
  32.                 Delayms(100);
  33.                 LOG16();                //全亮
  34.                 donghua(bianxing_table,11,1,24);  //变形收缩,释放四个小正方形
  35.                 Delayms(100);
  36.                 FIRE(0,0);
  37.                 FIRE(0,7);
  38.                 FIRE(7,7);
  39.                 FIRE(7,0);       
  40.                                        
  41.                 CUBE_LOG5();  //逐面点亮一个府面的LED,从下向上流动
  42.                 shalou1();
  43.                 fn(4);          //Delayms(8000); //沙漏痕迹
  44.                 LOG12_1(); //落潮                  
  45.                 for(i=0;i<1;i++)
  46.                      for(j=0;j<3;j++)
  47.                               cube(1,j,6);          //空心立体放大缩小
  48.                 LOG5();          //正方体收缩
  49.                 LOG1(); //small cube    //小正方体扩大,左右小正方体,四角小正体
  50.                
  51.                 CUBE_LOG5();  //逐面点亮一个府面的LED,从下向上流动
  52.                 CLEAR();
  53.                 LOG13(); // 下雨
  54.                 rain(1,10,9);
  55.                 CLEAR();
  56.                 LOG22(); //雨滴
  57.                 donghua(sin_cube_table,14,8,7);//波面起伏          //////
  58.                 CUBE_LOG9();//雨帘
  59.                 CUBE_LOG10();//音乐律动
  60.                 LOG2(2,4);
  61.                 LOG2(4,2);
  62.                 CLEAR();               
  63.                 CUBE_LOG11();//水平表面顺时针环绕

  64.                 link00();  //四个角收缩,全亮

  65.                 LOG12(); //波浪
  66.                 for(i=0;i<2;i++)
  67.                 LOG17(); //从底层,一层层点亮,到全亮
  68.                 donghua(bianxing_table,11,1,24);  //变形收缩

  69.                 LOG23(); //音柱        ////
  70.                        
  71.                 FIRE(1,2);
  72.                 shalou1();
  73.                 LOG2(3,4);
  74.                
  75.                 FIRE(6,3);

  76.                 flash0(2); //条状升降
  77.                    
  78.            fn(4);          //Delayms(8000); //沙漏痕迹
  79.            flash0(5);  //底面到顶面,led上下移动
  80.                 xuanzhuantiao(0,8,3);//空心旋转
  81.            qumianxuanzhuan(1,10,3);
  82.             qumianxuanzhuan(0,10,3);
  83.            linkpc1(10);         //一个Z面从上到下

  84.             pc1(4,3);   //由下到上闪亮,再一个Z面从上到下
  85.                 Delayms(100);
  86.                 CLEAR();
  87.                  denghuo(3);         //逐亮逐灭
  88.                  leitu(yc_table,3,2);        //I LOVE U
  89.                  CLEAR();
  90.                  link_pingmian1(1);        //一行LED从左到右

  91.             pingmian1(8,3);           //水平面逆时针环绕

  92.                 for(i=0;i<8;i++)
  93.              print(tab_print+i*8,0);
  94.             jb0(10,3);         //竖直面环绕

  95.                 link(8); //旋转衔接
  96.                
  97.                 xuanzhuantiao(1,5,3);//平面旋转
  98.                 xuanzhuantiao2(2,3); //移动旋转
  99.                 qumianxuanzhuan(1,10,4);
  100.             qumianxuanzhuan(0,10,4);
  101.                 qumianxuanzhuan2(13,8);//曲面摆动
  102.                
  103.              xuanzhuantiao(1,3,7);
  104.       xuanzhuantiao(1,3,5);
  105.       xuanzhuantiao(1,5,3);         

  106.         donghua(bianxing_table,11,1,24);  //变形收缩,释放四个小正方形
  107.     xzcube();                   //三方向旋转,再全亮
  108.     donghua(y_table,6,5,5); //四角小正方形旋转
  109.     donghua(x_table,6,5,5);
  110.     donghua(z_table,6,5,5);
  111.             link00();                                                                                                                                                                    

  112.         shensuo(5);          
  113.         donghua(sin_cube_table,14,8,5);//波面起伏
  114.         for(i=0;i<1;i++)
  115.      for(j=0;j<3;j++)
  116.       cube(0,j,6);         //实心立体放大缩小
  117.          donghua(hart_table,2,10,32); //跳动的心   Delayms(8000);
  118.             rain(0,10,9);
  119.                 LOG2(3,4);
  120.                 CLEAR();
  121.         while(1);
  122.         }
  123. }


  124. void LED_Init()
  125. {
  126.         IT0=1;
  127.         EX0=1;
  128.         EA=1;
  129.         kk1=1;
  130. }
  131. void EX_INT0() interrupt  0
  132. {
  133.         Delayms(20);
  134.                 kk1=~kk1;                       
  135. }
  136. void Delayms(uint16 n)
  137. {
  138.   uint16 x,y;

  139.   for(x=n;x>0;x--)
  140.     for(y=0;y<600;y++);
  141. }  
  142. void Delay(uint16 z)
  143. {
  144.   uint8 i,t;
  145.   for(t=z;t>0;t--)
  146.     for(i=0;i<110;i++);
  147. }
复制代码
回复

使用道具 举报

ID:74827 发表于 2015-3-18 20:41 | 显示全部楼层
led_do.c文件:
  1. #include "led_do.h"         //LED驱动头文件
  2. #include "shuzu.h"
  3. #include "MyType.h"      //常用数据类型定义
  4. //#include "Delay.h"       //延时函数头文件
  5. #include "stdlib.h"
  6. #include "intrins.h"
  7. void Delayms(uint16 n);
  8. void Delay(uint16 z);
  9. //清零
  10. void CLEAR()
  11. {   
  12.         Y=0x00; //设置Y轴坐标
  13.         X=0xff;   
  14.         X=0x00; //锁存X轴坐标
  15.         Z=0x00; //熄灭所有LED  
  16. }

  17. /*********************************************************************************************
  18. 函数名:点亮某一坐标点上的LED,坐标是:(x,y,z)
  19. 调  用:LED_DOT_ON (?);
  20. 参  数:x:x轴, y:y轴, z:z轴
  21. 结  果:点亮相对应坐标点上的一个LED,其他坐标点上的LED熄灭
  22. /*********************************************************************************************/
  23. void LED_DOT_ON(uint8 x1, uint8 y1, uint8 z1)
  24. {   uint8 MOVE[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  25.         X=MOVE[x1];
  26.         Y=MOVE[y1];
  27.         Z=MOVE[z1];
  28.         X=0x00;
  29.        
  30. }

  31. /*******************************************************************
  32. 某坐标灯,作呼吸灯闪烁
  33. ********************************************************************/
  34. void DOT_PWM(uchar x1,uchar y1,uchar z1,int T)
  35. {
  36.         uint16 LOW=0;
  37.         if(T<0) T=100;
  38.         if((x1>=0||x1<8)&&(y1>=0||y1<8)&&(z1>=0||z1<8))
  39.         {
  40.                 CLEAR();
  41.                 Z1 = 0xff;
  42.                 Delay(100);
  43.                
  44.                 for(LOW=1;LOW<T;LOW++)
  45.                 {
  46.                         LED_DOT_ON(x1,y1,z1);
  47.                         Delay(LOW);
  48.                         CLEAR();
  49.                         Delay(T-LOW);
  50.                 }
  51.                
  52.                 LED_DOT_ON(x1,y1,z1);
  53.                 Delay(200);
  54.        
  55.                 for(LOW=T-1;LOW>0;LOW--)
  56.                 {
  57.                         LED_DOT_ON(x1,y1,z1);
  58.                         Delay(LOW);
  59.                         CLEAR();
  60.                         Delay(T-LOW);  
  61.                 }
  62.         }         
  63. }

  64. /*********************************************************************************************
  65. 函数名:图形1
  66. 调  用:CUBE_LOG1 ();
  67. 结  果:逐一叠加点亮坐标为(0,y,0)点上的一轴LED,其他坐标点上的LED熄灭
  68.         自下向上,一列
  69. /*********************************************************************************************/
  70. void CUBE_LOG1()
  71. {
  72.         uint8 i;
  73.        
  74.         CLEAR();   
  75.        
  76.         Z = 0x01; //设置Y轴坐标
  77.         X = 0x01; //设置X轴坐标  
  78.        
  79.         for(i=0;i<8;i++)
  80.         {
  81.                 Y = ADD_Y[i]; //锁存X轴坐标
  82.                 Delayms(300);
  83.         }
  84.         X = 0x00;
  85. }  

  86. /*********************************************************************************************
  87. 函数名:图形2
  88. 调  用:CUBE_LOG2 ();
  89. 结  果:逐一轴叠加点亮坐标为(0,y,0~7)点上的一轴LED,其他坐标点上的LED熄灭(左侧面)
  90. /*********************************************************************************************/
  91. void CUBE_LOG2()
  92. {
  93.         uint8 y;
  94.        
  95.         Z = 0x00; //熄灭所有LED  
  96.         Y = 0x80; //设置Y轴坐标
  97.         X = 0x01; //设置X轴坐标   
  98.         X = 0x00; //锁存X轴坐标
  99.         Z = 0xff; //(0,7,z)轴上的LED
  100.        
  101.         for(y=0;y<8;y++)
  102.         {
  103.                 Y |= 0x80>>y;
  104.                 X = 0x01; //设置X轴坐标   
  105.                 X = 0x00; //锁存X轴坐标
  106.                 Delayms(200);
  107.         }
  108. }  
  109. /*********************************************************************************************
  110. 函数名:图形3
  111. 调  用:CUBE_LOG3 ();
  112. 结  果:逐面点亮一个侧面的LED,从左向右流动,其他坐标点上的LED熄灭
  113. /*********************************************************************************************/
  114. void CUBE_LOG3()
  115. {
  116.         uint8 x;
  117.        
  118.         Z = 0x00; //熄灭所有LED   
  119.         Y = 0xff; //设置Y轴坐标
  120.         X = 0x01; //设置X轴坐标   
  121.         X = 0x00; //锁存X轴坐标
  122.         Z = 0xff; //(0,7,z)轴上的LED
  123.        
  124.         for(x=0;x<8;x++)
  125.         {
  126.                 Y = 0x00; //设置Y轴坐标
  127.                 X = 0xff; //设置X轴坐标   
  128.                 X = 0x00; //锁存X轴坐标
  129.                
  130.                 Y = 0xff; //设置Y轴坐标
  131.                 X = 0x01<<x; //设置X轴坐标           
  132.                 X = 0x00; //锁存X轴坐标
  133.                 Delayms(400);
  134.         }
  135. }
  136. /*********************************************************************************************
  137. 函数名:图形4
  138. 调  用:CUBE_LOG4 ();
  139. 结  果:逐面点亮一个正面的LED,从前向后流动,其他坐标点上的LED熄灭
  140. /*********************************************************************************************/
  141. void CUBE_LOG4()
  142. {
  143.         uint8 y;
  144.        
  145.         Z = 0x00; //熄灭所有LED   
  146.         Y = 0x80; //设置Y轴坐标
  147.         X = 0xff; //设置X轴坐标   
  148.         X = 0x00; //锁存X轴坐标
  149.         Z = 0xff; //(0,7,z)轴上的LED
  150.        
  151.         for(y=0;y<8;y++)
  152.         {
  153.                 Y = 0x80>>y; //设置Y轴坐标
  154.                 X = 0xff; //设置X轴坐标   
  155.                 X = 0x00; //锁存X轴坐标
  156.                 Delayms(400);
  157.         }
  158. }         
  159. /*********************************************************************************************/

  160. /*********************************************************************************************
  161. 函数名:图形5
  162. 调  用:CUBE_LOG5 ();
  163. 结  果:逐面点亮一个府面的LED,从下向上流动,其他坐标点上的LED熄灭
  164. /*********************************************************************************************/
  165. void CUBE_LOG5()
  166. {
  167.         uint8 i;

  168.         Z = 0x00; //熄灭所有LED  
  169.         Y = 0xff; //设置Y轴坐标
  170.         X = 0xff; //设置X轴坐标   
  171.         X = 0x00; //锁存X轴坐标
  172.         Z = 0x01; //(0,7,z)轴上的LED
  173.        
  174.         for(i=0;i<8;i++)
  175.         {
  176.                 Z = 0x01<<i; //(0,7,z)轴上的LED
  177.                 Delayms(400);
  178.         }
  179. /*        for(i=0;i<4;i++)
  180.         {
  181.                 CLEAR();
  182.                 Z = 0x80>>i;
  183.                 Y = SHALOU[i]; //设置Y轴坐标
  184.                 X = SHALOU[i]; //设置X轴坐标   
  185.                 X = 0x00; //锁存X轴坐标
  186.                 Delayms(500);
  187.         }*/                  
  188. }
  189. /*********************************************************************************************
  190. 函数名:图形6
  191. 调  用:CUBE_LOG6 ();
  192. CUBD_LOG6(NUM2,3);
  193. 结  果:开机倒数(3,2,1):
  194. *********************************************************************************************/                
  195. void CUBE_LOG6(uint8 *NUM,uint8 n)
  196. {
  197.         int8 i,x,y,f,num;                          
  198.         Z = 0x00; //熄灭所有LED
  199.         Y = 0x00; //设置Y轴坐标
  200.         X = 0xff; //设置X轴坐标   
  201.         X = 0x00; //锁存X轴坐标     
  202.        
  203.         for(num=0;num<n;num++)
  204.         {
  205.                 for(f=0;f<2;f++)
  206.                 {
  207.                         for(x=0;x<8;x++)
  208.                         {
  209.                                 for(i=0;i<6;i++)
  210.                                 {
  211.                                         for(y=0;y<8;y++)
  212.                                         {
  213.                                                 Y = 0x00;
  214.                                                 X = 0xff;     
  215.                                                 X = 0x00;   
  216.                                                 Y = 0x80>>y;    //设置Y轴坐标
  217.                                                
  218.                                                 if(f == 0)
  219.                                                 {
  220.                                                         X = ADD_X[x]; //设置X轴坐标
  221.                                                         X = 0x00;       //锁存X轴坐标
  222.                                                 }
  223.                                                
  224.                                                 if(f == 1)
  225.                                                 {
  226.                                                         X = ~ADD_X[x]; //设置X轴坐标
  227.                                                         X = 0x00;      //锁存X轴坐标
  228.                                                 }   
  229.                                                 Z = NUM[num*8+y];
  230.                                                 Delayms(2+2*f);
  231.                                         }
  232.                                 }
  233.                         }       
  234.                 }
  235.                

  236.                 for(f=0;f<2;f++)
  237.                 {
  238.                         for(i=0;i<50;i++)
  239.                         {
  240.                                 for(y=0;y<8;y++)
  241.                                 {
  242.                                         Y = 0x00;
  243.                                         X = 0xff;     
  244.                                         X = 0x00;
  245.                                        
  246.                                         Y = 0x80>>y; //设置X轴坐标   
  247.                                         X = 0x01; //设置Y轴坐标
  248.                                         X = 0x00; //锁存X轴坐标
  249.                                         Z = NUM[num*8+y];
  250.                                         Delayms(2);
  251.                                 }
  252.                         }
  253.                 }
  254.         }       
  255. }
  256. /*********************************************************************************************
  257. 函数名:LOG3()
  258. 结  果:前后面
  259. *********************************************************************************************/
  260. void LOG3()
  261. {
  262.         uint8 z;
  263.        
  264.         CLEAR();   
  265.        
  266.         X = 0x01; //设置X轴坐标   
  267.         X = 0x00; //锁存X轴坐标

  268.         for(z=0;z<8;z++)
  269.         {       
  270.                 Y |= 0x01<<z;
  271.                 X = 0x01; //设置X轴坐标   
  272.                 X = 0x00; //锁存X轴坐标
  273.                 Z |= 0x80 >>z; //锁存X轴坐标
  274.                 Delayms(200);
  275.         }
  276. }
  277. void LOG4()
  278. {
  279.         uint8 i;
  280.        
  281.         CLEAR();  

  282.         for(i=0;i<8;i++)
  283.         {       
  284.                 Y = 0xff>>i;
  285.                 X = 0x01; //设置X轴坐标   
  286.                 X = 0x00; //锁存X轴坐标
  287.                 Z = 0xff <<i; //锁存X轴坐标
  288.                 Delayms(200);
  289.         }
  290. }
  291. void LOG5()
  292. {
  293.         uint16 CYCLE=80,PWM_LOW=0;
  294.         uint8 BOOT[] = {0xff,0x7e,0x3c,0x18};
  295.         uint8 i;         

  296.         for(i=0;i<4;i++)
  297.         {          
  298.                 for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
  299.                 {
  300.                 Y = BOOT[i];
  301.                 X = BOOT[i];   
  302.                 X = 0x00;
  303.                 Z = BOOT[i];
  304.                 Delay(PWM_LOW);
  305.                 Y = 0x00;
  306.                 X = 0xff;   
  307.                 X = 0x00;
  308.                 Z = 0x00;
  309.                 Delay(CYCLE-PWM_LOW);
  310.                 }

  311.                 Y = BOOT[i];
  312.                 X = BOOT[i];   
  313.                 X = 0x00;
  314.                 Delay(50);

  315.                 for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
  316.                 {
  317.                 Y = BOOT[i];
  318.                 X = BOOT[i];   
  319.                 X = 0x00;
  320.                 Z = BOOT[i];
  321.                 Delay(PWM_LOW);
  322.                 Y = 0x00;
  323.                 X = 0xff;   
  324.                 X = 0x00;
  325.                 Z = 0x00;
  326.                 Delay(CYCLE-PWM_LOW);  
  327.                 }
  328.         }
  329. }
  330. void LOG6()        //全亮,X面逐层收回
  331. {
  332.         uint8 i,y;
  333.         X=0xff;
  334.         Y=0xff;
  335.         X=0x00;
  336.         Delayms(500);
  337.         Z=0xff;
  338.         Z = 0xff; //(0,7,z)轴上的LED
  339.         for(i=0;i<8;i++)          
  340.         for(y=0;y<9;y++)
  341.         {
  342.                 Y = 0xff<<y;
  343.                 X = MOVE[i]; //设置X轴坐标   
  344.                 X = 0x00; //锁存X轴坐标
  345.                 Delayms(100);
  346.         }

  347. }


  348. void LOG7()
  349. {
  350.         uint8 x;
  351.          //(0,7,z)轴上的LED
  352.        
  353.         for(x=0;x<8;x++)
  354.         {
  355.                 Y = 0xff;
  356.                 X = ADD_X[x]; //设置X轴坐标   
  357.                 X = 0x00; //锁存X轴坐标
  358.                 Z = 0xff;
  359.                 Delayms(200);
  360.         }
  361. }


  362. void LOG8()
  363. {
  364.         uint8 z;
  365.        
  366.         Y = 0x01;
  367.         X = 0xFF; //设置X轴坐标   
  368.         X = 0x00; //锁存X轴坐标
  369.   
  370.         for(z=0;z<8;z++)
  371.         {
  372.                 Z = 0xff>>z;
  373.                 Delayms(200);
  374.         }
  375. }
  376. void LOG9()
  377. {
  378.         uint8 y;
  379.        
  380.         Z = 0x01;
  381.        
  382.         for(y=0;y<8;y++)
  383.         {
  384.                 Y |= 0x01<<y;
  385.                 X = 0xFF; //设置X轴坐标   
  386.                 X = 0x00; //锁存X轴坐标
  387.                 Delayms(200);
  388.         }
  389. }
  390. void LOG10()
  391. {
  392.         uint8 i;
  393.         uint8 SO[]={0XFF,0X7F,0X3F,0X1F,0X0F,0X7,0X03,0X01};
  394.         for(i=1;i<8;i++)
  395.         {
  396.                 CLEAR();
  397.                 Y=SO[i];
  398.                 X=SO[i];
  399.                 Z=0X01;
  400.                 Delayms(800);       
  401.         }
  402. }

  403. void LOG11()
  404. {
  405.         uint8 x;
  406.         CLEAR();
  407.         Y=0XFF;
  408.         Z = 0xff; //(0,7,z)轴上的LED
  409.   
  410.         for(x=0;x<8;x++)
  411.         {
  412.         X |= 0x80>>x; //设置X轴坐标   
  413.         X = 0x00; //锁存X轴坐标
  414.         Delayms(200);
  415.         }
  416. }

  417. void shalou1()//正向
  418. {
  419.         int8 i,j,d;
  420.         for(j=0;j<8;j++)
  421.         {       
  422.                 for(d=0;d<10*(8-j);d++)
  423.                 {
  424.                         if(j<3)
  425.                                 for(i=0;i<=j;i++)
  426.                                 {       
  427.                                         CLEAR();
  428.                                         Y=SHALOU[i];
  429.                                         X=SHALOU[i];
  430.                                         X=0x00;
  431.                                         Z=0x80>>i;
  432.                                         Delayms(3);
  433.                                 }
  434.                         if(j>3)
  435.                                 for(i=j-4;i<=j;i++)
  436.                                 {       
  437.                                         CLEAR();
  438.                                         Y=SHALOU[i];
  439.                                         X=SHALOU[i];
  440.                                         X=0x00;
  441.                                         Z=0x80>>i;
  442.                                         Delayms(5);
  443.                                 }
  444.                 }
  445.         }
  446.         for(j=3;j>=0;j--)
  447.                 {       
  448.                         for(d=0;d<5*(8-j);d++)
  449.                         {       
  450.                                 for(i=j;i>=0;i--)
  451.                                 {       
  452.                                         CLEAR();
  453.                                         Y=SHALOU[i];
  454.                                         X=SHALOU[i];
  455.                                         X=0x00;
  456.                                         Z=0x01<<i;
  457.                                         Delayms(5);                       
  458.                                 }
  459.                         }
  460.                 }
  461.                 Z=0X00;
  462. }

  463. void shalou()  //反向
  464. {
  465.         int8 i,j,d;
  466.         for(j=0;j<8;j++)
  467.         {       
  468.                 for(d=0;d<5*(8-j);d++)
  469.                 {
  470.                         for(i=0;i<=j;i++)
  471.                         {       
  472.                                 CLEAR();
  473.                                 Y=SHALOU[i];
  474.                                 X=SHALOU[i];
  475.                                 X=0x00;
  476.                                 Z=0x01<<i;
  477.                                 Delayms(3);
  478.                         }
  479.                 }
  480.         }
  481.         for(j=7;j>=0;j--)
  482.         {       
  483.                 for(d=0;d<5*(8-j);d++)
  484.                 {       
  485.                         for(i=j;i>=0;i--)
  486.                         {       
  487.                                 CLEAR();
  488.                                 Y=SHALOU[i];
  489.                                 X=SHALOU[i];
  490.                                 X=0x00;
  491.                                 Z=0x80>>i;
  492.                                 Delayms(3);                       
  493.                         }
  494.                 }
  495.         }
  496. }
  497. void LOG12()                //波浪
  498. {
  499.         uint8 y,i,d;
  500.         uint8 WAVE[]={0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,
  501.                                   0X01,0X01,0X01,0X03,0X03,0X01,0X01,0X01,
  502.                                   0X01,0X01,0X03,0X07,0X07,0X03,0X01,0X01,
  503.                                   0X01,0X03,0X07,0X0f,0X0f,0X07,0X03,0X01,
  504.                                   0X03,0X07,0X0f,0X1f,0X1f,0X0f,0X07,0X03,
  505.                                   0X07,0X0f,0X1f,0X3f,0X3f,0X1f,0X0f,0X07,
  506.                                   0X0f,0X1f,0X3f,0X7f,0X7f,0X3f,0X1f,0X0f,
  507.                                   0X1f,0X3f,0X7f,0Xff,0Xff,0X7f,0X3f,0X1f,};
  508.         CLEAR();
  509.         for(i=0;i<120;i++)
  510.                 for(d=0;d<8;d++)
  511.                         {
  512.                                 if(i<8)
  513.                                         for(y=0;y<i+1;y++)
  514.                                         {
  515.                                                 Y=MOVE[y];
  516.                                                 X=0XFF;
  517.                                                 Z=WAVE[i-y];
  518.                                         }
  519.                                 else  
  520.                                         for(y=0;y<8;y++)
  521.                                         {
  522.                                                 Y=MOVE[y];
  523.                                                 X=0XFF;
  524.                                                 if(i<64)
  525.                                                 Z=WAVE[i-y];
  526.                                                 if(i>63)
  527.                                                 Z=WAVE[119-(i-y)];
  528.                                                 Delayms(5);
  529.                                         }
  530.                         }
  531. }

  532. void LOG12_1()           //涨潮
  533. {
  534.         uint8 y,i,d;
  535.         uint8 WAVE[]={0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,
  536.                                   0X01,0X01,0X01,0X03,0X03,0X01,0X01,0X01,
  537.                                   0X01,0X01,0X03,0X07,0X07,0X03,0X01,0X01,
  538.                                   0X01,0X03,0X07,0X0f,0X0f,0X07,0X03,0X01,
  539.                                   0X03,0X07,0X0f,0X1f,0X1f,0X0f,0X07,0X03,
  540.                                   0X07,0X0f,0X1f,0X3f,0X3f,0X1f,0X0f,0X07,
  541.                                   0X0f,0X1f,0X3f,0X7f,0X7f,0X3f,0X1f,0X0f,
  542.                                   0X1f,0X3f,0X7f,0Xff,0Xff,0X7f,0X3f,0X1f,};
  543.         CLEAR();
  544.         for(i=0;i<120;i++)
  545.                 for(d=0;d<8;d++)
  546.                         {
  547.                                 if(i<8)
  548.                                         for(y=0;y<i+1;y++)
  549.                                         {
  550.                                                 Y=MOVE[y];
  551.                                                 X=0XFF;
  552.                                                 Z=WAVE[i-y];
  553.                                         }
  554.                                 else  
  555.                                         for(y=0;y<8;y++)
  556.                                         {
  557.                                                 Y=MOVE[y];
  558.                                                 X=0XFF;
  559.                                                 if(i<64)
  560.                                         {        Z=WAVE[i-y];
  561.                                                 Delayms(5);           }
  562.                                         }
  563.                         }
  564. }

  565. void LOG12_2()           //落潮
  566. {
  567. uint8 y,i,d;
  568.         uint8 WAVE[]={0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,
  569.                                   0X01,0X01,0X01,0X03,0X03,0X01,0X01,0X01,
  570.                                   0X01,0X01,0X03,0X07,0X07,0X03,0X01,0X01,
  571.                                   0X01,0X03,0X07,0X0f,0X0f,0X07,0X03,0X01,
  572.                                   0X03,0X07,0X0f,0X1f,0X1f,0X0f,0X07,0X03,
  573.                                   0X07,0X0f,0X1f,0X3f,0X3f,0X1f,0X0f,0X07,
  574.                                   0X0f,0X1f,0X3f,0X7f,0X7f,0X3f,0X1f,0X0f,
  575.                                   0X1f,0X3f,0X7f,0Xff,0Xff,0X7f,0X3f,0X1f,};
  576.         CLEAR();
  577.         for(i=0;i<120;i++)
  578.                 for(d=0;d<8;d++)
  579.                         {
  580.                                 if(i<8)
  581.                                         for(y=0;y<i+1;y++)
  582.                                         {
  583.                                                 Y=MOVE[y];
  584.                                                 X=0XFF;
  585.                                                 Z=WAVE[i-y];
  586.                                         }
  587.                                 else  
  588.                                         for(y=0;y<8;y++)
  589.                                         {
  590.                                                 Y=MOVE[y];
  591.                                                 X=0XFF;
  592.                                                 if(i>63)
  593.                                         {        Z=WAVE[119-(i-y)];
  594.                                                 Delayms(5);         }
  595.                                         }
  596.                         }

  597. }

  598. void LOG13()
  599. {
  600.         uint16 LOW=0;
  601.         uint8 d,x,y,z,t,i,T=1500;
  602.         CLEAR();
  603.         for(d=0;d<25;d++)
  604.         {
  605.                 x=rand()%8;
  606.                 y=rand()%8;
  607.                 z=(rand()%4)+4;
  608.                 t=(rand()%40)+30;       
  609.                 for(LOW=1;LOW<T;LOW+=10)
  610.                 {
  611.                         Y=MOVE[y];
  612.                         X=MOVE[x];
  613.                         X=0X00;
  614.                         Z=MOVE[z];
  615.                         Delay(LOW);
  616.                         CLEAR();
  617.                         Delay(T-LOW);
  618.                 }
  619.                 Y=MOVE[y];
  620.                 X=MOVE[x];
  621.                 X=0X00;
  622.                 Z=MOVE[z];
  623.                 Delay(200);
  624.                 for(i=0;i<z+1;i++)
  625.                 {
  626.                         Z|=MOVE[z]>>i;;
  627.                         Delayms(t);
  628.                 }
  629.                 for(i=0;i<z+1;i++)
  630.                 {
  631.                         Z=ADD_Y[z]>>i;
  632.                         Delayms(t-20);
  633.                 }
  634.         }
  635. }


  636. void LOG1()
  637. {
  638.         uint8 i,d;
  639.         for(i=0;i<35;i++)
  640.         {
  641.                 CLEAR();
  642.                 Z = 0xff;
  643.                 Delayms(2);
  644.                 for(d=0;d<30;d++)
  645.                 LOG1h(i);
  646.         }                  
  647. }
  648. void LOG2(uint8 x,uint8 y)//烟花
  649. {
  650.         int8 i,z,k,f;
  651.         uint8 LO[8]={0x38,0x7c,0xfe};
  652.         uint8 LI[8]={0x28,0x44,0x82};                                  
  653.         CLEAR();   

  654.     for(f=0;f<2;f++)
  655.     {
  656.       for(z=0;z<8;z++)
  657.       {
  658.         for(i=0;i<30;i++)
  659.             {
  660.             Y = 0x00;
  661.             X = 0xff;     
  662.             X = 0x00;   
  663.                         Y = MOVE[y];
  664.                         X = MOVE[x];
  665.                         X = 0X00;     
  666.                     if(f == 0)
  667.                         {
  668.               Z = ADD_Y[z]; //设置Z轴坐标
  669.                     }
  670.                         if(f == 1)
  671.                     {
  672.                           Z = ~ADD_Y[z]; //设置X轴坐
  673.             }     
  674.                    Delayms(2+2*f);
  675.           }
  676.             }
  677.       }       
  678.    

  679.     for(f=0;f<2;f++)
  680.     {
  681.       for(i=0;i<127;i++)
  682.       {   
  683.           Y = 0x10; //设置X轴坐标
  684.                   X = 0X10;  
  685.           Z = 0x80; //设置Y轴坐标                  
  686.                  Delayms(2);
  687.         
  688.       }
  689.     }
  690.          
  691.          

  692. for(f=0;f<2;f++)
  693.     {
  694.       for(k=0;k<3;k++)
  695.       {
  696.         for(i=0;i<85;i++)
  697.             {
  698.             Y = 0x00;
  699.             X = 0xff;     
  700.             X = 0x00;
  701.                         Y = MOVE[y];     
  702.                     if(f == 0)
  703.                         {
  704.               X = LO[k]; //设置X轴坐标
  705.                           X = 0x00;
  706.                     }
  707.                         if(f == 1)
  708.                     {
  709.                           X = ~LO[k]; //设置X轴坐
  710.                           X = 0x00;
  711.             }
  712.                         Z = 0X80 ;
  713.                             
  714.                     if(f == 0)
  715.                         {
  716.               Y = LO[k]; //设置X轴坐标
  717.                     }
  718.                         if(f == 1)
  719.                     {
  720.                           Y = ~LO[k]; //设置X轴坐
  721.             }
  722.                         X = MOVE[x];
  723.                         X = 0X00;
  724.                         Z = 0X80 ;
  725.                        
  726.                         if(f == 0)
  727.                         {
  728.               Y = LI[k];
  729.                           X = LI[k];//设置X轴坐标
  730.                           X = 0X00;
  731.                     }
  732.                         if(f == 1)
  733.                         {
  734.               Y = LI[k-1];
  735.                           X = LI[k-1];//设置X轴坐标
  736.                                  X = 0X00;
  737.                         }
  738.                         Z = 0X80;        
  739.                             
  740.                    Delayms(2+2*f);
  741.                        
  742.           }
  743.             }
  744.       }

  745.     for(f=0;f<2;f++)
  746.     {
  747.       for(z=0;z<8;z++)
  748.       {
  749.         for(i=0;i<100;i++)
  750.             {
  751.             Y = 0x00;
  752.             X = 0xff;     
  753.             X = 0x00;   
  754.                         Y = 0x81|MOVE[y];
  755.                         X = 0x81|MOVE[x];
  756.                         X = 0X00;     
  757.                     if(f == 0)
  758.                         {
  759.               Z = ~ADD_Y[7-z]; //设置Z轴坐标
  760.                     }
  761.                         if(f == 1)
  762.                     {
  763.                           Z = ADD_Y[7-z]; //设置X轴坐
  764.             }     
  765.                    Delayms(2+2*f);
  766.           }
  767.             }
  768.       }       
  769.    

  770.     for(f=0;f<2;f++)
  771.     {
  772.       for(i=0;i<100;i++)
  773.       {   
  774.           Y = 0x81|MOVE[y]; //设置X轴坐标
  775.                   X = 0x81|MOVE[x];  
  776.           Z = 0x01; //设置Y轴坐标                  
  777.                  Delayms(2);
  778.         
  779.       }
  780.     }
  781. }

  782. void FIRE(uchar x,uchar y)
  783. {
  784.         uchar i,j,z;
  785.        
  786.         CLEAR();
  787.         Y=MOVE[y];
  788.         X=MOVE[x];
  789.         X=0x00;
  790.         Z=0x80;
  791.        
  792.         for(z=0;z<8;z++)
  793.         {
  794.                 Z=0x01<<z;
  795.                 Delayms(120*z);//减速上升
  796.         }

  797.         for(i=0;i<3;i++)//爆开3圈范围内
  798.         {       
  799.                 CLEAR();
  800.                 Y=MOVE[y]>>i;//横竖方向
  801.                 X=MOVE[x]>>i;
  802.                 Y|=MOVE[y]<<i;
  803.                 X|=MOVE[x]<<i;
  804.                 X=0x00;
  805.                 Z=0x80;
  806.                
  807.                 Y=MOVE[y]>>(i+1);//斜线方向
  808.                 Y|=MOVE[y]<<(i+1);//向外爆两格
  809.                 X|=MOVE[x];
  810.                 X=0x00;
  811.                 Z=0x80;

  812.                 Y=MOVE[y];
  813.                 X=MOVE[x]>>(i+1);
  814.                 X|=MOVE[x]<<(i+1);
  815.                 X=0x00;
  816.                 Z=0x80;

  817.                 Delayms(300);
  818.         }


  819.     for(j=0;j<2;j++)//下落
  820.     {
  821.       for(z=0;z<8;z++)
  822.       {
  823.         for(i=0;i<30;i++) //持续
  824.             {   
  825.                     if(j == 0)
  826.                         {
  827.               Z = ADD_X[z]; //设置Z轴
  828.                     }
  829.                         if(j == 1)
  830.                     {
  831.                           Z = ~ADD_X[z]; //设置X轴
  832.             }     
  833.                    Delayms(8+2*j);
  834.           }
  835.             }
  836.       }       
  837. }

  838. void LOG1h(uint8 i)
  839. {       
  840.         uint8 BOOT[] = {0x18,0x24,0x42,0x81,
  841.                                         0x82,0x84,0X88,0x90,0XA0,0XC0,
  842.                                         0XA0,0x90,0X88,0x84,0x82,0x81,
  843.                                         0X41,0X21,0X11,0X09,0X05,0X03,
  844.                                         0X05,0X09,0X11,0X21,0X41,0X81,
  845.                                         0x42,0x24,0x18,0X3C,0x66,0xc3,0x81};
  846.           uint8 BOOT1[] = {0x00,0x18,0x3c,0x7e,
  847.                                         0x7c,0x78,0x70,0x60,0X40,0X00,
  848.                                         0X40,0X60,0x70,0X78,0X7C,0X7E,
  849.                                         0X3E,0X1E,0X0E,0X06,0X02,0X00,
  850.                                         0X02,0X06,0X0E,0X1E,0X3E,0X7E,
  851.                                         0x3c,0x18,0x00,0x00,0X00,0x00,0x00};
  852.         Y = BOOT[i];
  853.         X = BOOT[i];   
  854.         X = 0x00;
  855.         Z = BOOT[i];
  856.         Delayms(5);
  857.         Y = BOOT[i];
  858.         X = BOOT1[i];   
  859.         X = 0x00;
  860.         Z = BOOT1[i];
  861.         Delayms(5);
  862.         Y = BOOT1[i];
  863.         X = BOOT[i];   
  864.         X = 0x00;
  865.         Z = BOOT1[i];
  866.         Delayms(5);
  867.         Y = BOOT1[i];
  868.         X = BOOT1[i];   
  869.         X = 0x00;
  870.         Z = BOOT[i];
  871.         Delayms(5);
  872.         Y = BOOT[i];
  873.         X = BOOT1[i];   
  874.         X = 0x00;
  875.         Z = BOOT[i];
  876.         Delayms(5);
  877. }

  878. /*********************************************************************************************
  879. 函数名:图形7
  880. 调  用:CUBE_LOG7 ();
  881. //CUBD_LOG7(CHAR_GLF,24);//光立方
  882. 结  果:显示流动字符:
  883. /*********************************************************************************************/
  884. void CUBE_LOG7(uint8 *DAT,uint8 num)
  885. {
  886.         int8 x,y,z=0;
  887.         int16 i,d;
  888.        
  889.         for(i=0;i<num+22;i++)
  890.         {
  891.                 for(d=0;d<10;d++)
  892.                 {
  893.                         z = i;
  894.                         Y = 0x80;    //设置Y轴坐标
  895.                         X = 0xff;    //设置X轴坐标   
  896.                         X = 0x00;
  897.                         for(x=0;x<8;x++)
  898.                         {
  899.                                 Y = 0x00;    //设置Y轴坐标
  900.                                 X = 0xff;    //设置X轴坐标   
  901.                                 X = 0x00;    //锁存X轴坐标
  902.                                 Z = DAT[z++];//锁存X轴坐标
  903.                                 Y = 0x80;         //设置Y轴坐标
  904.                                 X = MOVE[x]; //设置X轴坐标   
  905.                                 X = 0x00;    //锁存X轴坐标
  906.                                 Delayms(3);
  907.                         }
  908.                        
  909.                         Y = 0x80;    //设置Y轴坐标
  910.                         X = 0xff;    //设置X轴坐标   
  911.                         X = 0x00;    //锁存X轴坐标   
  912.                        
  913.                         for(y=0;y<8;y++)  
  914.                         {   
  915.                                 Z = DAT[z++];//锁存X轴坐标
  916.                                 Y = MOVE[y]; //设置Y轴坐标
  917.                                 X = 0x01;
  918.                                 X = 0X00; //设置X轴坐标   
  919.                                 Delayms(3);
  920.                         }
  921.                        
  922.                         for(x=7;x>=0;x--)
  923.                         {
  924.                                 Y = 0x00;    //设置Y轴坐标
  925.                                 X = 0xff;    //设置X轴坐标   
  926.                                 X = 0x00;    //锁存X轴坐标
  927.                                 Z = DAT[z++]; //锁存X轴坐标
  928.                                 Y = 0x10; //设置Y轴坐标
  929.                                 X = MOVE[x]; //设置X轴坐标   
  930.                                 X = 0x00;    //锁存X轴坐标
  931.                                 Delayms(3);
  932.                         }
  933.                 }
  934.         }         
  935. }        
  936. /*********************************************************************************************
  937. 函数名:图形9
  938. 调  用:CUBE_LOG9 ();
  939. 结  果:雨帘
  940. /*********************************************************************************************/
  941. void CUBE_LOG9()
  942. {
  943.         int x,z,i,d,k,a;

  944.         Z = 0x00; //熄灭所有LED

  945.         for(a=0;a<2;a++)
  946.         {
  947.                 for(k=0;k<2;k++)
  948.                 {
  949.                         Y = 0x00;    //设置Y轴坐标
  950.                         X = 0xff;    //设置X轴坐标   
  951.                         X = 0x00;    //锁存X轴坐标
  952.                         Y = 0xff;   //设置Y轴坐标

  953.                         for(i=0;i<8;i++)
  954.                         {
  955.                                 for(d=0;d<5;d++)
  956.                                 {
  957.                                         z=0;
  958.                                         Y = 0x00;    //设置Y轴坐标
  959.                                         X = 0xff;    //设置X轴坐标   
  960.                                         X = 0x00;    //锁存X轴坐标
  961.                                         Y = 0xff;    //设置Y轴坐标
  962.                                         for(z=0;z<8-i;z++)
  963.                                         {
  964.                                                 Z = 0x01<<z;  //锁存X轴坐标
  965.                                                 if(k == 0)
  966.                                                         X = 0x01;      //设置X轴坐标   
  967.                                                 if(k == 1)
  968.                                                         X = 0x80;      //设置X轴坐标
  969.                                                 Delayms(5);   
  970.                                         }
  971.                                        
  972.                                         for(x=0;x<i;x++)
  973.                                         {
  974.                                                 Y = 0x00;    //设置Y轴坐标
  975.                                                 X = 0xff;    //设置X轴坐标   
  976.                                                 X = 0x00;    //锁存X轴坐标
  977.                                                 Y = 0xff;    //设置Y轴坐标

  978.                                                 Z = 0x01<<(8-i+x);  //锁存X轴坐标
  979.                                                 if(k == 0)
  980.                                                         X = 0x01<<(x+1);      //设置X轴坐标  
  981.                                                 if(k == 1)
  982.                                                         X = 0x80>>(x+1);      //设置X轴坐标  
  983.                                                 Delayms(5);   
  984.                                         }  
  985.                                 }
  986.                         }       

  987.                        
  988.                         Y = 0x00;    //设置Y轴坐标
  989.                         X = 0xff;    //设置X轴坐标   
  990.                         X = 0x00;    //锁存X轴坐标
  991.                         Y = 0xff;    //设置Y轴坐标

  992.                         for(i=7;i>=0;i--)
  993.                         {
  994.                                 for(d=0;d<5;d++)
  995.                                 {
  996.                                         z=0;
  997.                                         for(z=0;z<i;z++)
  998.                                         {
  999.                                                 Y = 0x00;    //设置Y轴坐标
  1000.                                                 X = 0xff;    //设置X轴坐标   
  1001.                                                 X = 0x00;    //锁存X轴坐标
  1002.                                                 Y = 0xff;    //设置Y轴坐标
  1003.                                                 if(k == 0)
  1004.                                                 {
  1005.                                                         Z = 0x01<<z;       //锁存X轴坐标
  1006.                                                         X = MOVE[7-i]<<z;  //设置X轴坐标  
  1007.                                                 }
  1008.                                                 if(k == 1)
  1009.                                                 {
  1010.                                                         Z = 0x01<<z;       //锁存X轴坐标
  1011.                                                         X = MOVE[i]>>z;    //设置X轴坐标
  1012.                                                 }
  1013.                                                 Delayms(5);   
  1014.                                         }  

  1015.                                         for(x=i;x<8;x++)
  1016.                                         {
  1017.                                                 Y = 0x00;    //设置Y轴坐标
  1018.                                                 X = 0xff;    //设置X轴坐标   
  1019.                                                 X = 0x00;    //锁存X轴坐标
  1020.                                                 Y = 0xff;    //设置Y轴坐标

  1021.                                                 if(k == 0)
  1022.                                                 {
  1023.                                                         Z = 0x01<<x;  //锁存X轴坐标                  
  1024.                                                         X = 0x80;     //设置X轴坐标   
  1025.                                                 }
  1026.                                                 if(k == 1)
  1027.                                                 {
  1028.                                                         Z = 0x01<<x;  //锁存X轴坐标       
  1029.                                                         X = 0x01;     //设置X轴坐标
  1030.                                                 }  
  1031.                                                 Delayms(5);   
  1032.                                         }  
  1033.                                 }
  1034.                         }       
  1035.                 }
  1036.         }  Z = 0x00;

  1037.         Y = 0xff; //设置Y轴坐标
  1038.         X = 0x01; //设置X轴坐标   
  1039.         X = 0x00; //锁存X轴坐标
  1040.         Z = 0xff; //(0,7,z)轴上的LED
  1041.                 for(a=0;a<2;a++)
  1042.         {
  1043.                 for(x=0;x<8;x++)
  1044.                 {
  1045.                         Y = 0x00; //设置Y轴坐标
  1046.                         X = 0xff; //设置X轴坐标   
  1047.                         X = 0x00; //锁存X轴坐标

  1048.                         Y = 0xff; //设置Y轴坐标
  1049.                         X = 0x01<<x; //设置X轴坐标           
  1050.                         X = 0x00; //锁存X轴坐标
  1051.                         Delayms(300);
  1052.                 }

  1053.                 for(x=0;x<8;x++)
  1054.                 {
  1055.                         Y = 0x00; //设置Y轴坐标
  1056.                         X = 0xff; //设置X轴坐标   
  1057.                         X = 0x00; //锁存X轴坐标

  1058.                         Y = 0xff; //设置Y轴坐标
  1059.                         X = 0x80>>x; //设置X轴坐标           
  1060.                         X = 0x00; //锁存X轴坐标
  1061.                         Delayms(300);
  1062.                 }
  1063.         }
  1064. }
  1065. /*********************************************************************************************
  1066. 函数名:图形10
  1067. 调  用:CUBE_LOG10 ();
  1068. 结  果:音乐律动
  1069. /*********************************************************************************************/
  1070. void CUBE_LOG10()
  1071. {
  1072.         int8 f,d,k,j;

  1073.         uint8 FACE_Y1[] = {0x81,0x42,0x24,0x18};
  1074.         uint8 FACE_Z1[] = {0xff,0x7e,0x3c,0x18};
  1075.         uint8 FACE_Y2[] = {0x7e,0x3c,0x18,0x00};
  1076.         uint8 FACE_Z2[] = {0x81,0x42,0x24,0x18};
  1077.         uint8 FACE_X[]  = {0,1,2,3};

  1078.         Z = 0x00; //熄灭所有LED   
  1079.         Y = 0x00; //设置Y轴坐标
  1080.         X = 0xff; //设置X轴坐标   
  1081.         X = 0x00; //锁存X轴坐标

  1082.         for(j=0;j<2;j++)
  1083.         for(k=0;k<30;k++)
  1084.         {
  1085.                 switch(k)
  1086.                 {
  1087.                 case 0:  FACE_X[0]=0;FACE_X[1]=0;FACE_X[2]=0;FACE_X[3]=0;break;
  1088.                 case 1:  FACE_X[0]=1;FACE_X[1]=1;FACE_X[2]=1;FACE_X[3]=1;break;
  1089.                 case 2:  FACE_X[0]=2;FACE_X[1]=2;FACE_X[2]=2;FACE_X[3]=2;break;
  1090.                 case 3:  FACE_X[0]=3;FACE_X[1]=3;FACE_X[2]=3;FACE_X[3]=3;break;
  1091.                 case 4:  FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=4;break;
  1092.                 case 5:  FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=5;break;
  1093.                 case 6:  FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=5;FACE_X[3]=6;break;
  1094.                 case 7:  FACE_X[0]=4;FACE_X[1]=5;FACE_X[2]=6;FACE_X[3]=7;break;
  1095.                 case 8:  FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=5;FACE_X[3]=6;break;
  1096.                 case 9:  FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=5;break;
  1097.                 case 10: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=4;break;
  1098.                 case 11: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=3;break;
  1099.                 case 12: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=3;FACE_X[3]=2;break;
  1100.                 case 13: FACE_X[0]=4;FACE_X[1]=3;FACE_X[2]=2;FACE_X[3]=1;break;
  1101.                 case 14: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=3;FACE_X[3]=2;break;
  1102.                 case 15: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=3;break;
  1103.                 case 16: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=4;break;
  1104.                 case 17: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=5;break;
  1105.                 case 18: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=5;FACE_X[3]=6;break;
  1106.                 case 19: FACE_X[0]=4;FACE_X[1]=5;FACE_X[2]=6;FACE_X[3]=7;break;
  1107.                 case 20: FACE_X[0]=5;FACE_X[1]=5;FACE_X[2]=6;FACE_X[3]=7;break;
  1108.                 case 21: FACE_X[0]=6;FACE_X[1]=6;FACE_X[2]=6;FACE_X[3]=7;break;
  1109.                 case 22: FACE_X[0]=7;FACE_X[1]=7;FACE_X[2]=7;FACE_X[3]=7;break;
  1110.                 case 23: FACE_X[0]=6;FACE_X[1]=6;FACE_X[2]=6;FACE_X[3]=6;break;
  1111.                 case 24: FACE_X[0]=5;FACE_X[1]=5;FACE_X[2]=5;FACE_X[3]=5;break;
  1112.                 case 25: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=4;break;
  1113.                 case 26: FACE_X[0]=3;FACE_X[1]=3;FACE_X[2]=3;FACE_X[3]=3;break;
  1114.                 case 27: FACE_X[0]=2;FACE_X[1]=2;FACE_X[2]=2;FACE_X[3]=2;break;
  1115.                 case 28: FACE_X[0]=1;FACE_X[1]=1;FACE_X[2]=1;FACE_X[3]=1;break;
  1116.                 case 29: FACE_X[0]=0;FACE_X[1]=0;FACE_X[2]=0;FACE_X[3]=0;break;
  1117.                 }

  1118.                 for(d=0;d<7;d++)
  1119.                 {
  1120.                         for(f=0;f<4;f++)
  1121.                         {
  1122.                                 CLEAR();

  1123.                                 Y = FACE_Y1[f];  //设置Y轴坐标
  1124.                                 X = MOVE[FACE_X[f]];   //设置X轴坐标   
  1125.                                 X = 0x00;        //锁存X轴坐标
  1126.                                 Z = FACE_Z1[f];  //(0,7,z)轴上的LED
  1127.                                 Delayms(5);

  1128.                                 CLEAR();

  1129.                                 Y = FACE_Y2[f];   //设置Y轴坐标
  1130.                                 X = MOVE[FACE_X[f]];    //设置X轴坐标   
  1131.                                 X = 0x00;         //锁存X轴坐标
  1132.                                 Z = FACE_Z2[f];   //(0,7,z)轴上的LED
  1133.                                 Delayms(5);  
  1134.                         }
  1135.                 }
  1136.         }
  1137. }  
  1138. /*********************************************************************************************
  1139. 函数名:图形11
  1140. 调  用:CUBE_LOG11 ();
  1141. 结  果:逐一轴叠加点亮坐标为(0,y,0~7)点上的一轴LED,其他坐标点上的LED熄灭(左侧面)
  1142. 备  注:竖直表面顺时针环绕
  1143. /*********************************************************************************************/
  1144. void CUBE_LOG11()
  1145. {
  1146.         uint8 i,x,z,k;
  1147.         int16 d;
  1148.        
  1149.         for(k=0;k<3;k++)
  1150.         {
  1151.                 for(i=0;i<8;i++)
  1152.                 {
  1153.                         for(d=0;d<1000;d++)
  1154.                         {
  1155.                                 for(z=i;z<8;z++)
  1156.                                 LED_Y(0,z);
  1157.                
  1158.                                 for(x=1;x<i;x++)
  1159.                                 LED_Y(x,7);
  1160.                         }
  1161.                 }         
  1162.                
  1163.                 for(i=0;i<8;i++)
  1164.                 {
  1165.                         for(d=0;d<1000;d++)
  1166.                         {
  1167.                                 for(x=i;x<8;x++)
  1168.                                 LED_Y(x,7);
  1169.                                 for(z=0;z<i;z++)
  1170.                                 LED_Y(7,7-z);
  1171.                         }
  1172.                 }         
  1173.                
  1174.                 for(i=0;i<8;i++)
  1175.                 {
  1176.                         for(d=0;d<1000;d++)
  1177.                         {
  1178.                                 for(z=i;z<8;z++)
  1179.                                 LED_Y(7,7-z);
  1180.                                 for(x=0;x<i;x++)
  1181.                                 LED_Y(7-x,0);
  1182.                         }
  1183.                 }       
  1184.                
  1185.                 for(i=0;i<8;i++)
  1186.                 {
  1187.                         for(d=0;d<1000;d++)
  1188.                         {
  1189.                                 for(x=i;x<8;x++)
  1190.                                 LED_Y(7-x,0);
  1191.                                 for(z=0;z<i+1;z++)
  1192.                                 LED_Y(0,z);
  1193.                         }
  1194.                 }
  1195.         }
  1196.         Z=0X00;
  1197.         Y=0XFF;
  1198.         X=0X01;
  1199.         X=0X00;
  1200.         Z=0XFF;
  1201.         Delayms(200);       
  1202. }            
  1203. /*********************************************************************************************/

  1204. /*********************************************************************************************
  1205. 函数名:图形12
  1206. 调  用:CUBE_LOG12 ();
  1207. 结  果:逐一轴叠加点亮坐标为(0,y,0~7)点上的一轴LED,其他坐标点上的LED熄灭(左侧面)
  1208. 备  注:横向表面逆时针环绕
  1209. /*********************************************************************************************/
  1210. void CUBE_LOG12()
  1211. {
  1212.         uint8 i,x,y,k;
  1213.         int16 d;
  1214.        
  1215.         for(k=0;k<3;k++)
  1216.         {
  1217.                 for(i=0;i<8;i++)
  1218.                 {
  1219.                         for(d=0;d<1000;d++)
  1220.                         {
  1221.                                 for(y=i;y<8;y++)
  1222.                                 LED_Z(0,7-y);
  1223.                                 for(x=1;x<i;x++)
  1224.                                 LED_Z(x,0);
  1225.                         }
  1226.                 }         
  1227.                
  1228.                 for(i=0;i<8;i++)
  1229.                 {
  1230.                         for(d=0;d<1000;d++)
  1231.                         {
  1232.                                 for(x=i;x<8;x++)
  1233.                                 LED_Z(x,0);
  1234.                                 for(y=0;y<i;y++)
  1235.                                 LED_Z(7,y);
  1236.                         }
  1237.                 }         
  1238.                
  1239.                 for(i=0;i<8;i++)
  1240.                 {
  1241.                         for(d=0;d<1000;d++)
  1242.                         {
  1243.                                 for(y=i;y<8;y++)
  1244.                                 LED_Z(7,y);
  1245.                                 for(x=0;x<i;x++)
  1246.                                 LED_Z(7-x,7);
  1247.                         }
  1248.                 }          
  1249.                
  1250.                 for(i=0;i<8;i++)
  1251.                 {
  1252.                         for(d=0;d<1000;d++)
  1253.                         {
  1254.                                 for(x=i;x<8;x++)
  1255.                                 LED_Z(7-x,7);
  1256.                                 for(y=0;y<i+1;y++)
  1257.                                 LED_Z(0,7-y);
  1258.                         }
  1259.                 }
  1260.         }
  1261.         Y=0XFF;
  1262.         X=0X01;
  1263.         X=0X00;
  1264.         Z=0XFF;
  1265.         Delayms(200);       
  1266. }
  1267. /*********************************************************************************************
  1268. 函数名:点亮某一X轴上的LED
  1269. 调  用:LED_X (?);
  1270. 参  数:
  1271. 结  果:点亮相对应坐标点上的一个LED,其他坐标点上的LED熄灭
  1272. ********************************************************************************************/
  1273. void LED_X(uint8 y, uint8 z)
  1274. {
  1275.         CLEAR();
  1276.         Y=MOVE[y];  //设置Y轴坐标
  1277.         X=0xff;     //锁存X轴坐标
  1278.         X=0x00;     //锁存X轴坐标
  1279.         Z=MOVE[z];  //设置Z轴坐标  
  1280. }  

  1281. /*********************************************************************************************
  1282. 函数名:点亮某一Y轴上的LED
  1283. 调  用:LED_Y (?);
  1284. 结  果:点亮相对应坐标点上的一个LED,其他坐标点上的LED熄灭
  1285. /********************************************************************************************/
  1286. void LED_Y(uint8 x, uint8 z)
  1287. {
  1288.         CLEAR();
  1289.        
  1290.         Y = 0xff;    //设置Y轴坐标
  1291.         X = MOVE[x]; //设置X轴坐标   
  1292.         X = 0x00;    //锁存X轴坐标
  1293.         Z = MOVE[z]; //设置Z轴坐标   
  1294. }  
  1295. /*********************************************************************************************/

  1296. /*********************************************************************************************
  1297. 函数名:同时点亮某一Z轴上的LED
  1298. 调  用:LED_ZWATERWater(?);
  1299. 参  数:x:x轴, y:y轴, z:z轴
  1300. 结  果:点亮相对应坐标点上的一个LED,其他坐标点上的LED熄灭:
  1301. /*********************************************************************************************/
  1302. void LED_Z(uint8 x, uint8 y)
  1303. {
  1304.         //Z = 0x00; //熄灭所有LED   
  1305.         Y = 0x00; //设置Y轴坐标
  1306.         X = 0xff; //设置X轴坐标   
  1307.         X = 0x00; //锁存X轴坐标
  1308.        
  1309.         Y = MOVE[y];    //设置Y轴坐标
  1310.         X = MOVE[x]; //设置X轴坐标   
  1311.         X = 0x00;    //锁存X轴坐标
  1312.         Z = 0xff; //熄灭所有LED   
  1313. }  
  1314. /*********************************************************************************************
  1315. 函数名:依次自下而上减速点亮某Z轴上的LED,
  1316. 调  用:LED_ZWATER (x,y,ms);
  1317. 参  数:x:x轴, y:y轴, z:z轴
  1318. 返回值:无
  1319. 结  果:点亮相对应z坐标轴上的一个LED,其他坐标点上的LED熄灭
  1320. *********************************************************************************************/
  1321. void LED_ZWATER(uint8 x, uint8 y, uint16 speed)
  1322. {
  1323.         uint8 z;
  1324.         uint16 s;
  1325.        
  1326.         for(z=0;z<8;z++)
  1327.         {       
  1328.                 LED_DOT_ON(x,y,z);
  1329.                 s = speed + z*2;
  1330.                 Delayms(s); //延时
  1331.         }
  1332. }
  1333. void LIST_LOG()
  1334. {
  1335.         uint8 z,y;
  1336.        
  1337.         CLEAR();   
  1338.        
  1339.         Y = 0x01; //设置Y轴坐标
  1340.         X = 0x01; //设置X轴坐标   
  1341.         X = 0x00; //锁存X轴坐标
  1342.        
  1343.         for(z=0;z<8;z++)
  1344.         {
  1345.                 Z = 0x80 >>z; //锁存X轴坐标
  1346.                 Delayms(300);
  1347.         }
  1348.         Z=0X01;
  1349.         for(y=0;y<8;y++)
  1350.         {
  1351.                 Y = 0x01 <<y;
  1352.                 X = 0x01; //设置X轴坐标   
  1353.                 X = 0x00; //锁存X轴坐标 //锁存X轴坐标
  1354.                 Delayms(300);
  1355.         }
  1356. }
  1357. void LAST_LOG()
  1358. {
  1359.         uchar i;  
  1360.        
  1361.         Y=0x80; //设置Y轴坐标
  1362.         X=0x80; //设置X轴坐标   
  1363.         X=0x00; //锁存X轴坐标

  1364.         for(i=0;i<8;i++)
  1365.         {       
  1366.                 Z=0x80>>i; //锁存X轴坐标
  1367.                 Delayms(150);
  1368.         }
  1369.         for(i=0;i<8;i++)
  1370.         {       
  1371.                 CLEAR();
  1372.                 Y=0x80; //设置Y轴坐标
  1373.                 X=0x80>>i; //锁存X轴坐标
  1374.                 X=0X00;
  1375.                 Z=0x01;
  1376.                 Delayms(150);
  1377.         }
  1378. }


  1379. void LOG15()
  1380. {
  1381.         uint i;
  1382.         Y=0XFF;
  1383.         X=0X01;
  1384.         X=0;
  1385.         for(i=0;i<7;i++)
  1386.         {
  1387.                 Z =ADD_Y[i]; //(0,7,z)轴上的LED
  1388.                 Delayms(400);
  1389.         }
  1390.        
  1391. }
  1392. void LOG16()
  1393. {

  1394.                 Y=0xff;
  1395.                 X=0xff;
  1396.                 X=0x00;
  1397.                 Z=0xff;
  1398.                 Delayms(2000);
  1399.                 Z=0x00;
  1400.                 Delayms(200);       
  1401. }
  1402. void LOG17()
  1403. {       
  1404.         uint i;
  1405.         Y=0xff;
  1406.         X=0xff;
  1407.         X=0x00;
  1408.         for(i=0;i<7;i++)
  1409.         {
  1410.                 Z =ADD_Y[i]; //(0,7,z)轴上的LED
  1411.                 Delayms(400);
  1412.         }               
  1413. }
  1414. void LOG18()
  1415. {
  1416.         uint i;
  1417.         Y=0xff;
  1418.         X=0xff;
  1419.         X=0x00;
  1420.         for(i=0;i<7;i++)
  1421.         {
  1422.                 Z =ADD_X[i]; //
  1423.                 Delayms(400);
  1424.         }                               
  1425. }  
  1426. void LOG19()
  1427. {
  1428.         uint i;
  1429.         Z=0X01;
  1430.         X=0X01;
  1431.         for(i=0;i<8;i++)
  1432.                 {Y=ADD_Y[i];
  1433.                         Delayms(200);}
  1434.         CLEAR();
  1435.         Y=0XFF;
  1436.         X=0X01;
  1437.         X=0X00;
  1438.         for(i=0;i<8;i++)
  1439.                 {Z=ADD_Y[i];
  1440.                         Delayms(200);        }
  1441. }
  1442. void LOG21()
  1443. {                                uint i;
  1444.                                 Y=0XFF;
  1445.                                 X=0X01;
  1446.                                 X=0X00;
  1447.                                 for(i=0;i<7;i++)
  1448.                                 {
  1449.                                         Z =ADD_Y[i]; //(0,7,z)轴上的LED
  1450.                                         Delayms(600);
  1451.                                 }
  1452.                                 }

  1453. void LOG22()   //雨滴
  1454. {

  1455.         uint16 LOW=0;
  1456.         uint8 d,x,y,z,t,i,T=1500;
  1457.         CLEAR();
  1458.         for(d=0;d<15;d++)
  1459.         {
  1460.                 x=rand()%8;
  1461.                 y=rand()%8;
  1462.                 z=(rand()%4)+4;
  1463.                 t=(rand()%40)+30;       
  1464.                 for(LOW=1;LOW<T;LOW+=10)
  1465.                 {
  1466.                         Y=MOVE[y];
  1467.                         X=MOVE[x];
  1468.                         X=0X00;
  1469.                         Z=MOVE[z];
  1470.                         Delay(LOW);
  1471.                         CLEAR();
  1472.                         Delay(T-LOW);
  1473.                 }
  1474.                 Y=MOVE[y];
  1475.                 X=MOVE[x];
  1476.                 X=0X00;
  1477.                 Z=MOVE[z];
  1478.                 Delay(200);
  1479.                 for(i=0;i<z+1;i++)
  1480.                 {
  1481.                         Z|=MOVE[z]>>i;;
  1482.                         Delayms(t);
  1483.                 }
  1484.                 for(i=0;i<z+1;i++)
  1485.                 {
  1486.                         Z=ADD_Y[z]>>i;
  1487.                         Delayms(t-20);
  1488.                 }
  1489.                 for(i=0;i<3;i++)//爆开3圈范围内
  1490.         {       
  1491.                 CLEAR();
  1492.                 Y=MOVE[y]>>i;//横竖方向
  1493.                 X=MOVE[x]>>i;
  1494.                 Y|=MOVE[y]<<i;
  1495.                 X|=MOVE[x]<<i;
  1496.                 X=0x00;
  1497.                 Z=0x01;
  1498.                
  1499.                 Y=MOVE[y]>>(i+1);//斜线方向
  1500.                 Y|=MOVE[y]<<(i+1);//向外爆两格
  1501.                 X|=MOVE[x];
  1502.                 X=0x00;
  1503.                 Z=0x01;

  1504.                 Y=MOVE[y];
  1505.                 X=MOVE[x]>>(i+1);
  1506.                 X|=MOVE[x]<<(i+1);
  1507.                 X=0x00;
  1508.                 Z=0x01;

  1509.                 Delayms(300);
  1510.         }
  1511.         }
  1512. }
  1513. void LOG23()//音柱       
  1514. {
  1515.         uint8 z,i,k;
  1516.         uint16 d;
  1517.         uint8 CD[]={0xff,0xff,0xff,
  1518.                                 0X0f,0Xf0,0x00,
  1519.                                 0X03,0xc0,0X18,
  1520.                                 0xe7,0xe7,0x00,
  1521.                                 0xc3,0xc3,0x18,
  1522.                                 0xc3,0x30,0x0c,
  1523.                                 0xdb,0xdb,0xdb,
  1524.                                 0xaa,0xaa,0xaa,
  1525.                                 0x49,0x49,0x49,};

  1526.         for(i=0;i<27;i=i+3)
  1527.         {
  1528.                 for(k=0;k<8;k++)
  1529.                 {
  1530.                         Y = 0x00; //设置Y轴坐标
  1531.                         X = 0xff; //设置X轴坐标   
  1532.                         X = 0x00; //锁存X轴坐标
  1533.                         Z = 0x00; //熄灭所有LED

  1534.                         for(z=0;z<8;z++)
  1535.                         {
  1536.                                 Y = CD[i]; //设置Y轴坐标
  1537.                                 X = CD[i]; //设置X轴坐标   
  1538.                                 X = 0x00; //锁存X轴坐标
  1539.                                 Z |= 0x01 <<z; //锁存X轴坐标
  1540.                                 Y = CD[i+1]; //设置Y轴坐标
  1541.                                 X = CD[i+1]; //设置X轴坐标   
  1542.                                 X = 0x00; //锁存X轴坐标
  1543.                                 Z |= 0x01 <<z; //锁存X轴坐标
  1544.                                 //         if(i%2==1)
  1545.                                 {
  1546.                                         Y = CD[i+2]; //设置Y轴坐标
  1547.                                         X = CD[i+2]; //设置X轴坐标   
  1548.                                         X = 0x00; //锁存X轴坐标
  1549.                                         Z |= 0x01 <<z; //锁存X轴坐标       
  1550.                                 }                                                         
  1551.                                 d = 45535;
  1552.                                 while(d) d--;
  1553.                         }
  1554.                 }
  1555.                 Y = 0x00; //设置Y轴坐标
  1556.                 X = 0xff; //设置X轴坐标   
  1557.                 X = 0x00; //锁存X轴坐标
  1558.                 Z = 0x00; //熄灭所有LED
  1559.         }
  1560. }         
  1561. void LOG24()
  1562. {
  1563.                                
  1564.         uint i;
  1565.         Z=0XFF;
  1566.         X=0Xff;
  1567.          for(i=0;i<9;i++)
  1568.          {
  1569.                 Y=ADD_M[i];       
  1570.                 Delayms(500);
  1571.                 }       
  1572.          CLEAR();
  1573.          Z=0XFF;
  1574.         X=0Xff;
  1575.          for(i=9;i>0;i--)
  1576.          {
  1577.                 Y=ADD_M[i-1];       
  1578.                 Delayms(500);
  1579.                 }       
  1580.          CLEAR();
  1581.        
  1582. }

  1583. void LOG25()
  1584. {
  1585.         uint i;
  1586.         Y=0XFF;
  1587.         X=0Xff;
  1588.         X=0X00;
  1589.         for(i=7;i>0;i--)
  1590.         {
  1591.                 Z =ADD_Y[i-1]; //(0,7,z)轴上的LED
  1592.                 Delayms(600);
  1593.         }
  1594.         CLEAR();       
  1595. }


  1596. void zhen(uchar *a,uchar v)//一帧,a是一帧编码起始地址
  1597. {
  1598. uchar p;
  1599. char i;
  1600. while(v--)
  1601. {
  1602.   p=1;
  1603.   for(i=0;i<8;i++)
  1604.   {
  1605.    P0=0;
  1606.    fun(a+i*8);
  1607.    P0=p;
  1608.    Delayms(2);
  1609.    p<<=1;
  1610.   }
  1611. }
  1612. }
  1613. void zhen_1(uchar *a,uchar v)//一帧,a是一帧编码起始地址
  1614. {
  1615. uchar p;
  1616. char i;
  1617. while(v--)
  1618. {
  1619.   p=1;
  1620.   for(i=0;i<8;i++)
  1621.   {
  1622.    
  1623.    fun(a+i*8);
  1624.    P0=p;
  1625.    Delayms(10);
  1626.    p<<=1;
  1627.   }
  1628. } P0=0;
  1629. }
  1630. void move(uchar *a,char kind,char direction,char length)//length不能为8
  1631. //kind=0 x轴,1 x轴,2 z轴;direction=0,负向,1正向
  1632. {
  1633. char i,j;
  1634. if(kind==0)
  1635. {
  1636.   if(direction==1)
  1637.    for(i=0;i<64;i++)
  1638.     a[i]<<=length;
  1639.   else
  1640.    for(i=0;i<64;i++)
  1641.     a[i]>>=length;
  1642. }
  1643. else if(kind==1)
  1644. {
  1645.   if(direction==1)
  1646.    for(j=0;j<8;j++)
  1647.    {
  1648.     for(i=7;i>=length;i--)
  1649.      a[i+j*8]=a[i-length+j*8];
  1650.     for(i=0;i<length;i++)
  1651.      a[i+j*8]=0;   
  1652.    }
  1653.   else
  1654.    for(j=0;j<8;j++)
  1655.    {
  1656.     for(i=0;i<length;i++)
  1657.      a[i+j*8]=a[i+length+j*8];
  1658.     for(i=(8-length);i<8;i++)
  1659.      a[i+j*8]=0;   
  1660.    }   
  1661. }
  1662. else
  1663. {
  1664.   if(direction==1)
  1665.    for(j=0;j<8;j++)
  1666.    {
  1667.     for(i=7;i>=length;i--)
  1668.      a[j+i*8]=a[j+(i-length)*8];
  1669.     for(i=0;i<length;i++)
  1670.      a[j+i*8]=0;   
  1671.    }
  1672.   else
  1673.    for(j=0;j<8;j++)
  1674.    {
  1675.     for(i=0;i<(8-length);i++)
  1676.      a[j+i*8]=a[j+(i+length)*8];
  1677.     for(i=(8-length);i<8;i++)
  1678.      a[j+i*8]=0;   
  1679.    }
  1680. }
  1681. }
  1682. void fun(uchar *a)//层填充函数
  1683. {
  1684. uchar i,p;
  1685. p=1;
  1686. for(i=0;i<8;i++)
  1687. {
  1688.   P1=p;
  1689.   P2=a[i];
  1690.   P1=0;
  1691.   p<<=1;
  1692. }
  1693. }
  1694. void qumianxuanzhuan(char kind,char num,char v)//曲面旋转
  1695. {
  1696. uchar a[64]={0};
  1697. char i,j,k;
  1698. for(j=0;j<8;j++)
  1699.   for(i=0;i<8;i++)
  1700.    a[i+j*8]=tab_xuanzhuantiao[i];
  1701. zhen(a,v);
  1702. if(kind==1)
  1703. {
  1704.   for(j=1;j<8;j++)//顺时针初形变换
  1705.   {
  1706.    for(i=0;i<j;i++)
  1707.     for(k=0;k<8;k++)
  1708.      a[k+i*8]=tab_xuanzhuantiao[(j-i)*8+k];
  1709.    zhen(a,v);
  1710.   }
  1711.   for(i=8;i<14;i++)
  1712.   {
  1713.    move(a,2,1,1);
  1714.    for(j=0;j<8;j++)
  1715.     a[j]=tab_xuanzhuantiao[i*8+j];
  1716.    zhen(a,v);
  1717.   }
  1718. }
  1719. else
  1720. {
  1721.   for(j=1;j<8;j++)//逆时针初形变换
  1722.   {
  1723.    for(i=0;i<j;i++)
  1724.     for(k=0;k<8;k++)
  1725.      a[k+i*8]=tab_xuanzhuantiao[(14-j+i)*8+k];
  1726.    zhen(a,v);
  1727.   }
  1728.   for(i=7;i>=0;i--)
  1729.   {
  1730.    move(a,2,1,1);
  1731.    for(j=0;j<8;j++)
  1732.     a[j]=tab_xuanzhuantiao[i*8+j];
  1733.    zhen(a,v);
  1734.   }
  1735. }

  1736. while(num--)//主循环
  1737. {
  1738.   if(kind==1)
  1739.    for(i=0;i<14;i++)
  1740.    {
  1741.     move(a,2,1,1);
  1742.     for(j=0;j<8;j++)
  1743.      a[j]=tab_xuanzhuantiao[i*8+j];
  1744.     zhen(a,v);
  1745.    }
  1746.   else
  1747.    for(i=13;i>=0;i--)
  1748.    {
  1749.     move(a,2,1,1);   
  1750.     for(j=0;j<8;j++)
  1751.      a[j]=tab_xuanzhuantiao[i*8+j];
  1752.     zhen(a,v);
  1753.    }
  1754. }
  1755. if(kind==1)
  1756.   for(j=0;j<7;j++)
  1757.   {
  1758.    for(i=7;i>=j;i--)
  1759.    {
  1760.     if(i>j)
  1761.      for(k=0;k<8;k++)
  1762.       a[k+i*8]=tab_xuanzhuantiao[(14-i+j)*8+k];
  1763.     else
  1764.      for(k=0;k<8;k++)
  1765.       a[k+i*8]=tab_xuanzhuantiao[k];
  1766.    }
  1767.    zhen(a,v);
  1768.   }
  1769. else
  1770.   for(j=1;j<7;j++)
  1771.   {
  1772.    for(i=7;i>=j;i--)
  1773.    {
  1774.     if(i>j)
  1775.      for(k=0;k<8;k++)
  1776.       a[k+i*8]=tab_xuanzhuantiao[(i-j)*8+k];
  1777.     else
  1778.      for(k=0;k<8;k++)
  1779.       a[k+i*8]=tab_xuanzhuantiao[k];
  1780.    }
  1781.    zhen(a,v);
  1782.   }
  1783. }
  1784. void qumianxuanzhuan2(char num,char v)//曲面旋转
  1785. {
  1786. uchar a[64]={0};
  1787. char i,j,k;
  1788. for(j=0;j<8;j++)
  1789.   for(i=0;i<8;i++)
  1790.    a[i+j*8]=tab_xuanzhuantiao[i];
  1791. zhen(a,v);
  1792. for(j=1;j<8;j++)
  1793. {
  1794.   for(i=0;i<j;i++)
  1795.    for(k=0;k<8;k++)
  1796.     a[k+i*8]=tab_xuanzhuantiao[(14-j+i)*8+k];
  1797.   zhen(a,v);
  1798. }
  1799. while(num--)
  1800. {
  1801.   for(j=1;j<8;j++)
  1802.   {
  1803.    move(a,2,1,1);
  1804.    for(i=0;i<j;i++)
  1805.    {
  1806.     for(k=0;k<8;k++)
  1807.     {
  1808.      if(j!=7|i!=0)
  1809.       a[i*8+k]=tab_xuanzhuantiao[k+(j+7-i)*8];
  1810.      else
  1811.       a[k]=tab_xuanzhuantiao[k];
  1812.     }
  1813.    }
  1814.    zhen(a,v);
  1815.   }
  1816.   for(j=1;j<8;j++)
  1817.   {
  1818.    move(a,2,1,1);
  1819.    for(i=0;i<j;i++)
  1820.    {
  1821.     for(k=0;k<8;k++)
  1822.      a[i*8+k]=tab_xuanzhuantiao[k+(14-j+i)*8];
  1823.    }
  1824.    zhen(a,v);
  1825.   }
  1826. }
  1827. }
  1828. void xuanzhuantiao(char kind,char num,char v)//空心旋转,kind=1实心,否则空心
  1829. {
  1830. uchar a[64]={0};
  1831. char i,j,k;
  1832. while(num--)
  1833. {
  1834.   for(i=0;i<14;i++)
  1835.   {
  1836.    for(j=0;j<8;j++)
  1837.    {
  1838.     for(k=0;k<8;k++)
  1839.     {
  1840.      if(k>1&&k<6&&j>1&&j<6&&kind!=1)
  1841.       a[k+j*8]=tab_xuanzhuantiao[i*8+k]&0xc3;
  1842.      else
  1843.       a[k+j*8]=tab_xuanzhuantiao[i*8+k];
  1844.     }
  1845.    }
  1846.    zhen(a,v);
  1847.   }
  1848. }
  1849. }

  1850. void flash0(char v)//条状升降
  1851. {
  1852.   char i,j,k;
  1853.   uchar a[64]={0};
  1854.   for(i=7;i>=0;i--)
  1855.   {
  1856.    a[i]=0x01<<i;
  1857.    zhen(a,v+5);
  1858.   }
  1859.   for(i=0;i<7;i++)
  1860.   {
  1861.    for(j=0;j<8;j++)
  1862.     a[j]=flash0__tab[i*8+j];
  1863.    zhen(a,v+5);
  1864.   }
  1865.   for(i=0;i<7;i++)
  1866.   {
  1867.    move(a,2,1,1);
  1868.    zhen(a,v+5);
  1869.   }
  1870. /*  for(i=0;i<64;i++)
  1871.   {
  1872.    if(i>55)
  1873.     a[i]=0xff;
  1874.    else
  1875.     a[i]=0;
  1876.   }*/
  1877.   zhen(a,20);
  1878.   for(i=7;i>=0;i--)//1
  1879.    for(j=6;j>=0;j--)
  1880.    {
  1881.     a[i+j*8]=0xff;
  1882.     a[i+(j+1)*8]=0;
  1883.     zhen(a,v);
  1884.    }
  1885.   zhen(a,27);
  1886.   for(i=7;i>=0;i--)//2
  1887.    for(j=1;j<8;j++)
  1888.    {
  1889.     a[i+j*8]=0xff;
  1890.     a[i+(j-1)*8]=0;
  1891.     zhen(a,v);
  1892.    }
  1893.   zhen(a,27);
  1894.   for(i=7;i>=0;i--)//3
  1895.    for(k=6;k>=0;k--)
  1896.    {
  1897.     for(j=0;j<8;j++)
  1898.     {
  1899.      if(k==0)
  1900.       a[j+k*8]|=(0x80>>(7-i));
  1901.      else
  1902.       a[j+k*8]=(0x80>>(7-i));
  1903.      a[j+(k+1)*8]^=(0x80>>(7-i));
  1904.     }
  1905.     zhen(a,v);
  1906.    }
  1907.   zhen(a,27);
  1908.   for(i=7;i>=0;i--)//4
  1909.    for(k=1;k<8;k++)
  1910.    {
  1911.     for(j=0;j<8;j++)
  1912.     {
  1913.      if(k==7)
  1914.       a[j+k*8]|=(0x80>>(7-i));
  1915.      else
  1916.       a[j+k*8]=(0x80>>(7-i));
  1917.      a[j+(k-1)*8]^=(0x80>>(7-i));
  1918.     }
  1919.     zhen(a,v);
  1920.    }
  1921.   zhen(a,27);
  1922. }
  1923. short sqrt_16( unsigned long M)   
  1924. {
  1925.     unsigned int N,i;
  1926.     unsigned long tmp,ttp;
  1927.     if(M==0)            
  1928.         return 0;
  1929.     N=0;
  1930.     tmp=(M>>30);        
  1931.     M<<=2;
  1932.     if(tmp>1)            
  1933.     {
  1934.         N++;               
  1935.         tmp-=N;
  1936.     }
  1937.     for(i=15;i>0;i--)   
  1938.     {
  1939.         N<<=1;           
  1940.         tmp<<=2;
  1941.         tmp+=(M>>30);  
  1942.         ttp=N;
  1943.         ttp=(ttp<<1)+1;
  1944.         M<<=2;
  1945.         if(tmp>=ttp)   
  1946.         {
  1947.             tmp-=ttp;
  1948.             N++;
  1949.         }      
  1950.     }
  1951.     return N;
  1952. }
  1953. void H_scan(uchar v)
  1954. {
  1955. uchar b[64]={0};
  1956. char i,j;
  1957. for(i=0;i<64;i++)
  1958.   b[i]=0x80;
  1959. for(i=0;i<7;i++)
  1960. {
  1961.   for(j=0;j<64;j++)
  1962.    b[j]>>=1;
  1963.   zhen(b,v);
  1964. }
  1965. }
  1966. void donghua(uchar *tab,uchar num,uchar n,char v)
  1967. {
  1968. char i;
  1969. while(n--)
  1970. {
  1971.   for(i=0;i<num;i++)//清空
  1972.   {
  1973.    zhen(tab+i*64,v);
  1974.   }
  1975. }
  1976. }
  1977. void donghua_1(uchar *tab,uchar num,uchar n,char v)
  1978. {
  1979. char i;
  1980. while(n--)
  1981. {
  1982.   for(i=0;i<num;i++)//清空
  1983.   {
  1984.    zhen_1(tab+i*64,v);
  1985.   }
  1986. }
  1987. }
  1988. void yinchu(uchar *table,char n,char v)
  1989. {
  1990. /****************************
  1991. n为帧数
  1992. ******************************/
  1993. char i,j,k;
  1994. uchar a[64]={0},p;
  1995. for(k=0;k<n;k++)
  1996. {
  1997.   for(i=0;i<8;i++)
  1998.   {
  1999.    p=0xff;
  2000.    for(j=0;j<64;j++)
  2001.    {
  2002.     a[j]=(table[j+k*64]|(0x80>>i))&(p<<(7-i));
  2003.    }
  2004.    zhen(a,v);
  2005.   }
  2006.   zhen(table+k*64,50);
  2007. }

  2008. }
  2009. void link00()
  2010. {
  2011. uchar a[64]={0};
  2012. char i;
  2013. for(i=10;i>7;i--)
  2014. {
  2015.   zhen(bianxing_table+i*64,70);
  2016. }
  2017. produce_cube(a,6);
  2018. move(a,1,1,1);
  2019. move(a,0,1,1);
  2020. zhen(a,110);
  2021. produce_cube(a,8);
  2022. zhen(a,110);
  2023. }
  2024. void produce_cube(uchar *a,char n)//0<=n<=8
  2025. {
  2026. char i,j;
  2027. for(i=0;i<8;i++)
  2028.   for(j=0;j<8;j++)
  2029.   {
  2030.    if(j<n&&i<n)
  2031.     a[j+i*8]=0xff>>(8-n);
  2032.    else
  2033.     a[j+i*8]=0;
  2034.   }
  2035. }

  2036. void hy(uchar *tab,char v)
  2037. {
  2038. uchar a[64]={0};
  2039. char i,j;
  2040. for(i=0;i<8;i++)
  2041.   a[i*8]=tab[i];
  2042. zhen(a,v);
  2043. for(i=1;i<8;i++)
  2044. {
  2045.      for(j=0;j<8;j++)
  2046.       a[i+j*8]=a[i-1+j*8];
  2047.      zhen(a,v);
  2048. }
  2049.         for(i=0;i<7;i++)
  2050. {
  2051.      for(j=0;j<8;j++)
  2052.       a[i+j*8]=0;
  2053.      zhen(a,v);
  2054. }
  2055.         zhen(a,23);
  2056. }
  2057. void leitu(uchar *b,char num,char v)//V>1
  2058. {
  2059. uchar a[64]={0},p;
  2060. char i,j,k,m;
  2061. for(m=0;m<num;m++)
  2062. {
  2063.   for(i=0;i<8;i++)
  2064.    for(k=0;k<8;k++)
  2065.     for(j=0;j<8;j++)
  2066.     {
  2067.      p=b[m*64+i*8+k]&(0x01<<j);
  2068.      if(p)
  2069.      {
  2070.       a[i*8+k]|=p;
  2071.       zhen(a,v);
  2072.      }
  2073.     }
  2074.   zhen(a,60);
  2075.   for(j=0;j<64;j++)
  2076.   {
  2077.    if(!a[j])
  2078.     continue;
  2079.    a[j]=0;
  2080.    zhen(a,v-1);
  2081.   }
  2082.   Delayms(30);
  2083. }
  2084. }
  2085. void zimu(uchar *x,char n,char v,int num)//滚动字幕,num表示循环次数,v表示滚动速度,n字符个数
  2086. {
  2087. char i,j,k;
  2088. uchar xdata a[64]={0},temp0[8],temp1[8],temp2[8],temp3[8],temp[8];
  2089. for(i=0;i<8;i++)
  2090. {
  2091.   temp0[i]=0;
  2092.   temp1[i]=0;
  2093.   temp2[i]=0;
  2094.   temp3[i]=0;
  2095. }
  2096. while(num--)
  2097.   for(j=0;j<n;j++)//滚动
  2098.   {
  2099.    for(k=7;k>=0;k--)//读取数据
  2100.     temp[7-k]=x[j*8+k];
  2101.    for(k=0;k<8;k++)//移动8位
  2102.    {
  2103.     for(i=0;i<8;i++)
  2104.     {
  2105.      temp0[i]=(temp0[i]<<1)|(temp1[i]>>7);
  2106.      temp1[i]=(temp1[i]<<1)|(temp2[i]>>7);
  2107.      temp2[i]=(temp2[i]<<1)|(temp3[i]>>7);
  2108.      temp3[i]=(temp3[i]<<1)|(temp[i]>>7);
  2109.      temp[i]<<=1;
  2110.      fun1(a+i*8,temp0[i],temp1[i],temp2[i],temp3[i]);
  2111.     }
  2112.     zhen(a,v);
  2113.    }
  2114.   }
  2115. }
  2116. void fun1(uchar *a,uchar d,uchar b,uchar c,uchar e)//滚动字幕数据处理
  2117. {
  2118. char i;
  2119. for(i=0;i<8;i++)
  2120. {
  2121.   a[i]=e&0x01;
  2122.   e>>=1;
  2123. }
  2124. a[7]|=(c<<1);
  2125. a[6]|=(c&0x80);
  2126. for(i=0;i<6;i++)
  2127. {
  2128.   a[5-i]|=((b<<(7-i))&0x80);
  2129. }
  2130. d=daoxu(d);
  2131. a[0]|=((d>>1)&0x7e);
  2132. }
  2133. uchar daoxu(uchar x)//一字节倒序
  2134. {
  2135. uchar k=0;
  2136. char i;
  2137. for(i=0;i<8;i++)
  2138. {
  2139.   if((x>>(7-i))&0x01)
  2140.    k|=0x01<<i;
  2141. }
  2142. return k;
  2143. }
  2144. void fn(char v)
  2145. {
  2146. uchar a[64]={0};
  2147. int i;
  2148. for(i=0;i<128;i++)//点
  2149. {
  2150.   a[tab00[i]]=(0x01<<tab01[i]);
  2151.   zhen(a,v);
  2152.   a[tab00[i]]=0;
  2153. }
  2154. for(i=0;i<128;i++)//8点
  2155. {
  2156.   a[tab10[i]]|=(0x01<<tab01[i]);
  2157.   if(i>=8)
  2158.    a[tab10[i-8]]^=(0x01<<tab01[i-8]);
  2159.   zhen(a,v);
  2160. }
  2161. a[tab00[0]]|=(0x01<<tab01[0]);
  2162. a[0]=0x80;
  2163. zhen(a,v);
  2164. for(i=1;i<128;i++)//线
  2165. {
  2166.   if(i<8)
  2167.    a[i-1]=0;
  2168.   a[tab00[i]]|=(0x01<<tab01[i]);
  2169.   zhen(a,v);
  2170. }
  2171. zhen(a,120);
  2172. for(i=0;i<128;i++)//线
  2173. {
  2174.   a[tab10[i]]^=(0x01<<tab01[i]);
  2175.   zhen(a,v);
  2176. }
  2177. }
  2178. void linkpc1(char v)
  2179. {
  2180. uchar i,a[64]={0};
  2181. for(i=0;i<7;i++)
  2182.   a[7*8+i]=0xff;
  2183. for(i=0;i<8;i++)
  2184. {
  2185.   move(a,2,0,1);
  2186.   zhen(a,v);
  2187. }
  2188. }
  2189. void pc1(char num,char v)
  2190. {
  2191. uchar a[64]={0};
  2192. char i,j;
  2193. while(num--)
  2194. {
  2195.   for(i=1;i<8;i++)
  2196.    a[i]=0xff;
  2197.   zhen(a,v);
  2198.   for(i=1;i<8;i++)
  2199.   {
  2200.    move(a,2,1,1);
  2201.    for(j=0;j<8;j++)
  2202.     a[j]=0xff;
  2203.    zhen(a,v);
  2204.   }
  2205.   for(i=0;i<8;i++)
  2206.   {
  2207.    if(num==0&&i==7)
  2208.     continue;
  2209.    move(a,2,1,1);
  2210.    zhen(a,v);
  2211.   }
  2212. }
  2213. for(i=0;i<7;i++)
  2214. {
  2215.   move(a,2,0,1);
  2216.   zhen(a,v+5);
  2217. }
  2218. }
  2219. void denghuo(char v)
  2220. {
  2221. uchar a[64];
  2222. char i,j,k;
  2223. for(k=0;k<8;k++)
  2224.   for(i=0;i<8;i++)
  2225.    for(j=0;j<8;j++)
  2226.    {
  2227.     a[tab_mian[i]*8+tab_xian[j]]|=(0x01<<tab_dian[(i+j)*8+k]);
  2228.     zhen(a,v);
  2229.    }
  2230.   zhen(a,90);
  2231. for(k=0;k<8;k++)
  2232.   for(i=0;i<8;i++)
  2233.    for(j=0;j<8;j++)
  2234.    {
  2235.     a[tab_mian[i]*8+tab_xian[j]]^=(0x01<<tab_dian[(i+j)*8+k]);
  2236.     zhen(a,v);
  2237.    }
  2238. }
  2239. void link_pingmian1(char v)
  2240. {
  2241. uchar a[64]={0};
  2242. char i,j;
  2243. for(i=0;i<8;i++)
  2244.   for(j=0;j<8;j++)
  2245.   {
  2246.    a[7*8+j]|=(0x01<<i);
  2247.    zhen(a,v);
  2248.   }
  2249. }
  2250. void pingmian1(char num,char v)
  2251. {
  2252. char i,k;
  2253. uchar a[64]={0};
  2254. for(i=0;i<8;i++)
  2255.   a[7*8+i]=0xff;
  2256. zhen(a,v);
  2257. while(num--)
  2258.   for(i=0;i<28;i++)
  2259.   {
  2260.    if(i<7)
  2261.     for(k=0;k<8;k++)
  2262.     {
  2263.      a[(6-i)*8+k]=0x01;
  2264.      a[7*8+k]>>=1;
  2265.     }
  2266.    else if(i<14)
  2267.     for(k=0;k<8;k++)
  2268.     {
  2269.      a[k]|=0x01<<(i-6);
  2270.      a[(14-i)*8+k]=0;
  2271.     }
  2272.    else if(i<21)
  2273.     for(k=0;k<8;k++)
  2274.     {
  2275.      a[(i-13)*8+k]=0x80;
  2276.      a[k]<<=1;
  2277.     }
  2278.    else
  2279.     for(k=0;k<8;k++)
  2280.     {
  2281.      a[7*8+k]|=0x80>>(i-20);
  2282.      a[(i-21)*8+k]=0;
  2283.     }
  2284.    zhen(a,v);
  2285.   }
  2286. CLEAR();
  2287. }
  2288. void print(uchar *a,char m)//m=0中空显示,m=1实心显示
  2289. {
  2290. uchar p;
  2291. char i,j,k;
  2292. uchar b[64]={0};
  2293. for(i=0;i<8;i++)
  2294. {
  2295.   b[7*8+i]=0xff;
  2296. }
  2297. for(i=0;i<8;i++)//行切换
  2298. {
  2299.   for(j=0;j<8;j++)//点移动
  2300.   {
  2301.    p=a[i]&(0x01<<j);
  2302.    if(p)
  2303.    {
  2304.     for(k=6;k>0;k--)
  2305.     {
  2306.      if(m==1&&k==6)
  2307.      {;}
  2308.      else
  2309.       b[(k+1)*8+7-i]&=(~p);
  2310.      b[k*8+7-i]|=(0x01<<j);
  2311.      zhen(b,1);
  2312.     }
  2313.     b[1*8+7-i]=0;
  2314.     b[7-i]|=p;
  2315.     zhen(b,1);
  2316.    }
  2317.    b[7-i]|=p;
  2318.   }
  2319. }
  2320. zhen(b,40);
  2321. b[0]=0;
  2322. for(j=7;j>0;j--)
  2323. {
  2324.   for(i=7;i>0;i--)
  2325.   {
  2326.    b[i]=b[i-1];

  2327.   }
  2328.    zhen(b,5);  
  2329. }
  2330.   CLEAR();
  2331. }
  2332. void link_jb0(char v)
  2333. {
  2334. uchar a[64]={0};
  2335. char i;
  2336. for(i=0;i<64;i++)
  2337. {
  2338.   a[i]=0x80;
  2339.   zhen(a,v);
  2340. }
  2341. }
  2342. void jb0(char num,char v)///////////////////////////////
  2343. {
  2344. char i,k;
  2345. uchar c[64]={0};
  2346. for(i=0;i<64;i++)
  2347.   c[i]=0x80;
  2348. zhen(c,v);
  2349. while(num--)
  2350.   for(i=0;i<28;i++)
  2351.   {
  2352.    if(i<7)
  2353.     for(k=0;k<8;k++)
  2354.     {
  2355.      c[k*8]|=(0x80>>(i+1));
  2356.      c[k*8+7-i]=0;
  2357.     }
  2358.    else if(i<14)
  2359.     for(k=0;k<8;k++)
  2360.     {
  2361.      c[k*8+i-6]=0x01;
  2362.      c[k*8]>>=0x01;
  2363.     }
  2364.    else if(i<21)
  2365.     for(k=0;k<8;k++)
  2366.     {
  2367.      c[k*8+i-14]=0;
  2368.      c[k*8+7]|=(0x01<<(i-13));
  2369.     }
  2370.    else if(i<28)
  2371.     for(k=0;k<8;k++)
  2372.     {
  2373.      c[k*8+27-i]=0x80;
  2374.      c[k*8+7]<<=1;
  2375.     }
  2376.    zhen(c,v);
  2377.   }
  2378.         CLEAR();
  2379. }
  2380. /****************************
  2381. 旋转衔接
  2382. ******************************/
  2383. void link(char v)
  2384. {

  2385. char i,j,k;
  2386. uchar a[64]={0};
  2387. for(i=0;i<64;i++)
  2388.   a[i]=0x80;
  2389. zhen(a,3);
  2390. for(i=0;i<8;i++)
  2391. {
  2392.   for(j=0;j<8;j++)
  2393.   {
  2394.    if(i<7)
  2395.     a[j*8+7-i]&=0x7f;
  2396.    a[j*8+i]|=(0x80>>i);
  2397.   }
  2398.   zhen(a,v);
  2399. }
  2400. for(i=0;i<6;i++)
  2401. {
  2402.   for(j=0;j<8;j++)
  2403.    for(k=0;k<8;k++)
  2404.     a[j*8+k]=tab_xuanzhuantiao[(i+8)*8+k];
  2405.   zhen(a,3);
  2406. }
  2407. }
  2408. void xuanzhuantiao2(char num,char v)//空心旋转,kind=1实心,否则空心
  2409. {
  2410. uchar a[64]={0};
  2411. char i,j,k;
  2412. while(num--)
  2413.   for(i=0;i<56;i++)
  2414.   {
  2415.    for(j=0;j<8;j++)
  2416.     for(k=0;k<8;k++)
  2417.      a[j*8+k]=tab_xuanzhuantiao2[i*8+k];
  2418.    zhen(a,v);
  2419.   }
  2420. }
  2421. void xzcube()
  2422. {
  2423.   char i;
  2424.   donghua(y_table,6,8,8);
  2425.   for(i=0;i<26;i++)
  2426.   {
  2427.    if(i==12||i==13||i==14)
  2428.     zhen(yx_table+i*64,30);
  2429.    else
  2430.     zhen(yx_table+i*64,14);
  2431.   }
  2432.   donghua(x_table,6,8,8);
  2433.   for(i=0;i<26;i++)
  2434.   {
  2435.    if(i==12||i==13||i==14)
  2436.     zhen(xz_table+i*64,30);
  2437.    else
  2438.     zhen(xz_table+i*64,14);
  2439.   }
  2440.   donghua(z_table,6,8,8);
  2441. }

  2442. void shensuo(uchar v)
  2443. {
  2444. char i,j;
  2445. uchar a[64]={0};
  2446. for(i=0;i<64;i++)
  2447.   a[i]=0xff;
  2448. for(i=0;i<7;i++)
  2449. {
  2450.   move(a,0,0,1);
  2451.   zhen(a,v);
  2452. }
  2453. for(i=0;i<7;i++)
  2454. {
  2455.   move(a,0,1,1);
  2456.   for(j=0;j<64;j++)
  2457.    a[j]|=0x01;
  2458.   zhen(a,v);
  2459. }
  2460. for(i=0;i<7;i++)
  2461. {
  2462.   move(a,2,0,1);
  2463.   zhen(a,v);
  2464. }
  2465. for(i=0;i<7;i++)
  2466. {
  2467.   move(a,2,1,1);
  2468.   for(j=0;j<8;j++)
  2469.    a[j]|=0xff;
  2470.   zhen(a,v);
  2471. }
  2472. for(i=7;i>0;i--)
  2473. {
  2474.   for(j=0;j<8;j++)
  2475.    a[j*8+i]=0;
  2476.   zhen(a,v);
  2477. }
  2478. for(i=1;i<8;i++)
  2479. {
  2480.   for(j=0;j<8;j++)
  2481.    a[j*8+i]|=0xff;
  2482.   zhen(a,v);
  2483. }
  2484. }
  2485. void cube(char empty,char kind,char v)
  2486. {
  2487. uchar a[64]={0};
  2488. char i;
  2489. for(i=1;i<=8;i++)//生成
  2490. {
  2491.   if(empty==0)
  2492.    produce_cube(a,i);
  2493.   else
  2494.    produce_empty(a,i);
  2495.   if(kind==0)
  2496.    {;}
  2497.   else if(kind==1)
  2498.    move(a,1,1,8-i);
  2499.   else if(kind==2)
  2500.   {
  2501.    move(a,1,1,8-i);
  2502.    move(a,0,1,8-i);
  2503.   }
  2504.   else
  2505.    move(a,0,1,8-i);
  2506.   zhen_1(a,v);
  2507.   //Delayms(200);

  2508. }

  2509. for(i=7;i>0;i--)//退出
  2510. {
  2511.   if(empty==0)
  2512.    produce_cube(a,i);
  2513.   else
  2514.    produce_empty(a,i);
  2515.   if(kind==0)
  2516.   {
  2517.    move(a,1,1,8-i);
  2518.    move(a,0,1,8-i);
  2519.   }
  2520.   else if(kind==1)
  2521.    move(a,0,1,8-i);
  2522.   else if(kind==2)
  2523.    {;}
  2524.   else
  2525.    move(a,1,1,8-i);  
  2526.   zhen_1(a,v);
  2527.    //Delayms(200);
  2528.   
  2529. }
  2530. }
  2531. void produce_empty(uchar *a,char n)//0<n<=8,注意n不能为0
  2532. {
  2533. char j;
  2534. uchar p;
  2535. for(j=0;j<64;j++)
  2536.   a[j]=0;
  2537. p=0xff>>(8-n);
  2538. /************X4列*************/
  2539. a[(n-1)*8+n-1]=p;
  2540. a[(n-1)*8]=p;
  2541. a[0]=p;
  2542. a[n-1]=p;
  2543. for(j=0;j<n;j++)
  2544. {
  2545.   p=(0x01|(0x01<<(n-1)));
  2546. /************竖直4列*************/
  2547.   a[j*8]|=p;
  2548.   a[j*8+n-1]|=p;
  2549. /************Y4列*************/
  2550.   a[j]|=p;
  2551.   a[(n-1)*8+j]|=p;
  2552. }
  2553. }
  2554. void shandian(char v)
  2555. {
  2556.   char i,j;
  2557.   uchar a[64];
  2558.   for(i=0;i<64;i++)
  2559.    a[i]=tab_shandian[64*21+i];
  2560.   for(i=0;i<22;i++)
  2561.    zhen(tab_shandian+64*i,v);
  2562.   for(i=0;i<22;i++)
  2563.   {
  2564.    for(j=0;j<64;j++)
  2565.     a[j]=a[j]&(~tab_shandian[64*i+j]);
  2566.    zhen(a,v);
  2567.    Delayms(10);
  2568.   }
  2569. }
  2570. void szfc0(char v)//数字上浮
  2571. {
  2572. char i,j;
  2573. uchar a[64];
  2574. for(i=0;i<64;i++)
  2575. {
  2576.   a[i]=0;
  2577. }
  2578. for(j=124;j>=0;j--)
  2579. {
  2580.   for(i=7;i>=0;i--)
  2581.   {
  2582.    a[i*8+3]=szfc_table[j+i];
  2583.    a[i*8+4]=szfc_table[j+i];
  2584.   }
  2585.   zhen(a,v);
  2586. }
  2587. }
  2588. void rain(char menu,char num,char v)
  2589. {//menu=0,up;menu=1,down
  2590. uchar a[64]={0};
  2591. char i,j;
  2592. if(menu==0)
  2593. {
  2594.   for(i=0;i<8;i++)
  2595.    a[i]=tab_rain[i];
  2596.   zhen(a,v);
  2597.   for(i=1;i<8;i++)
  2598.   {
  2599.    move(a,2,1,1);
  2600.    for(j=0;j<8;j++)
  2601.     a[j]=tab_rain[i*8+j];
  2602.    zhen(a,v);
  2603.   }
  2604.   while(num--)
  2605.   {
  2606.    for(i=0;i<8;i++)
  2607.    {
  2608.     move(a,2,1,1);
  2609.     for(j=0;j<8;j++)
  2610.      a[j]=tab_rain[i*8+j];
  2611.     zhen(a,v);
  2612.    }
  2613.   }
  2614. }
  2615. else
  2616. {
  2617.   for(i=0;i<8;i++)
  2618.    a[7*8+i]=tab_rain[i];
  2619.   zhen(a,v);
  2620.   for(i=1;i<8;i++)
  2621.   {
  2622.    move(a,2,0,1);
  2623.    for(j=0;j<8;j++)
  2624.     a[7*8+j]=tab_rain[i*8+j];
  2625.    zhen(a,v);
  2626.   }
  2627.   while(num--)
  2628.   {
  2629.    for(i=0;i<8;i++)
  2630.    {
  2631.     move(a,2,0,1);
  2632.     for(j=0;j<8;j++)
  2633.      a[j+7*8]=tab_rain[i*8+j];
  2634.     zhen(a,v);
  2635.    }   
  2636.   }
  2637. }
  2638. }
复制代码
回复

使用道具 举报

ID:57234 发表于 2015-3-19 14:59 | 显示全部楼层
哇这个太酷了,楼主的动手能力真强,而且程序的思路很清晰,值得收藏。
回复

使用道具 举报

ID:75610 发表于 2015-4-7 20:24 | 显示全部楼层
真是太厉害了,51hei有你更精彩!!
回复

使用道具 举报

ID:75535 发表于 2015-4-28 23:05 | 显示全部楼层
楼主,分享一下原理图吧
回复

使用道具 举报

ID:74827 发表于 2015-5-2 21:24 | 显示全部楼层
x327028539 发表于 2015-4-28 23:05
楼主,分享一下原理图吧

硬件这块你可以上网上搜一下,很多的 ,也很详细
我就是IO的选择很被人不同而已   我的这个选择不是最优的
网上有些大神的IO分配很合理,画PCB时更容易
我更新了   你自己下载下
注: 我的2083是后加的小模块,没在原理图里的,你自己在去整合下,你将就的参考下
回复

使用道具 举报

ID:75107 发表于 2015-5-3 18:56 | 显示全部楼层
学习学习。。。。。。。。。。。。。。。。。
回复

使用道具 举报

ID:78778 发表于 2015-5-3 22:22 | 显示全部楼层
程序稍不过去。为什么
回复

使用道具 举报

ID:66476 发表于 2015-5-11 18:32 来自手机 | 显示全部楼层
学习!
回复

使用道具 举报

ID:66476 发表于 2015-5-11 18:34 来自手机 | 显示全部楼层
很好的资料,学习
回复

使用道具 举报

ID:65980 发表于 2015-5-19 00:22 | 显示全部楼层
买个套件学习下
回复

使用道具 举报

ID:78841 发表于 2015-5-28 14:31 | 显示全部楼层
真的很厉害
回复

使用道具 举报

ID:82732 发表于 2015-6-11 19:28 | 显示全部楼层
哇这个太酷了,楼主的动手能力真强,而且程序的思路很清晰,值得收藏。
回复

使用道具 举报

ID:88584 发表于 2015-9-15 13:56 | 显示全部楼层
谢楼主分享。。。。果断拿走啊谢楼主分享。。。。果断拿走啊
回复

使用道具 举报

ID:17585 发表于 2015-9-16 21:29 | 显示全部楼层
楼主太强大了
回复

使用道具 举报

ID:65533 发表于 2015-9-22 11:35 | 显示全部楼层
好强大啊。LED也是自己焊接的吗?
回复

使用道具 举报

ID:84798 发表于 2015-9-22 17:45 | 显示全部楼层
很棒,讨好了
回复

使用道具 举报

ID:44267 发表于 2015-10-6 20:35 | 显示全部楼层
很棒,讨好了
回复

使用道具 举报

ID:90462 发表于 2015-11-20 16:01 来自手机 | 显示全部楼层
编译不能通过怎么回事啊
回复

使用道具 举报

ID:90462 发表于 2015-11-20 16:05 来自手机 | 显示全部楼层
只要 发表于 2015-5-3 22:22
**** 作者被禁止或删除 内容自动屏蔽 ****

大神,问一下,你的程序现在能烧过去了吗,我也遇到这个问题了
回复

使用道具 举报

ID:94289 发表于 2015-12-1 11:22 | 显示全部楼层
膜拜膜拜
回复

使用道具 举报

ID:77640 发表于 2015-12-4 16:24 | 显示全部楼层
大神牛逼,这算法得多烧脑啊。
回复

使用道具 举报

ID:98493 发表于 2016-1-14 11:18 | 显示全部楼层
译不能通过怎么回事啊
回复

使用道具 举报

ID:74827 发表于 2016-1-18 23:25 | 显示全部楼层
14781708282 发表于 2016-1-14 11:18
译不能通过怎么回事啊

你好,有可能我用的烧录软件和你的不一样等等因素,所以译不过去。我的建议是你用你自己写好的,然后又经常用、烧录没问题的头文件和宏定义等等,然后再截取我里面对你有用的部分不断的填充你自己的程序中去,改程序,把它变成你自己的东西。这样也就不会出现烧录和其他问题了
回复

使用道具 举报

ID:103807 发表于 2016-1-19 18:59 | 显示全部楼层
太棒了,真的好好学学了。
回复

使用道具 举报

ID:121064 发表于 2016-5-15 22:08 | 显示全部楼层
楼主很棒,学习了
回复

使用道具 举报

ID:121039 发表于 2016-5-16 00:06 | 显示全部楼层
51hei有你更精彩!!
回复

使用道具 举报

ID:148482 发表于 2016-11-17 15:24 | 显示全部楼层
为什么调不通呢,下载个代码看看
回复

使用道具 举报

ID:146057 发表于 2016-12-29 13:34 来自手机 | 显示全部楼层
正方形就好了
回复

使用道具 举报

ID:163177 发表于 2017-1-31 19:03 | 显示全部楼层
好厉害
回复

使用道具 举报

ID:141235 发表于 2017-2-1 00:03 | 显示全部楼层
给力给力!
回复

使用道具 举报

ID:183993 发表于 2017-5-31 18:33 | 显示全部楼层
我要下载
回复

使用道具 举报

ID:220216 发表于 2017-7-18 16:38 | 显示全部楼层
这光立方的LED动画效果太炫了!多谢楼主的程序!
回复

使用道具 举报

ID:241152 发表于 2017-10-20 17:04 | 显示全部楼层
非常好,谢谢分享
回复

使用道具 举报

ID:244885 发表于 2017-11-1 11:31 | 显示全部楼层
非常好,谢谢分享
回复

使用道具 举报

ID:281254 发表于 2018-1-31 18:37 | 显示全部楼层

51hei有你更精彩!!
回复

使用道具 举报

ID:281254 发表于 2018-1-31 18:37 | 显示全部楼层

51hei有你更精彩!!
回复

使用道具 举报

ID:74827 发表于 2019-11-8 01:00 | 显示全部楼层
当时的光立方视频:v.youku.com/v_show/id_XOTEyNzI0MDU2.html,现在看几年前做的东西,感觉好好笑,哈哈哈哈~
回复

使用道具 举报

ID:1035248 发表于 2022-6-16 19:52 | 显示全部楼层
这是8 X8 x8吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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