51单片机8路流水灯! 用三个按键控制三个程序!每个按键对应一个程序!按键一个键死循环一个程序!

51单片机8路流水灯!
用三个按键控制三个程序!每个按键对应一个程序!按键一个键死循环一个程序!只有按下一个键!跳到下一个程序死循环

第1个回答  2016-10-23
#include<reg51.h>
#define uchar unsigned char
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
uchar led1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar led2[]={0xe7,0xdb,0xbd,0x7e};
bit flag;
void delay(uchar a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}
void prog1(void)
{
uchar i;
while(flag)
{
P0=led1[i];
i++;
i%=8;
delay(200);
}
}
void prog2(void)
{
uchar i;
while(flag)
{
P0=led2[i];
i++;
i%=4;
delay(200);
}
}
viud prog3{void)
{
uchar i=7;
while(flag)
{
P0=led1[i];
i--;
if(i>7)i=7;
delay(200);
}
}
main()
{
flag=0;
while(1)
{
if(key1==0)
{
flag=0;
while(key1==0);
flag=1;
}
if(key2==0)
{
flag=0;
while(key2==0);
flag=1;
}
if(key3==0)
{
flag=0;
while(key3==0);
flag=1;
}
}
}追问

flag是代表1还是啥意思

flag是定义循环跳出是不?

三个亮灯方式主函数怎么没有调用啊!如果问的有点菜鸟!请原谅😔😔

追答

while(1)
{
if(key1==0)
{
flag=0;
while(key1==0);
prog1();
flag=1;
}
if(key2==0)
{
flag=0;
while(key2==0);
prog2();
flag=1;
}
if(key3==0)
{
flag=0;
while(key3==0);
prog3();
flag=1;
}
}

追问

嗯晓得了

本回答被提问者和网友采纳
相似回答