想做的是通过按键,在单片机上切换流水灯和呼吸灯两种模式。按键切换的部分是ctrl c+v,两种模式分别做过,用函数复制粘贴过来了。代码没有报错,但是单片机按一下k3后,第一个模式能成功运行,再按就没有反应了。

#include <reg51.h>
#include "intrins.h"
#define led P2
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;
sbit LED6=P2^5;
sbit LED7=P2^6;
sbit LED8=P2^7;
sbit key = P3^2;
void Delay(unsigned int t)
{
while(t--);
}
void mode1(){
while(1){
P2=0xFE;
Delay(500);
P2=0xFD;
Delay(500);
P2=0xFB;
Delay(500);
P2=0xF7;
Delay(500);
P2=0xEF;
Delay(500);
P2=0xDF;
Delay(500);
P2=0xBF;
Delay(500);
P2=0x7F;
Delay(500);
}
}
void mode2(){
unsigned char Time,i;
for(Time=0;Time<100;Time++)
{
for(i=0;i<20;i++)
{
LED1=0;
Delay(Time);
LED1=1;
Delay(100-Time);
}
}
for(Time=100;Time>0;Time--)
{
for(i=0;i<20;i++)
{
LED1=0;
Delay(Time);
LED1=1;
Delay(100-Time);
}
}
Delay(500);
for(Time=0;Time<100;Time++)
{
for(i=0;i<20;i++)
{
LED2=0;
Delay(Time);
LED2=1;
Delay(100-Time);
}
}
for(Time=100;Time>0;Time--)
{
for(i=0;i<20;i++)
{
LED2=0;
Delay(Time);
LED2=1;
Delay(100-Time);
}
}
Delay(500);
for(Time=0;Time<100;Time++)
{
for(i=0;i<20;i++)
{
LED3=0;
Delay(Time);
LED3=1;
Delay(100-Time);
}
}
for(Time=100;Time>0;Time--)
{
for(i=0;i<20;i++)
{
LED3=0;
Delay(Time);
LED3=1;
Delay(100-Time);
}
}
Delay(500);
for(Time=0;Time<100;Time++)
{
for(i=0;i<20;i++)
{
LED4=0;
Delay(Time);
LED4=1;
Delay(100-Time);
}
}
for(Time=100;Time>0;Time--)
{
for(i=0;i<20;i++)
{
LED4=0;
Delay(Time);
LED4=1;
Delay(100-Time);
}
}
Delay(500);
for(Time=0;Time<100;Time++)
{
for(i=0;i<20;i++)
{
LED5=0;
Delay(Time);
LED5=1;
Delay(100-Time);
}
}
for(Time=100;Time>0;Time--)
{
for(i=0;i<20;i++)
{
LED5=0;
Delay(Time);
LED5=1;
Delay(100-Time);
}
}
Delay(500);
for(Time=0;Time<100;Time++)
{
for(i=0;i<20;i++)
{
LED6=0;
Delay(Time);
LED6=1;
Delay(100-Time);
}
}
for(Time=100;Time>0;Time--)
{
for(i=0;i<20;i++)
{
LED6=0;
Delay(Time);
LED6=1;
Delay(100-Time);
}
}
Delay(500);
for(Time=0;Time<100;Time++)
{
for(i=0;i<20;i++)
{
LED7=0;
Delay(Time);
LED7=1;
Delay(100-Time);
}
}
for(Time=100;Time>0;Time--)
{
for(i=0;i<20;i++)
{
LED7=0;
Delay(Time);
LED7=1;
Delay(100-Time);
}
}
Delay(500);
for(Time=0;Time<100;Time++)
{
for(i=0;i<20;i++)
{
LED8=0;
Delay(Time);
LED8=1;
Delay(100-Time);
}
}
for(Time=100;Time>0;Time--)
{
for(i=0;i<20;i++)
{
LED8=0;
Delay(Time);
LED8=1;
Delay(100-Time);
}
}
Delay(500);
}
void timer0() interrupt 1
{
static int i = 0;
TH0 = 0xFC;
TL0 = 0x18;
i++;
if (i == 500)
{
i = 0;
if(flag == 1){
mode1();
}
if(flag == 2){
mode2();
}
}
}
void int0() interrupt 0
{
if (key == 0)
{
flag += 1;
c = 0;
}
if(flag == 1)
led = ~0x00;
if(flag == 2)
led = ~0x01;
if(flag == 3)
flag = 1;
}
void main()
{
TMOD = 0x01;
TH0 = 0xFC;
TL0 = 0x18;
EA = 1;
ET0 = 1;
EX0 = 1;
IT0 = 1;
TR0 = 1;
while (1);
}