#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit ledlk=P1^0;
sbit smglk=P1^1;
sbit smgbitlk=P1^2;
sbit rs=P3^4;
sbit en=P1^5;
sbit sclk=P0^0;
sbit rst=P0^1;
sbit io=P0^2;
uchar author[]="2000-00-00 ";
uchar mail[]="00:00:00";
uchar sec,min,hour,year,month,day,week;
void delayms(int ms)
{
char i,j;
for(i=0;i<ms;i++)
for(j=0;j<120;j++);
}
void write_command(uchar com)
{
en=0;
rs=0;
P2=com;
delayms(5); //time must be enough
en=1;
delayms(5);
en=0;
delayms(5);
}
void write_date(uchar date)
{
en=0;
rs=1;
P2=date;
delayms(5);
en=1;
delayms(5);
en=0;
}
void init1602()
{
write_command(0x38);
write_command(0x0c);
write_command(0x06);
write_command(0x01);
}
void init()
{
ledlk=0;
smglk=0;
}
void write_address_date(uchar address,uchar date)
{
uchar i;
rst=0;
sclk=0;
rst=1;
for(i=0;i<8;i++)
{
io=address&0x01;
sclk=1;
sclk=0;
address>>=1;
}
delayms(5);
for(i=0;i<8;i++)
{
io=date&0x01;
sclk=1;
sclk=0;
date>>=1;
}
sclk=1;
}
uchar read_address_date(uchar address)
{
uchar i,tmp,date=0x00;
rst=0;
sclk=0;
rst=1;
for(i=0;i<7;i++)
{
io=address&0x01;
sclk=1;
sclk=0;
address>>=1;
}
io=address&0x01;
sclk=1;
delayms(5);
for(i=0;i<8;i++)
{
date=date>>1;
sclk=0;
tmp=io;
date=(tmp<<7)|date;
sclk=1;
}
return date;
}
void set1302()
{
write_address_date(0x8e,0x00);
write_address_date(0x8c,0x09);
write_address_date(0x8a,0x04);
write_address_date(0x88,0x07);
write_address_date(0x86,0x16);
write_address_date(0x84,0x12);
write_address_date(0x82,0x59);
write_address_date(0x80,0x00);
write_address_date(0x8e,0x80);
}
void read1302()
{
sec=read_address_date(0x81);
min=read_address_date(0x83);
hour=read_address_date(0x85);
year=read_address_date(0x8d);
month=read_address_date(0x89);
day=read_address_date(0x87);
week=read_address_date(0x8b);
}
void timeread()
{
uchar s1,s2,m1,m2,h1,h2,y1,y2,mo1,mo2,d1,d2,w;
read1302();
s1=sec&0xf0;
s1>>=4;
s2=sec&0x0f;
m1=min&0xf0;
m1>>=4;
m2=min&0x0f;
h1=hour&0xf0;
h1>>=4;
h2=hour&0x0f;
y1=year&0xf0;
y1>>=4;
y2=year&0x0f;
mo1=month&0xf0;
mo1>>=4;
mo2=month&0x0f;
d1=day&0xf0;
d1>>=4;
d2=day&0x0f;
w=week&0x0f;
mail[0]=h1+\'0\';
mail[1]=h2+\'0\';
mail[3]=m1+\'0\';
mail[4]=m2+\'0\';
mail[6]=s1+\'0\';
mail[7]=s2+\'0\';
author[2]=y1+\'0\';
author[3]=y2+\'0\';
author[5]=mo1+\'0\';
author[6]=mo2+\'0\';
author[8]=d1+\'0\';
author[9]=d2+\'0\';
author[11]=w+\'0\';
}
void main()
{
uchar i;
init();
init1602();
set1302();
while(1)
{
timeread();
write_command(0x80);
for(i=0;i<sizeof(author)-1;i++)
{
write_date(author[i]);
delayms(5);
}
write_command(0x80+0x40);
delayms(5);
for(i=0;i<sizeof(mail)-1;i++)
{
write_date(mail[i]);
delayms(5);
}
delayms(100);
}
}
#define uchar unsigned char
#define uint unsigned int
sbit ledlk=P1^0;
sbit smglk=P1^1;
sbit smgbitlk=P1^2;
sbit rs=P3^4;
sbit en=P1^5;
sbit sclk=P0^0;
sbit rst=P0^1;
sbit io=P0^2;
uchar author[]="2000-00-00 ";
uchar mail[]="00:00:00";
uchar sec,min,hour,year,month,day,week;
void delayms(int ms)
{
char i,j;
for(i=0;i<ms;i++)
for(j=0;j<120;j++);
}
void write_command(uchar com)
{
en=0;
rs=0;
P2=com;
delayms(5); //time must be enough
en=1;
delayms(5);
en=0;
delayms(5);
}
void write_date(uchar date)
{
en=0;
rs=1;
P2=date;
delayms(5);
en=1;
delayms(5);
en=0;
}
void init1602()
{
write_command(0x38);
write_command(0x0c);
write_command(0x06);
write_command(0x01);
}
void init()
{
ledlk=0;
smglk=0;
}
void write_address_date(uchar address,uchar date)
{
uchar i;
rst=0;
sclk=0;
rst=1;
for(i=0;i<8;i++)
{
io=address&0x01;
sclk=1;
sclk=0;
address>>=1;
}
delayms(5);
for(i=0;i<8;i++)
{
io=date&0x01;
sclk=1;
sclk=0;
date>>=1;
}
sclk=1;
}
uchar read_address_date(uchar address)
{
uchar i,tmp,date=0x00;
rst=0;
sclk=0;
rst=1;
for(i=0;i<7;i++)
{
io=address&0x01;
sclk=1;
sclk=0;
address>>=1;
}
io=address&0x01;
sclk=1;
delayms(5);
for(i=0;i<8;i++)
{
date=date>>1;
sclk=0;
tmp=io;
date=(tmp<<7)|date;
sclk=1;
}
return date;
}
void set1302()
{
write_address_date(0x8e,0x00);
write_address_date(0x8c,0x09);
write_address_date(0x8a,0x04);
write_address_date(0x88,0x07);
write_address_date(0x86,0x16);
write_address_date(0x84,0x12);
write_address_date(0x82,0x59);
write_address_date(0x80,0x00);
write_address_date(0x8e,0x80);
}
void read1302()
{
sec=read_address_date(0x81);
min=read_address_date(0x83);
hour=read_address_date(0x85);
year=read_address_date(0x8d);
month=read_address_date(0x89);
day=read_address_date(0x87);
week=read_address_date(0x8b);
}
void timeread()
{
uchar s1,s2,m1,m2,h1,h2,y1,y2,mo1,mo2,d1,d2,w;
read1302();
s1=sec&0xf0;
s1>>=4;
s2=sec&0x0f;
m1=min&0xf0;
m1>>=4;
m2=min&0x0f;
h1=hour&0xf0;
h1>>=4;
h2=hour&0x0f;
y1=year&0xf0;
y1>>=4;
y2=year&0x0f;
mo1=month&0xf0;
mo1>>=4;
mo2=month&0x0f;
d1=day&0xf0;
d1>>=4;
d2=day&0x0f;
w=week&0x0f;
mail[0]=h1+\'0\';
mail[1]=h2+\'0\';
mail[3]=m1+\'0\';
mail[4]=m2+\'0\';
mail[6]=s1+\'0\';
mail[7]=s2+\'0\';
author[2]=y1+\'0\';
author[3]=y2+\'0\';
author[5]=mo1+\'0\';
author[6]=mo2+\'0\';
author[8]=d1+\'0\';
author[9]=d2+\'0\';
author[11]=w+\'0\';
}
void main()
{
uchar i;
init();
init1602();
set1302();
while(1)
{
timeread();
write_command(0x80);
for(i=0;i<sizeof(author)-1;i++)
{
write_date(author[i]);
delayms(5);
}
write_command(0x80+0x40);
delayms(5);
for(i=0;i<sizeof(mail)-1;i++)
{
write_date(mail[i]);
delayms(5);
}
delayms(100);
}
}