#include"reg51.h"
#define uint unsigned int
#define uchar unsigned char
sbit START=P3^2; //启动按键
sbit STOP =P3^3; //停止按键
sbit UN_DIR=P3^0; //反向按键
int flag1=0; //启动按键标志状态变量
int flag2=0; //停止按键标志状态变量
int flag3=0; //反向按键标志状态变量
code uchar TAB[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
/******************延时函数**********************************/
void Delay(uint ctn)
{
uint i;
for(i=0;i<ctn;i++);
}
/*******************主函数***********************************/
void main(void)
{
uint i=0;
while(1)
{
if(START==0)
{
Delay(200);
while(!START);
flag1=1;
flag2=0;
flag3=0;
}
xx2:
if(flag1==1&&flag2==0&&flag3==0) //正向启动循环点亮
{
P2=TAB[i];
if(STOP==0) //正向停止按下
{
Delay(200);
while(!STOP);
flag1=0;
flag2=1;
flag3=0;
goto xx1; //到正向停止处停止
}
if(UN_DIR==0)
{
Delay(200);
while(!UN_DIR);
flag1=0;
flag2=0;
flag3=1;
goto xx3;
}
Delay(10000);
i++;
if(i==8)i=0;
}
xx1: if(flag1==0&&flag2==1&&flag3==0) //判断正向停止键按下
{
P2=TAB[i];//停止
if(START==0) //正向启动按下
{
Delay(200);
while(!START);
flag1=1;
flag2=0;
flag3=0;
goto xx2; //正向启动,回到之前循环点亮
}
if(UN_DIR==0)
{
Delay(200);
while(!UN_DIR);
flag1=0;
flag2=0;
flag3=1;
goto xx3;
}
}
while(1)
{
xx3:
if(flag1==0&&flag2==0&&flag3==1)
{
i--;
P2=TAB[i];
Delay(10000);
if(i==-1)i=7;
}
}
}
输入这个代码后,就通过51单片机上的p1按键控制流水灯。