#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar shi=0,fen=0,miao=0,ri=7,yue=1,Z=1,Y=1,i,K1num;
uint nian=2015;
uchar count_10ms,K1num;
sbit rs=P2^4;
sbit rw=P2^5;
sbit lcden=P2^6;
sbit K1=P1^1;
sbit K2=P1^2;
sbit K3=P1^3;
sbit K4=P1^4;
sbit BEEP=P3^7;
void delay(uint x) //????
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
void bi(uint t)//????
{
int c,n;
for(c=0;c<t;c++)
{
for(n=0;n<50;n++);
BEEP=~BEEP;
}
//return(t);
}
void write_com(uchar com)// 1602????
{
P0=com;
rs=0;
rw=0;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void write_date(uchar date)//1602?????
{
P0=date;
rs=1;
rw=0;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void beep()//??
{
BEEP=0;
delay(100);
BEEP=1;
delay(100);
}
void naozhong()//??
{
if((Z==shi)&(Y==fen)&(miao<20))
{ bi(90);
bi(120); }
}
void shijian(uint t,add )
{
if (t>100)
{
uchar a,b,c,d;
a=t/1000+0x30;
b=t/100%10+0x30;
c=t/10%10+0x30;
d=t%10+0x30;
write_com(add);
write_date( a);
write_date( b);
write_date( c);
write_date( d);
}
else
{
uchar m=0,n=0;
m=t/10+0x30;
n=t%10+0x30;
write_com(add);
write_date( m);
write_date( n);
}
}
void LCD_disp()
{
shijian(shi,0x80+0 );
write_com(0x80+2);
write_date(0x3a);
shijian(fen,0x80+3 );
write_date(0x3a);
shijian(miao,0x80+6 );
write_date( 0x2d);
write_date( 0x2d);
write_date( 0x2d);
shijian(Z,0x80+11 );
write_date(0x3a);
shijian(Y,0x80+14 );
shijian(nian,0xc0+0 );
write_date( 0x2d);
shijian(yue,0xc0+5 );
write_date( 0x2d);
shijian(ri,0xc0+8 );
}
void init()// 1602?????
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void timer1_init()//?????
{
TMOD=0x01;
TH0=0x4c;TL0=0x00;
EA=1;ET0=1;
TR0=1;
}
void timer0() interrupt 1 using 0// ??
{
TH0=0x4c;TL0=0x00;
count_10ms++;
if (count_10ms==20 )
{
count_10ms=0;
miao++;
if ( miao==60)
{
miao=0;
fen++;
if ( fen==60)
{
fen=0;
shi++;
if (shi==24)
{
shi=0;
if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
{ ri++;if (ri==32) {ri=1;yue++;if ( yue==13) { nian++;yue=1;}} }
else if(yue==4||yue==6||yue==9||yue==11)
{ ri++;if (ri==31) {ri=1;yue++; if ( yue==13) { nian++;yue=1;}} }
else if(yue==2)
{
if((!(nian%4)&&(nian%100))|| !(nian%400))
{ ri++;if (ri==30) {ri=1; yue++; if ( yue==13) { nian++;yue=1;}} }
else
{ ri++;if (ri==29) {ri=1; yue++; if ( yue==13) { nian++;yue=1;}} }
}
}
}
}
}
}
void keycan()//????
{
if( K1==0 ) //?????
{
K1num++; delay(1);
if( K1==0 )
{
while(!K1);
bi(200);
if( K1num==1 ) {TR0=0; write_com(0x80+0); write_com(0x0f);}
if( K1num==2 ) {write_com(0x80+3); write_com(0x0f); }
if( K1num==3 ) {write_com(0x80+6); write_com(0x0f); }
if( K1num==4 ) {write_com(0x80+11); write_com(0x0f); }
if( K1num==5 ) {write_com(0x80+14); write_com(0x0f); }
if( K1num==6 ) {write_com(0xc0+3); write_com(0x0f); }
if( K1num==7 ) {write_com(0xc0+6); write_com(0x0f); }
if( K1num==8 ) {write_com(0xc0+9); write_com(0x0f); }
if( K1num==9 ) { K1num=0; write_com(0x0c); TR0=1; }
}
}
if( K1num!=0 ) //????
{
if( K2==0 )
{
delay(1);
if( K2==0)
{
while(!K2);
bi(200);
if( K1num==1 ) { shi++; if( shi==24 ) shi=0;shijian(shi,0x80+0 ); write_com(0x80); }
if( K1num==2 ) { fen++; if( fen==60 ) fen=0; shijian(fen,0x80+3 );write_com(0x80+3); }
if( K1num==3 ) { miao++; if( miao==60 ) miao=0;shijian(miao,0x80+6 );write_com(0x80+6); }
if( K1num==4 ) { Z++; if( Z==24 ) Z=0;shijian(Z,0x80+11 ); write_com(0x80+11); }
if( K1num==5 ) { Y++; if( Y==60 ) Y=0;shijian(Y,0x80+14); write_com(0x80+14); }
if( K1num==6 ) { nian++; if( nian==2999 ) nian=2015; shijian(nian,0xc0+0 );write_com(0xc0+0); }
if( K1num==7 ) { yue++; if( yue==13 ) yue=1; shijian(yue,0xc0+5 ); write_com(0xc0+5); }
if( K1num==8 ) { 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(yue==2)
{
if((!(nian%4)&&(nian%100))|| !(nian%400))
{ if (ri==30) {ri=1; } }
else
{ if (ri==29) {ri=1;} }
}
shijian(ri,0xc0+8); write_com(0xc0+8);
}
}
}
}
if(K1num!=0) // ????
{
if(K3==0 )
{
delay(1);
if(K3==0 )
{
while(!K3);
bi(200);
if( K1num==1 ) {shi--; if( shi==-1 ) shi=23;shijian(shi,0x80+0 );write_com(0x80); }
if( K1num==2 ) { fen--; if( fen==-1 ) fen=59; shijian(fen,0x80+3 );write_com(0x80+3); }
if( K1num==3 ) { miao--; if( miao==-1 ) miao=59; shijian(miao,0x80+6 );write_com(0x80+6); }
if( K1num==4 ) { Z--; if( Z==-1 ) Z=23; shijian(Z,0x80+11 );write_com(0x80+11); }
if( K1num==5 ) { Y--; if( Y==-1 ) Y=59;shijian(Y,0x80+14);write_com(0x80+14); }
if( K1num==6 ) { nian--; if( nian==1000 ) nian=2015;shijian(nian,0xc0+0 );write_com(0xc0+0); }
if( K1num==7 ) { yue--; if( yue==0 ) yue=12; shijian(yue,0xc0+5 ); write_com(0xc0+5); }
if( K1num==8 ) { 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(yue==2)
{
if((!(nian%4)&&(nian%100))|| !(nian%400))
{ if (ri==0) {ri=29; } }
else
{ if (ri==0) {ri=28;} }
}
shijian(ri,0xc0+8); write_com(0xc0+8);
}
}
}
}
if(K4==0)
delay(20);
if(K4==0)
{
K1num=0; TR0=1;
}
if(K1num==0)
{
LCD_disp();
}
}
void main ()
{
init();
timer1_init();
while(1)
{
keycan();
naozhong();
}
}
|