#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h> //因为要用到左右移函数,所以加入这个头文件
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k3=P3^2; //定义按键 K3
sbit k4=P3^3; //定义按键 K4
sbit led=P0^0;
void delay(u16 i)
{
while(i--);//延时函数,i=1 时,大约延时10us
}
void Int0Init()
{
//设置INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开INT0的中断允许
EA=1;//打开总中断
}
void Int1Init()
{
//设置 INT1
IT1=1;//跳变沿出发方式(下降沿)
EX1=1;//打开INT1的中断允许
EA=1;//打开总中断
}
unsigned char ledState ;
void main()
{
unsigned int i ;
Int0Init(); // 设置外部中断 0
Int1Init(); // 设置外部中断 1
while(1)
{
if(ledState == 1)
{
P0 =~ (0x01<<i); //将1右移i位,然后将结果赋值到P2口
i++;
delay(50000); //大约延时450ms
if(i >= 8)
i = 0;
}
if(ledState == 0)
{
P0 =~ (0x80>>i); //将1左移i位,然后将结果赋值到P2口
i++;
delay(50000); //大约延时450ms
if(i >= 8)
i = 0;
}
}
}
void Int0() interrupt 0 //外部中断0的中断函数
{
delay(1000); //延时消抖
if(k3 == 0)
{
if(ledState == 0)
ledState = 1;
}
}
void Int1() interrupt 2 //外部中断1的中断函数
{
delay(1000); //延时消抖
if(k4 == 0)
{
if(ledState == 1)
ledState =0;
}
}