键控流水灯的程序
- 格式:docx
- 大小:15.50 KB
- 文档页数:3
键控流水灯的程序
硬件电路描述如下:89S52 单片机的P1 口接有8 个LED,当某一端口输出为“0”时,
相应的LED 点亮,P3.2、P3.3、P3.4、P3.5 分别接有四个按钮K1~K4,按下按钮时,相应
引脚被接地。现要求编写可键控的流水灯程序,当K1 按下时,开始流动,K2 按下时停止
流动,全部灯灭,K3 使灯由上往下流动,K4 使灯由下往上流动。
下面首先给出程序,然后再进行分析。
例 2-1:键控流水灯的程序
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
void mDelay(unsigned int DelayTime)
{ unsigned int j=0;
for(;DelayTime>0;DelayTime--)
{ for(j=0;j<125;j++)
{;} }}
uchar Key()
{ uchar KeyV;
uchar tmp;
P3=P3|0x3c; //四个按键所接位置
KeyV=P3;
if((KeyV|0xc3)==0xff) //无键按下
return(0);
mDelay(10); //延时,去键抖
KeyV=P3;
if((KeyV|0xc3)==0xff)
return(0); else
{ for(;;){ tmp=P3;
if((tmp|0xc3)==0xff)
break;}
return(KeyV);}}
void main()
{ unsigned char OutData=0xfe;
bit UpDown=0;
bit Start=0;
uchar KValue;
for(;;)
{ KValue=Key();
switch (KValue)
{ case 0xfb: //P3.2=0,Start
{ Start=1;
break; }
case 0xf7: //P3.3=0,Stop
{ Start=0;
break; }
case 0xef: //P3.4=0 Up
{ UpDown=1;
break; }
case 0xdf: //P3.5=0 Down
{ UpDown=0;
break; }
}
if(Start)
{ if(UpDown)
OutData=_crol_(OutData,1);
else OutData=_cror_(OutData,1); P1=OutData;
}
else
P1=0xff; //否则灯全灭
mDelay(1000);
}
}