单片机怎么用一个按钮控制多种花样流水灯,只要一按就马上执行下一种花样。

2024-11-02 16:24:18
推荐回答(5个)
回答1:

你毁侍用中断就可马上执行。还有你如是用的扫描程序编的拆含好也可马上执行的。这你旅余笑自己 再想想吧。只要查到有键按下,就把那花样寄存器中加一,再用间转指令立即跳到不同的花样号的入口处。

回答2:

把那个IO口设为中断。

进中雹知断后。标志位梁颤加1。
然源渣消后跳到标志位对应的程序段执行。

回答3:

#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);
}

回答4:

设置几个不同的标志位就行啦

回答5:

中断有错你看看