微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 按键控制数码管,为什么我的数码管减1之前老是要加1然后再减1(原本减1的键)

按键控制数码管,为什么我的数码管减1之前老是要加1然后再减1(原本减1的键)

时间:10-02 整理:3721RD 点击:


复制代码

  1. #include<at89x52.h>
  2. #define uchar unsigned char
  3. sbit k1=P3^0;
  4. sbit k2=P3^2;
  5. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

  6. void delay1ms(uchar a)  
  7. {
  8.      uchar b,c;
  9.     for(c=1;c>0;c--)
  10.         for(b=142;b>0;b--)
  11.             for(a=2;a>0;a--);
  12. }

  13. void main()
  14. {
  15.   uchar i;
  16. while(1)
  17. {
  18.   if(!k1)
  19.   {
  20.    delay1ms(10);
  21.    if(!k1)
  22.    {
  23.        P2=tab[i++];
  24.       
  25.    }
  26.      while(!k1);
  27.    }

  28.   if(!k2)
  29.   {
  30.     delay1ms(10);
  31.     if(!k2)
  32.     {
  33.         P2=tab[i--];
  34.     }
  35.       while(!k2);
  36.   }
  37. }
  38. }

复制代码


k1为加1键,k2为减1键


局部变量 i 要赋初始值。最好在程序中设置约束条件
        if(!k1)
        {
                i++;
                if(i>9)
                i=0;
                P2=tab[i];
        }
     while(!k1);
   }

  if(!k2)
  {
    delay1ms(10);
        if(!k2)
        {
                i--;
                if(i>9)
                i=0;
                P2=tab[i];
        }
      while(!k2);
  }

这个是i++操作的问题,你的程序不止是减1之前先加1,在减转向加的时候也会加1之前先减1。
网上找的
i++式子值为i原来的值,就是通俗说的“先赋值再加1”;
而++i式子值为i变化后的值,也就是“先加1后赋值”;
所以你的程序的情况应该是假定在显示3的时候,在加的情况,i实际是4,所以这时候做减1,会显示4,然后才是做i减1,使i=3。同样条件,在做减时,显示是3,i实际是2,所以转做加1,会显示2,然后才做加1,使i=3。
这是i++和++i等简化编写时,在当参数使用时取值与计算顺序的问题。

有点看不懂什么意思,是不是把i++改成++i

你这个按减1键的时候,第一下没反应,按第二下才反应,而且会直接减2,上面加的键也是这样

是的,把i++改成++i就可以了

谢谢,你说的对,现在问题已经解决了。

谢谢分享!

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

网站地图

Top