用51单片机写了一个流水灯程序,有一点问题,请高手解惑
按键开的时候正常.但是关闭的时候有点问题,一定要等灯亮到起始位置时候按下按键才可以关闭.#include<reg52.h>#include<intrins.h>typed...
按键开的时候正常.但是关闭的时候有点问题,一定要等灯亮到起始位置时候按下按键才可以关闭.
#include<reg52.h>
#include<intrins.h>
typedef unsigned int u8;
sbit key = P3^1;
#define l1 P2
void delay(u8 i)
{
while(i--);
}
void keyer()
{
while(key)
{
delay(1000);
l1=0xff;
}
while(!key)
{
delay(1000);
l1=0xfe;
}
while(key)
{
u8 i=0;
l1=0xfe;
for(i=0;i<7;i++)
{
l1=_crol_(l1,1);
delay(20000);
}
for(i=0;i<7;i++)
{
l1=_cror_(l1,1);
delay(20000);
}
}
while(!key)
{
l1=0xff;
}
}
void main()
{
while(1)
{
keyer();
}
} 展开
#include<reg52.h>
#include<intrins.h>
typedef unsigned int u8;
sbit key = P3^1;
#define l1 P2
void delay(u8 i)
{
while(i--);
}
void keyer()
{
while(key)
{
delay(1000);
l1=0xff;
}
while(!key)
{
delay(1000);
l1=0xfe;
}
while(key)
{
u8 i=0;
l1=0xfe;
for(i=0;i<7;i++)
{
l1=_crol_(l1,1);
delay(20000);
}
for(i=0;i<7;i++)
{
l1=_cror_(l1,1);
delay(20000);
}
}
while(!key)
{
l1=0xff;
}
}
void main()
{
while(1)
{
keyer();
}
} 展开
3个回答
展开全部
因为你的开关控制和你的亮灯循环耦合了啊。
while(key)
{
u8 i=0;
l1=0xfe;
for(i=0;i<7;i++)
{
l1=_crol_(l1,1);
delay(20000);
}
for(i=0;i<7;i++)
{
l1=_cror_(l1,1);
delay(20000);
}
你这段代码 按键除非一直松开,如果for循环不结束除非你有按键中断要等它流水灯跑完..
例如添加个int light_sign = 0; switch(key) 每次扫到了light_sign就 ++
当 key = 0 || light_sign 越过你闪烁灯范围(这里是7)就清零
然后你的灯根据获得的light_sign 进行当前变化而非for循环就行了.
while(key)
{
u8 i=0;
l1=0xfe;
for(i=0;i<7;i++)
{
l1=_crol_(l1,1);
delay(20000);
}
for(i=0;i<7;i++)
{
l1=_cror_(l1,1);
delay(20000);
}
你这段代码 按键除非一直松开,如果for循环不结束除非你有按键中断要等它流水灯跑完..
例如添加个int light_sign = 0; switch(key) 每次扫到了light_sign就 ++
当 key = 0 || light_sign 越过你闪烁灯范围(这里是7)就清零
然后你的灯根据获得的light_sign 进行当前变化而非for循环就行了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<reg52.h>
#include <intrins.h>
#define LED P2
void delay(char i);
void main()
{ unsigned char LedVablue=0xFE;
while(1)
{
LedVablue= _crol_(LedVablue,1); //_crol_(x,Y)是<intrins.h>
//里面的一个库函数,相当于汇编的带进位循环
LED=LedVablue;
delay(100);
}
}
void delay(char i)
{
char j;
for(;i>0;i--)
for(j=0;j<250;j++);
}
#include <intrins.h>
#define LED P2
void delay(char i);
void main()
{ unsigned char LedVablue=0xFE;
while(1)
{
LedVablue= _crol_(LedVablue,1); //_crol_(x,Y)是<intrins.h>
//里面的一个库函数,相当于汇编的带进位循环
LED=LedVablue;
delay(100);
}
}
void delay(char i)
{
char j;
for(;i>0;i--)
for(j=0;j<250;j++);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询