新闻  |   论坛  |   博客  |   在线研讨会
单片机控制数码管显示累减99,不能显示00
502593045 | 2011-02-05 17:15:39    阅读:2293   发布文章
在做数码管显示99到00的过程中,出现了问题。
例1是不能显示00;
例2是对例1的修正,但例2是99捡到00并且都能显示,之后就会出现8.9-8.0之间的循环显示。
例3是对例2的修正即num> -1,结果正确。

例4的错误是在第一次减到00后开始从98减到0的循环 。
为了解决例4的问题,修改得到例5、6、7的结果都是正确的。

注意num的取值范围。本实验设置uint num(或uchar num),所以例3,例7虽然结果正确,但是不符合语法。

只有例5、6是正确的了。比较得到,例6最好。

欢迎留言点评或探讨。

例1:
  for(num=99;num>0;num--)
  {
   for(i=0;i<100;i++)
   {
    Data[0]=duanma[num/10];
    Data[1]=duanma[num%10];
    smg_display(2,2);
   }
  }

例2:
  for(num=99;num>=0;num--)
  {
   for(i=0;i<100;i++)
   {
    Data[0]=duanma[num/10];
    Data[1]=duanma[num%10];
    smg_display(2,2);
   }
  }

例3:
  for(num=99;num>-1;num--)         //num> -1
  {
   for(i=0;i<50;i++)
   {
    Data[0]=duanma[num/10];
    Data[1]=duanma[num%10];
    smg_display(2,2);
   }
  }

例4:
  for(i=0;i<100;i++)
   {
    Data[0]=duanma[num/10];
    Data[1]=duanma[num%10];
    smg_display(2,2);
   }
  if(num==0)
    num=99;
  num--;                       //必须放在if(num==0)num=99;之后,否则不显示00


例5:
  for(i=0;i<100;i++)
   {
    Data[0]=duanma[num/10];
    Data[1]=duanma[num%10];
    smg_display(2,2);
   }
  if(num==0)
   {
    num=99;
    for(i=0;i<100;i++)
     {
     Data[0]=duanma[num/10];
     Data[1]=duanma[num%10];
     smg_display(2,2);
    }
   }
  num--;

例6:
    for(i=0;i<100;i++)
    {
      Data[0]=duanma[num/10];
      Data[1]=duanma[num%10];
      smg_display(2,2);
   }
    if(num>0)         //等同于  if(num==0)
        num--;          //                    num=999;
    else                 //              else
        num=99;     //                     num--;

例7:
   for(i=0;i<100;i++)
   {
    Data[0]=duanma[num/10];
    Data[1]=duanma[num%10];
    smg_display(2,2);
   }
   num--;
   if(num==-1)
   num=99;
参与讨论
登录后参与讨论
des998  2011-02-09 09:33:04 

太棒了 前辈 值得小弟学习 http://www. des998.com

qwqwqw2008  2011-02-05 20:54:35 

你太厉害了,,我必须向你学习

虾虽在江湖,江湖却没有关于虾的传说!
推荐文章
最近访客