Sir this is the code that we made :
#include<AT89X52.h>
#include<abco.h>
#include<Lcddisp.c>
#define ack 0
#define nack 1
#define addrtc 0xd0
//#define DS1307
#define scl P1_1
#define sda P1_2
void i2c_start();
void i2c_stop();
void i2c_write(unsigned char d);
unsigned char i2c_read(unsigned char);
//void read_byte();
//void write_byte();
void disp_clk_regs(unsigned char);
//void ramwrite(unsigned char);
//void ramread();
void initialize();
void i2c_start()
{
sda=1;scl=1;sda=0;
}
void i2c_stop()
{
sda=0;sda=0;sda=0;scl=1;scl=1;sda=1;
}
void i2c_write(unsigned char d)
{
unsigned char i;
scl=0;
for(i=1;i<=8;i++)
{
sda=(d>>7);
scl=1;
d=d<<1;
scl=0;
}
sda=1;
scl=0;
scl=1;
if(sda)
{
disp_string("ACK missing",line1);
disp_val(d,l1col1);
}
scl=0;
}
unsigned char i2c_read(unsigned char b)
{
unsigned char d,i;
sda=1;
scl=0;
for(i=1;i<=8;i++)
{
scl=1;
d=d<<1;
d=d | (unsigned char)sda;
scl=0;
}
sda=b;
scl=0;
scl=1;
if(b==nack) sda=1;
scl=0;
sda=1;
return d;
}
/*void readbyte()
{ unsigned char loc,value;
loc=0x80;
i2c_start();
i2c_write(addrtc);
i2c_write(loc);
i2c_start();
i2c_write(addrtc|1);
value=i2c_read(nack);
i2c_stop();
} */
/*void writebyte()
{
unsigned char address;
address=0x80;
i2c_start();
i2c_write(addrtc);
i2c_write(address);
i2c_write(0x30);
i2c_stop();
} */
void initialize()
{
//unsigned char yr,mon,dt,dy,hr,min,sec;
i2c_start();
i2c_write(addrtc);
i2c_write(0x00);
i2c_write(0x00);
i2c_stop();
i2c_start();
i2c_write(addrtc);
i2c_write(0x00);
i2c_write(0x00);
i2c_write(0x00);
i2c_write(0x50); //01010000
i2c_write(0x04);
i2c_write(0x11);
i2c_write(0x05);
i2c_write(0x06);
//#if defined DS1307
i2c_write(0x10);
//#endif
i2c_stop();
}
void disp_clk_regs(unsigned char prv_sec)
{
unsigned char sec,min,hr,dt,mon,dy,yr,mil,pm;
disp_string("DISP. CLOCK",line1);
i2c_start();
i2c_write(addrtc);
i2c_write(0x00);
i2c_start();
i2c_write(addrtc|1);
sec=i2c_read(ack);
min=i2c_read(ack);
hr=i2c_read(ack);
dy=i2c_read(ack);
dt=i2c_read(ack);
mon=i2c_read(ack);
yr=i2c_read(ack);
i2c_stop();
if(hr&0x40)
mil=0;
else
mil=1;
if(sec!=prv_sec)
{
if(mil)
{
disp_val((hr&0xf0)+0x30,l1col1);
disp_val((hr&0x0f)+0x30,l1col2);
disp_val((min&0xf0)+0x30,l1col3);
disp_val((min&0x0f)+0x30,l1col4);
disp_val((sec&0xf0)+0x30,l1col5);
disp_val((sec&0x0f)+0x30,l1col6);
}
else
{
if(hr&0x20)
pm='A';
else
pm='P';
hr&=0x1f;
disp_val((hr&0xf0)+0x30,l1col1);
disp_val((hr&0x0f)+0x30,l1col2);
disp_val((min&0xf0)+0x30,l1col3);
disp_val((min&0x0f)+0x30,l1col4);
disp_val((sec&0xf0)+0x30,l1col5);
disp_val((sec&0x0f)+0x30,l1col6);}
}
if(prv_sec ==0xfe)
return;
prv_sec=sec;
}
void main()
{
//unsigned char M,M1;
lcd_init();
//#if defined DS1307
disp_string("DS1307 RTC",line1);
// #endif
disp_string("INITIALIZING",line1);
initialize();
disp_string("INITIALIZED",line1);
while(1)
{
/*#if defined DS1307
disp_string("DS1307 RTC",line1);
#endif */
disp_clk_regs(0x99);
clear_disp(line1);
}
}