51单片机动态闪烁问题
时间:10-02
整理:3721RD
点击:
学习版上用的是锁存器,主函数如下
第一个数码管闪烁很厉害,我把按键延迟调低很好些,但是这样按键一按就是好几个数,按键延时调高,按键上是好了很多但是第一个数码管可以非常慢的速度闪烁。感觉就是从上到下的执行时间太长了。主程序里我还加了储存,无视好了
void main()
{
while(1)
{
unsigned char buf[2];
E2Read(buf, 0x80, 2);
ge = buf[0];
shi = buf[1];
if ( ge>9 )
{ ge=0; }
if ( shi>9 )
{ shi=0; }
wei=1;
P0=0xfe;
wei=0;
duan=1;
P0=LedChar[shi];
Delay(10);
duan=0;
wei=1;
P0=0xfd;
wei=0;
duan=1;
P0=LedChar[ge];
Delay(10);
duan=0;
if(k1==1)
{
Delay(15);
if(k1==1)
{
ge++;
if(ge>9)
{
ge=0;
shi++;
if(shi>9)
{
shi=0;
}
}
}
buf[0] = ge;
buf[1] = shi;
E2Write(buf, 0x80, 2);
}
if(k2==1)
{
Delay(15);
if(k2==1)
{
ge--;
if(ge<0)
{
ge=9;
shi--;
if(shi<0)
{
shi=9;
}
}
}
buf[0] = ge;
buf[1] = shi;
E2Write(buf, 0x80, 2);
}
}
}
第一个数码管闪烁很厉害,我把按键延迟调低很好些,但是这样按键一按就是好几个数,按键延时调高,按键上是好了很多但是第一个数码管可以非常慢的速度闪烁。感觉就是从上到下的执行时间太长了。主程序里我还加了储存,无视好了
void main()
{
while(1)
{
unsigned char buf[2];
E2Read(buf, 0x80, 2);
ge = buf[0];
shi = buf[1];
if ( ge>9 )
{ ge=0; }
if ( shi>9 )
{ shi=0; }
wei=1;
P0=0xfe;
wei=0;
duan=1;
P0=LedChar[shi];
Delay(10);
duan=0;
wei=1;
P0=0xfd;
wei=0;
duan=1;
P0=LedChar[ge];
Delay(10);
duan=0;
if(k1==1)
{
Delay(15);
if(k1==1)
{
ge++;
if(ge>9)
{
ge=0;
shi++;
if(shi>9)
{
shi=0;
}
}
}
buf[0] = ge;
buf[1] = shi;
E2Write(buf, 0x80, 2);
}
if(k2==1)
{
Delay(15);
if(k2==1)
{
ge--;
if(ge<0)
{
ge=9;
shi--;
if(shi<0)
{
shi=9;
}
}
}
buf[0] = ge;
buf[1] = shi;
E2Write(buf, 0x80, 2);
}
}
}
这审核要多久呀
= =审核中还能回复
还加积分什么鬼,重点是有没有人答呀
你加一个松手检测就好了应该
具体程序我找给你一个例子
while((i<50) && (key!=0xf0)) //检测按键松手检测
{
delay(1);
i++;
}
这是加在按键程序的后面,延时大约10ms就好了,你可以试一下
记录上次的键值,然后有变化才进入按键的程序,没变化就往下执行,这样就不会出现你说的闪烁的情况了。
按键显示都用延时程序就会出现不松手检测就会连续执行,有松手检测就会卡在那里不动,所以记录上次键值是最好的。