|
|
5黑幣
單片機(jī)源程序如下:
#include "reg51.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit k1=P3^2;
sbit k2=P3^3;
sbit led1=P1^4;
sbit led2=P1^3;
bit ledflag1,ledflag2;
void delay(u16 i)
{
while (i--);
}
void keyscan()
{
if(k1==0)
{
delay(1000);
if(k1==0)
{
ledflag1=~ledflag1;
}
while(!k1);
}
if(k2==0)
{
delay(1000);
if(k2==0)
{
ledflag2=~ledflag2;
}
while(!k2);
}
}
void main()
{
EA=1;
while(1)
{
if(ledflag1==0&&ledflag2==0)
{
IT1=1; //外部中斷0觸發(fā)控制位,IT0=1下降沿觸發(fā)
EX1=1;
IT0=1; //外部中斷0觸發(fā)控制位,IT0=1下降沿觸發(fā)
EX0=1; //外部中斷0中斷允許位
PCON|=0x02;
_nop_();
_nop_();
_nop_();
_nop_();
}
keyscan();
if(ledflag1==1)
{
led1=0;
}
else
{
led1=1;
}
if(ledflag2==1)
{
led2=0;
}
else
{
led2=1;
}
}
}
void Int0() interrupt 0
{
IT0=1; //外部中斷0觸發(fā)控制位,IT0=1下降沿觸發(fā)
EX0=0;
IT1=1; //外部中斷0觸發(fā)控制位,IT0=1下降沿觸發(fā)
EX1=0;
if(k1 == 0)
{
delay(1000);
if(k1==0)
{
ledflag1=1;
}
while(!k1);
}
}
void Int1() interrupt 2
{
IT0=1; //外部中斷0觸發(fā)控制位,IT0=1下降沿觸發(fā)
EX0=0;
IT1=1; //外部中斷0觸發(fā)控制位,IT0=1下降沿觸發(fā)
EX1=0;
if(k2 == 0)
{
delay(1000);
if(k2==0)
{
ledflag2=1;
}
while(!k2);
}
}
|
最佳答案
查看完整內(nèi)容
1,不要在中斷函數(shù)里面更改中斷選項,也不要在中斷0的中斷函數(shù)關(guān)閉中斷1,這樣你按一了下中斷0之后,兩個中斷就都關(guān)閉了
2,退出中斷之前,最好先清除中斷標(biāo)志位.就是IE0和IE1
|