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

我试了很多次都不是马上执行。都是执行完上一种才执行下一种。麻烦哪位朋友帮我写一个这样的c程序,谢谢!
用P3^2做按钮输入,按第一下执行第一种花样跑马灯程序,按第二下执行第二种花样跑马灯,……。P0,P1,P2口输出。一共有个18个输出口控制LED灯。大家帮我写一个这样的C程序,万分感谢!

你用中断就可马上执行。还有你如是用的扫描程序编的好也可马上执行的。这你自己 再想想吧。只要查到有键按下,就把那花样寄存器中加一,再用间转指令立即跳到不同的花样号的入口处。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-13
把那个IO口设为中断。

进中断后。标志位加1。
然后跳到标志位对应的程序段执行。
第2个回答  推荐于2017-10-18
#include<reg51.h>
#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);
}

本回答被网友采纳
第3个回答  2012-12-13
设置几个不同的标志位就行啦
第4个回答  2012-12-12
中断有错你看看追问

能帮我写一个这样的C程序吗?

相似回答