#include <reg52.h>
sbit k1=P3^1;
sbit led=P2^0;
void delay(unsigned int a)
{
while(a--);
}
void main()
{
while(1)
{
led=1;
if(k1==0)
{
delay(1000);
if(k1==0)
{
while(1)
{
led=~led;
delay(50000);
delay(50000);
led=~led;
delay(50000);
delay(50000);
if(k1==0)
{
delay(1000);
if(k1==0)
{
break;
}
}
}
led=0;
if(k1==0)
{
delay(1000);
if(k1==0)
{
continue;
}
}
}
}
}
}
想用独立按键实现呼吸灯的暂停和开始,就是按下第一次开始,按下第二次暂停,再按开始,但按下一次后只有闪烁,再按也实现不了暂停,求问是代码哪里不对,大一刚接触单片机,只有C语言基础,虚心求问!
#include <reg52.h>
sbit k1=P3^1;
sbit led=P2^0;
void delay(unsigned int a)
{
while(a--);
}
void hx_led(void)
{
led = ~led;
delay(50000);
delay(50000);
led = ~led;
delay(50000);
delay(50000);
}
void main()
{
//按键抬起时生效
int st = 0; //运行状态 0 stop//1 start
int kd = 0; //按键按下状态
while(1)
{
if(st != 0)
{
hx_led();
}
if(k1 == 0)
{
kd = 1;
while( k1 == 0 )
{
if(st != 0) hx_led();
}
}
if( k1 == 1 && kd == 1)
{
kd = 0;
st = ~st;
}
}
}
//程序没调试过,也没经过编译,可能会有错误,自己修改调试吧
你这思想有问题,个人觉得按键作为一个独立事件,闪灯作为一个独立事件,然后两者逻辑主函数联系起来。