单片机一个按键控制一个程序

四个按键分别控制4种流水灯,一:左移 二:右移 三:从中间向两边移动 四:从两边向中间移动
四个程序 我都有怎么加到一起
左移的:
#include<reg52.h>
#include<intrins.h>

#define uint unsigned int
#define uchar unsigned char

void delayms(uint);
uchar aa;

void main()
{
aa=0xfe;
while(1)
{
P1=aa;
delayms(500);
aa=_cror_(aa,1);
}
}

void delayms(uint xms)
{
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);

}

右移的:
#include<reg52.h>
#include<intrins.h>

#define uint unsigned int
#define uchar unsigned char

void delayms(uint);
uchar aa;

void main()
{
aa=0xfe;
while(1)
{
P1=aa;
delayms(500);
aa=_crol_(aa,1);
}
}

void delayms(uint xms)
{
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

中间:
#include <reg51.h>
sbit M=P1^0;void delayms(unsigned char ms)
{
unsigned int i;
while(ms--)
{
for (i=0 ;i<100;i++);
}
}
main ()
{ unsigned char LED;
LED =0xff;
P1=LED;
while(1)
{ LED=0xe7;
P1=LED;
delayms(1000);

LED=0xdb;
P1=LED;
delayms(1000);

LED=0xbd;
P1=LED;
delayms(1000);

LED=0x7e;
P1=LED;
delayms(1000);

}
}
两边:
#include <reg51.h>
sbit M=P1^0;void delayms(unsigned char ms)
{
unsigned int i;
while(ms--)
{
for (i=0 ;i<100;i++);
}
}
main ()
{ unsigned char LED;
LED =0xff;
P1=LED;
while(1)
{ LED=/*0xe7;*/0x7e;
P1=LED;
delayms(1000);

LED=/*0xdb;*/0xbd;
P1=LED;
delayms(1000);

LED=/*0xbd;*/0xdb;
P1=LED;
delayms(1000);

LED=/*0x7e;*/0xe7;
P1=LED;
delayms(1000);

}
}
求解答!!

这个简单了。
给你一个程序框架
sbit key1=P0^0;
sbit key2=P0^1;
sbit key3=P0^2;
//还可以多写几个键
void main(){
unsigned char zt=0;//程序运行状态变量,用它来标定程序运行在哪个段
while(1){
//按键扫描没加滤波这个如果有需要你自己加吧
if(~key1){zt=0;}//当按键1按下时运行程序段0;
if(~key2){zt=1;}//当按键2按下时运行程序段1;
if(~key3){zt=2;}//当按键3按下时运行程序段2;
//状态机程序
switch(zt){
case 0://程序段0
//在这里添加相应的功能程序,如点阵,LED,等等
break;

case 1://程序段1
//在这里添加相应的功能程序,如点阵,LED,等等
break;

case 2://程序段2
//在这里添加相应的功能程序,如点阵,LED,等等
break;
}
}
}
希望能帮到你。追问

我把程序放进去 有好多错误 每个程序定义都得改 不会呀~~~

追答

你在每个程序段里重写也可以啊。跑马灯这么简单。我是没时间给你写了。框架还有按键都给你考好了,还能有多大问题。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-22
你把几种方式写成几个子程序,然后主程序调用按键检测,根据检测到的键值调用对应的子函数即可追问

不会呀 帮帮忙吧

相似回答