Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

problem with pic16f877a and ds1307, mikroc

Status
Not open for further replies.

zzssww8936

New Member
this two is my circuit and my code for mikroc, and it can not be displayed on my lcd, and i dont know the problem, i really hope who can point out my mistakes.
thanks for ur time.

Code:
// LCD module connections-------------------------------------------------------------------------------------
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
 
sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections---------------------------------------------------------------------------------
 
//------------------------------Declare Variables section--------------------------------------------------------
unsigned short read_ds1307(unsigned short address );
void write_ds1307(unsigned short address,unsigned short w_data);
unsigned short sec;
unsigned short minute;
unsigned short hour;
unsigned short day;
unsigned short date;
unsigned short month;
unsigned short year;
unsigned short dataa;
unsigned short a=0;
unsigned short b=0;
unsigned short yr=0;
unsigned short hour1;
char ddate[11];
char time[15];
char time1[15];
char ampm;
unsigned char dday;
unsigned char dhour;
 
unsigned char BCD2UpperCh(unsigned char bcd);
unsigned char BCD2LowerCh(unsigned char bcd);
//------------------------------End of Declare Variables section--------------------------------------------------------
 
 
void main(){
//------------------------------Start of Initialization Section-------------------------------------------------------------
I2C1_Init(100000); //DS1307 I2C is running at 100KHz
TRISB = 0x00; // Configure PORTB as output
TRISC = 0xFF;
TRISD = 0xFF;
PORTD=0x00;
Lcd_Init();
Lcd_Cmd(_Lcd_CLEAR); // Clear display
Lcd_Cmd(_Lcd_CURSOR_OFF); // Turn cursor off
 
 
//Set Time
write_ds1307(0,0x80); //Reset second to 0 sec. and stop Oscillator
write_ds1307(1,0x59); //write min 59
write_ds1307(2,0x11); //write hour 11 PM
write_ds1307(3,0x04); //write day
write_ds1307(4,0x15); // write date 15
write_ds1307(5,0x06); // write month June
write_ds1307(6,0x11); // write year 11 --> 2011
write_ds1307(7,0x10); //SQWE output at 1 Hz
write_ds1307(0,0x00); //Reset second to 0 sec. and start Oscillator
//------------------------------End of Initialization Section---------------------------------------------------------
 
while(1)
{
sec=read_ds1307(0); // read second
minute=read_ds1307(1); // read minute
hour=read_ds1307(2); // read hour
day=read_ds1307(3); // read day
date=read_ds1307(4); // read date
month=read_ds1307(5); // read month
year=read_ds1307(6); // read year
 
a=BCD2UpperCh(year);
b=BCD2LowerCh(year);
yr=a*10+b;
hour1 =hour;
 
//------------------------------Start of Setting Clock Time Section-------------------------------------------------------
 
if (PORTD.F0==1 && PORTD.F6==0)
{
   if (PORTD.F1==1){
   minute=minute+1;
   if (minute==0x0A||minute==0x1A||minute==0x2A||minute==0x3A||minute==0x4A){
   minute=minute+6;}
   else if (minute==0x5A){
   minute=0x00;} }
 
   else if (PORTD.F2==1)
   {
   hour=hour+1;
   if (hour==0x0A||hour==0x1A||hour==0x2A){
   hour=hour+6;}
   else if (hour==0x24){
   hour=0x00;} }
 
   else if (PORTD.F3==1) {
   date=date+1;
   day=day+1;
   if (month==0x01||month==0x03||month==0x05||month==0x07||month==0x08||month==0x10||month==0x12){
   if (date==0x0A||date==0x1A||date==0x2A){
   date=date+6;}
   else if (date==0x32){
   date=0x01;}
 
   if(day==8)
   day=1;}
 
   else if (month==0x04||month==0x06||month==0x09||month==0x11){
   if (date==0x0A||date==0x1A||date==0x2A){
   date=date+6;}
   else if (date==0x31){
   date=0x01;}
 
   if(day==8)
   day=1;}
 
   else if (month==0x02){
   if (yr%4==0){
   if (date==0x0A||date==0x1A){
   date=date+6;}
   else if (date==0x2A){
   date=0x01;}
 
   if(day==8)
   day=1;}
 
   else if (yr%4==3||yr%4==0||yr%4==1){
   if (date==0x0A||date==0x1A){
   date=date+6;}
   else if (date==0x29){
   date=0x01;}
 
   if(day==8)
   day=1;}
   }
   }
 
   else if (PORTD.F4==1) {
   month=month+1;
   if (month==0x0A||month==0x1A){
   month=month+6;}
   else if (month==0x13){
   month=0x01;}
   }
 
 
 
   else if (PORTD.F5==1) {
   year=year+1;
   if (year==0x0A||year==0x1A||year==0x2A||year==0x3A||year==0x4A||year==0x5A||year==0x6A||year==0x7A||year==0x8A){
   year=year+6;}
   else if (year==0x9A){
   year=0x11;}
   }
 
   else if (PORTD.F7 = 1){
   day = day + 1 ;
   if (day==0x8){
   year=0x01;}
   }
 
   Delay_ms(100);
 
 
 
write_ds1307(0,0x80);
write_ds1307(1, minute);
write_ds1307(2, hour);
write_ds1307(3, day);
write_ds1307(4, date);
write_ds1307(5, month);
write_ds1307(6, year);
write_ds1307(0,0x00);
 
 
 
dday = BCD2LowerCh(day);
if (dday == '1') {
Lcd_Out(1,1,"Sun");
}
else if (dday == '2') {
Lcd_Out(1,1,"Mon");
}
else if (dday == '3') {
Lcd_Out(1,1,"Tue");
}
else if (dday == '4') {
Lcd_Out(1,1,"Wed");
}
else if (dday == '5') {
Lcd_Out(1,1,"Thu");
}
else if (dday == '6') {
Lcd_Out(1,1,"Fri");
}
else if (dday == '7') {
Lcd_Out(1,1,"Sat");
}
 
ddate[0] = BCD2UpperCh(date);
ddate[1] = BCD2LowerCh(date);
ddate[2] = '/';
ddate[3] = BCD2UpperCh(month);
ddate[4] = BCD2LowerCh(month);
ddate[5] = '/';
ddate[6] = '2';
ddate[7] = '0';
ddate[8] = BCD2UpperCh(year);
ddate[9] = BCD2LowerCh(year);
ddate[10] = '\0';
 
 
time[0] = BCD2UpperCh(hour);
time[1] = BCD2LowerCh(hour);
time[2] = ':';
time[3] = BCD2UpperCh(minute);
time[4] = BCD2LowerCh(minute);
time[5] = ':';
time[6] = BCD2UpperCh(sec);
time[7] = BCD2LowerCh(sec);
time[8] = ' ';
time[9] = ' ';
time[10] = ' ';
time[11] = ' ';
time[12] = '\0';
 
Lcd_Out(1,5,ddate);
Lcd_Out(2,1,time);
Delay_ms(50);
 
 
 
 
 
 
   }
else if (PORTD.F0==0 && PORTD.F6==0)
{
 
dday = BCD2LowerCh(day);
if (dday == '1') {
Lcd_Out(1,1,"Sun");
}
else if (dday == '2') {
Lcd_Out(1,1,"Mon");
}
else if (dday == '3') {
Lcd_Out(1,1,"Tue");
}
else if (dday == '4') {
Lcd_Out(1,1,"Wed");
}
else if (dday == '5') {
Lcd_Out(1,1,"Thu");
}
else if (dday == '6') {
Lcd_Out(1,1,"Fri");
}
else if (dday == '7') {
Lcd_Out(1,1,"Sat");
}
 
ddate[0] = BCD2UpperCh(date);
ddate[1] = BCD2LowerCh(date);
ddate[2] = '/';
ddate[3] = BCD2UpperCh(month);
ddate[4] = BCD2LowerCh(month);
ddate[5] = '/';
ddate[6] = '2';
ddate[7] = '0';
ddate[8] = BCD2UpperCh(year);
ddate[9] = BCD2LowerCh(year);
ddate[10] = '\0';
 
time[0] = BCD2UpperCh(hour);
time[1] = BCD2LowerCh(hour);
time[2] = ':';
time[3] = BCD2UpperCh(minute);
time[4] = BCD2LowerCh(minute);
time[5] = ':';
time[6] = BCD2UpperCh(sec);
time[7] = BCD2LowerCh(sec);
time[8] = ' ';
time[9] = ' ';
time[10] = ' ';
time[11] = ' ';
time[12] = '\0';
 
Lcd_Out(1,5,ddate);
Lcd_Out(2,1,time);
Delay_ms(50);
}
 
//------------------------------End of Setting Clock Time Section-------------------------------------------------------
//------------------------------Start of Display Time in 12 hr system Section------------------------------------------
else if (PORTD.F0==0 && PORTD.F6==1)
{
 
dday = BCD2LowerCh(day);
if (dday == '1') {
Lcd_Out(1,1,"Sun");
}
else if (dday == '2') {
Lcd_Out(1,1,"Mon");
}
else if (dday == '3') {
Lcd_Out(1,1,"Tue");
}
else if (dday == '4') {
Lcd_Out(1,1,"Wed");
}
else if (dday == '5') {
Lcd_Out(1,1,"Thu");
}
else if (dday == '6') {
Lcd_Out(1,1,"Fri");
}
else if (dday == '7') {
Lcd_Out(1,1,"Sat");
}
 
ddate[0] = BCD2UpperCh(date);
ddate[1] = BCD2LowerCh(date);
ddate[2] = '/';
ddate[3] = BCD2UpperCh(month);
ddate[4] = BCD2LowerCh(month);
ddate[5] = '/';
ddate[6] = '2';
ddate[7] = '0';
ddate[8] = BCD2UpperCh(year);
ddate[9] = BCD2LowerCh(year);
ddate[10] = '\0';
 
if (hour1<0x12){
if (hour1==0){
hour1=0x12;
ampm= 'A';
 
}
else
ampm= 'A';
}
 
else if (hour1 == 0x12){
ampm= 'P';
}
 
else if (hour1>0x12 && hour1<0x20){
hour1=hour1-0x12;
ampm= 'P';
}
 
else if (hour1==0x20){
hour1=0x08;
ampm= 'P';
}
 
else if (hour1==0x21){
hour1=0x09;
ampm= 'P';
}
 
else if (hour1==0x22){
ampm= 'P';
hour1=0x10;
}
 
else if (hour1==0x23){
ampm= 'P';
hour1=0x11;
}
 
time1[0] = BCD2UpperCh(hour1);
time1[1] = BCD2LowerCh(hour1);
time1[2] = ':';
time1[3] = BCD2UpperCh(minute);
time1[4] = BCD2LowerCh(minute);
time1[5] = ':';
time1[6] = BCD2UpperCh(sec);
time1[7] = BCD2LowerCh(sec);
time1[8] = ' ';
time1[9] = ampm;
time1[10] = 'M';
time1[11] = '\0';
 
Lcd_Out(1,5,ddate);
Lcd_Out(2,1,time1);
Delay_ms(50);
 
 
hour1=hour;
 
}
}
//------------------------------Start of Display Time in 12 hr system Section------------------------------------------
 
}
 
 
unsigned short read_ds1307(unsigned short address)
{
I2C1_Start();
I2C1_Wr(0xd0); //address 0x68 followed by direction bit (0 for write, 1 for read) 0x68 followed by 0 --> 0xD0
I2C1_Wr(address);
I2C1_Repeated_Start();
I2C1_Wr(0xd1); //0x68 followed by 1 --> 0xD1
dataa=I2C1_Rd(0);
I2C1_Stop();
return(dataa);
}
 
unsigned char BCD2UpperCh(unsigned char bcd)
{
return ((bcd >> 4) + '0');
}
 
unsigned char BCD2LowerCh(unsigned char bcd)
{
return ((bcd & 0x0F) + '0');
}
 
void write_ds1307(unsigned short address,unsigned short w_data)
{
I2C1_Start(); // issue I2C start signal
//address 0x68 followed by direction bit (0 for write, 1 for read) 0x68 followed by 0 --> 0xD0
I2C1_Wr(0xD0); // send byte via I2C (device address + W)
I2C1_Wr(address); // send byte (address of DS1307 location)
I2C1_Wr(w_data); // send data (data to be written)
I2C1_Stop(); // issue I2C stop signal
}[ATTACH=CONFIG]68374[/ATTACH]
 
first, thanks for the reply,
i'm new in this, so can u explain it to me? what is resistor mode and what is the pullup mode
 
In digital simulation, a resistor is an analogue primitive calculations done affect operation... As we know there needs to be SOME kind of pullup ISIS provides us with a digital primitive PULLUP model for such occations

In the parts library... Type in "PULLUP" and it will be show in the parts bin... This is the model you need.
 
Code:
/* Project name:
     RTC2_Read (Reading date/time data from DS1307 through I2C)
 * Copyright:
     (c) MikroElektronika, 2005-2010
 * Revision History:
     20121101:
       -  Author: ZHANG SHIWEN;
     20121101:
       -  Adapted for PRO compilers (TL);
 * Description:
     This project is simple demonstration how to read date and time from DS1307
     RTC (real-time clock). The code MCU use MSSP module at PORTC.
     Date and time are printed at LCD.
 * Test configuration:
     MCU:             PIC16F887
                      http://ww1.microchip.com/downloads/en/DeviceDoc/41291F.pdf
     Dev.Board:       EasyPIC6
                      http://www.mikroe.com/eng/products/view/297/easypic6-development-system/
     Oscillator:      HS, 8.000MHz
     Ext. Modules:    I2C RTC (DS1307) - ac:RTC2
                      http://www.mikroe.com/eng/products/view/197/rtc2-board/
                      LCD 2x16 chars - ac:LCD
                      http://www.mikroe.com/eng/products/view/277/various-components/
     SW:              mikroC PRO for PIC
                      http://www.mikroe.com/eng/products/view/7/mikroc-pro-for-pic/
 * NOTES:
     - For proper I2C communication, pins on PORTC must be in the pull-up mode,
       RC3 - pin 6 DS1307  - SCL,
       RC4 - pin 5 DS1307 - SDA,
       and the LEDs on board switched OFF!
*/



// LCD module connections-------------------------------------------------------------------------------------
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections---------------------------------------------------------------------------------

//------------------------------Declare Variables section--------------------------------------------------------
unsigned short read_ds1307(unsigned short address );
void write_ds1307(unsigned short address,unsigned short w_data);
unsigned short sec;
unsigned short minute;
unsigned short hour;
unsigned short day;
unsigned short date;
unsigned short month;
unsigned short year;
unsigned short dataa;
unsigned short a=0;
unsigned short b=0;
unsigned short yr=0;
unsigned short hour1;
char ddate[11];
char time[15];
char time1[15];
char ampm;
unsigned char dday;
unsigned char dhour;

unsigned char BCD2UpperCh(unsigned char bcd);
unsigned char BCD2LowerCh(unsigned char bcd);
//------------------------------End of Declare Variables section--------------------------------------------------------


void main(){
//------------------------------Start of Initialization Section-------------------------------------------------------------

ADCON1 = 0x06;
CMCON = 0x07;

TRISB = 0x00; // Configure PORTB as output
TRISC = 0xFF;
TRISD = 0xFF;
PORTD=0x00;

I2C1_Init(100000); //DS1307 I2C is running at 100KHz

Lcd_Init();
Lcd_Cmd(_Lcd_CLEAR); // Clear display
Lcd_Cmd(_Lcd_CURSOR_OFF); // Turn cursor off

Lcd_Out(1,1,"Test");   // test lcd
Delay_ms(1000);        // short delay to hold LCD data


//Set Time
write_ds1307(0,0x80); //Reset second to 0 sec. and stop Oscillator
write_ds1307(1,0x59); //write min 59
write_ds1307(2,0x11); //write hour 11 PM
write_ds1307(3,0x04); //write day
write_ds1307(4,0x15); // write date 15
write_ds1307(5,0x06); // write month June
write_ds1307(6,0x11); // write year 11 --> 2011
write_ds1307(7,0x10); //SQWE output at 1 Hz
write_ds1307(0,0x00); //Reset second to 0 sec. and start Oscillator
//------------------------------End of Initialization Section---------------------------------------------------------

while(1)
{
sec=read_ds1307(0); // read second
minute=read_ds1307(1); // read minute
hour=read_ds1307(2); // read hour
day=read_ds1307(3); // read day
date=read_ds1307(4); // read date
month=read_ds1307(5); // read month
year=read_ds1307(6); // read year

a=BCD2UpperCh(year);
b=BCD2LowerCh(year);
yr=a*10+b;
hour1 =hour;

//------------------------------Start of Setting Clock Time Section-------------------------------------------------------

if (PORTD.F0==1 && PORTD.F6==0)
{
   if (PORTD.F1==1){
   minute=minute+1;
   if (minute==0x0A||minute==0x1A||minute==0x2A||minute==0x3A||minute==0x4A){
   minute=minute+6;}
   else if (minute==0x5A){
   minute=0x00;} }

   else if (PORTD.F2==1)
   {
   hour=hour+1;
   if (hour==0x0A||hour==0x1A||hour==0x2A){
   hour=hour+6;}
   else if (hour==0x24){
   hour=0x00;} }

   else if (PORTD.F3==1) {
   date=date+1;
   day=day+1;
   if (month==0x01||month==0x03||month==0x05||month==0x07||month==0x08||month==0x10||month==0x12){
   if (date==0x0A||date==0x1A||date==0x2A){
   date=date+6;}
   else if (date==0x32){
   date=0x01;}

   if(day==8)
   day=1;}

   else if (month==0x04||month==0x06||month==0x09||month==0x11){
   if (date==0x0A||date==0x1A||date==0x2A){
   date=date+6;}
   else if (date==0x31){
   date=0x01;}

   if(day==8)
   day=1;}

   else if (month==0x02){
   if (yr%4==0){
   if (date==0x0A||date==0x1A){
   date=date+6;}
   else if (date==0x2A){
   date=0x01;}

   if(day==8)
   day=1;}

   else if (yr%4==3||yr%4==0||yr%4==1){
   if (date==0x0A||date==0x1A){
   date=date+6;}
   else if (date==0x29){
   date=0x01;}

   if(day==8)
   day=1;}
   }
   }

   else if (PORTD.F4==1) {
   month=month+1;
   if (month==0x0A||month==0x1A){
   month=month+6;}
   else if (month==0x13){
   month=0x01;}
   }



   else if (PORTD.F5==1) {
   year=year+1;
   if (year==0x0A||year==0x1A||year==0x2A||year==0x3A||year==0x4A||year==0x5A||year==0x6A||year==0x7A||year==0x8A){
   year=year+6;}
   else if (year==0x9A){
   year=0x11;}
   }

   else if (PORTD.F7 = 1){
   day = day + 1 ;
   if (day==0x8){
   year=0x01;}
   }

   Delay_ms(100);



write_ds1307(0,0x80);
write_ds1307(1, minute);
write_ds1307(2, hour);
write_ds1307(3, day);
write_ds1307(4, date);
write_ds1307(5, month);
write_ds1307(6, year);
write_ds1307(0,0x00);



dday = BCD2LowerCh(day);
if (dday == '1') {
Lcd_Out(1,1,"Sun");
}
else if (dday == '2') {
Lcd_Out(1,1,"Mon");
}
else if (dday == '3') {
Lcd_Out(1,1,"Tue");
}
else if (dday == '4') {
Lcd_Out(1,1,"Wed");
}
else if (dday == '5') {
Lcd_Out(1,1,"Thu");
}
else if (dday == '6') {
Lcd_Out(1,1,"Fri");
}
else if (dday == '7') {
Lcd_Out(1,1,"Sat");
}

ddate[0] = BCD2UpperCh(date);
ddate[1] = BCD2LowerCh(date);
ddate[2] = '/';
ddate[3] = BCD2UpperCh(month);
ddate[4] = BCD2LowerCh(month);
ddate[5] = '/';
ddate[6] = '2';
ddate[7] = '0';
ddate[8] = BCD2UpperCh(year);
ddate[9] = BCD2LowerCh(year);
ddate[10] = '\0';


time[0] = BCD2UpperCh(hour);
time[1] = BCD2LowerCh(hour);
time[2] = ':';
time[3] = BCD2UpperCh(minute);
time[4] = BCD2LowerCh(minute);
time[5] = ':';
time[6] = BCD2UpperCh(sec);
time[7] = BCD2LowerCh(sec);
time[8] = ' ';
time[9] = ' ';
time[10] = ' ';
time[11] = ' ';
time[12] = '\0';

Lcd_Out(1,5,ddate);
Lcd_Out(2,1,time);
Delay_ms(50);






   }
else if (PORTD.F0==0 && PORTD.F6==0)
{

dday = BCD2LowerCh(day);
if (dday == '1') {
Lcd_Out(1,1,"Sun");
}
else if (dday == '2') {
Lcd_Out(1,1,"Mon");
}
else if (dday == '3') {
Lcd_Out(1,1,"Tue");
}
else if (dday == '4') {
Lcd_Out(1,1,"Wed");
}
else if (dday == '5') {
Lcd_Out(1,1,"Thu");
}
else if (dday == '6') {
Lcd_Out(1,1,"Fri");
}
else if (dday == '7') {
Lcd_Out(1,1,"Sat");
}

ddate[0] = BCD2UpperCh(date);
ddate[1] = BCD2LowerCh(date);
ddate[2] = '/';
ddate[3] = BCD2UpperCh(month);
ddate[4] = BCD2LowerCh(month);
ddate[5] = '/';
ddate[6] = '2';
ddate[7] = '0';
ddate[8] = BCD2UpperCh(year);
ddate[9] = BCD2LowerCh(year);
ddate[10] = '\0';

time[0] = BCD2UpperCh(hour);
time[1] = BCD2LowerCh(hour);
time[2] = ':';
time[3] = BCD2UpperCh(minute);
time[4] = BCD2LowerCh(minute);
time[5] = ':';
time[6] = BCD2UpperCh(sec);
time[7] = BCD2LowerCh(sec);
time[8] = ' ';
time[9] = ' ';
time[10] = ' ';
time[11] = ' ';
time[12] = '\0';

Lcd_Out(1,5,ddate);
Lcd_Out(2,1,time);
Delay_ms(50);
}

//------------------------------End of Setting Clock Time Section-------------------------------------------------------
//------------------------------Start of Display Time in 12 hr system Section------------------------------------------
else if (PORTD.F0==0 && PORTD.F6==1)
{

dday = BCD2LowerCh(day);
if (dday == '1') {
Lcd_Out(1,1,"Sun");
}
else if (dday == '2') {
Lcd_Out(1,1,"Mon");
}
else if (dday == '3') {
Lcd_Out(1,1,"Tue");
}
else if (dday == '4') {
Lcd_Out(1,1,"Wed");
}
else if (dday == '5') {
Lcd_Out(1,1,"Thu");
}
else if (dday == '6') {
Lcd_Out(1,1,"Fri");
}
else if (dday == '7') {
Lcd_Out(1,1,"Sat");
}

ddate[0] = BCD2UpperCh(date);
ddate[1] = BCD2LowerCh(date);
ddate[2] = '/';
ddate[3] = BCD2UpperCh(month);
ddate[4] = BCD2LowerCh(month);
ddate[5] = '/';
ddate[6] = '2';
ddate[7] = '0';
ddate[8] = BCD2UpperCh(year);
ddate[9] = BCD2LowerCh(year);
ddate[10] = '\0';

if (hour1<0x12){
if (hour1==0){
hour1=0x12;
ampm= 'A';

}
else
ampm= 'A';
}

else if (hour1 == 0x12){
ampm= 'P';
}

else if (hour1>0x12 && hour1<0x20){
hour1=hour1-0x12;
ampm= 'P';
}

else if (hour1==0x20){
hour1=0x08;
ampm= 'P';
}

else if (hour1==0x21){
hour1=0x09;
ampm= 'P';
}

else if (hour1==0x22){
ampm= 'P';
hour1=0x10;
}

else if (hour1==0x23){
ampm= 'P';
hour1=0x11;
}

time1[0] = BCD2UpperCh(hour1);
time1[1] = BCD2LowerCh(hour1);
time1[2] = ':';
time1[3] = BCD2UpperCh(minute);
time1[4] = BCD2LowerCh(minute);
time1[5] = ':';
time1[6] = BCD2UpperCh(sec);
time1[7] = BCD2LowerCh(sec);
time1[8] = ' ';
time1[9] = ampm;
time1[10] = 'M';
time1[11] = '\0';

Lcd_Out(1,5,ddate);
Lcd_Out(2,1,time1);
Delay_ms(50);


hour1=hour;

}
}
//------------------------------Start of Display Time in 12 hr system Section------------------------------------------

}


unsigned short read_ds1307(unsigned short address)
{
I2C1_Start();
I2C1_Wr(0xd0); //address 0x68 followed by direction bit (0 for write, 1 for read) 0x68 followed by 0 --> 0xD0
I2C1_Wr(address);
I2C1_Repeated_Start();
I2C1_Wr(0xd1); //0x68 followed by 1 --> 0xD1
dataa=I2C1_Rd(0);
I2C1_Stop();
return(dataa);
}

unsigned char BCD2UpperCh(unsigned char bcd)
{
return ((bcd >> 4) + '0');
}

unsigned char BCD2LowerCh(unsigned char bcd)
{
return ((bcd & 0x0F) + '0');
}

void write_ds1307(unsigned short address,unsigned short w_data)
{
I2C1_Start(); // issue I2C start signal
//address 0x68 followed by direction bit (0 for write, 1 for read) 0x68 followed by 0 --> 0xD0
I2C1_Wr(0xD0); // send byte via I2C (device address + W)
I2C1_Wr(address); // send byte (address of DS1307 location)
I2C1_Wr(w_data); // send data (data to be written)
I2C1_Stop(); // issue I2C stop signal
}

this is my code, and this is my circuit, and i can not set the time, although i program the functions, but apparently there is something wrong in the code, can u point it out where went wrong?
View attachment 68379
 
Status
Not open for further replies.

New Articles From Microcontroller Tips

Back
Top