微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机动态闪烁问题

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);
                                                        }
           }
}

这审核要多久呀

= =审核中还能回复

还加积分什么鬼,重点是有没有人答呀

你加一个松手检测就好了应该   

具体程序我找给你一个例子
                        while((i<50) && (key!=0xf0))         //检测按键松手检测
                        {
                                delay(1);
                                i++;
                        }
这是加在按键程序的后面,延时大约10ms就好了,你可以试一下

记录上次的键值,然后有变化才进入按键的程序,没变化就往下执行,这样就不会出现你说的闪烁的情况了。
按键显示都用延时程序就会出现不松手检测就会连续执行,有松手检测就会卡在那里不动,所以记录上次键值是最好的。

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

网站地图

Top