简介:
编程可键控的流水灯程序。实现功能:K1是总开关,当K1首次按下时,流水灯由下往上流动;当K2按下时停止流动,且全部灯灭;当K3按下时使灯由上往下流动;当K4按下时使灯由下往上流动。
电路图:
思路:
定义两个标志位run、dir,根据键值修改标志位,再根据标志位的值控制led灯的亮灭。
run | dir | |
K1 | 1 | 0 |
K2 | 0 | 0 |
K3 | 1 | 1 |
K4 | 1 | 0 |
代码如下:
#include <reg51.h> //头文件声明
unsigned char led[] = {0xfe,0xfd,0xfb,0xf7}; //该数组存放led灯的工作状态
void delay() // 延时函数
{
int i;
for(i=30000;i>0;i--);
}
void main()
{
bit run=0,dir=0; // 标志位定义及初始化
char i;
while(1)
{
switch(P0&0x0f) //检测按键状态
{
case 0x0e:run=1;break; //K1动作,设置run=1
case 0x0d:run=0,dir=0;break; //K2动作,设置run=0,dir=0
case 0x0b:dir=1;break; //K3动作,设置dir=1
case 0x07:dir=0;break; //K4动作,设置dir=0
}
if(run==1)
{
if(dir==1)
{
for(i=0;i<=3;i++) //若run=dir=1,自上而下流动
{
P2=led[i];
delay();
}
}
else
{
for(i=3;i>=0;i--) //若run=1、dir=0自下而上流动
{
P2=led[i];
delay();
}
}
}
else
P2=0xff; //若run=0,灯全灭
}
}