外部中断实现流水灯的启动和停止
如需要仿真请联系作者
#include "reg52.h" //定义一些特殊寄存器
#include<intrins.h> //调用led移动库(_CROL_ _CROR_)
typedef unsigned int u16; //u16代替unsigned int
typedef unsigned char u8; //u8代替unsigned char
#define led P2 //宏定义P2口
sbit k1=P3^1;
sbit k2=P3^2; //位定义
u16 m=1,n=1; //定义无符号整型变量
/**************延时函数***********/
void delay(u16 i)
{
while(i--);
}
/************按键函数************/
void keypros()
{ while(m)
if(k1==0)
{
delay(1000);
if(k1==0)
m--;
}
}
/******开启外部中断******/
void Int0Init()
{ IT0=1;
EX0=1;
EA=1;
}
/**********主函数部分*******/
void main()
{ u8 i;
led=0xaa; //1357位led亮起
delay(50000);
keypros(); //调用k1按键实现流水灯总开关
led=0xfe;
delay(50000);
Int0Init(); //调用外部中断开启函数
while(1)
{
switch(n){
case(0):{ n=0;break;}
case(1):{
for(i=0;i<7;i++) //流水灯右移
{ if(n==1)
{ led=_crol_(led,1);
delay(50000);
}
else
break;
}
}
}
} }
/***********************************
*函数名: Int0 ()
*作用:通过外部中断改变n的值实现流水灯转向
***********************************/
void Int0 () interrupt 0
{
delay(1000);
if(k2==0)
{
n=!n;
while(!k2);
}
}