本人菜鸟一只,前一段时间突然想起用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);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你是说74HC573吗?有两个啊,一个控制段选,一个控制位选。还有你说消影的话在每一个数码管后面都加了一个延时的。上面说的我那延时函数有问题,后来我看,确实,不过改了之后也还是一样乱码显示一会后就定在一个数码管上全亮了(包括那个点)
一周热门 更多>