设置k3作为启动键,只有先按下k3才能开始控制流水灯,按下k3后LED闪烁提示开始成功。
在按下k3后,其余键即可控制流水灯。其中k1执行从右到左,k2执行从左到右。文章来源:https://www.toymoban.com/news/detail-734887.html
按下k4,执行外部中断,立马中止流水灯运行,需重新按下启动键重启。文章来源地址https://www.toymoban.com/news/detail-734887.html
#include <REGX52.H>
#include <intrins.h> //因为要用到左右移函数,所以加入这个头文件
#include <Delay.h>
#define led P2
sbit k3=P3^2; // 启动键
sbit k4=P3^3; // 暂停键
sbit k1=P3^1;
sbit k2=P3^0;
int flag=0;
void Int1Init()
{
IT1=1;
EX1=1;
EA=1;
}
void keypros()//在按下启动键后可执行三个按键
{
int i;
if(k2==0)
{
Delay(10);
while(k2==0)
{
for(i=0;i<9;i++)
{
Delay(100);//不延时就只能看到从第二个数开始的
led=~(0x01<<i);//让它从低到高亮
Delay(100);
if(flag==0)
break;
}
}
}
if(k1==0)
{
Delay(10);
while(k1==0)
{
for(i=0;i<9;i++)
{
Delay(100);//不延时就只能看到从第二个数开始的
led=~(0x01<<(7-i));//让它从高到低亮
Delay(100);
if(flag==0)
break;
}
}
}
}
void main()
{
Int1Init();
while(1)
{
if(k3==0)
{
Delay(10);
if(k3==0)
{
flag=1;
led=0x00;
Delay(200);
led=0xFF;
Delay(200);
led=0x00;
Delay(200);
led=0xFF;
}
}
if(flag==1)
{
keypros();
}
else
{led=0xFF;}
}
}
void Int1() interrupt 2 //外部中断1
{
if(k4==0)
{
flag=0;//使其下一次如果不重新按下启动键就不能执行其他按键
}
}
到了这里,关于【51单片机】键控流水灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!