/*LCD1602电子钟,用学习板制成,P3.6和P3.7调分和调时
制作时间:2008年5月*/
#include<reg52.h>
#define uchar unsigned char
sbit rs=P1^0;
sbit lcden=P1^2;
sbit rw=P1^1;
sbit K1=P3^6; //调分
sbit K2=P3^7; //调时
uchar t,sec,min,hour;
uchar table1[]="0123456789";
void delay(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void write_com(uchar com)
{
P0=com;
rs=0;
lcden=0;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)
{
P0=date;
rs=1;
lcden=0;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
P2=0XFF;
rw=0;
write_com(0x38);
delay(5);
write_com(0x0C);
delay(5);
write_com(0x06);
delay(5);
write_com(0x01);
delay(5);
}
void jin_wei()
{
if(sec==60)
{
sec=0;
min++;
}
if(min==60)
{
min=0;
hour++;
}
if(hour==24)
{
hour=0;
}
}
void main()
{
EA=1;
ET1=1;
TMOD=0x10;
TR1=1;
init();
delay(5);
write_com(0x82);
delay(5);
write_date(':');
delay(15);
write_com(0x85);
delay(5);
write_date(':');
while(1)
{
write_com(0x86);
delay(5);
write_date(table1[sec/10]);
delay(5);
write_date(table1[sec%10]);
delay(5);
write_com(0x83);
delay(5);
write_date(table1[min/10]);
delay(5);
write_date(table1[min%10]);
delay(5);
write_com(0x80);
delay(5);
write_date(table1[hour/10]);
delay(5);
write_date(table1[hour%10]);
delay(5);
jin_wei();
if(K1==0)
{
delay(250);
if(K1==0)
min++;
}
if(K2==0)
{
delay(250);
if(K2==0)
hour++;
}
}
}
void time1() interrupt 3 using 1
{
TH1=60;
TL1=176;
t++;
if(t==20)
{
t=0;sec++;
}
}