9
收藏
微博
微信
复制链接

一段新手写的程序,请问数码管为什么一直显示0而没有其他变化?

提问于
2022-08-05 09:04

程序如下,请问数码管为什么一直显示0而没有其他变化?
#include
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^0;
sbit wela=P2^1;
uchar tt,num;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x84,0x8e};
void main()
{
        tt=0;
        num=0;
        TMOD=0X01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        wela=1;
        P1=0x55;
        wela=0;
        dula=1;
        P1=0xc0;
        dula=0;
        while(1)
        {
                if(tt==20)
                        {
                                tt=0;
                                num=num++;
                                dula=1;
                                P1=table[num];
                                dula=0;
                        }
         }
}
void time0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        tt++;
}

收藏 1139 0 9
粉丝
0
关注
0
主题
5
不可以“num=num++”,应该是:num++;    如下:
        while(1)
        {
                if(tt==20)
                        {
                                tt=0;
                                num++;
                                dula=1;
                                P1=table[num];
                                dula=0;
                        }
         }
0

回答于 · 2022-08-05 16:54

粉丝
0
关注
0
主题
7

可以执行了,谢谢了哈
0

回答于 · 2022-08-07 06:12

粉丝
0
关注
0
主题
7
要仔细体会一下:num++ 和++num ,num=num++和num=++num,前面一个是把num赋值给num后自身再+1,后一个是+1后赋值给num。
所以
如果你是用这样的方式也可以正常:num=++num;
0

回答于 · 2022-08-08 02:47

粉丝
1
关注
0
主题
3

还有一个问题弄不懂想请问一下,因为我在程序中开始是令num=0,然后程序让数码管显示0,同时程序num=num++;不是相当于让数码管再显示一次0,然后再循环显示0~f;(虽然我的本意不是如此),但是数码管为什么一直显示0,而不会接着显示其他的数。
0

回答于 · 2022-08-08 08:51

粉丝
0
关注
0
主题
4

还有一个问题弄不懂想请问一下,因为我在程序中开始是令num=0,然后程序让数码管显示0,同时程序num=num++;不是相当于让数码管再显示一次0,然后再循环显示0~f;(虽然我的本意不是如此),但是数码管为什么一直显示0,而不会接着显示其他的数。
0

回答于 · 2022-08-09 22:49

粉丝
0
关注
0
主题
4
我感觉到你对 num++ 没有真正的理解,所以上一个帖子又讲了不少,看来你还是没有理解。

为了解释这一语句方便,我们改成:num2=num++,因为第一次之前num=0 ,执行num2=num++ 时,是把 num 的值赋给 num2,然后num自身再加1。这样执行这一句后是,num2=0,num=1 。

回过头来再看看:num=num++ ,之前num=0,在加1之前,把这个0值赋给了等号左面的“num”,所以无论循环多少次,每次执行这一句后都是num =0,而 右面的num++ 后,就没有了用场。

如果你改成 num=++num,等号右面的num先加1,加1后的值赋给等号左面的num,这样每次循环,num的值就会+1,也可以达到你的目的——不过 num++ 就可以达到  num=++num的目的了。
0

回答于 · 2022-08-10 00:27

粉丝
0
关注
0
主题
5

是不是可以理解为赋值之后左边的num等同于例子中的num2,而右边的num等同于num,等到下一个1秒钟到来时,这时执行赋值操作的num2,跟前一秒自加1的num无关了?
0

回答于 · 2022-08-11 02:16

粉丝
0
关注
0
主题
9
是的,就是把num+1之前的值赋给新的num,num++后的值被丢弃了。没有用上。
0

回答于 · 2022-08-11 10:17

粉丝
0
关注
0
主题
7

虽然感觉有点怪,但是貌似明白了,非常感谢!
0

回答于 · 2022-08-11 20:18