#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P1^1;
sbit scl=P1^0;
void delay();
void delay1();
void start();
void stop();
uchar read(uchar address0,uchar wordaddress,uchar address1);
uchar year=0,month=0,date=0,hour=0,minute=0,second=0;
void main()
{
while(1)
{ second=read(0xd0,0x00,0xd1);
minute=read(0xd0,0x01,0xd1);
hour=read(0xd0,0x02,0xd1);
date=read(0xd0,0x04,0xd1);
month=read(0xd0,0x05,0xd1);
year=read(0xd0,0x06,0xd1);
P0=hour;
P2=minute;
P3=second;
delay1();
P0=year;
P2=month;
P3=date;
delay1();
}
}
void delay1()
{
uint i,j;
for(i=0;i<1000;i++)
for(j=0;j<125;j++);
}
void start()
{
scl=1;
delay();
sda=1;
delay();
sda=0;
delay();
}
void delay()
{ uchar i=125;
while(i>0)
i--;
}
void stop()
{
scl=1;
delay();
sda=0;
delay();
sda=1;
delay();
}
uchar read(uchar address0,uchar wordaddress,uchar address1)
{
uchar a,a0,i,n,data1;
start();
for(n=0;n<3;n++)
{
if(n==0)a0=address0;
else if(n==1)a0=wordaddress;
else if(n==2)
{
start();
a0=address1;
}
for(i=0;i<8;i++)
{
scl=0;
delay();
a=a0;
a=a&0x80;
if(a==0x80)
sda=1;
else
sda=0;
delay();
scl=1;
delay();
scl=0;
delay();
a0=a0<<1;
}
sda=1;
delay();
scl=1;
delay();
scl=0;
}
for(i=0;i<8;i++)
{
data1=data1<<1;
sda=1;
delay();
scl=0;
delay();
scl=1;
delay();
if(sda==1)
data1|=0x01;
}
scl=0;
delay();
sda=1;
delay();
stop();
return data1;
}
|