微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请问这个流水灯程序应该怎样改?

请问这个流水灯程序应该怎样改?

时间: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);

}
}
}


定义一个标志位啊,标志位=1,LED就亮;标志位=0,则LED灭。好简单的说。

偶是新手,能不能在上面的程序里帮忙直接改一下?

这个修改你的程序估计不行,因为你写的【程序架构有问题】,属于【牵一发而动全身】的说。

哦,哪重新写一个行不行?最好是简单一点的,就是一个按键控制流水灯的亮和灭.

你没发现你程序里
【P2=0xFF;
delayms(350);】很重复吗?完全可以用查表+for来替代,那样你的程序将缩小很多行。

哪具体要怎样写才能简化呢?

具体应该怎样改才能简化呢?

K1的判断里面加个变量标志就可以了,while提到外面去

把while(这里边用按键值),当按下是也就是1,流水灯就亮,当不为1时,就停止流水灯了,请采纳,给积分

干嘛要用查表?移位不是更方便吗?

能不能用循环来控制,减少调用延时子代码。

我是想要按一下按键时,流水灯亮,再按一下按键时,流水灯停止.你说这个可以吗?

具体能帮忙改一下吗?

最简单的办法,在你循环前加if(按键数值为真)..流水灯执行,即可

说的这么明白的竟然还是不懂,我也是醉了

这么简单都不会。

上一篇:+程序下载
下一篇:Bootloader开发报价

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top