c51_1按键控制三种流水灯效果

#include
sbit KEY=P2^0;
//延迟程序
void delay(unsigned int i)
{
unsigned int j;
while(i--)
for(j=600;j>0;j--);
}
//主程序
void main(void)
{
while(1)
{
unsigned int countX,countY,i,j,a,b,x;
KEY=1;//初始化为高电平
delay(10);
countX=0;//定义计数器1、判断长按短按
countY=1000;//定义计数器2、判断是否双击
if(KEY==0)//判断是否按下按键
{
delay(10);
if(KEY==0)//确认是否按键
{

while(KEY==0)//当按键松开时退出循环
{

countX++;
delay(1);
}
}
//按键松开时,计数器2开始计数
while(KEY&&countY)
{
countY--;
delay(1);
}
delay(10);
if(countY==0)//如果是因为计数器2时间到跳出循环,说明在一定时间内按键没有第二次触发
{
delay(10);
if(countX<200)//短按效果(按键时间小于0.2秒)
{

//第一种流水灯效果
while(1)
{
KEY=1;
a=0x80;
for(i=0;i<8;i++)//流水灯循环右移
{
P0=~a;
a>>=1;
delay(200);
if(KEY==0)
{
return;
}
}
if(KEY==0)
{
return;
}
b=0x01;
for(i=8;i>0;i--)//循环八次
{
b|=0x01;
a=0x80;
for(j=0;j{
a|=b;
P0=~a;
a>>=1;
if(KEY==0)
{
return;
}
delay(200);
}
b<<=1;
if(KEY==0)
{
return;
}
}
for(i=5;i>0;i--)//闪烁
{
P0=0xff;
delay(200);
P0=0x00;
delay(200);
if(KEY==0)
{
return;
}
}
if(KEY==0)
{
return;
}
a=0x80;
for(i=0;i<8;i++)
{
P0=a;
a>>=1;
delay(200);
if(KEY==0)
{
return;
}
}


b=0x01;
for(i=8;i>0;i--)
{
b|=0x01;
a=0x80;
for(j=0;j{
a|=b;
P0=a;
a>>=1;
if(KEY==0)
{
return;
}
delay(200);
}
b<<=1;
if(KEY==0)
{
return;
}
}
for(i=5;i>0;i--)
{
if(KEY==0)
{
return;
}
P0=0x00;
delay(200);
P0=0xff;
delay(200);
}

}

}
else //长按效果
{
//第二种流水灯效果
x=100;
while(1)
{
KEY=1;
a=0x80;
for(i=0;i<8;i++)
{
P0=~a;
a>>=1;
delay(x);
if(KEY==0)
{
return ;
}
}
a=0x01;
if(KEY==0)
{
return;
}
for(i=0;i<8;i++)
{
P0=~a;
a<<=1;

if(KEY==0)
{
return;
}
delay(x);
}
x+=150; //控制流水灯循环速度
if(x>500)
{
x=100;
}
}
}
}
if(countY!=0)//双击
{
delay(1000);
while(1)
{
delay(10);
a=0xff;//a=0x80;一个灯亮
P0=~a;
if(KEY==0)
{
return;
}
delay(300);
if(KEY==0)
{
return;
}
delay(300);
a=0x00;
P0=~a;
if(KEY==0)
{
return;
}
delay(300);
if(KEY==0)
{
return;
}
delay(300);
a=0xaa;
P0=~a;
if(KEY==0)
{
return;
}
delay(300);
if(KEY==0)
{
return;
}
delay(300);
a=0x55;
P0=~a;
if(KEY==0)
{
return;
}
delay(300);
if(KEY==0)
{
return;
}
delay(300);
a=0xf0;
P0=~a;
if(KEY==0)
{
return;
}
delay(300);
if(KEY==0)
{
return;
}
delay(300);
a=0x0f;
P0=~a;
if(KEY==0)
{
return;
}
delay(300);
if(KEY==0)
{
return;
}
delay(300);
a=0x3c;
P0=~a;
if(KEY==0)
{
return;
}
delay(300);
if(KEY==0)
{
return;
}
delay(300);
a=0xc3;
P0=~a;
delay(300);
if(KEY==0)
{
return;
}
delay(300);
if(KEY==0)
{
return;
}
}
}
//while(KEY==0);
delay(10);
KEY=1;
}

}
}

相关文档
最新文档