#include

#define        uint        unsigned int

#define        uchar        unsigned char

sbit k1=P1^0;

uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED从低位往高位移

uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED从高位往低位移

uchar code table2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//LED从1个亮到8个都点亮(从低位往高位)

uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//LED从1个亮到8个都点亮(从高位往低位)

uchar i,tm;

uchar num=0;

void disp1();

void disp2();

void disp3();

void disp4();

void delay_ms(unsigned int tim);  //延时函数

void t0isr() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tm++;

if(tm>=10)

{

tm=0;

switch(num)

{

case 1: disp1();delay_ms(100);break;

case 2: disp2();delay_ms(100);break;

case 3: disp3();delay_ms(100);break;

case 4: disp4();delay_ms(100);num=0;break;

default:break;

}

}

}

void delay(uchar time)

{

uchar j,k;

for(j=time;j>0;j–)

for(k=125;k>0;k–);

}

void delay_ms(unsigned int tim)   //延时函数

{

unsigned int i,j;

for(i=0;i

for(j=0;j<120;j++);

}

void disp1()                        //状态1 LED顺时针转一圈

{

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

{

P2=table0[i];

delay(1000);

}

P2=0xff;

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

{

P0=table0[i];

delay(1000);

}

P0=0xff;

}

void disp2()                        //状态2 LED逆时针转一圈

{

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

{

P0=table1[i];

delay(1000);

}

P0=0xff;

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

{

P2=table1[i];

delay(1000);

}

P2=0xff;

}

void disp3()                        //状态3 LED自上而下逐渐点亮(一半点亮一半不亮)

{

delay(1000);

if(k1==1)

{

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

{

P0=table2[i];

P2=table2[i];

delay(1000);

}

}

}

void disp4()                        //状态4 LED自下而上逐渐点亮(直到全部点亮)

{

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

{

P0=table3[i];

P2=table3[i];

delay(1000);

}

P0=0xff; P2=0xff;

}

void main()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

ET0=1;

EA=1;

while(1)

{

if(k1==0)

{

delay_ms(500);                 //消抖

//    while(!k1);                  //等待按键松开

if(k1==0)

{ num++;

while(!k1);

}

}

}

}