#include "reg52.h"
sbit k3=P3^2;
sbit k4=P3^3;
sbit led=P2^0;
sbit beep=P2^1;
void delay(int i)
{
while(i--);
}
void main()
{
EA=1;
EX0=1;
EX1=0;
IT0=1;
IT1=1;
PX0=0;
PX1=1;
while(1);
}
void intLED() interrupt 0
{
delay(1000);
if(k3==0)
led=~led;
}
void intBEEP() interrupt 1
{
int i;
delay(1000);
if(k4==0){
for(i=0;i<50000;i++)
{
beep=~beep;
delay(50);
}
}
}
为什么写成
void intLED() interrupt 0
{
delay(100000);
EA=0;
led=~led;
EA=1;
}
或者
void intLED() interrupt 0
{
delay(100000);
led=~led;
}
就会乱闪?????????????
#include "reg52.h"
sbit k3=P3^2;
sbit k4=P3^3;
sbit led=P2^0;
sbit beep=P2^1;
void delay(int i)
{
while(i--);
}
void main()
{
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
PX0=0;
PX1=1;
while(1);
}
void intLED() interrupt 0
{
delay(1000);
if(k3==0)
{
led=~led;
}
}
void intBEEP() interrupt 2
{
int i;
delay(1000);
if(k4==0)
{
for(i=0;i<2000;i++)
{
beep=~beep;
delay(50);
}
}
}
只能用if来防止它乱叫
如果要两个外部中断,一个是0,一个是2
不加if,就是会再按钮弹起来的时候产生好几个跳变,但是这个中断只能识别两个,就是执行两次中断。所以这个灯闪两下