一开机时,可以从mode1至model4之间逐一切换led灯的效果,但之后就只能在mode1和mode4之间切换了,无法切换到mode2,mode3,不知道是什么原因?请各位大神,指教一下。如果把mode4程序去掉,则可以在mode1,mode2,mode3之间随意切换。
#include <reg52.h>
#include <intrins.h>
#define N 2 //?????
#define T 800 //PWM???
char flag=1;
sbit KEY=P3^2;
sbit led1=P2^7;
sbit led2=P2^6;
sbit led3=P2^5;
sbit led4=P2^4;
void led_mode1();
void led_mode2();
void led_mode3();
void led_mode4();
void pwm();
void flash1();
void main()
{
IT0 = 1;//?????
EX0 = 1;//??INT0??
EA = 1;//?????
while(1)
{
switch(flag)
{
case 1:led_mode1();break;
case 2:led_mode2();break;
case 3:led_mode3();break;
case 4:led_mode4();break;
}
}
}
void int0_process() interrupt 0
{
if (KEY==1) //key=0,»á×Ô¶ˉÇD»»
{
if(flag<4)flag++;
else flag=1;
}
}
void led_mode1()
{
led1=0;
led2=0;
led3=1;
led4=1;
}
void led_mode2()
{
led1=1;
led2=1;
led3=0;
led4=0;
}
void led_mode3()
{
led1=0;
led2=0;
led3=0;
led4=0;
}
void led_mode4()
{
led3=1;
led4=1;
pwm();
flash1();
}
void pwm(int x)
{
while(x--);
}
void flash1(void)
{
int t = 0;
char f = 0;
int count = 5; //5?,?????????
while(1)
{
led1=0;
led2=0;
pwm(t); //Toff,????
//led0=1;
led1=1;
led2=1;
pwm(T-t+100); //Ton,????
if(!f) t+=N+1; //?????,????
else t-=N; //?????
if(t>T) {f=1;t=T;} //??????,?????,????
if(t<0) {f=0;t=0;} //??????,?????,????
}
}
|