51单片机,用两个按键分别控制两个led,一个亮/灭,另一个闪烁/灭,为什么我按下了第二个灯不闪呢? 100

#include"reg52.h"typedefunsignedcharu8;typedefunsignedintu16;sbitled1=P0^0;sbitk1=P1^... #include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit led1=P0^0;
sbit k1=P1^0;

sbit led5=P0^4;
sbit k5=P1^4;

void delay(u16 i)
{
while(i--);
}

void keypros()
{
if(k1==0)
{
delay(1000);
if(k1==0);
{
led1=~led1;
}
while(!k1);
}
if(k5==0)
{
delay(1000);
#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit led1=P0^0;
sbit k1=P1^0;

sbit led5=P0^4;
sbit k5=P1^4;

void delay(u16 i)
{
while(i--);
}

void keypros()
{
if(k1==0)
{
delay(1000);
if(k1==0);
{
led1=~led1;
}
while(!k1);
}
if(k5==0)
{
delay(1000);
if(k5==0);
{
led5=1;
delay(5000);
led5=0;
delay(5000);
}
while(!k5);
}
}

void main()
{
led1=0;
led5=1;
while(1)
{
keypros();
}
}
新人初学,请教大神指点!
第二个灯不能持续闪烁,只是在按得一瞬间闪一下就灭了,我想按一下持续闪烁,再按一下就熄灭
展开
 我来答
l恶魔不会哭
2017-02-16 · TA获得超过245个赞
知道答主
回答量:99
采纳率:0%
帮助的人:23.3万
展开全部

你的led1=~led1;这个语句没有循环,所以只会反转一次。要么加循环,要么再写一个闪烁函数。

void led_filcker(usigned char x)

{

while(x)

{

led1=~led1;

x--:

}

}

如果你是想,按一下,松开也会闪烁,再按一下熄灭。你得定义一个变量来表示按键的按下。

#include<reg52.h>

#define uchar unsigned char

bit stop=1;

sbit k5=P1^4;

void delay(uchar xms)

{

while(xms--);

}

void main()

{

if(k5==0)

{

delay(1000);

if(k5==0)

{

while(k5==0)

{

if(stop)

<<<<<<<<<<<<<<<此处执行你的语句

else

stop=~stop:

}

}

}
}


推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式