为什么我写的电子时钟程序烧进去后就只是很快的乱码显示一下就不显示了呢

2019-03-24 17:43发布



本人菜鸟一只,前一段时间突然想起用6位数码管做一个显示秒、分、钟的一个简单的电子时钟,结果弄了很久也没弄出来。现在是程序烧进去后就只是很快的乱码显示一下就不显示了。查了很久也没查出原因。
麻烦各位大侠帮我看看我的是程序哪里出了问题:

#include<reg52.h>
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;

uchar miao, feng, zhong, i ,zg,zs,fg,fs,mg,ms;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};

void delay(uchar j,uchar k)
{
for(j=100;j>0;j--)
        for(k=125;k>0;k--);
}
        
void display(uchar zg,uchar zs,uchar fg,uchar fs,uchar mg,uchar ms)         

        {
   duan=1;
         P0=table[zg];   //钟个位显示
         duan=0;
         
         wei=1;
         P0=0xfd;       //第一个数码管亮
         wei=0;
         delay();
               
         duan=1;
         P0=table[zs];  //钟十位显示
         duan=0;
         
         wei=1;
         P0=0xfe;   //第二个数码管亮
         wei=0;
         delay();
        
        //
         duan=1;
         P0=table[fg];   //分个位显示
         duan=0;
         
         wei=1;
         P0=0xf7;      //第三个数码管亮
         wei=0;
         delay();
               
         duan=1;
         P0=table[fs];  //分十位显示
         duan=0;
         
         wei=1;
         P0=0xfb;      //第四个数码管亮
         wei=0;
         delay();
               
        
        //
         duan=1;
         P0=table[mg];   //秒个位显示
         duan=0;
         
         wei=1;
         P0=0xdf;     //第五个数码管亮
         wei=0;
         delay();


         duan=1;
         P0=table[ms];  //秒十位显示
         duan=0;
         
         wei=1;
         P0=0xef;   //第六个数码管亮
         wei=0;
         delay();
}

        void zhongduan()interrupt 1
{
  TH0=(65536-46080)/256;
        TL0=(65536-46080)%256;
        i++;
        if(i==20)
{miao++;
        i=0;
        }
}


void mian()

{
  miao=6;
        feng=7;
        zhong=12;

        TMOD=0x01;
        TH0=(65536-46080)/256;//设50毫秒一次
        TL0=(65536-46080)%256;
        
        EA=1;
        ET0=1;
        TR0=1;
               
                while(1)
        {        
        if(miao==60)   //秒逢60进1
        {miao=0;        feng++;
        if(feng==60)
                {feng=0; zhong++;
        if(zhong==24)
        {zhong=0;}
}
                }
        
        mg=miao%10;   //秒个位
        ms=miao/10;   //秒十位
        fg=feng%10;   //分个位
        fs=feng/10;   //分十位
        zg=zhong%10;  //钟个位
        zs=zhong/10;  //钟十位
        display(zg,zs,fg,fs,mg,ms);
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
16816
1楼-- · 2019-03-25 20:40
未来就在脚下 发表于 2016-4-2 17:05
哦   对了   你的电路有那个锁存器吗  如果有的话需要加消影  没有的话就不用加了

你是说74HC573吗?有两个啊,一个控制段选,一个控制位选。还有你说消影的话在每一个数码管后面都加了一个延时的。上面说的我那延时函数有问题,后来我看,确实,不过改了之后也还是一样乱码显示一会后就定在一个数码管上全亮了(包括那个点)
16816
2楼-- · 2019-03-25 23:05
未来就在脚下 发表于 2016-4-2 17:05
哦   对了   你的电路有那个锁存器吗  如果有的话需要加消影  没有的话就不用加了

对了,我说的乱码是数码管上的数字显示清晰,但却像流水灯一样,没规律的亮过一遍就停在一个数码管上了。也不像时钟那样隔秒进1,而是那个数码管全亮,包括那个点
未来就在脚下
3楼-- · 2019-03-26 04:50
 精彩回答 2  元偷偷看……
lxa000
4楼-- · 2019-03-26 09:48
hc573的驱动能力有限
楼主的是不是电流太大了?
16816
5楼-- · 2019-03-26 14:52
未来就在脚下 发表于 2016-4-2 18:45
你需要再看一下那个锁存器的特性  比如说   你给锁存器输入端第一位高电平  相应的  输出端也输出一个高 ...

"miao=6;        feng=7;        zhong=12;    还有这段你想让他干神马   赋给它一个定值以后就不变了"
难怪我之前去掉那三句就有数值流动了,懂了。while放在main函数后面我也试过,但不行。你说的其它的我再试试
16816
6楼-- · 2019-03-26 20:47
 精彩回答 2  元偷偷看……

一周热门 更多>