单片机源程序如下:
#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触发控制位,IT0=1下降沿触发
EX1=1;
IT0=1; //外部中断0触发控制位,IT0=1下降沿触发
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触发控制位,IT0=1下降沿触发
EX0=0;
IT1=1; //外部中断0触发控制位,IT0=1下降沿触发
EX1=0;
if(k1 == 0)
{
delay(1000);
if(k1==0)
{
ledflag1=1;
}
while(!k1);
}
}
void Int1() interrupt 2
{
IT0=1; //外部中断0触发控制位,IT0=1下降沿触发
EX0=0;
IT1=1; //外部中断0触发控制位,IT0=1下降沿触发
EX1=0;
if(k2 == 0)
{
delay(1000);
if(k2==0)
{
ledflag2=1;
}
while(!k2);
}
}
|