请问这个流水灯程序应该怎样改?
时间:10-02
整理:3721RD
点击:
请问怎样用一个按键控制流水灯的亮和灭?当按一下按键时流水灯亮,再按一下按键时,流水灯灭。以下是偶写的程序,现在按一下K1时,流水灯能亮,请问程序怎样改才能使再按一下k1时,流水灯灭呢?
#include<reg52.h>
sbit k1=P1^1;
sbit Beep = P3^7;
#define uint unsigned int
void delayms(uint);
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main(void)
{
if(k1==0)
delayms(30);
if(k1==0)
{
while(1)
{P2=0xFF;
delayms(350);
P2=0xFE;
delayms(350);
P2=0xFD;
delayms(350);
P2=0xFB;
delayms(350);
P2=0xF7;
delayms(350);
P2=0xEF;
delayms(350);
P2=0xDF;
delayms(350);
P2=0xBF;
delayms(350);
P2=0x7F;
delayms(350);
P2=0xFF;
delayms(350);
Beep= 0;
delayms(100);
Beep= 1;
delayms(50);
Beep= 0;
delayms(100);
Beep= 1;
delayms(50);
}
}
}
#include<reg52.h>
sbit k1=P1^1;
sbit Beep = P3^7;
#define uint unsigned int
void delayms(uint);
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main(void)
{
if(k1==0)
delayms(30);
if(k1==0)
{
while(1)
{P2=0xFF;
delayms(350);
P2=0xFE;
delayms(350);
P2=0xFD;
delayms(350);
P2=0xFB;
delayms(350);
P2=0xF7;
delayms(350);
P2=0xEF;
delayms(350);
P2=0xDF;
delayms(350);
P2=0xBF;
delayms(350);
P2=0x7F;
delayms(350);
P2=0xFF;
delayms(350);
Beep= 0;
delayms(100);
Beep= 1;
delayms(50);
Beep= 0;
delayms(100);
Beep= 1;
delayms(50);
}
}
}
定义一个标志位啊,标志位=1,LED就亮;标志位=0,则LED灭。好简单的说。
偶是新手,能不能在上面的程序里帮忙直接改一下?
这个修改你的程序估计不行,因为你写的【程序架构有问题】,属于【牵一发而动全身】的说。
哦,哪重新写一个行不行?最好是简单一点的,就是一个按键控制流水灯的亮和灭.
你没发现你程序里
【P2=0xFF;
delayms(350);】很重复吗?完全可以用查表+for来替代,那样你的程序将缩小很多行。
哪具体要怎样写才能简化呢?
具体应该怎样改才能简化呢?
K1的判断里面加个变量标志就可以了,while提到外面去
把while(这里边用按键值),当按下是也就是1,流水灯就亮,当不为1时,就停止流水灯了,请采纳,给积分
干嘛要用查表?移位不是更方便吗?
能不能用循环来控制,减少调用延时子代码。
我是想要按一下按键时,流水灯亮,再按一下按键时,流水灯停止.你说这个可以吗?
具体能帮忙改一下吗?
最简单的办法,在你循环前加if(按键数值为真)..流水灯执行,即可
说的这么明白的竟然还是不懂,我也是醉了
这么简单都不会。