#include<reg51.h>
sbit LED1=P1^3;
sbit LED2=P3^5;
sbit LED3=P3^6;
sbit LED4=P3^7;
void blink();
void JT();
void PMD();
//执行动作
void main(){
EX0=1;
EA=1;
IT0=1;//边沿触发
while(1);
}
//外部中断0
void alter()interrupt 0{
static unsigned char N=0;
N++;
if(N==1)
PMD();
else if(N==2)
JT();
else if(N==3)
blink();
else if(N==4)
{
LED1=LED2=LED3=LED4=1;N=0;
}
}
//定义函数
void delay(unsigned int xms){
while(xms>0)xms--;
}
void PMD()
{
LED1=LED2=LED3=LED4=1; //先全灭 避免互相影响
LED1=0;;
delay(20000);
LED2=0;LED1=1;
delay(20000);
LED3=0;LED2=1;
delay(20000);
LED4=0;LED3=1;
delay(20000);
}
void JT()
{
LED1=LED2=LED3=LED4=1; //先全灭 避免互相影响
LED1=LED2=0;
delay(20000);
LED1=LED2=1;
delay(20000);
LED3=LED4=0;
delay(20000);
}
void blink()
{
LED1=LED2=LED3=LED4=1; //先全灭 避免互相影响
delay(10000);
LED1=LED2=LED3=LED4=0;
delay(10000);
}
外部中断0实现3种模式,会发现跑一次后就暂停了 不动了。因为中断动作执行完后 系统是保存当时那刻状态,然后继续执行回到主函数。
解决方法:
把各动作放在主函数,中断程序就作个计数的功能就好了