need timer to count and display time from zero to 30 days (day-hour:min:sec)

A minute or two? Wow!
My crystal based duemilanove only drifts a second a day.
I use micros( ) to track the seconds, how is your code doing it?

void loop(){
currentMicros = micros();
if ((currentMicros - previousMicros)>=1000000){ // check for 1 second passed
  previousMicros = previousMicros + 1000000; //
  time_update = 1;
seconds = seconds +1;
if (seconds == 10){
   seconds = 0;
   tens_seconds = tens_seconds +1;
    if (tens_seconds == 6){
    tens_seconds = 0;
    etc. for minutes, hours, days
    }
  }
}  
// done with with counter updates
// update display if needed
if (time_udpate == 1){
time_update = 0;
// send data to the MAX7219 ...
  }
// do other stuff your code might do

} // end ofvoid loop

Battery backed RTC could keep you going during power loss, especially if the sketch start time is stored in the RTC SRAM
(DS1307 has 56 bytes for example) and the sketch does the math to show the elapsed time from the stored startup and the current time.