954,535 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

digital clock

i face a problem, im doing a programing that program into the PIC16F684. im doing a digital clock, now i only able to show the second value that display 1 to 60, i dont know how to do the minute value. im using while loop.

while(1 == 1)              
    {
        if (0 == DisplayLED)
        {
            RA5 = LEDDigit[DisplayValue %10] >> 6; 
            PORTC = LEDDigit[DisplayValue %10] & 0x03F;
        }
        else
        {
            RA5 = LEDDigit[(DisplayValue /10) & 0x0F] >> 6; 
            PORTC = LEDDigit[(DisplayValue /10) & 0x0F] & 0x03F;
        }  
        TRISA = TRISA ^ 0b011111;  
        PORTA = PORTA & 0b111100;  
        DisplayLED = DisplayLED ^ 1;  //  Other Digit Next

        NOP();                  
        for (i = 0; i < 660; i++); 
        NOP();                 

        j = j + 1;             
        if (100 == j)           
        {
            DisplayValue++;    
            j = 0;              
        }  
    }

how to add the minutes value? as well hour and day...thank... S.O.S.....

vedybird
Newbie Poster
2 posts since Mar 2007
Reputation Points: 10
Solved Threads: 0
 

Well first I'd probably rename DisplayValue to be something more meaningful like DisplaySeconds.

Then I might add

if ( DisplaySeconds == 60 ) {
    DisplaySeconds = 0;
    DisplayMinutes++;
}


I gather from your code you have a pair of 7-segment displays for displaying seconds.
Do you have another pair for the minutes as well.

Salem
Posting Sage
Team Colleague
11,531 posts since Dec 2005
Reputation Points: 5,862
Solved Threads: 953
 

yeah, i got the right circuit diagram just dont know how to write the program to apply the minutes. i had connected 4 7segments to the 4 transistors and the 4 transistors connected to RA0, RA1, RA2 and RA3 on the PIC16F684.
should i add another if...else statement in the while loop? where should i add into if yes. thank

vedybird
Newbie Poster
2 posts since Mar 2007
Reputation Points: 10
Solved Threads: 0
 

Here's an algorhithm in C/C++. You can convert it into whatever you're using.

int sec = 0;
int min = 0;
int hour = 0;
while(1)
{
   sleep(1000); //delay in milliseconds
   ++sec;
    if(sec == 60)
    {
      sec = 0;
      ++min;
       if(min == 60)
       {
           min = 0;
          ++hour;
          if(hour == 24)
          {
             hour = 0;
          }
       }
    }
   display(hour, min, sec);
}
Lerner
Nearly a Posting Maven
2,382 posts since Jul 2005
Reputation Points: 739
Solved Threads: 396
 

Well what you do in software depends entirely on what you've done with the hardware.

Say for example, you use 4 bits to drive one 7-segment display, then use the other 4 bits to choose one of 4 displays

Say
bit 7 selects the 10's for M
bit 6 selects the units for M
bit 5 selects the 10's for S
bit 4 selects the units for S

Salem
Posting Sage
Team Colleague
11,531 posts since Dec 2005
Reputation Points: 5,862
Solved Threads: 953
 

plz i need full program of digital clock in c++

giv me peply

nagarajuamrabad
Newbie Poster
2 posts since Jul 2009
Reputation Points: 10
Solved Threads: 0
 

digital clock program code is needed..try to solve my probs.

nagarajuamrabad
Newbie Poster
2 posts since Jul 2009
Reputation Points: 10
Solved Threads: 0
 

when your display value reaches 60, you add 1 to minutes, and
keep doing this until your minutes adds to 1 hour;

Try this circular loop :

displayValue = ++displayValue % 60;
min = displayValue % 60 + displayValue/60
hour = min % 60  + min/60
firstPerson
Senior Poster
3,923 posts since Dec 2008
Reputation Points: 841
Solved Threads: 608
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You