#include<reg52.h>
#include <intrins.h>
#define	uint unsigned int
#define	uchar unsigned char
uchar code table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; // 逐个点亮0~7
uchar code table1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; // 逐个点亮7~0
uchar code table2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐个灭0~7
uchar code table3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; // 逐个灭7~0
/***********************************************************/
void delay(uint t);	//延时
void zg(uint t,uchar a);//两边逐个亮
void qs(uint t,uchar a);//全部闪烁
void zgxh(uint t,uchar a);  // 逆时针逐个点亮
//void zgxh1(uint t,uchar a);  // 顺时针逐个点亮
void djs(uint t,uchar a);  //对角闪
void lbzgm(uint t,uchar a);//两边逐个灭
//void sszgm(uint t,uchar a); // 顺时针逐个灭
void nszgm(uint t,uchar a); // 逆时针逐个灭
void sztl(uint t,uchar a);//顺时逐个同步亮
void nztl(uint t,uchar a);//逆时逐个同步亮
void sztm(uint t,uchar a);//顺时逐个同步灭
void nztm(uint t,uchar a);//逆时逐个同步灭
void hwzjl(uint t,uchar a); //横往中间亮
void hwzjm(uint t,uchar a); //横往中间灭
//void swzjl(uint t,uchar a); //竖往中间亮
//void swzjm(uint t,uchar a); //竖往中间灭
void nzdl(uint t,uchar a); //逆时逐段亮
void nzdgl(uint t,uchar a);   //逆时逐段一个点亮
void jgs(uint t,uchar a);   //间隔闪
/**********************************************************/
void zg(uint t,uchar a)//两边逐个亮
{
	uchar i,j;
      for(j=0;j<a;j++)
	 {
	 	  P0=P1=P2=P3=0xff;
		  P0=0x7f;delay(t);
		  for(i=0;i<7;i++)
		  {
		  P0=table1[i+1];
		  P2=table1[i];
		  delay(t);	
		  }
		  P2=0x00;P1=0xfe;
		  delay(t);
		  for(i=0;i<7;i++)
		  {
		  	P1=table[i+1];
			P3=table1[i];
			delay(t);
		  }
		  P3=0x00;delay(t);
	  }
}
void qs(uint t,uchar a)	 //全部闪烁
{
	uchar j;
	for(j=0;j<a;j++)
	{
	   P0=P1=P2=P3=0xff;
	   delay(t);
	   P0=P1=P2=P3=0x00;
	   delay(t); 
	 }  	
}
void zgxh(uint t,uchar a)  // 逆时针逐个点亮
{
	uchar i,j;
	for (j=0;j<a;j++)
	{
		P0=P1=P2=P3=0xff;
		for (i=0;i<8;i++)
		{
			P0=table1[i];
			delay(t);
		}
		for(i=0;i<8;i++)
		{
			P1=table[i];
			delay(t);
		}
		for(i=0;i<8;i++)
		{
			P3=table[i];
			delay(t);
		}
		for(i=0;i<8;i++)
		{
			P2=table[i];
			delay(t);
		}
	}
}
void nszgm(uint t,uchar a) // 逆时针逐个灭
{
	uchar i,j;
	for(j=0;j<a;j++)
	{
		P0=P1=P2=P3=0x00;
		for (i=0;i<8;i++)
		{
			P0=table3[i];delay(t);	
		}
		for (i=0;i<8;i++)
		{
			P1=table2[i];delay(t);	
		}
		for (i=0;i<8;i++)
		{
			P3=table2[i];delay(t);	
		}
		for (i=0;i<8;i++)
		{
			P2=table2[i];delay(t);	
		}
	}
}
/*
void zgxh1(uint t,uchar a)  // 顺时针逐个点亮
{
	uchar i,j;
	for (j=0;j<a;j++)
	{
		P0=P1=P2=P3=0xff;
		for (i=0;i<8;i++)
		{
			P2=table1[i];
			delay(t);
		}
		for(i=0;i<8;i++)
		{
			P3=table1[i];
			delay(t);
		}
		for(i=0;i<8;i++)
		{
			P1=table1[i];
			delay(t);
		}
		for(i=0;i<8;i++)
		{
			P0=table[i];
			delay(t);
		}
	}
}
 */
 /*
void sszgm(uint t,uchar a) // 顺时针逐个灭
{
	uchar i,j;
	for(j=0;j<a;j++)
	{
		P0=P1=P2=P3=0x00;
		for (i=0;i<8;i++)
		{
			P2=table3[i];delay(t);	
		}
		for (i=0;i<8;i++)
		{
			P3=table3[i];delay(t);	
		}
		for (i=0;i<8;i++)
		{
			P1=table3[i];delay(t);	
		}
		for (i=0;i<8;i++)
		{
			P0=table2[i];delay(t);	
		}
	}
}
*/
void djs(uint t,uchar a)  //对角闪
{
	uchar j;
	for(j=0;j<a;j++)
	{
		P0=P1=P2=P3=0xff;
		P0=P3=0x00;
		delay(t);
		P0=P1=P2=P3=0xff;
		P1=P2=0x00;
		delay(t);
	}
	
}
void lbzgm(uint t,uchar a)//两边逐个灭
{
	  uchar i,j;
	  for (j=0;j<a;j++)
	  {
	  	P0=P2=0x00;
		P3=0x01;delay(t);
		for(i=7;i>1;i--)
		{
			P1=table[i-1];P3=table1[i-2];
			delay(t);
		}
		P1=0xfe;P3=0xff;delay(t);
		P1=0xff;P2=0x01;delay(t);
		for(i=7;i>1;i--)
		{
			P0=table1[i-1];
			P2=table1[i-2];
			delay(t);
		}
		P0=0x7f;P2=0xff;delay(t);
		P0=0xff;delay(t);
	  }
}
void sztl(uint t,uchar a)//顺时逐个同步亮
{
	uchar i,j;
	for(j=0;j<a;j++)
	{
		P0=P1=P2=P3=0xff;
		for(i=0;i<8;i++)
		{
			P0=table[i];
			P1=P2=P3=table1[i];
			delay(t);
		}
	}
}
void nztl(uint t,uchar a)//逆时逐个同步亮
{
	uchar i,j;
	for(j=0;j<a;j++)
	{
		P0=P1=P2=P3=0xff;
		for(i=0;i<8;i++)
		{
			P0=table1[i];
			P1=P2=P3=table[i];
			delay(t);
		}
	}
}
void sztm(uint t,uchar a)//顺时逐个同步灭
{
	uchar i,j;
	for(j=0;j<a;j++)
	{
		P0=P1=P2=P3=0x00;
		for(i=0;i<8;i++)
		{
			P0=table2[i];
			P1=P2=P3=table3[i];
			delay(t);
		}
	}
}
void nztm(uint t,uchar a)//逆时逐个同步灭
{
	uchar i,j;
	for(j=0;j<a;j++)
	{
		P0=P1=P2=P3=0xff;
		for(i=0;i<8;i++)
		{
			P0=table3[i];
			P1=P2=P3=table2[i];
			delay(t);
		}
	}
}
void hwzjl(uint t,uchar a) //横往中间亮
{
	uchar i,j;
	for (j=0;j<a;j++)
	{
		P0=P1=P2=P3=0xff;
		for(i=0;i<8;i++)
		{
			P0=P2=P1=table1[i];
			P3=table[i];delay(t);	
		}
	}
}
void hwzjm(uint t,uchar a) //横往中间灭
{
	uchar i,j;
	for (j=0;j<a;j++)
	{
		P0=P1=P2=P3=0x00;
		for(i=0;i<8;i++)
		{
			P0=P2=P1=table3[i];
			P3=table2[i];delay(t);	
		}
	}
}
/*
void swzjl(uint t,uchar a) //竖往中间亮
{
	uchar i,j;
	for (j=0;j<a;j++)
	{
		P0=P1=P2=P3=0xff;
		for(i=0;i<8;i++)
		{
			P0=P2=P1=table[i];
			P3=table1[i];delay(t);	
		}
	}
}
void swzjm(uint t,uchar a) //竖往中间灭
{
	uchar i,j;
	for (j=0;j<a;j++)
	{
		P0=P1=P2=P3=0x00;
		for(i=0;i<8;i++)
		{
			P0=P2=P1=table2[i];
			P3=table3[i];delay(t);	
		}
	}
}
*/
void nzdl(uint t,uchar a) //逆时逐段亮
{
	uchar i,j;
	for (j=0;j<a;j++)
	{
		P0=P1=P2=P3=0xff;
		for(i=0;i<8;i++)
		{
			P0=table1[i];
			delay(t);
		}
		P0=0xff;
		for(i=0;i<8;i++)
		{
			P1=table[i];
			delay(t);
		}
		P1=0xff;
		for(i=0;i<8;i++)
		{
			P3=table[i];
			delay(t);
		}
		P3=0xff;
		for(i=0;i<8;i++)
		{
			P2=table[i];
			delay(t);
		}
		P2=0xff;		
	}
}
void nzdgl(uint t,uchar a)   //逆时逐段一个点亮
{
	uchar i,j,k,l;
	for (j=0;j<a;j++)
	{
		k=table1[0];
		P0=k;l=table[0];
		P1=P2=P3=l;delay(t);
		for(i=0;i<8;i++)
		{
			k=_crol_(k,-1);
			P0=k;
			l=_crol_(l,1);
			P1=P2=P3=l;
			delay(t);
		}
	}
}
void jgs(uint t,uchar a)   //间隔闪
{
	uchar j;
	for (j=0;j<a;j++)
	{
		P0=0x55;P1=P2=P3=0xaa;
		delay(t);
		P0=0xaa;P1=P2=P3=0x55;
		delay(t);	
	}
}
void main()
{
	uchar i;
	while(1)
	{
	 zg(100,1);			 //两边逐个亮
	 lbzgm(100,1);		 //两边逐个灭
	 jgs(300,10);
	 djs(100,20);  //对角闪
////////////////////////////////////////////
	P1=P2=P3=0xff;
	for(i=0;i<3;i++)
	{
	 P0=0x00;delay(800);
	 P0=0xff;delay(800);
	 }
	 P0=0x00;
	 for(i=0;i<3;i++)
	{
	 P1=0x00;delay(800);
	 P1=0xff;delay(800);
	 }
	 P1=0x00;
	 for(i=0;i<3;i++)
	{
	 P3=0x00;delay(800);
	 P3=0xff;delay(800);
	 }
	 P3=0x00;
	 for(i=0;i<3;i++)
	{
	 P2=0x00;delay(800);
	 P2=0xff;delay(800);
	 }
	 qs(500,3);
/////////////////////////////////////////////
	for(i=0;i<6;i++)
	{
	 zgxh(50,1);
	 nszgm(50,1);
	 }
	djs(100,20);  //对角闪
	for(i=0;i<3;i++)
	{
	 zg(100,1);			 //两边逐个亮
	 lbzgm(100,1);		 //两边逐个灭
	}
	 qs(200,10);djs(100,50);
	 for(i=0;i<5;i++)
	 {
	 	sztl(200,1); //顺时逐个同步亮
		nztm(200,1);
	 	nztl(200,1);
		sztm(200,1); //顺时逐个同步灭
	 }
	 djs(300,10);  //对角闪
	 nzdgl(300,10);   //逆时逐段一个点亮
	 jgs(300,10);   //间隔闪
	for(i=0;i<3;i++)
	{
	 zgxh(100,1);
	 nszgm(100,1);
	 }
 /*
	for(i=0;i<5;i++)
	{
	 zgxh1(100,1);
	 sszgm(100,1);
	 }
 */
   nzdl(200,3); //逆时逐段亮
   jgs(50,100);   //间隔闪
/*/////////////////////////////////////////////////////
	P0=P1=P2=P3=0xff;
	for (i=0;i<8;i++)
	{
		P0=table1[i];
		delay(200);
	}
	for (i=0;i<8;i++)
	{
		P1=table[i];
		delay(200);
	}
	for(i=0;i<3;i++)
	{
		P0=P1=0x00;delay(200);
		P0=P1=0xff;delay(200);
	}
	for (i=0;i<8;i++)
	{
		P2=table1[i];
		delay(200);
	}
	for (i=0;i<8;i++)
	{
		P3=table1[i];
		delay(200);
	}
	for(i=0;i<3;i++)
	{
		P2=P3=0x00;delay(200);
		P2=P3=0xff;delay(200);
	}
*///////////////////////////////////////////////////
	
	nzdgl(50,40);   //逆时逐段一个点亮
	for(i=0;i<4;i++)
	{
	 zg(100,1);qs(100,10);
	 lbzgm(100,1);
	}
//	 djs(50,100);  //对角闪
	 
		for(i=0;i<3;i++)
	{
	 zgxh(100,1);
	 nszgm(100,1);
	 }
     djs(1000,10);
	 for(i=0;i<10;i++)
	 {
		hwzjl(200,1); //横往中间亮
		hwzjm(200,1); //横往中间灭
   	 }
	 djs(300,10);  //对角闪
/*	 for(i=0;i<10;i++)
	 {
 		swzjl(200,1); //竖往中间亮
		swzjm(200,1); //竖往中间灭
	 }
*/
	for(i=0;i<5;i++)
	{
	 zgxh(100,1);
	 nszgm(100,1);
	 }
	 djs(100,20);  //对角闪
	 zg(300,1);
	 lbzgm(300,1);
/*
	for(i=0;i<5;i++)
	{
	 zgxh1(100,1);
	 sszgm(100,1);
	 }
*/
	 for(i=0;i<5;i++)
	 {
	 	sztl(200,1);  //顺时逐个同步亮
		nztm(200,1);
	 	nztl(200,1);
		sztm(200,1); //顺时逐个同步灭
	 }
	 djs(500,20);  //对角闪
	 djs(100,30);  //对角闪
	 djs(50,50);  //对角闪
//	 djs(10,100);  //对角闪
	 delay(1000);
	}
		
}
void delay(uint t)	 
{
	uint x,y;
	for (x=t;x>0;x--)
	{
		for (y=120;y>0;y--);
	}
}