#include<reg51.h>
#define True 1
#define False 0
int status=3,i=0;
int kl[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned int t=0;
void light(int l_r){
int b=0;
if(l_r==True){
for(b=0;b<8;b++){
P0=kl[b];
for(t=0;t<30000;t++);
if(P1==0xfd){status=3;break;}
}
}
else{
for(b=7;b>-1;b--){
P0=kl[b];
for(t=0;t<30000;t++);
if(P1==0xfd){status=3;break;}
}
}
}
void main(){
IT1=1;
IT0=0;
EA=1;
EX1=1;
while(1){
if(P1==0xfd)status=3;
switch(status){
case 3:P0=0xff;break;
case 0:light(True);break;
case 1:light(False);break;
case 2:P0=0x00;for(t=0;t<30000;t++);P0=~P0;for(t=0;t<30000;t++);
}
}
}
void f()interrupt 2{
static int i=0;
if(i>2)i=0;
status=i;
++i;
}
附上电路图: