按键控制数码管,为什么我的数码管减1之前老是要加1然后再减1(原本减1的键)
- #include<at89x52.h>
- #define uchar unsigned char
- sbit k1=P3^0;
- sbit k2=P3^2;
- uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- void delay1ms(uchar a)
- {
- uchar b,c;
- for(c=1;c>0;c--)
- for(b=142;b>0;b--)
- for(a=2;a>0;a--);
- }
- void main()
- {
- uchar i;
- while(1)
- {
- if(!k1)
- {
- delay1ms(10);
- if(!k1)
- {
- P2=tab[i++];
-
- }
- while(!k1);
- }
- if(!k2)
- {
- delay1ms(10);
- if(!k2)
- {
- P2=tab[i--];
- }
- while(!k2);
- }
- }
- }
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就可以了
谢谢,你说的对,现在问题已经解决了。
谢谢分享!