#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit key5=P3^4;
sbit key6=P3^5;
uchar code seg[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
uchar code table[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
};
void keyscan();
void display();
uchar ri=29;yue=11,nian=2023;
uchar num[] = {2,0,2,3,1,1,2,9};
sbit RCK = P2^5;
sbit SCK = P2^6;
sbit SER = P2^7;
void delayms(int x)
{
int i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void In595(uchar i)
{
uchar j,temp;
temp = seg[i];
for(j=0;j<8;j++)
{
SCK = 0;
SER = temp&0x80;
temp <<= 1;
SCK = 1;
}
}
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
uchar i;
display();
for(i=0;i<8;i++)
{
P0 = i;
RCK = 0;
In595(num[i]);
RCK = 1;
delayms(2);
In595(10);
keyscan();
}
}
}
void display()
{
P0=0x7f;
P2=table[ri%10];
delayms(2);
P0=0x00;
P0=0xbf;
P2=table[ri/10];
delayms(2);
P0=0x00;
P0=0xdf;
P2=table[yue%10];
delayms(2);
P0=0x00;
P0=0xef;
P2=table[yue/10];
delayms(2);
P0=0x00;
P0=0xf7;
P2=table[nian%10];
delayms(2);
P0=0x00;
P0=0xfb;
P2=table[nian/10%10];
delayms(2);
P0=0x00;
P0=0xfd;
P2=table[nian/100%10];
delayms(2);
P0=0x00;
P0=0xfe;
P2=table[nian/1000];
delayms(2);
P0=0x00;
}
void T1_time()interrupt 1
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
{
if(ri==32)
{
ri=0;
yue++;
}
}
if(yue==4||yue==6||yue==9||yue==11)
{
if(ri==31)
{
ri=0;
yue++;
}
}
if(nian%100==0&nian%400==0&yue==2)
{
if(ri==30)
{
ri=0;
yue++;
}
}
if(nian%100==0&nian%4==0&yue==2)
{
if(ri==29)
{
ri=0;
yue++;
}
}
if(yue==13)
{
yue=0;
nian++;
}
}
void keyscan()
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
ri++;
if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
{
if(ri==32)
{
ri=1;
yue++;
}
}
if(yue==4||yue==6||yue==9||yue==11)
{
if(ri==31)
{
ri=1;
yue++;
}
}
if(nian%4==0&yue==2)
{
if(ri==30)
{
ri=1;
yue++;
}
}
if(nian%4!=0&yue==2)
{
if(ri==29)
{
ri=1;
yue++;
}
}
while(!key1);
}
}
if(key2==0)
{
delayms(10);
if(key2==0)
{
ri--;
if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
{
if(ri==0)
{
ri=31;
}
}
if(yue==4||yue==6||yue==9||yue==11)
{
if(ri==0)
{
ri=30;
}
}
if(nian%4==0&yue==2)
{
if(ri==0)
{
ri=29;
}
}
if(nian%4!=0&yue==2)
{
if(ri==0)
{
ri=28;
}
}
while(!key2);
}
}
if(key3==0)
{
delayms(10);
if(key3==0)
{
yue++;
if(yue==13)
{
yue=1;
nian++;
}
while(!key3);
}
}
if(key4==0)
{
delayms(10);
if(key4==0)
{
yue--;
if(yue==0)
{
yue=12;
}
while(!key4);
}
}
if(key5==0)
{
delayms(10);
if(key5==0)
{
nian++;
while(!key5);
}
}
if(key6==0)
{
delayms(10);
if(key6==0)
{
nian--;
while(!key6);
}
}
}