EngineersGarage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise
You are here: Home / Topics / 7 Segment Based Digital Clocl With Time Set Using AT89C51.

7 Segment Based Digital Clocl With Time Set Using AT89C51.

|

Microcontroller › 8051 › 7 Segment Based Digital Clocl With Time Set Using AT89C51.

  • This topic has 3 replies, 3 voices, and was last updated 9 years ago by Anonymous.
Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • February 23, 2014 at 9:09 am #4847
    Venkatesh Joshi
    Participant

    I tried 7 Seg Based Digital clock with Time Set Using AT89C51 circuit,But It Finaly it displas Minute and Seconds,Not showing Hrs and Minute as per citcuit,,Can any one help me and resolve..?

     

    February 24, 2014 at 4:33 am #11092
    SHAH DISHANT H.
    Participant

    Hi,

     

    You can display HR:MM:SECONDS using three multiplexed 7 segment display. It seems you have to make minor changes in code. Can you please post the code that you have used?

    February 24, 2014 at 5:03 am #11093
    Venkatesh Joshi
    Participant

    Thank u .Pls find the code bellow.

     

     // Program to make a clock with time setting functionality.


    #include<reg51.h>
    sbit dig_ctrl_4=P1^0; //Declare the control pins of the seven segment
    sbit dig_ctrl_3=P1^1;
    sbit dig_ctrl_2=P1^2;
    sbit dig_ctrl_1=P1^3;
    sbit reset=P1^4; // Reset pin to reset the clock.
    sbit start=P1^7; //Start pin to start the clock after the time is set.
    sbit incr=P1^6; //Increment pin to increase the digits during time setting.
    sbit set=P1^5; // Set pin to set the time.
    int sel_seg_to_incr=0;
    int ret_seg_to_incre=0;
    int recnt_incr_seg;
    unsigned char dig_disp=0;
    int min2=0;
    int min1=0;
    int sec2=0;
    int sec1=0;
    char dig_val[10]={0x40,0xF9,0x24,0x30,0x19,0x12,0x02,0xF8,0x00,0x10}; // to store values corresponding to digits 0 to 9

    void delay(int a) // Function to provide a time delay of approx. 1 second using Timer1.
    {
    int i;
    for(i=0;i<a;i++)
    {
    TL1=0xFD;
    TH1=0x4B;
    TR1=1;
    while(TF1==0);
    TR1=0;
    TF1=0;
    }
    }

    int setfn() // Function to select minute and seconds digit to be set.
    {
    while(set==0)
    {
    switch(recnt_incr_seg)
    {
    case 1:
    if(set==0) //select the min2 digit
    {
    dig_ctrl_4=1;
    dig_ctrl_3=0;
    dig_ctrl_2=0;
    dig_ctrl_1=0;
    recnt_incr_seg=1;
    ret_seg_to_incre=1;
    P2=dig_val[min2];
    delay(20);
    }

    case 2:
    if(set==0) // Select the min1 digit
    {
    dig_ctrl_4=0;
    dig_ctrl_3=1;
    dig_ctrl_2=0;
    dig_ctrl_1=0;
    recnt_incr_seg=2;
    ret_seg_to_incre=2;
    P2=dig_val[min1];
    delay(20);
    }

    case 3:
    if(set==0) //Select the sec 2 digit
    {
    dig_ctrl_4=0;
    dig_ctrl_3=0;
    dig_ctrl_2=1;
    dig_ctrl_1=0;
    recnt_incr_seg=3;
    ret_seg_to_incre=3;
    P2=dig_val[sec2];
    delay(20);
    }

    case 4:
    if(set==0) //Select the sec1 digit
    {
    recnt_incr_seg=1;
    dig_ctrl_4=0;
    dig_ctrl_3=0;
    dig_ctrl_2=0;
    dig_ctrl_1=1;
    ret_seg_to_incre=4;
    P2=dig_val[sec1];
    delay(20);
    recnt_incr_seg=1;
    }
    }
    }
    return(ret_seg_to_incre);
    }

    void increase(int a) //Function to set the minute or seconds digit
    {
    while(incr==0)
    {
    switch(a)
    {
    case 1: // To set the min2 digit.
    P2=dig_val[min2]; //Display the value of min2
    delay(15);
    min2++;
    if(min2==6)
    min2=0;
    P2=dig_val[min2];
    delay(5);
    break;

    case 2: //To set the min1 digit.
    P2=dig_val[min1];
    delay(15);
    min1++;
    if(min1==10)
    min1=0;
    P2=dig_val[min1];
    delay(5);
    break;

    case 3: // To set the sec2 digit.
    P2=dig_val[sec2];
    delay(15);
    sec2++;
    if(sec2==6)
    sec2=0;
    P2=dig_val[sec2];
    delay(5);
    break;

    case 4: //To set the sec1 digit.
    P2=dig_val[sec1];
    delay(15);
    sec1++;
    if(sec1==10)
    sec1=0;
    P2=dig_val[sec1];
    delay(5);
    break;
    }
    }
    }

    void resetfn() // This function brings the clock to reset or set mode.
    {
    IE=0x80; //Disable timer0 interrupt to stop the display of the clock
    sel_seg_to_incr=1;
    recnt_incr_seg=1;
    dig_ctrl_4=1;
    dig_ctrl_3=0;
    dig_ctrl_2=0;
    dig_ctrl_1=0;
    P2=dig_val[min2];
    delay(5);
    while(1)
    {
    if(start==0) //check if start pin is pressed
    {
    TMOD=0x11; //reset the timer0
    TL0=0xf6;
    TH0=0xFf;
    IE=0x82; //enabling again the timer0 interrupt to start displaying of the clock
    TR0=1;
    break; // break loop and return to main program
    }

    if(set==0) //if set pin is pressed call set function
    sel_seg_to_incr=setfn();

    if(incr==0) // if incr pin is pressed call incr function
    increase(sel_seg_to_incr);
    }
    }
    void display() interrupt 1 // function to display the values on seven segmnet. For more details refer seven segment multiplexing.
    {
    TL0=0x36; //reloading timer0
    TH0=0xf6;
    P2=0xFF;
    dig_ctrl_1 = dig_ctrl_3 = dig_ctrl_2 = dig_ctrl_4 = 0;
    dig_disp++;
    dig_disp=dig_disp%4;
    switch(dig_disp)
    {
    case 0:
    P2=dig_val[sec1];
    dig_ctrl_1 = 1;
    break;

    case 1:
    P2= dig_val[sec2];
    dig_ctrl_2 = 1;
    break;

    case 2:
    P2= dig_val[min1];
    dig_ctrl_3 = 1;
    break;

    case 3:
    P2= dig_val[min2];
    dig_ctrl_4 = 1;
    break;
    }
    }

    void main() //main function the programs begins from here
    {
    set=1; //delaring set, reset, start and incr as input pins
    reset=1;
    start=1;
    incr=1;
    TMOD=0x11; //enabling timer0
    TL0=0xf6; //loading timer0
    TH0=0xFf;
    IE=0x82; //initialize timer0 interrupt
    TR0=1; //triggering timer0
    while(1) //forward counting of clock
    {
    while(min2<6)
    {
    while(min1<10)
    {
    while(sec2<6)
    {
    while(sec1<10)
    {
    if(reset==0)
    resetfn();
    delay(20);
    sec1++;
    }
    sec1=0;
    sec2++;
    }
    sec1=0;
    sec2=0;
    min1++;
    }
    sec1=0;
    sec2=0;
    min1=0;
    min2++;
    }
    min2=0;
    }
    }

     
    May 20, 2016 at 11:30 am #13930
    Anonymous
    Guest

    i tried its also display only the minutes and seconds ..i need to diaplay with hours and minute so anyone has plz upload or send to [email protected]

  • Author
    Posts
Viewing 4 posts - 1 through 4 (of 4 total)
  • You must be logged in to reply to this topic.
Log In

RSS Recent Posts

  • Curved lines in PCB design June 15, 2025
  • using a RTC in SF basic June 15, 2025
  • Parts required for a personal project June 15, 2025
  • Wideband matching an electrically short bowtie antenna; 50 ohm, 434 MHz June 15, 2025
  • PIC KIT 3 not able to program dsPIC June 15, 2025

Stay Up To Date

Newsletter Signup
EngineersGarage

Copyright © 2025 WTWH Media LLC. All Rights Reserved. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of WTWH Media
Privacy Policy | Advertising | About Us

Search Engineers Garage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise