Thursday, January 20, 2022

Real Time Clock With PIC16F877A



This Project will demonstrate the real time clock interface with PIC 16F877A


To do this project we need following software:   


   1. MikroC pro for PIC (student verison)
   2. Proteus 8 professional

CODE


//DS1307 Real Time Clock with PIC16F877A

 

// LCD module connections

 

sbit LCD_RS at RD0_bit;

sbit LCD_EN at RD1_bit;

sbit LCD_D4 at RD2_bit;

sbit LCD_D5 at RD3_bit;

sbit LCD_D6 at RD4_bit;

sbit LCD_D7 at RD5_bit;

 

sbit LCD_RS_Direction at TRISD0_bit;

sbit LCD_EN_Direction at TRISD1_bit;

sbit LCD_D4_Direction at TRISD2_bit;

sbit LCD_D5_Direction at TRISD3_bit;

sbit LCD_D6_Direction at TRISD4_bit;

sbit LCD_D7_Direction at TRISD5_bit;

 

// End LCD module connections

 unsigned char *text, second, second10, minute, minute10,

               hour, hour10, date, date10, month, month10,

               year, year10, day, i = 0;

 

 void display()

 {

    //Split data into tow parts

    second10  =  (second & 0x70) >> 4;

    second = second & 0x0F;

    minute10  =  (minute & 0x70) >> 4;

    minute = minute & 0x0F;

    hour10  =  (hour & 0x30) >> 4;

    hour = hour & 0x0F;

    date10  =  (date & 0x30) >> 4;

    date = date & 0x0F;

    month10  =  (month & 0x10) >> 4;

    month = month & 0x0F;

    year10  =  (year & 0xF0) >> 4;

    year = year & 0x0F;

 

    //Display Time

    Lcd_Chr(1, 13, second + 48);

    Lcd_Chr(1, 12, second10 + 48);

    Lcd_Chr(1, 10, minute + 48);

    Lcd_Chr(1, 9, minute10 + 48);

    Lcd_Chr(1, 7, hour + 48);

    Lcd_Chr(1, 6, hour10 + 48);

    //Display calendar

    Lcd_Chr(2, 7, date + 48);

    Lcd_Chr(2, 6, date10 + 48);

    Lcd_Chr(2, 10, month + 48);

    Lcd_Chr(2, 9, month10 + 48);

    Lcd_Chr(2, 15, year + 48);

    Lcd_Chr(2, 14, year10 + 48);

  }  

 void main()

 {

     LCD_Init();

     LCD_Cmd(_LCD_CURSOR_OFF);

     LCD_Cmd(_LCD_CLEAR);

     LCD_Out(1,1, "REAL TIME CLOCK");

     LCD_Out(2,1, "GSM MAHFUZ LIKHON");

     delay_ms(2000);

     LCD_Cmd(_LCD_CLEAR);

 

     TRISB = 3;

     Lcd_Init();                // Initialize LCD

     Lcd_Cmd(_LCD_CLEAR);       // Clear LCD display

     Lcd_Cmd(_LCD_CURSOR_OFF);  // Turn cursor off

     I2C1_Init(100000);         // initialize I2C at 100KHz

     return_:

     text = "TIME:  :  :" ;

     Lcd_Out(1, 1, text);

     text = "DATE:  /  /20" ;

     Lcd_Out(2, 1, text);

     write_value(0, 0);   //Reset seconds and start oscillator

    

     while(1)

     {

       if(i == 1)

       {

         Lcd_Cmd(_LCD_CLEAR);

         text = "Adjust Minute:";

         Lcd_Out(1, 2, text);

         minute = minute + minute10 * 10;

         while(1){

         if (Button(&PORTB, 0, 100, 0)) i++;

         if(i!=1){

         minute = ((minute/10) << 4) + (minute % 10);

         write_value( 1 , minute);

         goto return_;}

         if (Button(&PORTB, 1, 100, 0)) minute++;

         if (minute > 59) minute = 0;

         Lcd_Chr(2, 8, (minute/10) + 48);

         Lcd_Chr(2, 9, (minute % 10) + 48);}

       }

      

       if(i == 2)

       {

         Lcd_Cmd(_LCD_CLEAR);

         text = "Adjust Hour:";

         Lcd_Out(1, 2, text);

         hour = hour + hour10 * 10;

         while(1){

         if (Button(&PORTB, 0, 100, 0)) i++;

         if(i!=2){

         hour = ((hour/10) << 4) + (hour % 10);

         write_value( 2 , hour);

         goto return_;}

         if (Button(&PORTB, 1, 100, 0)) hour++;

         if (hour > 23) hour = 0;

         Lcd_Chr(2, 8, (hour/10) + 48);

         Lcd_Chr(2, 9, (hour % 10) + 48);}

       }

      

       if(i == 3)

       {

         Lcd_Cmd(_LCD_CLEAR);

         text = "Adjust Date:";

         Lcd_Out(1, 2, text);

         date = date + date10 * 10;

         while(1){

         if (Button(&PORTB, 0, 100, 0)) i++;

         if(i!=3){

         date = ((date/10) << 4) + (date % 10);

         write_value( 4 , date);

         goto return_;}

         if (Button(&PORTB, 1, 100, 0)) date++;

         if (date > 31) date = 1;

         Lcd_Chr(2, 8, (date/10) + 48);

         Lcd_Chr(2, 9, (date % 10) + 48);}

       }

      

       if(i == 4)

       {

         Lcd_Cmd(_LCD_CLEAR);

         text = "Adjust Month:";

         Lcd_Out(1, 2, text);

         month = month + month10 * 10;

         while(1){

         if (Button(&PORTB, 0, 100, 0)) i++;

         if(i!=4){

         month = ((month/10) << 4) + (month % 10);

         write_value( 5 , month);

         goto return_;}

         if (Button(&PORTB, 1, 100, 0)) month++;

         if (month > 12) month = 1;

         Lcd_Chr(2, 8, (month/10) + 48);

         Lcd_Chr(2, 9, (month % 10) + 48);}

       }

      

       if(i == 5)

       {

         Lcd_Cmd(_LCD_CLEAR);

         text = "Adjust Year:";

         Lcd_Out(1, 2, text);

         year = year + year10 * 10;

         while(1){

         if (Button(&PORTB, 0, 100, 0)) {i++;

         if (i > 5) i = 0;}

         if(i!=5){

         year = ((year/10) << 4) + (year % 10);

         write_value( 6 , year);

         goto return_;}

         if (Button(&PORTB, 1, 100, 0)) year++;

         if (year > 99) year = 0;

         Lcd_Chr(2, 7, 2 + 48);

         Lcd_Chr(2, 8, 0 + 48);

         Lcd_Chr(2, 9, (year/10) + 48);

         Lcd_Chr(2, 10, (year % 10) + 48);}

       }

      

       if (Button(&PORTB, 0, 100, 0)) i++;

     

        display();

    }

}


Schematic






Video










No comments:

Post a Comment

Line Follower Robot using Arduino

This project was a part of Line Follower Robot Competition