本人菜鸟一只,前一段时间突然想起用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);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
"miao=6; feng=7; zhong=12; 还有这段你想让他干神马 赋给它一个定值以后就不变了"
难怪我之前去掉那三句就有数值流动了,懂了。while放在main函数后面我也试过,但不行。你说的其它的我再试试
一周热门 更多>