你毁侍用中断就可马上执行。还有你如是用的扫描程序编的拆含好也可马上执行的。这你旅余笑自己 再想想吧。只要查到有键按下,就把那花样寄存器中加一,再用间转指令立即跳到不同的花样号的入口处。
把那个IO口设为中断。
进中雹知断后。标志位梁颤加1。
然源渣消后跳到标志位对应的程序段执行。
#include帆局
#define uchar 碧尺unsigned char
uchar cnt,keyval=0;
uchar led1,led2,led3;
unsigned int dat;
void int00() interrupt 0
{
keyval++;
keyval%=4;
switch(keyval)
{
case 0:led1=0xfe;led2=0xff;led3=0xff;break;
case 1:led1=0x55;led2=0x55;led3=0x55;break;
case 2:led1=0xff;led2=0xff;led3=0x7f;break;
case 3:led1=0xf0;led2=0xf0;led3=0xf0;break;
default:break;
}
dat=0;
dat|=led3;dat<<8;
dat|=led2;dat<<8;
dat|=led1;
}
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>=10)
{
cnt=0;
switch(keyval)
{
case 0:dat<<=1;Cy=(dat>>24 & 0x01);dat|=Cy;
P0=dat;P1=dat>>8;P2=dat>>16;
break;
case 1:dat=~dat;
P0=dat;P1=dat>>8;P2=dat>>16;
break;
case 2:Cy=dat&0x01;dat&=0x7fffff;dat|=(Cy<<23);
P0=dat;P1=dat>>8;P2=dat>>16;
态慧让 break;
case 3:dat=~dat;
P0=dat;P1=dat>>8;P2=dat>>16;
break;
default:break;
}
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EX0=1;
IT0=1;
EA=1;
while(1);
}
设置几个不同的标志位就行啦
中断有错你看看