找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2677|回复: 9
收起左侧

新手求指教,欢迎批评指正

[复制链接]
ID:54183 发表于 2013-9-10 00:43 | 显示全部楼层 |阅读模式
程序如下,请问数码管为什么一直显示0而没有其他变化?
#include <reg52.h>
#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++;
}

回复

使用道具 举报

ID:7485 发表于 2013-9-10 08:56 | 显示全部楼层
不可以“num=num++”,应该是:num++;    如下:
        while(1)
        {
                if(tt==20)
                        {
                                tt=0;
                                num++;
                                dula=1;
                                P1=table[num];
                                dula=0;
                        }
         }
回复

使用道具 举报

ID:54183 发表于 2013-9-10 13:47 | 显示全部楼层
ahshmj 发表于 2013-9-10 08:56
不可以“num=num++”,应该是:num++;    如下:
        while(1)
    &# ...

可以执行了,谢谢了哈
回复

使用道具 举报

ID:7485 发表于 2013-9-10 16:19 | 显示全部楼层
要仔细体会一下:num++ 和++num ,num=num++和num=++num,前面一个是把num赋值给num后自身再+1,后一个是+1后赋值给num。
所以
如果你是用这样的方式也可以正常:num=++num;
回复

使用道具 举报

ID:54183 发表于 2013-9-10 18:16 | 显示全部楼层
ahshmj 发表于 2013-9-10 16:19
要仔细体会一下:num++ 和++num ,num=num++和num=++num,前面一个是把num赋值给num后自身再+1,后一个是+1 ...

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

使用道具 举报

ID:54183 发表于 2013-9-10 18:17 | 显示全部楼层
ahshmj 发表于 2013-9-10 16:19
要仔细体会一下:num++ 和++num ,num=num++和num=++num,前面一个是把num赋值给num后自身再+1,后一个是+1 ...

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

使用道具 举报

ID:7485 发表于 2013-9-10 19:50 | 显示全部楼层
我感觉到你对 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的目的了。
回复

使用道具 举报

ID:54183 发表于 2013-9-11 00:08 | 显示全部楼层
ahshmj 发表于 2013-9-10 19:50
我感觉到你对 num++ 没有真正的理解,所以上一个帖子又讲了不少,看来你还是没有理解。

为了解释这一语 ...

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

使用道具 举报

ID:7485 发表于 2013-9-12 07:05 | 显示全部楼层
是的,就是把num+1之前的值赋给新的num,num++后的值被丢弃了。没有用上。
回复

使用道具 举报

ID:54183 发表于 2013-9-12 12:00 | 显示全部楼层
ahshmj 发表于 2013-9-12 07:05
是的,就是把num+1之前的值赋给新的num,num++后的值被丢弃了。没有用上。

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表