目的:实现流水灯以一个规律循环,同时控制进出循环,切换循环
提前准备(基础代码及延迟函数)
#include <STC15F2K60S2.H>
#define u8 unsigned char
#define u16 unsigned int
void delay(int ms) //延迟函数
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
独立按键函数,实现控制
利用LED_Flag值实现控制
u16 LED_Flag=0;
void Key_scan()
{
if(P30==0)
{
delay(5);//消抖
if(P30==0)
{
LED_Flag=1;
}
while(!P30);//松手检测
}
else if(P31==0)
{
delay(5);
if(P31==0)
{
LED_Flag=2;
}
while(!P31);
}
else if(P32==0)
{
delay(5);
if(P32==0)
{
LED_Flag=3;
}
while(!P32);
}
else if(P33==0)
{
delay(5);
if(P33==0)
{
LED_Flag=4;
}
while(!P33);
}
}
主函数
void main ()
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//关闭蜂鸣器
while(1)
{
Key_scan();
if(LED_Flag==1)//循环1
{
LED_Flag=0;
while(1)//死循环
{
for(LED=0;LED<9;LED++)
{
P0=~(0x01<<LED);
Key_scan();//控制进出循环
delay(200);
Key_scan();//控制进出循环
}
Key_scan();
if(LED_Flag==4)
break;
}
}
if(LED_Flag==2)//循环2
{
LED_Flag=0;
while(1)
{
for(LED=0;LED<9;LED++)
{
P0=~(0x80>>LED);
Key_scan();
delay(200);
Key_scan();
}
Key_scan();
if(LED_Flag==4)
break;
}
}
if(LED_Flag==3)//循环3
{
LED_Flag=0;
while(1)
{
for(LED=0;LED<9;LED+=2)
{
P0=~(0x01<<LED);
Key_scan();
delay(200);
Key_scan();
}
Key_scan();
if(LED_Flag==4)
break;
}
}
}
}
3个for循环,实现三种规律的流水灯
循环中间插入独立按键函数,实现控制进出循环
死循环实现流水灯在不控制进出的情况下一直运行