程序如下,请问数码管为什么一直显示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++;
}
一段新手写的程序,请问数码管为什么一直显示0而没有其他变化?
while(1)
{
if(tt==20)
{
tt=0;
num++;
dula=1;
P1=table[num];
dula=0;
}
}
回答于 · 2022-08-05 16:54
所以
如果你是用这样的方式也可以正常:num=++num;
回答于 · 2022-08-08 02:47
还有一个问题弄不懂想请问一下,因为我在程序中开始是令num=0,然后程序让数码管显示0,同时程序num=num++;不是相当于让数码管再显示一次0,然后再循环显示0~f;(虽然我的本意不是如此),但是数码管为什么一直显示0,而不会接着显示其他的数。
回答于 · 2022-08-08 08:51
还有一个问题弄不懂想请问一下,因为我在程序中开始是令num=0,然后程序让数码管显示0,同时程序num=num++;不是相当于让数码管再显示一次0,然后再循环显示0~f;(虽然我的本意不是如此),但是数码管为什么一直显示0,而不会接着显示其他的数。
回答于 · 2022-08-09 22:49
为了解释这一语句方便,我们改成: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的目的了。
回答于 · 2022-08-10 00:27
是不是可以理解为赋值之后左边的num等同于例子中的num2,而右边的num等同于num,等到下一个1秒钟到来时,这时执行赋值操作的num2,跟前一秒自加1的num无关了?
回答于 · 2022-08-11 02:16