Serial writing to 7 segment display

For reasons I'm not sure of myself, I decided to try to use a Tiny as a base for a 4 digit countdown timer.
What I'm attempting is to break the countdown value into minutes, tens and units and seconds, tens and units. These digits form a stream to a 4518 counter the output of which would drive a 4511 to the display.
The appropriate CC is activated for a short period and the counter is reset between each digit and persistence of vision should give the impression of a constant display. Both chips are fed by separate 5v supply and everything is grounded together.
To prove the feasibility I'm starting with an Uno R3 clone to make changes easier.
The theory seems to work ONLY up to 2 digits. When I try to introduce a 3rd digit the whole display becomes nonsense although the program still seems to run. In trying to identify the problem I've swapped over the program cases and the physical connections. Everything seems to work independently using any 2 digits to any display, with the third case commented out. Could this be a timing issue?
Drawing attached.
Could anyone please shed any light on the cause?

unsigned long seconds = millis()/1000;
int pulse = 0;
int digit = 1;


int countDown = 120;  // Counting down 2 minute
unsigned long lastTick;

void setup() {
  Serial.begin(9600);
  pinMode(2, OUTPUT);   // pulsed output for display value
  pinMode(7,OUTPUT);    // reset for counter (active low)
  pinMode(8,OUTPUT);    // cc output display1
  pinMode(9,OUTPUT);    // cc output display2
   pinMode(10,OUTPUT);    // cc output display3

  digitalWrite(7, HIGH);  //reset for counter

}

void loop(){                                    // countdown and call display
 
  unsigned long currentMillis = millis();
 
  if(currentMillis - lastTick >= 1000){
    countDown--;
    

    lastTick += 1000;   
  } 
      showdisplay();
}


  
  



void showdisplay() {


unsigned countMin = (countDown / 60);             // calc No of minutes
unsigned countSec = (countDown % 60);             // calc No of seconds


unsigned countMinUnit = (countMin / 1U) % 10;     //get minutes units
unsigned secUnits = (countSec / 1U) % 10;         // get seconds units
unsigned secTens = (countSec / 10U) % 6;        // get seconds tens




 for (int digit=1; digit <4; digit++) {             // count through 3 displays


 


      switch (digit) {                            // get case for each digit of display







                          
          case 1:                                     // seconds units

             digitalWrite(7, LOW);                  //set counter (active low)

  
  for (pulse = 0; pulse < secUnits; pulse++){        // set the number of pulses to clock

  digitalWrite(2, HIGH);                           // rising pulse
                  
  digitalWrite(2, LOW);                           // falling pulse
                           
}                                                  // next pulse
                                                    // once count has been made activate display for that digit
           
           digitalWrite(8, LOW);                          // connect 0v to cc of display 1
      delay(10);                                     // time to show? try various
       digitalWrite(8, HIGH);                         // remove 0v from cc 1 (darken display)
      digitalWrite(7, HIGH);                        // reset counter 


              break;


              
              case 2:                                    //seconds tens
   
         digitalWrite(7, LOW);                      // set counter (active low)
                              
  
  for (pulse = 0; pulse < secTens; pulse++){        // set the number of pulses to clock

  
       digitalWrite(2, HIGH);                           // rising pulse
                  
        digitalWrite(2, LOW);                           // falling pulse
                           
}                                                     // next pulse
    

                                                   // once count has been made activate display for that digit
         digitalWrite(9, LOW);                          // connect 0v to cc of display 2

        delay(10);                                     // time to show? try various
         digitalWrite(9, HIGH);                         // remove 0v from cc 1 (darken display)
         digitalWrite(7, HIGH);                        // reset counter 
 
    
             
             
            break;

     
          case 3:                                 //minutes units

                            
        digitalWrite(7, LOW);                      // set counter (active low)
             
  
  for (pulse = 0; pulse < countMinUnit; pulse++){        // set the number of pulses to clock

  
    digitalWrite(2, HIGH);                           // rising pulse
              
     digitalWrite(2, LOW);                           // falling pulse
                    
}                                                  // next pulse
                                                    // once count has been made activate display for that digit
     digitalWrite(10, LOW);                          // connect 0v to cc of display 2
    delay(10);                                     // time to show? try various
     digitalWrite(10, HIGH);                         // remove 0v from cc 1 (darken display)
      digitalWrite(7, HIGH);                        // reset counter 
    break;    
 
                 
  
}     
      
}

}

(mod edit)

Where is the voltage being supplied from and is there a common ground ?

Could you also take a few moments to Learn How To Use The Forum.
Other general help and troubleshooting advice can be found here.
It will help you get the best out of the forum in the future.

Thanks for the reply. Sorry about posting in the wrong topic.
The Uno is powered from the usb and the 2 IC's are powered from a separate 5v supply (reads 5.15v and doesn't seem to drop when the program is running.
The Uno ground is linked to the breadboard ground.