#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit rs=P2^0;

sbit lcden=P2^1;

sbit s1=P2^4;

sbit s2=P2^5;

sbit s3=P2^6;

uchar count,s1num;

char miao,shi,fen,nian,yue,ri,xq;

uchar code table[]=" 2011-04-08 05";

uchar code table1[]=" 00:00:00";

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void WR_com(uchar com)

{

rs=0;

lcden=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void WR_date(uchar date)

{

rs=1;

lcden=0;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void init()

{

uchar num;

lcden=0;

//fen=59;

//miao=53;

//shi=23;

WR_com(0x38);

WR_com(0x0c);

WR_com(0x06);

WR_com(0x01);

WR_com(0x80);

for(num=0;num<15;num++)

{

WR_date(table[num]);

delay(5);

}

WR_com(0x80+0x40);

for(num=0;num<12;num++)

{

WR_date(table1[num]);

delay(5);

}

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

void WR_sfm(uchar add,uchar date)

{

uchar shi,ge;

shi=date/10;

ge=date%10;

WR_com(0x80+0x40+add);

WR_date(0x30+shi);

WR_date(0x30+ge);

}

void WR_nyr(uchar add,uchar date)

{

uchar shi,ge;

shi=date/10;

ge=date%10;

WR_com(0x80+add);

WR_date(0x30+shi);

WR_date(0x30+ge);

}

void keyscan()

{

if(s1==0)

{

delay(5);

if(s1==0)

{s1num++;

while(!s1);

if(s1num==1)

{

TR0=0;

WR_com(0x80+0x40+10);

WR_com(0x0f);

}

}

if(s1num==2)

{

WR_com(0x80+0x40+7);

}

if(s1num==3)

{

WR_com(0x80+0x40+4);

}

if(s1num==4)

{

WR_com(0x80+12);

}

if(s1num==5)

{

WR_com(0x80+9);

}

if(s1num==6)

{

WR_com(0x80+6);

}

if(s1num==7)

{

WR_com(0x80+3);

}

if(s1num==8)

{

s1num=0;

WR_com(0x0c);

TR0=1;

}

}

if(s1num!=0)

{

if(s2==0)

{

delay(5);

if(s2==0)

{

while(!s2);

if(s1num==1)

{

miao++;

if(miao==60)

miao=0;

WR_sfm(10,miao);

WR_com(0x80+0x40+10);

}

if(s1num==2)

{

fen++;

if(fen==60)

fen=0;

WR_sfm(7,fen);

WR_com(0x80+0x40+7);

}

if(s1num==3)

{

shi++;

if(shi==24)

shi=0;

WR_sfm(4,shi);

WR_com(0x80+0x40+4);

}

if(s1num==4)

{

xq++;

if(xq==8)

xq=1;

WR_nyr(12,xq);

WR_com(0x80+12);

}

if(s1num==5)

{

ri++;

if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)

{

if(ri==32)

ri=1;

}

else if(yue==4||yue==6||yue==9||yue==11)

{

if(ri>=31)

ri=1;

}

else

{

if(nian%4==0)

{

if(ri>=30)

ri=1;

}

else

{

if(ri>=29)

ri=1;

}

}

WR_nyr(9,ri);

WR_com(0x80+9);

}

if(s1num==6)

{

yue++;

if(yue==13)

yue=1;

WR_nyr(6,yue);

WR_com(0x80+6);

}

if(s1num==7)

{

nian++;

if(nian==99)

nian=0;

WR_nyr(3,nian);

WR_com(0x80+3);

}

}

}

if(s3==0)

{

delay(5);

if(s3==0)

{

while(!s3);

if(s1num==1)

{

miao--;

if(miao==-1)

miao=59;

WR_sfm(10,miao);

WR_com(0x80+0x40+10);

}

if(s1num==2)

{

fen--;

if(fen==-1)

fen=59;

WR_sfm(7,fen);

WR_com(0x80+0x40+7);

}

if(s1num==3)

{

shi--;

if(shi==-1)

shi=23;

WR_sfm(4,shi);

WR_com(0x80+0x40+4);

}

if(s1num==4)

{

xq--;

if(xq==0)

xq=7;

WR_nyr(12,xq);

WR_com(0x80+12);

}

if(s1num==5)

{

ri--;

if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)

{

if(ri==0)

ri=31;

}

else if(yue==4||yue==6||yue==9||yue==11)

{

if(ri==0)

ri=30;

}

else

{

if(nian%4==0)

{

if(ri==0)

ri=29;

}

else

{

if(ri==0);

ri=28;

}

}

WR_nyr(9,ri);

WR_com(0x80+9);

}

if(s1num==6)

{

yue--;

if(yue==0)

yue=12;

WR_nyr(6,yue);

WR_com(0x80+6);

}

if(s1num==7)

{

nian--;

if(nian==-1)

nian=99;

WR_nyr(3,nian);

WR_com(0x80+3);

}

}

}

}

}

void main()

{

init();

while(1)

{

keyscan();

}

//while(1);

}

void timer0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==18)

{

count=0;

miao++;

if(miao==60)

{

miao=0;

fen++;

if(fen==60)

{

fen=0;

shi++;

if(shi==24)

{

shi=0;

ri++;

if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)

{

if(ri==31)

yue++;

xq++;

if(xq==8)

xq=1;

if(yue==12)

{

yue=0;

nian++;

WR_nyr(3,nian);

}

WR_nyr(6,yue);

WR_nyr(12,xq);

}

else if(yue==4||yue==6||yue==9||yue==11)

{

if(ri==30)

yue++;

xq++;

if(xq==8)

xq=1;

if(yue==12)

{

yue=0;

nian++;

WR_nyr(3,nian);

}

WR_nyr(6,yue);

WR_nyr(12,xq);

}

else

{

if(nian%4==0)

{

if(ri==29)

yue++;

xq++;

if(xq==8)

xq=1;

if(yue==12)

{

yue=0;

nian++;

WR_nyr(3,nian);

}

WR_nyr(6,yue);

WR_nyr(12,xq);

}

else

{

if(ri==28);

yue++;

xq++;

if(xq==8)

xq=1;

if(yue==12)

{

yue=0;

nian++;

WR_nyr(3,nian);

}

WR_nyr(6,yue);

WR_nyr(12,xq);

}

}

WR_nyr(9,ri);

}

WR_sfm(4,shi);

}

WR_sfm(7,fen);

}

WR_sfm(10,miao);

}

}