5
收藏
微博
微信
复制链接

程序有点不明白,请问的是为什么在主程序中的num1=-1,而不是=0;而且num1++,++num1两者效果是一样的

提问于
2022-08-10 17:19

用定时器以间隔500MS6位数码管上依次显示0123….CDEF,重复。(我想请问的是为什么在主程序中的num1=-1,而不是=0;而且num1++,++num1两者效果是一样的)
#include
#define uchar unsigned char
sbit dula=P2^0;
sbit wela=P2^1;
uchar num,num1;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x84,0x8e};
void main()
{
        num1=0;
        wela=1;
        P1=0xed;
        wela=0;
        dula=1;
        P1=0xc0;
        dula=0;
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        while(1)
        {
          if(num==10)
          {
                  num=0;
                ++num1;
                dula=1;
                P1=table[num1];
                dula=0;
                if(num1==15)
                        num1=-1;

          }
        }
}
void time0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        num++;
}

收藏 967 0 5
粉丝
0
关注
0
主题
5

但是num1++和++num1不是有差别的吗,一个是先加加,再赋值给P1,一个是先赋值,再加加,怎么会是一样的?抱歉,因为我是刚学单片机,可能问的问题有点。。。
0

回答于 · 2022-08-11 09:04

粉丝
0
关注
0
主题
4
在一个语句里面有有向其他变量赋值或计算时这样的复合语句,有先加后加的问题,但是你这个语句里面,仅仅有num1加1的操作,所以这一句执行完以后,不管是先加后加,都是num加1就没有什么区别了。

你再仔细体会一下
P 1 = t a b l e [ n u m 1 + + ] ;

P 1 = t a b l e [ ++n u m 1 ] ;


不过一般的情况下,num++和++num用在复合语句上的较多,这种情况下区别就明显了。
0

回答于 · 2022-08-12 02:36

粉丝
0
关注
0
主题
2

也就是说在 ++num1和num1++与其他语句的嵌套中,分开嵌套时两者是没区别的,主要区别在于其与其他语句的结合嵌套,请问是否是这样的?
0

回答于 · 2022-08-12 09:13

粉丝
0
关注
0
主题
2
你理解的基本是对的。
你说是“嵌套”也可以,一般来说称为“复合语句”。
0

回答于 · 2022-08-12 23:45

粉丝
0
关注
0
主题
3

万分感谢
0

回答于 · 2022-08-13 07:33