DOWNLOAD FILES
NOTES
- COMPILER – MIKRO C PRO 6.6.1
- SIMULATOR -PROTEUS 8.1
PROGRAM
unsigned char seconds,minute,hour,weekday, days, month, years;
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
// End LCD module connections
void settime (void);
void Read_Time(void)
{
I2C1_Start();
I2C1_Wr(0xD0);
I2C1_Wr(0);
I2C1_Repeated_Start();
I2C1_Wr(0xD1);
seconds =I2C1_Rd(1); //seconds //convert bcd to ascii for lcd
minute =I2C1_Rd(1); //minute //convert bcd to ascii for lcd
hour=I2C1_Rd(1); //hour //convert bcd to ascii for lcd
weekday =I2C1_Rd(1); //weekday ex-monday=2 //convert bcd to ascii for lcd
days =I2C1_Rd(1); //day //convert bcd to ascii for lcd
month =I2C1_Rd(1); //month //convert bcd to ascii for lcd
years =I2C1_Rd(0); //year //convert bcd to ascii for lcd
I2C1_Stop();
// LCD_Out(1,1,”Date:”);
LCD_Chr(1,1,((days&0xf0)>>4)+0x30);//convert bcd to ascii for lcd
LCD_Chr_cp((days&0x0f)+0x30); //convert bcd to ascii for lcd
LCD_Chr_cp(‘:’);
LCD_Chr_cp(((month&0xf0)>>4)+0x30); //convert bcd to ascii for lcd
LCD_Chr_cp((month&0x0f)+0x30); //convert bcd to ascii for lcd
LCD_Chr_cp(‘:’);
LCD_Chr_cp(((years&0xf0)>>4)+0x30); //convert bcd to ascii for lcdii
LCD_Chr_cp((years&0x0f)+0x30); //convert bcd to ascii for lcd
// LCD_Out(2,1,”Time:”);
LCD_Chr(2,1,((hour&0xf0)>>4)+0x30);
LCD_Chr_cp((hour&0x0f)+0x30);
LCD_Chr_cp(‘:’);
LCD_Chr_cp(((minute&0xf0)>>4)+0x30);
LCD_Chr_cp((minute&0x0f)+0x30);
LCD_Chr_cp(‘:’);
LCD_Chr_cp(((seconds&0xf0)>>4)+0x30);
LCD_Chr_cp((seconds&0x0f)+0x30);
}
void main()
{
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD display
Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
I2C1_Init(100000);
settime (); // perform initialization
while (1) {
Read_Time(); // read time from RTC(DS1307)
Delay_ms(1000);
}
}
void settime (void)
{
I2C1_Init(100000); // initialize full master mode
I2C1_Start(); // issue start signal
I2C1_Wr(0xD0); // address DS1307
I2C1_Wr(0); // start from word at address (REG0)
I2C1_Wr(0x80); // write $80 to REG0. (pause counter + 0 sec)
I2C1_Wr(0x25); // write 0 to minutes word to (REG1)
I2C1_Wr(0x16); // write 17 to hours word (24-hours mode)(REG2)
I2C1_Wr(0x02); // write 2 – Monday (REG3)
I2C1_Wr(0x24); // write 4 to date word (REG4)
I2C1_Wr(0x04); // write 5 (May) to month word (REG5)
I2C1_Wr(0x15); // write 01 to year word (REG6)
I2C1_Stop(); // issue stop signal
I2C1_Start(); // issue start signal
I2C1_Wr(0xD0); // address DS1307
I2C1_Wr(0); // start from word at address 0
I2C1_Wr(0); // write 0 to REG0 (enable counting + 0 sec)
I2C1_Stop(); // issue stop signal
delay_ms(500);
}