求大侠指点,看看我那程序的毛病,数码管只显示0;

2020-02-04 09:37发布

#include<reg52.h>
                   #define uint unsigned int
                   #define uchar unsigned char
                   sbit dul=P2^6;
                   sbit wel=P2^7;
                   uchar code table[]={0x3f,0x06,0x5b,0x4f,
                                     0x66,0x6d,0x7d,0x07,
                                0x7f,0x6f,0x77,0x7c,
                                0x39,0x5e,0x79,0x71};
                void delay(uchar ms);
                void display(uchar shi,uchar ge);
                uchar num,shi,ge;
                void main()
                {
                        TMOD=0x01;
                        TH0=(65535-50000)/256;
                        TL0=(65535-50000)%256;
                        EA=1;
                        ET0=1;
                        TR0=0;
                        while(1)
                        {
                                        P1=0xff;
                                delay(1000);
                                P1=0x00;
                                delay(1000);
                                  shi=num/10;
                                ge=num%10;
                                dul=1;
                                P0=table[shi];
                                dul=0;
                                P0=0xff;
                                wel=1;
                                P0=0xfd;
                                wel=0;
                                delay(100);
                                dul=1;
                                P0=table[ge];
                                dul=0;
                                P0=0xff;
                                wel=1;
                                P0=0xfe;
                                wel=0;
                                delay(100);
                        }
                               
                }
                void delay(uchar ms)
                {
                        uchar i,j;
                        for (i=ms;i>0;i--)
                                for (j=110;j>0;j--);
                }
                        void time1() interrupt 1
                {
                        TH1=(65535-50000)/256;
                        TL1=(65535-50000)%256;
                              num++;
                                if(num==99)        num=0;               
                }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
outlaw
1楼-- · 2020-02-04 09:41
TR0=0,这句,应该定时器没有启动,
delay(1000),超出uchar的长度了。
wctmdgcd
2楼-- · 2020-02-04 11:39
问题1:在main函数中,TR0=1才对的。
问题2:在main调用 delay(1000)中的实参不能大于255
问题3:定时器0的中断服务函数装初值的语句写错了。
lcw_swust
3楼-- · 2020-02-04 12:04
究竟用Timer0还是Timer1?
wozhoujue
4楼-- · 2020-02-04 13:15
回复【4楼】lcw_swust 小李飞刀
-----------------------------------------------------------------------

回复【3楼】wctmdgcd
-----------------------------------------------------------------------

首先非常感谢啊  将TR0=0是不是使得  定时器无法启动  从而无法进入中断 是吧;再则关于实参范围的限制是应为类型是 unsigned char吧  改为unsigned int 就ok了?  还有我本想在主函数里  调用显示值函数的发现不行 不知道是什么原因   还有在按前辈修改的程序后 发现各位显示很不稳定 是延时的问题吗?回复【3楼】wctmdgcd
-----------------------------------------------------------------------

一周热门 更多>