led_do.c文件:
- #include "led_do.h" //LED驱动头文件
- #include "shuzu.h"
- #include "MyType.h" //常用数据类型定义
- //#include "Delay.h" //延时函数头文件
- #include "stdlib.h"
- #include "intrins.h"
- void Delayms(uint16 n);
- void Delay(uint16 z);
- //清零
- void CLEAR()
- {
- Y=0x00; //设置Y轴坐标
- X=0xff;
- X=0x00; //锁存X轴坐标
- Z=0x00; //熄灭所有LED
- }
- /*********************************************************************************************
- 函数名:点亮某一坐标点上的LED,坐标是:(x,y,z)
- 调 用:LED_DOT_ON (?);
- 参 数:x:x轴, y:y轴, z:z轴
- 结 果:点亮相对应坐标点上的一个LED,其他坐标点上的LED熄灭
- /*********************************************************************************************/
- void LED_DOT_ON(uint8 x1, uint8 y1, uint8 z1)
- { uint8 MOVE[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- X=MOVE[x1];
- Y=MOVE[y1];
- Z=MOVE[z1];
- X=0x00;
-
- }
- /*******************************************************************
- 某坐标灯,作呼吸灯闪烁
- ********************************************************************/
- void DOT_PWM(uchar x1,uchar y1,uchar z1,int T)
- {
- uint16 LOW=0;
- if(T<0) T=100;
- if((x1>=0||x1<8)&&(y1>=0||y1<8)&&(z1>=0||z1<8))
- {
- CLEAR();
- Z1 = 0xff;
- Delay(100);
-
- for(LOW=1;LOW<T;LOW++)
- {
- LED_DOT_ON(x1,y1,z1);
- Delay(LOW);
- CLEAR();
- Delay(T-LOW);
- }
-
- LED_DOT_ON(x1,y1,z1);
- Delay(200);
-
- for(LOW=T-1;LOW>0;LOW--)
- {
- LED_DOT_ON(x1,y1,z1);
- Delay(LOW);
- CLEAR();
- Delay(T-LOW);
- }
- }
- }
- /*********************************************************************************************
- 函数名:图形1
- 调 用:CUBE_LOG1 ();
- 结 果:逐一叠加点亮坐标为(0,y,0)点上的一轴LED,其他坐标点上的LED熄灭
- 自下向上,一列
- /*********************************************************************************************/
- void CUBE_LOG1()
- {
- uint8 i;
-
- CLEAR();
-
- Z = 0x01; //设置Y轴坐标
- X = 0x01; //设置X轴坐标
-
- for(i=0;i<8;i++)
- {
- Y = ADD_Y[i]; //锁存X轴坐标
- Delayms(300);
- }
- X = 0x00;
- }
- /*********************************************************************************************
- 函数名:图形2
- 调 用:CUBE_LOG2 ();
- 结 果:逐一轴叠加点亮坐标为(0,y,0~7)点上的一轴LED,其他坐标点上的LED熄灭(左侧面)
- /*********************************************************************************************/
- void CUBE_LOG2()
- {
- uint8 y;
-
- Z = 0x00; //熄灭所有LED
- Y = 0x80; //设置Y轴坐标
- X = 0x01; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = 0xff; //(0,7,z)轴上的LED
-
- for(y=0;y<8;y++)
- {
- Y |= 0x80>>y;
- X = 0x01; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Delayms(200);
- }
- }
- /*********************************************************************************************
- 函数名:图形3
- 调 用:CUBE_LOG3 ();
- 结 果:逐面点亮一个侧面的LED,从左向右流动,其他坐标点上的LED熄灭
- /*********************************************************************************************/
- void CUBE_LOG3()
- {
- uint8 x;
-
- Z = 0x00; //熄灭所有LED
- Y = 0xff; //设置Y轴坐标
- X = 0x01; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = 0xff; //(0,7,z)轴上的LED
-
- for(x=0;x<8;x++)
- {
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
-
- Y = 0xff; //设置Y轴坐标
- X = 0x01<<x; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Delayms(400);
- }
- }
- /*********************************************************************************************
- 函数名:图形4
- 调 用:CUBE_LOG4 ();
- 结 果:逐面点亮一个正面的LED,从前向后流动,其他坐标点上的LED熄灭
- /*********************************************************************************************/
- void CUBE_LOG4()
- {
- uint8 y;
-
- Z = 0x00; //熄灭所有LED
- Y = 0x80; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = 0xff; //(0,7,z)轴上的LED
-
- for(y=0;y<8;y++)
- {
- Y = 0x80>>y; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Delayms(400);
- }
- }
- /*********************************************************************************************/
- /*********************************************************************************************
- 函数名:图形5
- 调 用:CUBE_LOG5 ();
- 结 果:逐面点亮一个府面的LED,从下向上流动,其他坐标点上的LED熄灭
- /*********************************************************************************************/
- void CUBE_LOG5()
- {
- uint8 i;
- Z = 0x00; //熄灭所有LED
- Y = 0xff; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = 0x01; //(0,7,z)轴上的LED
-
- for(i=0;i<8;i++)
- {
- Z = 0x01<<i; //(0,7,z)轴上的LED
- Delayms(400);
- }
- /* for(i=0;i<4;i++)
- {
- CLEAR();
- Z = 0x80>>i;
- Y = SHALOU[i]; //设置Y轴坐标
- X = SHALOU[i]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Delayms(500);
- }*/
- }
- /*********************************************************************************************
- 函数名:图形6
- 调 用:CUBE_LOG6 ();
- CUBD_LOG6(NUM2,3);
- 结 果:开机倒数(3,2,1):
- *********************************************************************************************/
- void CUBE_LOG6(uint8 *NUM,uint8 n)
- {
- int8 i,x,y,f,num;
- Z = 0x00; //熄灭所有LED
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
-
- for(num=0;num<n;num++)
- {
- for(f=0;f<2;f++)
- {
- for(x=0;x<8;x++)
- {
- for(i=0;i<6;i++)
- {
- for(y=0;y<8;y++)
- {
- Y = 0x00;
- X = 0xff;
- X = 0x00;
- Y = 0x80>>y; //设置Y轴坐标
-
- if(f == 0)
- {
- X = ADD_X[x]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- }
-
- if(f == 1)
- {
- X = ~ADD_X[x]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- }
- Z = NUM[num*8+y];
- Delayms(2+2*f);
- }
- }
- }
- }
-
- for(f=0;f<2;f++)
- {
- for(i=0;i<50;i++)
- {
- for(y=0;y<8;y++)
- {
- Y = 0x00;
- X = 0xff;
- X = 0x00;
-
- Y = 0x80>>y; //设置X轴坐标
- X = 0x01; //设置Y轴坐标
- X = 0x00; //锁存X轴坐标
- Z = NUM[num*8+y];
- Delayms(2);
- }
- }
- }
- }
- }
- /*********************************************************************************************
- 函数名:LOG3()
- 结 果:前后面
- *********************************************************************************************/
- void LOG3()
- {
- uint8 z;
-
- CLEAR();
-
- X = 0x01; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- for(z=0;z<8;z++)
- {
- Y |= 0x01<<z;
- X = 0x01; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z |= 0x80 >>z; //锁存X轴坐标
- Delayms(200);
- }
- }
- void LOG4()
- {
- uint8 i;
-
- CLEAR();
- for(i=0;i<8;i++)
- {
- Y = 0xff>>i;
- X = 0x01; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = 0xff <<i; //锁存X轴坐标
- Delayms(200);
- }
- }
- void LOG5()
- {
- uint16 CYCLE=80,PWM_LOW=0;
- uint8 BOOT[] = {0xff,0x7e,0x3c,0x18};
- uint8 i;
- for(i=0;i<4;i++)
- {
- for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
- {
- Y = BOOT[i];
- X = BOOT[i];
- X = 0x00;
- Z = BOOT[i];
- Delay(PWM_LOW);
- Y = 0x00;
- X = 0xff;
- X = 0x00;
- Z = 0x00;
- Delay(CYCLE-PWM_LOW);
- }
- Y = BOOT[i];
- X = BOOT[i];
- X = 0x00;
- Delay(50);
- for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
- {
- Y = BOOT[i];
- X = BOOT[i];
- X = 0x00;
- Z = BOOT[i];
- Delay(PWM_LOW);
- Y = 0x00;
- X = 0xff;
- X = 0x00;
- Z = 0x00;
- Delay(CYCLE-PWM_LOW);
- }
- }
- }
- void LOG6() //全亮,X面逐层收回
- {
- uint8 i,y;
- X=0xff;
- Y=0xff;
- X=0x00;
- Delayms(500);
- Z=0xff;
- Z = 0xff; //(0,7,z)轴上的LED
- for(i=0;i<8;i++)
- for(y=0;y<9;y++)
- {
- Y = 0xff<<y;
- X = MOVE[i]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Delayms(100);
- }
- }
- void LOG7()
- {
- uint8 x;
- //(0,7,z)轴上的LED
-
- for(x=0;x<8;x++)
- {
- Y = 0xff;
- X = ADD_X[x]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = 0xff;
- Delayms(200);
- }
- }
- void LOG8()
- {
- uint8 z;
-
- Y = 0x01;
- X = 0xFF; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
-
- for(z=0;z<8;z++)
- {
- Z = 0xff>>z;
- Delayms(200);
- }
- }
- void LOG9()
- {
- uint8 y;
-
- Z = 0x01;
-
- for(y=0;y<8;y++)
- {
- Y |= 0x01<<y;
- X = 0xFF; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Delayms(200);
- }
- }
- void LOG10()
- {
- uint8 i;
- uint8 SO[]={0XFF,0X7F,0X3F,0X1F,0X0F,0X7,0X03,0X01};
- for(i=1;i<8;i++)
- {
- CLEAR();
- Y=SO[i];
- X=SO[i];
- Z=0X01;
- Delayms(800);
- }
- }
- void LOG11()
- {
- uint8 x;
- CLEAR();
- Y=0XFF;
- Z = 0xff; //(0,7,z)轴上的LED
-
- for(x=0;x<8;x++)
- {
- X |= 0x80>>x; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Delayms(200);
- }
- }
- void shalou1()//正向
- {
- int8 i,j,d;
- for(j=0;j<8;j++)
- {
- for(d=0;d<10*(8-j);d++)
- {
- if(j<3)
- for(i=0;i<=j;i++)
- {
- CLEAR();
- Y=SHALOU[i];
- X=SHALOU[i];
- X=0x00;
- Z=0x80>>i;
- Delayms(3);
- }
- if(j>3)
- for(i=j-4;i<=j;i++)
- {
- CLEAR();
- Y=SHALOU[i];
- X=SHALOU[i];
- X=0x00;
- Z=0x80>>i;
- Delayms(5);
- }
- }
- }
- for(j=3;j>=0;j--)
- {
- for(d=0;d<5*(8-j);d++)
- {
- for(i=j;i>=0;i--)
- {
- CLEAR();
- Y=SHALOU[i];
- X=SHALOU[i];
- X=0x00;
- Z=0x01<<i;
- Delayms(5);
- }
- }
- }
- Z=0X00;
- }
- void shalou() //反向
- {
- int8 i,j,d;
- for(j=0;j<8;j++)
- {
- for(d=0;d<5*(8-j);d++)
- {
- for(i=0;i<=j;i++)
- {
- CLEAR();
- Y=SHALOU[i];
- X=SHALOU[i];
- X=0x00;
- Z=0x01<<i;
- Delayms(3);
- }
- }
- }
- for(j=7;j>=0;j--)
- {
- for(d=0;d<5*(8-j);d++)
- {
- for(i=j;i>=0;i--)
- {
- CLEAR();
- Y=SHALOU[i];
- X=SHALOU[i];
- X=0x00;
- Z=0x80>>i;
- Delayms(3);
- }
- }
- }
- }
- void LOG12() //波浪
- {
- uint8 y,i,d;
- uint8 WAVE[]={0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,
- 0X01,0X01,0X01,0X03,0X03,0X01,0X01,0X01,
- 0X01,0X01,0X03,0X07,0X07,0X03,0X01,0X01,
- 0X01,0X03,0X07,0X0f,0X0f,0X07,0X03,0X01,
- 0X03,0X07,0X0f,0X1f,0X1f,0X0f,0X07,0X03,
- 0X07,0X0f,0X1f,0X3f,0X3f,0X1f,0X0f,0X07,
- 0X0f,0X1f,0X3f,0X7f,0X7f,0X3f,0X1f,0X0f,
- 0X1f,0X3f,0X7f,0Xff,0Xff,0X7f,0X3f,0X1f,};
- CLEAR();
- for(i=0;i<120;i++)
- for(d=0;d<8;d++)
- {
- if(i<8)
- for(y=0;y<i+1;y++)
- {
- Y=MOVE[y];
- X=0XFF;
- Z=WAVE[i-y];
- }
- else
- for(y=0;y<8;y++)
- {
- Y=MOVE[y];
- X=0XFF;
- if(i<64)
- Z=WAVE[i-y];
- if(i>63)
- Z=WAVE[119-(i-y)];
- Delayms(5);
- }
- }
- }
- void LOG12_1() //涨潮
- {
- uint8 y,i,d;
- uint8 WAVE[]={0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,
- 0X01,0X01,0X01,0X03,0X03,0X01,0X01,0X01,
- 0X01,0X01,0X03,0X07,0X07,0X03,0X01,0X01,
- 0X01,0X03,0X07,0X0f,0X0f,0X07,0X03,0X01,
- 0X03,0X07,0X0f,0X1f,0X1f,0X0f,0X07,0X03,
- 0X07,0X0f,0X1f,0X3f,0X3f,0X1f,0X0f,0X07,
- 0X0f,0X1f,0X3f,0X7f,0X7f,0X3f,0X1f,0X0f,
- 0X1f,0X3f,0X7f,0Xff,0Xff,0X7f,0X3f,0X1f,};
- CLEAR();
- for(i=0;i<120;i++)
- for(d=0;d<8;d++)
- {
- if(i<8)
- for(y=0;y<i+1;y++)
- {
- Y=MOVE[y];
- X=0XFF;
- Z=WAVE[i-y];
- }
- else
- for(y=0;y<8;y++)
- {
- Y=MOVE[y];
- X=0XFF;
- if(i<64)
- { Z=WAVE[i-y];
- Delayms(5); }
- }
- }
- }
- void LOG12_2() //落潮
- {
- uint8 y,i,d;
- uint8 WAVE[]={0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,
- 0X01,0X01,0X01,0X03,0X03,0X01,0X01,0X01,
- 0X01,0X01,0X03,0X07,0X07,0X03,0X01,0X01,
- 0X01,0X03,0X07,0X0f,0X0f,0X07,0X03,0X01,
- 0X03,0X07,0X0f,0X1f,0X1f,0X0f,0X07,0X03,
- 0X07,0X0f,0X1f,0X3f,0X3f,0X1f,0X0f,0X07,
- 0X0f,0X1f,0X3f,0X7f,0X7f,0X3f,0X1f,0X0f,
- 0X1f,0X3f,0X7f,0Xff,0Xff,0X7f,0X3f,0X1f,};
- CLEAR();
- for(i=0;i<120;i++)
- for(d=0;d<8;d++)
- {
- if(i<8)
- for(y=0;y<i+1;y++)
- {
- Y=MOVE[y];
- X=0XFF;
- Z=WAVE[i-y];
- }
- else
- for(y=0;y<8;y++)
- {
- Y=MOVE[y];
- X=0XFF;
- if(i>63)
- { Z=WAVE[119-(i-y)];
- Delayms(5); }
- }
- }
- }
- void LOG13()
- {
- uint16 LOW=0;
- uint8 d,x,y,z,t,i,T=1500;
- CLEAR();
- for(d=0;d<25;d++)
- {
- x=rand()%8;
- y=rand()%8;
- z=(rand()%4)+4;
- t=(rand()%40)+30;
- for(LOW=1;LOW<T;LOW+=10)
- {
- Y=MOVE[y];
- X=MOVE[x];
- X=0X00;
- Z=MOVE[z];
- Delay(LOW);
- CLEAR();
- Delay(T-LOW);
- }
- Y=MOVE[y];
- X=MOVE[x];
- X=0X00;
- Z=MOVE[z];
- Delay(200);
- for(i=0;i<z+1;i++)
- {
- Z|=MOVE[z]>>i;;
- Delayms(t);
- }
- for(i=0;i<z+1;i++)
- {
- Z=ADD_Y[z]>>i;
- Delayms(t-20);
- }
- }
- }
- void LOG1()
- {
- uint8 i,d;
- for(i=0;i<35;i++)
- {
- CLEAR();
- Z = 0xff;
- Delayms(2);
- for(d=0;d<30;d++)
- LOG1h(i);
- }
- }
- void LOG2(uint8 x,uint8 y)//烟花
- {
- int8 i,z,k,f;
- uint8 LO[8]={0x38,0x7c,0xfe};
- uint8 LI[8]={0x28,0x44,0x82};
- CLEAR();
- for(f=0;f<2;f++)
- {
- for(z=0;z<8;z++)
- {
- for(i=0;i<30;i++)
- {
- Y = 0x00;
- X = 0xff;
- X = 0x00;
- Y = MOVE[y];
- X = MOVE[x];
- X = 0X00;
- if(f == 0)
- {
- Z = ADD_Y[z]; //设置Z轴坐标
- }
- if(f == 1)
- {
- Z = ~ADD_Y[z]; //设置X轴坐
- }
- Delayms(2+2*f);
- }
- }
- }
-
- for(f=0;f<2;f++)
- {
- for(i=0;i<127;i++)
- {
- Y = 0x10; //设置X轴坐标
- X = 0X10;
- Z = 0x80; //设置Y轴坐标
- Delayms(2);
-
- }
- }
-
-
- for(f=0;f<2;f++)
- {
- for(k=0;k<3;k++)
- {
- for(i=0;i<85;i++)
- {
- Y = 0x00;
- X = 0xff;
- X = 0x00;
- Y = MOVE[y];
- if(f == 0)
- {
- X = LO[k]; //设置X轴坐标
- X = 0x00;
- }
- if(f == 1)
- {
- X = ~LO[k]; //设置X轴坐
- X = 0x00;
- }
- Z = 0X80 ;
-
- if(f == 0)
- {
- Y = LO[k]; //设置X轴坐标
- }
- if(f == 1)
- {
- Y = ~LO[k]; //设置X轴坐
- }
- X = MOVE[x];
- X = 0X00;
- Z = 0X80 ;
-
- if(f == 0)
- {
- Y = LI[k];
- X = LI[k];//设置X轴坐标
- X = 0X00;
- }
- if(f == 1)
- {
- Y = LI[k-1];
- X = LI[k-1];//设置X轴坐标
- X = 0X00;
- }
- Z = 0X80;
-
- Delayms(2+2*f);
-
- }
- }
- }
- for(f=0;f<2;f++)
- {
- for(z=0;z<8;z++)
- {
- for(i=0;i<100;i++)
- {
- Y = 0x00;
- X = 0xff;
- X = 0x00;
- Y = 0x81|MOVE[y];
- X = 0x81|MOVE[x];
- X = 0X00;
- if(f == 0)
- {
- Z = ~ADD_Y[7-z]; //设置Z轴坐标
- }
- if(f == 1)
- {
- Z = ADD_Y[7-z]; //设置X轴坐
- }
- Delayms(2+2*f);
- }
- }
- }
-
- for(f=0;f<2;f++)
- {
- for(i=0;i<100;i++)
- {
- Y = 0x81|MOVE[y]; //设置X轴坐标
- X = 0x81|MOVE[x];
- Z = 0x01; //设置Y轴坐标
- Delayms(2);
-
- }
- }
- }
- void FIRE(uchar x,uchar y)
- {
- uchar i,j,z;
-
- CLEAR();
- Y=MOVE[y];
- X=MOVE[x];
- X=0x00;
- Z=0x80;
-
- for(z=0;z<8;z++)
- {
- Z=0x01<<z;
- Delayms(120*z);//减速上升
- }
- for(i=0;i<3;i++)//爆开3圈范围内
- {
- CLEAR();
- Y=MOVE[y]>>i;//横竖方向
- X=MOVE[x]>>i;
- Y|=MOVE[y]<<i;
- X|=MOVE[x]<<i;
- X=0x00;
- Z=0x80;
-
- Y=MOVE[y]>>(i+1);//斜线方向
- Y|=MOVE[y]<<(i+1);//向外爆两格
- X|=MOVE[x];
- X=0x00;
- Z=0x80;
- Y=MOVE[y];
- X=MOVE[x]>>(i+1);
- X|=MOVE[x]<<(i+1);
- X=0x00;
- Z=0x80;
- Delayms(300);
- }
- for(j=0;j<2;j++)//下落
- {
- for(z=0;z<8;z++)
- {
- for(i=0;i<30;i++) //持续
- {
- if(j == 0)
- {
- Z = ADD_X[z]; //设置Z轴
- }
- if(j == 1)
- {
- Z = ~ADD_X[z]; //设置X轴
- }
- Delayms(8+2*j);
- }
- }
- }
- }
- void LOG1h(uint8 i)
- {
- uint8 BOOT[] = {0x18,0x24,0x42,0x81,
- 0x82,0x84,0X88,0x90,0XA0,0XC0,
- 0XA0,0x90,0X88,0x84,0x82,0x81,
- 0X41,0X21,0X11,0X09,0X05,0X03,
- 0X05,0X09,0X11,0X21,0X41,0X81,
- 0x42,0x24,0x18,0X3C,0x66,0xc3,0x81};
- uint8 BOOT1[] = {0x00,0x18,0x3c,0x7e,
- 0x7c,0x78,0x70,0x60,0X40,0X00,
- 0X40,0X60,0x70,0X78,0X7C,0X7E,
- 0X3E,0X1E,0X0E,0X06,0X02,0X00,
- 0X02,0X06,0X0E,0X1E,0X3E,0X7E,
- 0x3c,0x18,0x00,0x00,0X00,0x00,0x00};
- Y = BOOT[i];
- X = BOOT[i];
- X = 0x00;
- Z = BOOT[i];
- Delayms(5);
- Y = BOOT[i];
- X = BOOT1[i];
- X = 0x00;
- Z = BOOT1[i];
- Delayms(5);
- Y = BOOT1[i];
- X = BOOT[i];
- X = 0x00;
- Z = BOOT1[i];
- Delayms(5);
- Y = BOOT1[i];
- X = BOOT1[i];
- X = 0x00;
- Z = BOOT[i];
- Delayms(5);
- Y = BOOT[i];
- X = BOOT1[i];
- X = 0x00;
- Z = BOOT[i];
- Delayms(5);
- }
- /*********************************************************************************************
- 函数名:图形7
- 调 用:CUBE_LOG7 ();
- //CUBD_LOG7(CHAR_GLF,24);//光立方
- 结 果:显示流动字符:
- /*********************************************************************************************/
- void CUBE_LOG7(uint8 *DAT,uint8 num)
- {
- int8 x,y,z=0;
- int16 i,d;
-
- for(i=0;i<num+22;i++)
- {
- for(d=0;d<10;d++)
- {
- z = i;
- Y = 0x80; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00;
- for(x=0;x<8;x++)
- {
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = DAT[z++];//锁存X轴坐标
- Y = 0x80; //设置Y轴坐标
- X = MOVE[x]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Delayms(3);
- }
-
- Y = 0x80; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
-
- for(y=0;y<8;y++)
- {
- Z = DAT[z++];//锁存X轴坐标
- Y = MOVE[y]; //设置Y轴坐标
- X = 0x01;
- X = 0X00; //设置X轴坐标
- Delayms(3);
- }
-
- for(x=7;x>=0;x--)
- {
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = DAT[z++]; //锁存X轴坐标
- Y = 0x10; //设置Y轴坐标
- X = MOVE[x]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Delayms(3);
- }
- }
- }
- }
- /*********************************************************************************************
- 函数名:图形9
- 调 用:CUBE_LOG9 ();
- 结 果:雨帘
- /*********************************************************************************************/
- void CUBE_LOG9()
- {
- int x,z,i,d,k,a;
- Z = 0x00; //熄灭所有LED
- for(a=0;a<2;a++)
- {
- for(k=0;k<2;k++)
- {
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Y = 0xff; //设置Y轴坐标
- for(i=0;i<8;i++)
- {
- for(d=0;d<5;d++)
- {
- z=0;
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Y = 0xff; //设置Y轴坐标
- for(z=0;z<8-i;z++)
- {
- Z = 0x01<<z; //锁存X轴坐标
- if(k == 0)
- X = 0x01; //设置X轴坐标
- if(k == 1)
- X = 0x80; //设置X轴坐标
- Delayms(5);
- }
-
- for(x=0;x<i;x++)
- {
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Y = 0xff; //设置Y轴坐标
- Z = 0x01<<(8-i+x); //锁存X轴坐标
- if(k == 0)
- X = 0x01<<(x+1); //设置X轴坐标
- if(k == 1)
- X = 0x80>>(x+1); //设置X轴坐标
- Delayms(5);
- }
- }
- }
-
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Y = 0xff; //设置Y轴坐标
- for(i=7;i>=0;i--)
- {
- for(d=0;d<5;d++)
- {
- z=0;
- for(z=0;z<i;z++)
- {
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Y = 0xff; //设置Y轴坐标
- if(k == 0)
- {
- Z = 0x01<<z; //锁存X轴坐标
- X = MOVE[7-i]<<z; //设置X轴坐标
- }
- if(k == 1)
- {
- Z = 0x01<<z; //锁存X轴坐标
- X = MOVE[i]>>z; //设置X轴坐标
- }
- Delayms(5);
- }
- for(x=i;x<8;x++)
- {
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Y = 0xff; //设置Y轴坐标
- if(k == 0)
- {
- Z = 0x01<<x; //锁存X轴坐标
- X = 0x80; //设置X轴坐标
- }
- if(k == 1)
- {
- Z = 0x01<<x; //锁存X轴坐标
- X = 0x01; //设置X轴坐标
- }
- Delayms(5);
- }
- }
- }
- }
- } Z = 0x00;
- Y = 0xff; //设置Y轴坐标
- X = 0x01; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = 0xff; //(0,7,z)轴上的LED
- for(a=0;a<2;a++)
- {
- for(x=0;x<8;x++)
- {
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Y = 0xff; //设置Y轴坐标
- X = 0x01<<x; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Delayms(300);
- }
- for(x=0;x<8;x++)
- {
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Y = 0xff; //设置Y轴坐标
- X = 0x80>>x; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Delayms(300);
- }
- }
- }
- /*********************************************************************************************
- 函数名:图形10
- 调 用:CUBE_LOG10 ();
- 结 果:音乐律动
- /*********************************************************************************************/
- void CUBE_LOG10()
- {
- int8 f,d,k,j;
- uint8 FACE_Y1[] = {0x81,0x42,0x24,0x18};
- uint8 FACE_Z1[] = {0xff,0x7e,0x3c,0x18};
- uint8 FACE_Y2[] = {0x7e,0x3c,0x18,0x00};
- uint8 FACE_Z2[] = {0x81,0x42,0x24,0x18};
- uint8 FACE_X[] = {0,1,2,3};
- Z = 0x00; //熄灭所有LED
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- for(j=0;j<2;j++)
- for(k=0;k<30;k++)
- {
- switch(k)
- {
- case 0: FACE_X[0]=0;FACE_X[1]=0;FACE_X[2]=0;FACE_X[3]=0;break;
- case 1: FACE_X[0]=1;FACE_X[1]=1;FACE_X[2]=1;FACE_X[3]=1;break;
- case 2: FACE_X[0]=2;FACE_X[1]=2;FACE_X[2]=2;FACE_X[3]=2;break;
- case 3: FACE_X[0]=3;FACE_X[1]=3;FACE_X[2]=3;FACE_X[3]=3;break;
- case 4: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=4;break;
- case 5: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=5;break;
- case 6: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=5;FACE_X[3]=6;break;
- case 7: FACE_X[0]=4;FACE_X[1]=5;FACE_X[2]=6;FACE_X[3]=7;break;
- case 8: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=5;FACE_X[3]=6;break;
- case 9: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=5;break;
- case 10: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=4;break;
- case 11: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=3;break;
- case 12: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=3;FACE_X[3]=2;break;
- case 13: FACE_X[0]=4;FACE_X[1]=3;FACE_X[2]=2;FACE_X[3]=1;break;
- case 14: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=3;FACE_X[3]=2;break;
- case 15: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=3;break;
- case 16: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=4;break;
- case 17: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=5;break;
- case 18: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=5;FACE_X[3]=6;break;
- case 19: FACE_X[0]=4;FACE_X[1]=5;FACE_X[2]=6;FACE_X[3]=7;break;
- case 20: FACE_X[0]=5;FACE_X[1]=5;FACE_X[2]=6;FACE_X[3]=7;break;
- case 21: FACE_X[0]=6;FACE_X[1]=6;FACE_X[2]=6;FACE_X[3]=7;break;
- case 22: FACE_X[0]=7;FACE_X[1]=7;FACE_X[2]=7;FACE_X[3]=7;break;
- case 23: FACE_X[0]=6;FACE_X[1]=6;FACE_X[2]=6;FACE_X[3]=6;break;
- case 24: FACE_X[0]=5;FACE_X[1]=5;FACE_X[2]=5;FACE_X[3]=5;break;
- case 25: FACE_X[0]=4;FACE_X[1]=4;FACE_X[2]=4;FACE_X[3]=4;break;
- case 26: FACE_X[0]=3;FACE_X[1]=3;FACE_X[2]=3;FACE_X[3]=3;break;
- case 27: FACE_X[0]=2;FACE_X[1]=2;FACE_X[2]=2;FACE_X[3]=2;break;
- case 28: FACE_X[0]=1;FACE_X[1]=1;FACE_X[2]=1;FACE_X[3]=1;break;
- case 29: FACE_X[0]=0;FACE_X[1]=0;FACE_X[2]=0;FACE_X[3]=0;break;
- }
- for(d=0;d<7;d++)
- {
- for(f=0;f<4;f++)
- {
- CLEAR();
- Y = FACE_Y1[f]; //设置Y轴坐标
- X = MOVE[FACE_X[f]]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = FACE_Z1[f]; //(0,7,z)轴上的LED
- Delayms(5);
- CLEAR();
- Y = FACE_Y2[f]; //设置Y轴坐标
- X = MOVE[FACE_X[f]]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = FACE_Z2[f]; //(0,7,z)轴上的LED
- Delayms(5);
- }
- }
- }
- }
- /*********************************************************************************************
- 函数名:图形11
- 调 用:CUBE_LOG11 ();
- 结 果:逐一轴叠加点亮坐标为(0,y,0~7)点上的一轴LED,其他坐标点上的LED熄灭(左侧面)
- 备 注:竖直表面顺时针环绕
- /*********************************************************************************************/
- void CUBE_LOG11()
- {
- uint8 i,x,z,k;
- int16 d;
-
- for(k=0;k<3;k++)
- {
- for(i=0;i<8;i++)
- {
- for(d=0;d<1000;d++)
- {
- for(z=i;z<8;z++)
- LED_Y(0,z);
-
- for(x=1;x<i;x++)
- LED_Y(x,7);
- }
- }
-
- for(i=0;i<8;i++)
- {
- for(d=0;d<1000;d++)
- {
- for(x=i;x<8;x++)
- LED_Y(x,7);
- for(z=0;z<i;z++)
- LED_Y(7,7-z);
- }
- }
-
- for(i=0;i<8;i++)
- {
- for(d=0;d<1000;d++)
- {
- for(z=i;z<8;z++)
- LED_Y(7,7-z);
- for(x=0;x<i;x++)
- LED_Y(7-x,0);
- }
- }
-
- for(i=0;i<8;i++)
- {
- for(d=0;d<1000;d++)
- {
- for(x=i;x<8;x++)
- LED_Y(7-x,0);
- for(z=0;z<i+1;z++)
- LED_Y(0,z);
- }
- }
- }
- Z=0X00;
- Y=0XFF;
- X=0X01;
- X=0X00;
- Z=0XFF;
- Delayms(200);
- }
- /*********************************************************************************************/
- /*********************************************************************************************
- 函数名:图形12
- 调 用:CUBE_LOG12 ();
- 结 果:逐一轴叠加点亮坐标为(0,y,0~7)点上的一轴LED,其他坐标点上的LED熄灭(左侧面)
- 备 注:横向表面逆时针环绕
- /*********************************************************************************************/
- void CUBE_LOG12()
- {
- uint8 i,x,y,k;
- int16 d;
-
- for(k=0;k<3;k++)
- {
- for(i=0;i<8;i++)
- {
- for(d=0;d<1000;d++)
- {
- for(y=i;y<8;y++)
- LED_Z(0,7-y);
- for(x=1;x<i;x++)
- LED_Z(x,0);
- }
- }
-
- for(i=0;i<8;i++)
- {
- for(d=0;d<1000;d++)
- {
- for(x=i;x<8;x++)
- LED_Z(x,0);
- for(y=0;y<i;y++)
- LED_Z(7,y);
- }
- }
-
- for(i=0;i<8;i++)
- {
- for(d=0;d<1000;d++)
- {
- for(y=i;y<8;y++)
- LED_Z(7,y);
- for(x=0;x<i;x++)
- LED_Z(7-x,7);
- }
- }
-
- for(i=0;i<8;i++)
- {
- for(d=0;d<1000;d++)
- {
- for(x=i;x<8;x++)
- LED_Z(7-x,7);
- for(y=0;y<i+1;y++)
- LED_Z(0,7-y);
- }
- }
- }
- Y=0XFF;
- X=0X01;
- X=0X00;
- Z=0XFF;
- Delayms(200);
- }
- /*********************************************************************************************
- 函数名:点亮某一X轴上的LED
- 调 用:LED_X (?);
- 参 数:
- 结 果:点亮相对应坐标点上的一个LED,其他坐标点上的LED熄灭
- ********************************************************************************************/
- void LED_X(uint8 y, uint8 z)
- {
- CLEAR();
- Y=MOVE[y]; //设置Y轴坐标
- X=0xff; //锁存X轴坐标
- X=0x00; //锁存X轴坐标
- Z=MOVE[z]; //设置Z轴坐标
- }
- /*********************************************************************************************
- 函数名:点亮某一Y轴上的LED
- 调 用:LED_Y (?);
- 结 果:点亮相对应坐标点上的一个LED,其他坐标点上的LED熄灭
- /********************************************************************************************/
- void LED_Y(uint8 x, uint8 z)
- {
- CLEAR();
-
- Y = 0xff; //设置Y轴坐标
- X = MOVE[x]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = MOVE[z]; //设置Z轴坐标
- }
- /*********************************************************************************************/
- /*********************************************************************************************
- 函数名:同时点亮某一Z轴上的LED
- 调 用:LED_ZWATERWater(?);
- 参 数:x:x轴, y:y轴, z:z轴
- 结 果:点亮相对应坐标点上的一个LED,其他坐标点上的LED熄灭:
- /*********************************************************************************************/
- void LED_Z(uint8 x, uint8 y)
- {
- //Z = 0x00; //熄灭所有LED
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
-
- Y = MOVE[y]; //设置Y轴坐标
- X = MOVE[x]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = 0xff; //熄灭所有LED
- }
- /*********************************************************************************************
- 函数名:依次自下而上减速点亮某Z轴上的LED,
- 调 用:LED_ZWATER (x,y,ms);
- 参 数:x:x轴, y:y轴, z:z轴
- 返回值:无
- 结 果:点亮相对应z坐标轴上的一个LED,其他坐标点上的LED熄灭
- *********************************************************************************************/
- void LED_ZWATER(uint8 x, uint8 y, uint16 speed)
- {
- uint8 z;
- uint16 s;
-
- for(z=0;z<8;z++)
- {
- LED_DOT_ON(x,y,z);
- s = speed + z*2;
- Delayms(s); //延时
- }
- }
- void LIST_LOG()
- {
- uint8 z,y;
-
- CLEAR();
-
- Y = 0x01; //设置Y轴坐标
- X = 0x01; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
-
- for(z=0;z<8;z++)
- {
- Z = 0x80 >>z; //锁存X轴坐标
- Delayms(300);
- }
- Z=0X01;
- for(y=0;y<8;y++)
- {
- Y = 0x01 <<y;
- X = 0x01; //设置X轴坐标
- X = 0x00; //锁存X轴坐标 //锁存X轴坐标
- Delayms(300);
- }
- }
- void LAST_LOG()
- {
- uchar i;
-
- Y=0x80; //设置Y轴坐标
- X=0x80; //设置X轴坐标
- X=0x00; //锁存X轴坐标
- for(i=0;i<8;i++)
- {
- Z=0x80>>i; //锁存X轴坐标
- Delayms(150);
- }
- for(i=0;i<8;i++)
- {
- CLEAR();
- Y=0x80; //设置Y轴坐标
- X=0x80>>i; //锁存X轴坐标
- X=0X00;
- Z=0x01;
- Delayms(150);
- }
- }
- void LOG15()
- {
- uint i;
- Y=0XFF;
- X=0X01;
- X=0;
- for(i=0;i<7;i++)
- {
- Z =ADD_Y[i]; //(0,7,z)轴上的LED
- Delayms(400);
- }
-
- }
- void LOG16()
- {
- Y=0xff;
- X=0xff;
- X=0x00;
- Z=0xff;
- Delayms(2000);
- Z=0x00;
- Delayms(200);
- }
- void LOG17()
- {
- uint i;
- Y=0xff;
- X=0xff;
- X=0x00;
- for(i=0;i<7;i++)
- {
- Z =ADD_Y[i]; //(0,7,z)轴上的LED
- Delayms(400);
- }
- }
- void LOG18()
- {
- uint i;
- Y=0xff;
- X=0xff;
- X=0x00;
- for(i=0;i<7;i++)
- {
- Z =ADD_X[i]; //
- Delayms(400);
- }
- }
- void LOG19()
- {
- uint i;
- Z=0X01;
- X=0X01;
- for(i=0;i<8;i++)
- {Y=ADD_Y[i];
- Delayms(200);}
- CLEAR();
- Y=0XFF;
- X=0X01;
- X=0X00;
- for(i=0;i<8;i++)
- {Z=ADD_Y[i];
- Delayms(200); }
- }
- void LOG21()
- { uint i;
- Y=0XFF;
- X=0X01;
- X=0X00;
- for(i=0;i<7;i++)
- {
- Z =ADD_Y[i]; //(0,7,z)轴上的LED
- Delayms(600);
- }
- }
- void LOG22() //雨滴
- {
- uint16 LOW=0;
- uint8 d,x,y,z,t,i,T=1500;
- CLEAR();
- for(d=0;d<15;d++)
- {
- x=rand()%8;
- y=rand()%8;
- z=(rand()%4)+4;
- t=(rand()%40)+30;
- for(LOW=1;LOW<T;LOW+=10)
- {
- Y=MOVE[y];
- X=MOVE[x];
- X=0X00;
- Z=MOVE[z];
- Delay(LOW);
- CLEAR();
- Delay(T-LOW);
- }
- Y=MOVE[y];
- X=MOVE[x];
- X=0X00;
- Z=MOVE[z];
- Delay(200);
- for(i=0;i<z+1;i++)
- {
- Z|=MOVE[z]>>i;;
- Delayms(t);
- }
- for(i=0;i<z+1;i++)
- {
- Z=ADD_Y[z]>>i;
- Delayms(t-20);
- }
- for(i=0;i<3;i++)//爆开3圈范围内
- {
- CLEAR();
- Y=MOVE[y]>>i;//横竖方向
- X=MOVE[x]>>i;
- Y|=MOVE[y]<<i;
- X|=MOVE[x]<<i;
- X=0x00;
- Z=0x01;
-
- Y=MOVE[y]>>(i+1);//斜线方向
- Y|=MOVE[y]<<(i+1);//向外爆两格
- X|=MOVE[x];
- X=0x00;
- Z=0x01;
- Y=MOVE[y];
- X=MOVE[x]>>(i+1);
- X|=MOVE[x]<<(i+1);
- X=0x00;
- Z=0x01;
- Delayms(300);
- }
- }
- }
- void LOG23()//音柱
- {
- uint8 z,i,k;
- uint16 d;
- uint8 CD[]={0xff,0xff,0xff,
- 0X0f,0Xf0,0x00,
- 0X03,0xc0,0X18,
- 0xe7,0xe7,0x00,
- 0xc3,0xc3,0x18,
- 0xc3,0x30,0x0c,
- 0xdb,0xdb,0xdb,
- 0xaa,0xaa,0xaa,
- 0x49,0x49,0x49,};
- for(i=0;i<27;i=i+3)
- {
- for(k=0;k<8;k++)
- {
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = 0x00; //熄灭所有LED
- for(z=0;z<8;z++)
- {
- Y = CD[i]; //设置Y轴坐标
- X = CD[i]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z |= 0x01 <<z; //锁存X轴坐标
- Y = CD[i+1]; //设置Y轴坐标
- X = CD[i+1]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z |= 0x01 <<z; //锁存X轴坐标
- // if(i%2==1)
- {
- Y = CD[i+2]; //设置Y轴坐标
- X = CD[i+2]; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z |= 0x01 <<z; //锁存X轴坐标
- }
- d = 45535;
- while(d) d--;
- }
- }
- Y = 0x00; //设置Y轴坐标
- X = 0xff; //设置X轴坐标
- X = 0x00; //锁存X轴坐标
- Z = 0x00; //熄灭所有LED
- }
- }
- void LOG24()
- {
-
- uint i;
- Z=0XFF;
- X=0Xff;
- for(i=0;i<9;i++)
- {
- Y=ADD_M[i];
- Delayms(500);
- }
- CLEAR();
- Z=0XFF;
- X=0Xff;
- for(i=9;i>0;i--)
- {
- Y=ADD_M[i-1];
- Delayms(500);
- }
- CLEAR();
-
- }
- void LOG25()
- {
- uint i;
- Y=0XFF;
- X=0Xff;
- X=0X00;
- for(i=7;i>0;i--)
- {
- Z =ADD_Y[i-1]; //(0,7,z)轴上的LED
- Delayms(600);
- }
- CLEAR();
- }
- void zhen(uchar *a,uchar v)//一帧,a是一帧编码起始地址
- {
- uchar p;
- char i;
- while(v--)
- {
- p=1;
- for(i=0;i<8;i++)
- {
- P0=0;
- fun(a+i*8);
- P0=p;
- Delayms(2);
- p<<=1;
- }
- }
- }
- void zhen_1(uchar *a,uchar v)//一帧,a是一帧编码起始地址
- {
- uchar p;
- char i;
- while(v--)
- {
- p=1;
- for(i=0;i<8;i++)
- {
-
- fun(a+i*8);
- P0=p;
- Delayms(10);
- p<<=1;
- }
- } P0=0;
- }
- void move(uchar *a,char kind,char direction,char length)//length不能为8
- //kind=0 x轴,1 x轴,2 z轴;direction=0,负向,1正向
- {
- char i,j;
- if(kind==0)
- {
- if(direction==1)
- for(i=0;i<64;i++)
- a[i]<<=length;
- else
- for(i=0;i<64;i++)
- a[i]>>=length;
- }
- else if(kind==1)
- {
- if(direction==1)
- for(j=0;j<8;j++)
- {
- for(i=7;i>=length;i--)
- a[i+j*8]=a[i-length+j*8];
- for(i=0;i<length;i++)
- a[i+j*8]=0;
- }
- else
- for(j=0;j<8;j++)
- {
- for(i=0;i<length;i++)
- a[i+j*8]=a[i+length+j*8];
- for(i=(8-length);i<8;i++)
- a[i+j*8]=0;
- }
- }
- else
- {
- if(direction==1)
- for(j=0;j<8;j++)
- {
- for(i=7;i>=length;i--)
- a[j+i*8]=a[j+(i-length)*8];
- for(i=0;i<length;i++)
- a[j+i*8]=0;
- }
- else
- for(j=0;j<8;j++)
- {
- for(i=0;i<(8-length);i++)
- a[j+i*8]=a[j+(i+length)*8];
- for(i=(8-length);i<8;i++)
- a[j+i*8]=0;
- }
- }
- }
- void fun(uchar *a)//层填充函数
- {
- uchar i,p;
- p=1;
- for(i=0;i<8;i++)
- {
- P1=p;
- P2=a[i];
- P1=0;
- p<<=1;
- }
- }
- void qumianxuanzhuan(char kind,char num,char v)//曲面旋转
- {
- uchar a[64]={0};
- char i,j,k;
- for(j=0;j<8;j++)
- for(i=0;i<8;i++)
- a[i+j*8]=tab_xuanzhuantiao[i];
- zhen(a,v);
- if(kind==1)
- {
- for(j=1;j<8;j++)//顺时针初形变换
- {
- for(i=0;i<j;i++)
- for(k=0;k<8;k++)
- a[k+i*8]=tab_xuanzhuantiao[(j-i)*8+k];
- zhen(a,v);
- }
- for(i=8;i<14;i++)
- {
- move(a,2,1,1);
- for(j=0;j<8;j++)
- a[j]=tab_xuanzhuantiao[i*8+j];
- zhen(a,v);
- }
- }
- else
- {
- for(j=1;j<8;j++)//逆时针初形变换
- {
- for(i=0;i<j;i++)
- for(k=0;k<8;k++)
- a[k+i*8]=tab_xuanzhuantiao[(14-j+i)*8+k];
- zhen(a,v);
- }
- for(i=7;i>=0;i--)
- {
- move(a,2,1,1);
- for(j=0;j<8;j++)
- a[j]=tab_xuanzhuantiao[i*8+j];
- zhen(a,v);
- }
- }
- while(num--)//主循环
- {
- if(kind==1)
- for(i=0;i<14;i++)
- {
- move(a,2,1,1);
- for(j=0;j<8;j++)
- a[j]=tab_xuanzhuantiao[i*8+j];
- zhen(a,v);
- }
- else
- for(i=13;i>=0;i--)
- {
- move(a,2,1,1);
- for(j=0;j<8;j++)
- a[j]=tab_xuanzhuantiao[i*8+j];
- zhen(a,v);
- }
- }
- if(kind==1)
- for(j=0;j<7;j++)
- {
- for(i=7;i>=j;i--)
- {
- if(i>j)
- for(k=0;k<8;k++)
- a[k+i*8]=tab_xuanzhuantiao[(14-i+j)*8+k];
- else
- for(k=0;k<8;k++)
- a[k+i*8]=tab_xuanzhuantiao[k];
- }
- zhen(a,v);
- }
- else
- for(j=1;j<7;j++)
- {
- for(i=7;i>=j;i--)
- {
- if(i>j)
- for(k=0;k<8;k++)
- a[k+i*8]=tab_xuanzhuantiao[(i-j)*8+k];
- else
- for(k=0;k<8;k++)
- a[k+i*8]=tab_xuanzhuantiao[k];
- }
- zhen(a,v);
- }
- }
- void qumianxuanzhuan2(char num,char v)//曲面旋转
- {
- uchar a[64]={0};
- char i,j,k;
- for(j=0;j<8;j++)
- for(i=0;i<8;i++)
- a[i+j*8]=tab_xuanzhuantiao[i];
- zhen(a,v);
- for(j=1;j<8;j++)
- {
- for(i=0;i<j;i++)
- for(k=0;k<8;k++)
- a[k+i*8]=tab_xuanzhuantiao[(14-j+i)*8+k];
- zhen(a,v);
- }
- while(num--)
- {
- for(j=1;j<8;j++)
- {
- move(a,2,1,1);
- for(i=0;i<j;i++)
- {
- for(k=0;k<8;k++)
- {
- if(j!=7|i!=0)
- a[i*8+k]=tab_xuanzhuantiao[k+(j+7-i)*8];
- else
- a[k]=tab_xuanzhuantiao[k];
- }
- }
- zhen(a,v);
- }
- for(j=1;j<8;j++)
- {
- move(a,2,1,1);
- for(i=0;i<j;i++)
- {
- for(k=0;k<8;k++)
- a[i*8+k]=tab_xuanzhuantiao[k+(14-j+i)*8];
- }
- zhen(a,v);
- }
- }
- }
- void xuanzhuantiao(char kind,char num,char v)//空心旋转,kind=1实心,否则空心
- {
- uchar a[64]={0};
- char i,j,k;
- while(num--)
- {
- for(i=0;i<14;i++)
- {
- for(j=0;j<8;j++)
- {
- for(k=0;k<8;k++)
- {
- if(k>1&&k<6&&j>1&&j<6&&kind!=1)
- a[k+j*8]=tab_xuanzhuantiao[i*8+k]&0xc3;
- else
- a[k+j*8]=tab_xuanzhuantiao[i*8+k];
- }
- }
- zhen(a,v);
- }
- }
- }
- void flash0(char v)//条状升降
- {
- char i,j,k;
- uchar a[64]={0};
- for(i=7;i>=0;i--)
- {
- a[i]=0x01<<i;
- zhen(a,v+5);
- }
- for(i=0;i<7;i++)
- {
- for(j=0;j<8;j++)
- a[j]=flash0__tab[i*8+j];
- zhen(a,v+5);
- }
- for(i=0;i<7;i++)
- {
- move(a,2,1,1);
- zhen(a,v+5);
- }
- /* for(i=0;i<64;i++)
- {
- if(i>55)
- a[i]=0xff;
- else
- a[i]=0;
- }*/
- zhen(a,20);
- for(i=7;i>=0;i--)//1
- for(j=6;j>=0;j--)
- {
- a[i+j*8]=0xff;
- a[i+(j+1)*8]=0;
- zhen(a,v);
- }
- zhen(a,27);
- for(i=7;i>=0;i--)//2
- for(j=1;j<8;j++)
- {
- a[i+j*8]=0xff;
- a[i+(j-1)*8]=0;
- zhen(a,v);
- }
- zhen(a,27);
- for(i=7;i>=0;i--)//3
- for(k=6;k>=0;k--)
- {
- for(j=0;j<8;j++)
- {
- if(k==0)
- a[j+k*8]|=(0x80>>(7-i));
- else
- a[j+k*8]=(0x80>>(7-i));
- a[j+(k+1)*8]^=(0x80>>(7-i));
- }
- zhen(a,v);
- }
- zhen(a,27);
- for(i=7;i>=0;i--)//4
- for(k=1;k<8;k++)
- {
- for(j=0;j<8;j++)
- {
- if(k==7)
- a[j+k*8]|=(0x80>>(7-i));
- else
- a[j+k*8]=(0x80>>(7-i));
- a[j+(k-1)*8]^=(0x80>>(7-i));
- }
- zhen(a,v);
- }
- zhen(a,27);
- }
- short sqrt_16( unsigned long M)
- {
- unsigned int N,i;
- unsigned long tmp,ttp;
- if(M==0)
- return 0;
- N=0;
- tmp=(M>>30);
- M<<=2;
- if(tmp>1)
- {
- N++;
- tmp-=N;
- }
- for(i=15;i>0;i--)
- {
- N<<=1;
- tmp<<=2;
- tmp+=(M>>30);
- ttp=N;
- ttp=(ttp<<1)+1;
- M<<=2;
- if(tmp>=ttp)
- {
- tmp-=ttp;
- N++;
- }
- }
- return N;
- }
- void H_scan(uchar v)
- {
- uchar b[64]={0};
- char i,j;
- for(i=0;i<64;i++)
- b[i]=0x80;
- for(i=0;i<7;i++)
- {
- for(j=0;j<64;j++)
- b[j]>>=1;
- zhen(b,v);
- }
- }
- void donghua(uchar *tab,uchar num,uchar n,char v)
- {
- char i;
- while(n--)
- {
- for(i=0;i<num;i++)//清空
- {
- zhen(tab+i*64,v);
- }
- }
- }
- void donghua_1(uchar *tab,uchar num,uchar n,char v)
- {
- char i;
- while(n--)
- {
- for(i=0;i<num;i++)//清空
- {
- zhen_1(tab+i*64,v);
- }
- }
- }
- void yinchu(uchar *table,char n,char v)
- {
- /****************************
- n为帧数
- ******************************/
- char i,j,k;
- uchar a[64]={0},p;
- for(k=0;k<n;k++)
- {
- for(i=0;i<8;i++)
- {
- p=0xff;
- for(j=0;j<64;j++)
- {
- a[j]=(table[j+k*64]|(0x80>>i))&(p<<(7-i));
- }
- zhen(a,v);
- }
- zhen(table+k*64,50);
- }
- }
- void link00()
- {
- uchar a[64]={0};
- char i;
- for(i=10;i>7;i--)
- {
- zhen(bianxing_table+i*64,70);
- }
- produce_cube(a,6);
- move(a,1,1,1);
- move(a,0,1,1);
- zhen(a,110);
- produce_cube(a,8);
- zhen(a,110);
- }
- void produce_cube(uchar *a,char n)//0<=n<=8
- {
- char i,j;
- for(i=0;i<8;i++)
- for(j=0;j<8;j++)
- {
- if(j<n&&i<n)
- a[j+i*8]=0xff>>(8-n);
- else
- a[j+i*8]=0;
- }
- }
- void hy(uchar *tab,char v)
- {
- uchar a[64]={0};
- char i,j;
- for(i=0;i<8;i++)
- a[i*8]=tab[i];
- zhen(a,v);
- for(i=1;i<8;i++)
- {
- for(j=0;j<8;j++)
- a[i+j*8]=a[i-1+j*8];
- zhen(a,v);
- }
- for(i=0;i<7;i++)
- {
- for(j=0;j<8;j++)
- a[i+j*8]=0;
- zhen(a,v);
- }
- zhen(a,23);
- }
- void leitu(uchar *b,char num,char v)//V>1
- {
- uchar a[64]={0},p;
- char i,j,k,m;
- for(m=0;m<num;m++)
- {
- for(i=0;i<8;i++)
- for(k=0;k<8;k++)
- for(j=0;j<8;j++)
- {
- p=b[m*64+i*8+k]&(0x01<<j);
- if(p)
- {
- a[i*8+k]|=p;
- zhen(a,v);
- }
- }
- zhen(a,60);
- for(j=0;j<64;j++)
- {
- if(!a[j])
- continue;
- a[j]=0;
- zhen(a,v-1);
- }
- Delayms(30);
- }
- }
- void zimu(uchar *x,char n,char v,int num)//滚动字幕,num表示循环次数,v表示滚动速度,n字符个数
- {
- char i,j,k;
- uchar xdata a[64]={0},temp0[8],temp1[8],temp2[8],temp3[8],temp[8];
- for(i=0;i<8;i++)
- {
- temp0[i]=0;
- temp1[i]=0;
- temp2[i]=0;
- temp3[i]=0;
- }
- while(num--)
- for(j=0;j<n;j++)//滚动
- {
- for(k=7;k>=0;k--)//读取数据
- temp[7-k]=x[j*8+k];
- for(k=0;k<8;k++)//移动8位
- {
- for(i=0;i<8;i++)
- {
- temp0[i]=(temp0[i]<<1)|(temp1[i]>>7);
- temp1[i]=(temp1[i]<<1)|(temp2[i]>>7);
- temp2[i]=(temp2[i]<<1)|(temp3[i]>>7);
- temp3[i]=(temp3[i]<<1)|(temp[i]>>7);
- temp[i]<<=1;
- fun1(a+i*8,temp0[i],temp1[i],temp2[i],temp3[i]);
- }
- zhen(a,v);
- }
- }
- }
- void fun1(uchar *a,uchar d,uchar b,uchar c,uchar e)//滚动字幕数据处理
- {
- char i;
- for(i=0;i<8;i++)
- {
- a[i]=e&0x01;
- e>>=1;
- }
- a[7]|=(c<<1);
- a[6]|=(c&0x80);
- for(i=0;i<6;i++)
- {
- a[5-i]|=((b<<(7-i))&0x80);
- }
- d=daoxu(d);
- a[0]|=((d>>1)&0x7e);
- }
- uchar daoxu(uchar x)//一字节倒序
- {
- uchar k=0;
- char i;
- for(i=0;i<8;i++)
- {
- if((x>>(7-i))&0x01)
- k|=0x01<<i;
- }
- return k;
- }
- void fn(char v)
- {
- uchar a[64]={0};
- int i;
- for(i=0;i<128;i++)//点
- {
- a[tab00[i]]=(0x01<<tab01[i]);
- zhen(a,v);
- a[tab00[i]]=0;
- }
- for(i=0;i<128;i++)//8点
- {
- a[tab10[i]]|=(0x01<<tab01[i]);
- if(i>=8)
- a[tab10[i-8]]^=(0x01<<tab01[i-8]);
- zhen(a,v);
- }
- a[tab00[0]]|=(0x01<<tab01[0]);
- a[0]=0x80;
- zhen(a,v);
- for(i=1;i<128;i++)//线
- {
- if(i<8)
- a[i-1]=0;
- a[tab00[i]]|=(0x01<<tab01[i]);
- zhen(a,v);
- }
- zhen(a,120);
- for(i=0;i<128;i++)//线
- {
- a[tab10[i]]^=(0x01<<tab01[i]);
- zhen(a,v);
- }
- }
- void linkpc1(char v)
- {
- uchar i,a[64]={0};
- for(i=0;i<7;i++)
- a[7*8+i]=0xff;
- for(i=0;i<8;i++)
- {
- move(a,2,0,1);
- zhen(a,v);
- }
- }
- void pc1(char num,char v)
- {
- uchar a[64]={0};
- char i,j;
- while(num--)
- {
- for(i=1;i<8;i++)
- a[i]=0xff;
- zhen(a,v);
- for(i=1;i<8;i++)
- {
- move(a,2,1,1);
- for(j=0;j<8;j++)
- a[j]=0xff;
- zhen(a,v);
- }
- for(i=0;i<8;i++)
- {
- if(num==0&&i==7)
- continue;
- move(a,2,1,1);
- zhen(a,v);
- }
- }
- for(i=0;i<7;i++)
- {
- move(a,2,0,1);
- zhen(a,v+5);
- }
- }
- void denghuo(char v)
- {
- uchar a[64];
- char i,j,k;
- for(k=0;k<8;k++)
- for(i=0;i<8;i++)
- for(j=0;j<8;j++)
- {
- a[tab_mian[i]*8+tab_xian[j]]|=(0x01<<tab_dian[(i+j)*8+k]);
- zhen(a,v);
- }
- zhen(a,90);
- for(k=0;k<8;k++)
- for(i=0;i<8;i++)
- for(j=0;j<8;j++)
- {
- a[tab_mian[i]*8+tab_xian[j]]^=(0x01<<tab_dian[(i+j)*8+k]);
- zhen(a,v);
- }
- }
- void link_pingmian1(char v)
- {
- uchar a[64]={0};
- char i,j;
- for(i=0;i<8;i++)
- for(j=0;j<8;j++)
- {
- a[7*8+j]|=(0x01<<i);
- zhen(a,v);
- }
- }
- void pingmian1(char num,char v)
- {
- char i,k;
- uchar a[64]={0};
- for(i=0;i<8;i++)
- a[7*8+i]=0xff;
- zhen(a,v);
- while(num--)
- for(i=0;i<28;i++)
- {
- if(i<7)
- for(k=0;k<8;k++)
- {
- a[(6-i)*8+k]=0x01;
- a[7*8+k]>>=1;
- }
- else if(i<14)
- for(k=0;k<8;k++)
- {
- a[k]|=0x01<<(i-6);
- a[(14-i)*8+k]=0;
- }
- else if(i<21)
- for(k=0;k<8;k++)
- {
- a[(i-13)*8+k]=0x80;
- a[k]<<=1;
- }
- else
- for(k=0;k<8;k++)
- {
- a[7*8+k]|=0x80>>(i-20);
- a[(i-21)*8+k]=0;
- }
- zhen(a,v);
- }
- CLEAR();
- }
- void print(uchar *a,char m)//m=0中空显示,m=1实心显示
- {
- uchar p;
- char i,j,k;
- uchar b[64]={0};
- for(i=0;i<8;i++)
- {
- b[7*8+i]=0xff;
- }
- for(i=0;i<8;i++)//行切换
- {
- for(j=0;j<8;j++)//点移动
- {
- p=a[i]&(0x01<<j);
- if(p)
- {
- for(k=6;k>0;k--)
- {
- if(m==1&&k==6)
- {;}
- else
- b[(k+1)*8+7-i]&=(~p);
- b[k*8+7-i]|=(0x01<<j);
- zhen(b,1);
- }
- b[1*8+7-i]=0;
- b[7-i]|=p;
- zhen(b,1);
- }
- b[7-i]|=p;
- }
- }
- zhen(b,40);
- b[0]=0;
- for(j=7;j>0;j--)
- {
- for(i=7;i>0;i--)
- {
- b[i]=b[i-1];
- }
- zhen(b,5);
- }
- CLEAR();
- }
- void link_jb0(char v)
- {
- uchar a[64]={0};
- char i;
- for(i=0;i<64;i++)
- {
- a[i]=0x80;
- zhen(a,v);
- }
- }
- void jb0(char num,char v)///////////////////////////////
- {
- char i,k;
- uchar c[64]={0};
- for(i=0;i<64;i++)
- c[i]=0x80;
- zhen(c,v);
- while(num--)
- for(i=0;i<28;i++)
- {
- if(i<7)
- for(k=0;k<8;k++)
- {
- c[k*8]|=(0x80>>(i+1));
- c[k*8+7-i]=0;
- }
- else if(i<14)
- for(k=0;k<8;k++)
- {
- c[k*8+i-6]=0x01;
- c[k*8]>>=0x01;
- }
- else if(i<21)
- for(k=0;k<8;k++)
- {
- c[k*8+i-14]=0;
- c[k*8+7]|=(0x01<<(i-13));
- }
- else if(i<28)
- for(k=0;k<8;k++)
- {
- c[k*8+27-i]=0x80;
- c[k*8+7]<<=1;
- }
- zhen(c,v);
- }
- CLEAR();
- }
- /****************************
- 旋转衔接
- ******************************/
- void link(char v)
- {
- char i,j,k;
- uchar a[64]={0};
- for(i=0;i<64;i++)
- a[i]=0x80;
- zhen(a,3);
- for(i=0;i<8;i++)
- {
- for(j=0;j<8;j++)
- {
- if(i<7)
- a[j*8+7-i]&=0x7f;
- a[j*8+i]|=(0x80>>i);
- }
- zhen(a,v);
- }
- for(i=0;i<6;i++)
- {
- for(j=0;j<8;j++)
- for(k=0;k<8;k++)
- a[j*8+k]=tab_xuanzhuantiao[(i+8)*8+k];
- zhen(a,3);
- }
- }
- void xuanzhuantiao2(char num,char v)//空心旋转,kind=1实心,否则空心
- {
- uchar a[64]={0};
- char i,j,k;
- while(num--)
- for(i=0;i<56;i++)
- {
- for(j=0;j<8;j++)
- for(k=0;k<8;k++)
- a[j*8+k]=tab_xuanzhuantiao2[i*8+k];
- zhen(a,v);
- }
- }
- void xzcube()
- {
- char i;
- donghua(y_table,6,8,8);
- for(i=0;i<26;i++)
- {
- if(i==12||i==13||i==14)
- zhen(yx_table+i*64,30);
- else
- zhen(yx_table+i*64,14);
- }
- donghua(x_table,6,8,8);
- for(i=0;i<26;i++)
- {
- if(i==12||i==13||i==14)
- zhen(xz_table+i*64,30);
- else
- zhen(xz_table+i*64,14);
- }
- donghua(z_table,6,8,8);
- }
- void shensuo(uchar v)
- {
- char i,j;
- uchar a[64]={0};
- for(i=0;i<64;i++)
- a[i]=0xff;
- for(i=0;i<7;i++)
- {
- move(a,0,0,1);
- zhen(a,v);
- }
- for(i=0;i<7;i++)
- {
- move(a,0,1,1);
- for(j=0;j<64;j++)
- a[j]|=0x01;
- zhen(a,v);
- }
- for(i=0;i<7;i++)
- {
- move(a,2,0,1);
- zhen(a,v);
- }
- for(i=0;i<7;i++)
- {
- move(a,2,1,1);
- for(j=0;j<8;j++)
- a[j]|=0xff;
- zhen(a,v);
- }
- for(i=7;i>0;i--)
- {
- for(j=0;j<8;j++)
- a[j*8+i]=0;
- zhen(a,v);
- }
- for(i=1;i<8;i++)
- {
- for(j=0;j<8;j++)
- a[j*8+i]|=0xff;
- zhen(a,v);
- }
- }
- void cube(char empty,char kind,char v)
- {
- uchar a[64]={0};
- char i;
- for(i=1;i<=8;i++)//生成
- {
- if(empty==0)
- produce_cube(a,i);
- else
- produce_empty(a,i);
- if(kind==0)
- {;}
- else if(kind==1)
- move(a,1,1,8-i);
- else if(kind==2)
- {
- move(a,1,1,8-i);
- move(a,0,1,8-i);
- }
- else
- move(a,0,1,8-i);
- zhen_1(a,v);
- //Delayms(200);
- }
- for(i=7;i>0;i--)//退出
- {
- if(empty==0)
- produce_cube(a,i);
- else
- produce_empty(a,i);
- if(kind==0)
- {
- move(a,1,1,8-i);
- move(a,0,1,8-i);
- }
- else if(kind==1)
- move(a,0,1,8-i);
- else if(kind==2)
- {;}
- else
- move(a,1,1,8-i);
- zhen_1(a,v);
- //Delayms(200);
-
- }
- }
- void produce_empty(uchar *a,char n)//0<n<=8,注意n不能为0
- {
- char j;
- uchar p;
- for(j=0;j<64;j++)
- a[j]=0;
- p=0xff>>(8-n);
- /************X4列*************/
- a[(n-1)*8+n-1]=p;
- a[(n-1)*8]=p;
- a[0]=p;
- a[n-1]=p;
- for(j=0;j<n;j++)
- {
- p=(0x01|(0x01<<(n-1)));
- /************竖直4列*************/
- a[j*8]|=p;
- a[j*8+n-1]|=p;
- /************Y4列*************/
- a[j]|=p;
- a[(n-1)*8+j]|=p;
- }
- }
- void shandian(char v)
- {
- char i,j;
- uchar a[64];
- for(i=0;i<64;i++)
- a[i]=tab_shandian[64*21+i];
- for(i=0;i<22;i++)
- zhen(tab_shandian+64*i,v);
- for(i=0;i<22;i++)
- {
- for(j=0;j<64;j++)
- a[j]=a[j]&(~tab_shandian[64*i+j]);
- zhen(a,v);
- Delayms(10);
- }
- }
- void szfc0(char v)//数字上浮
- {
- char i,j;
- uchar a[64];
- for(i=0;i<64;i++)
- {
- a[i]=0;
- }
- for(j=124;j>=0;j--)
- {
- for(i=7;i>=0;i--)
- {
- a[i*8+3]=szfc_table[j+i];
- a[i*8+4]=szfc_table[j+i];
- }
- zhen(a,v);
- }
- }
- void rain(char menu,char num,char v)
- {//menu=0,up;menu=1,down
- uchar a[64]={0};
- char i,j;
- if(menu==0)
- {
- for(i=0;i<8;i++)
- a[i]=tab_rain[i];
- zhen(a,v);
- for(i=1;i<8;i++)
- {
- move(a,2,1,1);
- for(j=0;j<8;j++)
- a[j]=tab_rain[i*8+j];
- zhen(a,v);
- }
- while(num--)
- {
- for(i=0;i<8;i++)
- {
- move(a,2,1,1);
- for(j=0;j<8;j++)
- a[j]=tab_rain[i*8+j];
- zhen(a,v);
- }
- }
- }
- else
- {
- for(i=0;i<8;i++)
- a[7*8+i]=tab_rain[i];
- zhen(a,v);
- for(i=1;i<8;i++)
- {
- move(a,2,0,1);
- for(j=0;j<8;j++)
- a[7*8+j]=tab_rain[i*8+j];
- zhen(a,v);
- }
- while(num--)
- {
- for(i=0;i<8;i++)
- {
- move(a,2,0,1);
- for(j=0;j<8;j++)
- a[j+7*8]=tab_rain[i*8+j];
- zhen(a,v);
- }
- }
- }
- }
复制代码 |