用51单片机实现数字钟,可以调时分秒,用6个led显示,在线等。

如题所述

#include <reg52.h>
#define N 4 //亮度调节
sbit H=P3^2; // 调时
sbit M=P3^3; // 调分
sbit S=P3^4; //秒清零
unsigned char data i,sl,sh,ml,mh,hl,hh;
unsigned char code num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void Delay(unsigned char ii)
{
unsigned int jj;
for(;ii>0;ii--)
for(jj=0;jj<2;jj++);
}
void secend (void) interrupt 1 //计时定时器
{
TL0=0xb0;
TH0=0x3c;
i=i++;
if(i==20) {i=0;sl++;} //i==20 为一秒
}

void display(void) interrupt 3 //动态扫描
{
TH1=0xaa;
TL1=0xf0;

P2=0x7f;
P0=num[sl];Delay(N);
P0=0xff ;
P2=0xbf;
P0=num[sh];Delay(N);
P0=0xff;
P2=0xdf;
P0=0xbf;Delay(N);
P0=0xff;
P2=0xef;
P0=num[ml];Delay(N);
P0=0xff;
P2=0xf7;
P0=num[mh];Delay(N);
P0=0xff;
P2=0xfb;
P0=0xbf;Delay(N);
P0=0xff;
P2=0xfd;
P0=num[hl];Delay(N);
P0=0xff;
P2=0xfe;
P0=num[hh];Delay(N);
P0=0xff;
}

void main()
{
EA=1; //中断总开关
ET0=1;
ET1=1;
TR0=1;
TR1=1;
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;

TH1=0xaa;
TL1=0xf0;

while(1)
{
unsigned int i; i++;
if(sl==10){sl=0;sh++;}
else if(sh==6) {sl=sh=0;ml++;}
else if(ml==10){ml=0;mh++;}
else if(mh==6){ml=mh=0;hl++;}
else if(hl==10){hl=0;hh++;}
else if(hh==2&&hl==4){sl=sh=ml=mh=hl=hh=0;}

if(H==0){if(!(i%1500))hl++;}
else if(M==0){if(!(i%1500))ml++;}
else if(S==0){TH0=0x3c;TL0=0xb0;i=sl=sh=0;}
}
}
自已写的。原创
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-17
到我的百度空间里,里面有示例程序和仿真图,你可以参考一下。追问

为什么按照你的图画的,程序导进去了,课led没显示呢

追答

呵呵,留个联系方式,我给你发文件。肯定没有问题。我仿真通过的。

追问

[email protected] 3q啦

追答

查收。我去睡了。

本回答被提问者采纳