急求一个AT89s51单片机做的数字时钟,电路和程序

要求用六个数码管显示年月日 有三个按钮可以设置时间 我分不多啊不是我不给啊是没有啊求好心大神帮助 其实我根本没学过单片机,选课的时候没告诉我们课题

我做过,代码仿真我都有,还有实验报告。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-02
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code duan[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40
};
uchar code wei[]={
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f
};

uchar daima[8];
uchar cnt,s,m,h,t;
bit f_a;
uchar j,v;
uchar song;
void delay(uchar x)
{
uchar y,z;
for(y=x;y>0;y--)
for(z=121;z>0;z--);
}

void init()
{
TMOD=0x01;
TH0=-50000/256;
TL0=-50000%256;
TR0=1;
ET0=EA=1;
}

void xianshi()
{
uchar i;

for(i=0;i<8;i++)
{

if(((i==j)&&(f_a))|((i==(j+1))&&(f_a)))
{
P0=duan[daima[i]];
P1=wei[i];
delay(10);
P1=0xff;
}
if((i!=j)&&(i!=(j+1)))
{
P0=duan[daima[i]];
P1=wei[i];
delay(10);
P1=0xff;
}

}
}

void key()
{

P2=0xff;
if((P2!=0xff)&&(song==0))
{
delay(10);
if((P2==0xfe)&&(song==0))
{
song=1;
j=j+3;
if(j>=10)j=0;

}
if((P2==0xfd)&&(song==0))
{ song=1;
t++;
if(j==0)
{
h=t;
//if(h==24)h=0;
}
if(j==3)
{
m=t;
//if(m==60)m=0;
}
if(j==6)
{
s=t;
//if(s==60)s=0;
}
}
}

else if(P2==0xff)song=0;
}

void main()
{
delay(200);
j=9;
init();
while(1)
{
key();
xianshi();
}
}

void tt0() interrupt 1
{
TH0=-50000/256;
TL0=-50000%256;
cnt++;
if((cnt%10)==0)f_a=!f_a;
if(cnt==20)cnt=0,s++;
if(s==60)s=0,m++;
if(m==60)m=0,h++;
if(h==24)h=0;
daima[0]=h/10;
daima[1]=h%10;
daima[2]=10;
daima[3]=m/10;
daima[4]=m%10;
daima[5]=10;
daima[6]=s/10;
daima[7]=s%10;
}
相似回答