Secondo me dovresti separare la funzione di incremento con quella di visualizzazione che potresti far richiamare ad ogni loop.
void incrementa(){
Serial.println(millis());
num_csec++; //incremento centesimi di secondo
}
Non serve scrivere variabile=variabile++, ma basta variabile++
void visualizza(){
digitalWrite(massa_min2, HIGH); //comandi decodifica in multiplexing per 6 display!
digitalWrite(a, numeri_a[num_csec]);
digitalWrite(b, numeri_b[num_csec]);
digitalWrite(c, numeri_c[num_csec]);
digitalWrite(d, numeri_d[num_csec]);
digitalWrite(massa_csec, LOW);
delay(1);
digitalWrite(massa_csec, HIGH);
digitalWrite(a, numeri_a[num_dsec]);
digitalWrite(b, numeri_b[num_dsec]);
digitalWrite(c, numeri_c[num_dsec]);
digitalWrite(d, numeri_d[num_dsec]);
digitalWrite(massa_dsec, LOW);
delay(1);
digitalWrite(massa_dsec, HIGH);
digitalWrite(a, numeri_a[num_sec1]);
digitalWrite(b, numeri_b[num_sec1]);
digitalWrite(c, numeri_c[num_sec1]);
digitalWrite(d, numeri_d[num_sec1]);
digitalWrite(massa_sec1, LOW);
delay(1);
digitalWrite(massa_sec1, HIGH);
digitalWrite(a, numeri_a[num_sec2]);
digitalWrite(b, numeri_b[num_sec2]);
digitalWrite(c, numeri_c[num_sec2]);
digitalWrite(d, numeri_d[num_sec2]);
digitalWrite(massa_sec2, LOW);
delay(1);
digitalWrite(massa_sec2, HIGH);
digitalWrite(a, numeri_a[num_min1]);
digitalWrite(b, numeri_b[num_min1]);
digitalWrite(c, numeri_c[num_min1]);
digitalWrite(d, numeri_d[num_min1]);
digitalWrite(massa_min1, LOW);
delay(1);
digitalWrite(massa_min1, HIGH);
digitalWrite(a, numeri_a[num_min2]);
digitalWrite(b, numeri_b[num_min2]);
digitalWrite(c, numeri_c[num_min2]);
digitalWrite(d, numeri_d[num_min2]);
digitalWrite(massa_min2, LOW);
delay(1);
}
void loop(){
.......
visualizza();
}