实现按键控制流水灯的启动和转向
proteus仿真链接:https://pan.baidu.com/s/1On3Sc8_jAtmM8BdRrFcPbw 提取码:qwer
#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)
{
while(n)
{
for(i=0;i<7;i++) //流水灯右移
{ if(n=1){
led=_crol_(led,1);
delay(50000); }
else
i=7;
}
}
while(!n)
{
for(i=0;i<7;i++) //流水灯左移
{ if(n==0) {
led=_cror_(led,1);
delay(50000);}
else
i=7;
}
}
}
}
/***********************************
*函数名: Int0 ()
*作用:通过外部中断改变n的值实现流水灯转向
***********************************/
void Int0 () interrupt 0
{
delay(1000);
if(k2==0)
{
n=!n;
}
}