You need some code like this to keep track of the hours & minutes gone by
// when started flag is pressed, start counting in 10mS increments
if (started == 1){
currentmicros = micros(); // read the time.
elapsedmicros = currentmicros - previousmicros;
if (elapsedmicros >= interval) // 10 milliseconds have gone by
{
previousmicros = previousmicros + elapsedmicros; // save the time for the next comparison
time_update = 1; // set flag to shift out the new time
}
if (time_update == 1){ // no updating if not at 10ms interval, skip this whole section
// increment the counters, roll as needed, shift the digits out
time_update = 0; // reset for next pass thru
hundredths = hundredths +1;
if (hundredths == 10){
hundredths = 0;
tenths = tenths +1;
}
if (tenths == 10){
tenths = 0;
ones_seconds = ones_seconds +1;
}
if (ones_seconds == 10){
ones_seconds = 0;
hundredths = hundredths +3; // Speed up the clock!
tens_seconds = tens_seconds +1;
}
if (tens_seconds == 6){
tens_seconds = 0;
hundredths = hundredths +6; // Speed up the clock!
ones_minutes = ones_minutes +1;
}
if (ones_minutes == 10){
ones_minutes = 0;
tens_minutes = tens_minutes +1;
}
if (tens_minutes == 6){
tens_minutes = 0;
ones_hours = ones_hours +1; // not used in actual application, only here for stability test over longer time periods
}
if (ones_hours == 13){ // not used in actual application, only here for stability test over longer time periods
ones_hours = 0;
tens_hours = tens_hours +1;
}
if (paused == 0){
// not paused, update the display
// counters are all updated now, just do the shiftout one time here:
digitalWrite(latchpin, LOW); // send the digits down to the shift registers!
shiftOut(datapin, clockpin, MSBFIRST, segdisp[hundredths]); // print the hundredths digit
shiftOut(datapin, clockpin, MSBFIRST, segdisp[tenths]); // print the tenths digit
shiftOut(datapin, clockpin, MSBFIRST, segdisp[ones_seconds]); // print the lower seconds digit
shiftOut(datapin, clockpin, MSBFIRST, segdisp[tens_seconds]); // print the upper seconds digit
shiftOut(datapin, clockpin, MSBFIRST, segdisp[ones_minutes]); // print the lower sinutes digit
shiftOut(datapin, clockpin, MSBFIRST, segdisp[tens_minutes]); // print the upper minutes digit
digitalWrite(latchpin, HIGH);
if (tenths == 0 && hundredths == 0){ // update on screen once a second
} // end of 1 second check
} // end of time update is not paused
} // end if time to be updated