Cronometro

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();
}