Contador 0-9999 con Display 7 Segmentos

Hola amigos soy nuevo en arduino y me encuentro en proceso de autoaprendizaje.

Les pido disculpas si me equivoco de sección en el foro, para publicar mi inquietud.

La cosa es sencilla, quiero hacer un contador de 0 - 9999, con un display siete segmentos de cátodo común. claro con multiplexación. El contador es automatico, o sea, no depende de un pulsador o una señal externa que le brinde los pulsos para contar

Disculpas también, por lo extenso del código y sus redundancias, después trabajaré en reducirlo.

El problema que tengo, es que la primera cifra, avanza con mucha velocidad, lo que me hace que sea poco práctico, sin más, le dejo:

//PARA SIETE SEGMENTOS DE KATODO COMÚN 9999

int A=2;
int B=3;
int C=4;
int D=5;
int E=6;
int F=7;
int G=8;
int cont1=0;
int cont2=0;
int cont3=0;
int cont4=0;
int Delay=0;

int k=0;



void setup() {
  for(int i=2;i<=12;i++){               // put your setup code here, to run once:
  pinMode(i,OUTPUT);                     //pines de salida, del 2 al 8
  }

}

void cero(){
  digitalWrite(A,1);//  escribir 0 
  digitalWrite(B,1);
  digitalWrite(C,1);
  digitalWrite(D,0);
  digitalWrite(E,1);
  digitalWrite(F,1);
  digitalWrite(G,1);
}

void uno(){
  digitalWrite(A,0);//  escribir 1
  digitalWrite(B,0);
  digitalWrite(C,1);
  digitalWrite(D,0);
  digitalWrite(E,0);
  digitalWrite(F,0);
  digitalWrite(G,1);
}

void dos(){
  digitalWrite(A,1);//  escribir 2
  digitalWrite(B,1);
  digitalWrite(C,0);
  digitalWrite(D,1);
  digitalWrite(E,0);
  digitalWrite(F,1);
  digitalWrite(G,1);
}

void tres(){
  digitalWrite(A,0);//  escribir 3
  digitalWrite(B,1);
  digitalWrite(C,1);
  digitalWrite(D,1);
  digitalWrite(E,0);
  digitalWrite(F,1);
  digitalWrite(G,1);
}

void cuatro(){
  digitalWrite(A,0);//  escribir 4
  digitalWrite(B,0);
  digitalWrite(C,1);
  digitalWrite(D,1);
  digitalWrite(E,1);
  digitalWrite(F,0);
  digitalWrite(G,1);
}  

void cinco(){
  digitalWrite(A,0);//  escribir 5
  digitalWrite(B,1);
  digitalWrite(C,1);
  digitalWrite(D,1);
  digitalWrite(E,1);
  digitalWrite(F,1);
  digitalWrite(G,0);
}

void seis(){
  digitalWrite(A,1);//  escribir 6
  digitalWrite(B,1);
  digitalWrite(C,1);
  digitalWrite(D,1);
  digitalWrite(E,1);
  digitalWrite(F,0);
  digitalWrite(G,0);
}

void siete(){
  digitalWrite(A,0);//  escribir 7
  digitalWrite(B,0);
  digitalWrite(C,1);
  digitalWrite(D,0);
  digitalWrite(E,0);
  digitalWrite(F,1);
  digitalWrite(G,1);
}

void ocho(){
  digitalWrite(A,1);//  escribir 8
  digitalWrite(B,1);
  digitalWrite(C,1);
  digitalWrite(D,1);
  digitalWrite(E,1);
  digitalWrite(F,1);
  digitalWrite(G,1);
}

void nueve(){
  digitalWrite(A,0);//  escribir 9
  digitalWrite(B,0);
  digitalWrite(C,1);
  digitalWrite(D,1);
  digitalWrite(E,1);
  digitalWrite(F,1);
  digitalWrite(G,1);
}

void siete_segmentos(){

  switch (cont4){
              case 0:
              cero();
              break;

              case 1:
              uno();
              break;

              case 2:
              dos();
              break;

              case 3:
              tres();
              break;

              case 4:
              cuatro();
              break;
              
              case 5:
              cinco();
              break;
              
              case 6:
              seis();
              break;
              
              case 7:
              siete();
              break;
              
              case 8:
              ocho();
              break;
              
              case 9:
              nueve();
              break;
  }

}
void siete_segmentos1(){

  switch (cont3){
              case 0:
              cero();
              break;

              case 1:
              uno();
              break;

              case 2:
              dos();
              break;

              case 3:
              tres();
              break;

              case 4:
              cuatro();
              break;
              
              case 5:
              cinco();
              break;
              
              case 6:
              seis();
              break;
              
              case 7:
              siete();
              break;
              
              case 8:
              ocho();
              break;
              
              case 9:
              nueve();
              break;
  }
}

void siete_segmentos2(){
     

  switch (cont2){
              case 0:
              cero();
              break;

              case 1:
              uno();
              break;

              case 2:
              dos();
              break;

              case 3:
              tres();
              break;

              case 4:
              cuatro();
              break;
              
              case 5:
              cinco();
              break;
              
              case 6:
              seis();
              break;
              
              case 7:
              siete();
              break;
              
              case 8:
              ocho();
              break;
              
              case 9:
              nueve();
              break;
  }
}
  
void siete_segmentos3(){
     

  switch (cont1){
              case 0:
              cero();
              break;

              case 1:
              uno();
              break;

              case 2:
              dos();
              break;

              case 3:
              tres();
              break;

              case 4:
              cuatro();
              break;
              
              case 5:
              cinco();
              break;
              
              case 6:
              seis();
              break;
              
              case 7:
              siete();
              break;
              
              case 8:
              ocho();
              break;
              
              case 9:
              nueve();
              break;
  }
}



void cifra(){
     

  switch (k){
              case 0:
              siete_segmentos();
              digitalWrite(12,1);
              digitalWrite(11,0);
              digitalWrite(10,0);
              digitalWrite(9,0);
            
              break;

              case 1:
              siete_segmentos1();
              digitalWrite(12,0);
              digitalWrite(11,1);
              digitalWrite(10,0);
              digitalWrite(9,0);
             
              break;

              case 2:
              siete_segmentos2();
              digitalWrite(12,0);
              digitalWrite(11,0);
              digitalWrite(10,1);
              digitalWrite(9,0);
              
              break;

              case 3:
              siete_segmentos3();
              digitalWrite(12,0);
              digitalWrite(11,0);
              digitalWrite(10,0);
              digitalWrite(9,1);
              break;

              
  }
}



void loop() {

while(Delay>100){
   Delay=0; 
    if(cont4>9){
    cont4=0;
    cont3++;
    if(cont3>9){
      cont3=0;
      cont2++;
      if(cont2>9){
        cont2=0;
        cont1++;
        if(cont1>9){
          cont1=0;
          }
        }
      }
    }
}
  Delay++;
 for(k=0;k<=3;k++){
     cifra();
     delay(1);
     }
    cont4++; 

}

Usa esta librería SevSeg Library, te simplificará muchos problemas de software.
Ajusta tu conexionado al ejemplo disponible y luego nos cuentas.

Ya, solucionado. Me disculpo por el mal titulo del inicio. Falta de comprensión lectora, entendí mal la reglas del foro, comprendí que esos eran los mejores títulos.

Aca el codigo, para que alguien lo utilice, o lo optimice.

/*-----------------------------------------------------
 *-----------------------------------------------------
 *SUICHEO DE LOS SEGMENTOS CON 2N2222
 *-----------------------------------------------------
 *-----------------------------------------------------
 *-----------------------------------------------------
 *-----------------------------------------------------
 *-----------------------------------------------------
 * ATENCIÓN, LOS SIETE SEGMENTOS ESTAN MAL NOMBRADOS,
  EL SEGMENTO A, NO CORRESPONDE CON A LA REALIDAD
  -----------------------------------------------------
  -----------------------------------------------------
  -----------------------------------------------------
  ---------------------------------------------------*/

//PARA SIETE SEGMENTOS DE KATODO COMÚN

int A=2;
int B=3;
int C=4;
int D=5;
int E=6;
int F=7;
int G=8;
int cont1=0;
int cont2=0;
int cont3=0;
int cont4=0;
int tiempo=1;//VARIABLE QUE CONTROLA LA VELOCIDAD DEL CONTADOR, 100 = 2 SEGUNDOS
int J=0;
int k=0;



void setup() {
  for(int i=2;i<=12;i++){// put your setup code here, to run once:
  pinMode(i,OUTPUT);//pines de salida, del 2 al 8
  }
  pinMode(13,INPUT_PULLUP);//pin 13, como emtrada y pullup

  
  Serial.begin(9600);
}

void cero(){
  digitalWrite(A,1);//  escribir 0 
  digitalWrite(B,1);
  digitalWrite(C,1);
  digitalWrite(D,0);
  digitalWrite(E,1);
  digitalWrite(F,1);
  digitalWrite(G,1);
}

void uno(){
  digitalWrite(A,0);//  escribir 1
  digitalWrite(B,0);
  digitalWrite(C,1);
  digitalWrite(D,0);
  digitalWrite(E,0);
  digitalWrite(F,0);
  digitalWrite(G,1);
}

void dos(){
  digitalWrite(A,1);//  escribir 2
  digitalWrite(B,1);
  digitalWrite(C,0);
  digitalWrite(D,1);
  digitalWrite(E,0);
  digitalWrite(F,1);
  digitalWrite(G,1);
}

void tres(){
  digitalWrite(A,0);//  escribir 3
  digitalWrite(B,1);
  digitalWrite(C,1);
  digitalWrite(D,1);
  digitalWrite(E,0);
  digitalWrite(F,1);
  digitalWrite(G,1);
}

void cuatro(){
  digitalWrite(A,0);//  escribir 4
  digitalWrite(B,0);
  digitalWrite(C,1);
  digitalWrite(D,1);
  digitalWrite(E,1);
  digitalWrite(F,0);
  digitalWrite(G,1);
}  

void cinco(){
  digitalWrite(A,0);//  escribir 5
  digitalWrite(B,1);
  digitalWrite(C,1);
  digitalWrite(D,1);
  digitalWrite(E,1);
  digitalWrite(F,1);
  digitalWrite(G,0);
}

void seis(){
  digitalWrite(A,1);//  escribir 6
  digitalWrite(B,1);
  digitalWrite(C,1);
  digitalWrite(D,1);
  digitalWrite(E,1);
  digitalWrite(F,0);
  digitalWrite(G,0);
}

void siete(){
  digitalWrite(A,0);//  escribir 7
  digitalWrite(B,0);
  digitalWrite(C,1);
  digitalWrite(D,0);
  digitalWrite(E,0);
  digitalWrite(F,1);
  digitalWrite(G,1);
}

void ocho(){
  digitalWrite(A,1);//  escribir 8
  digitalWrite(B,1);
  digitalWrite(C,1);
  digitalWrite(D,1);
  digitalWrite(E,1);
  digitalWrite(F,1);
  digitalWrite(G,1);
}

void nueve(){
  digitalWrite(A,0);//  escribir 9
  digitalWrite(B,0);
  digitalWrite(C,1);
  digitalWrite(D,1);
  digitalWrite(E,1);
  digitalWrite(F,1);
  digitalWrite(G,1);
}

void siete_segmentos(){

  switch (cont4){
              case 0:
              cero();
              break;

              case 1:
              uno();
              break;

              case 2:
              dos();
              break;

              case 3:
              tres();
              break;

              case 4:
              cuatro();
              break;
              
              case 5:
              cinco();
              break;
              
              case 6:
              seis();
              break;
              
              case 7:
              siete();
              break;
              
              case 8:
              ocho();
              break;
              
              case 9:
              nueve();
              break;
  }

}
void siete_segmentos1(){

  switch (cont3){
              case 0:
              cero();
              break;

              case 1:
              uno();
              break;

              case 2:
              dos();
              break;

              case 3:
              tres();
              break;

              case 4:
              cuatro();
              break;
              
              case 5:
              cinco();
              break;
              
              case 6:
              seis();
              break;
              
              case 7:
              siete();
              break;
              
              case 8:
              ocho();
              break;
              
              case 9:
              nueve();
              break;
  }
}

void siete_segmentos2(){
     

  switch (cont2){
              case 0:
              cero();
              break;

              case 1:
              uno();
              break;

              case 2:
              dos();
              break;

              case 3:
              tres();
              break;

              case 4:
              cuatro();
              break;
              
              case 5:
              cinco();
              break;
              
              case 6:
              seis();
              break;
              
              case 7:
              siete();
              break;
              
              case 8:
              ocho();
              break;
              
              case 9:
              nueve();
              break;
  }
}
  
void siete_segmentos3(){
     

  switch (cont1){
              case 0:
              cero();
              break;

              case 1:
              uno();
              break;

              case 2:
              dos();
              break;

              case 3:
              tres();
              break;

              case 4:
              cuatro();
              break;
              
              case 5:
              cinco();
              break;
              
              case 6:
              seis();
              break;
              
              case 7:
              siete();
              break;
              
              case 8:
              ocho();
              break;
              
              case 9:
              nueve();
              break;
  }
}



void cifra(){
     

  switch (k){
              case 0:
              siete_segmentos();
              digitalWrite(12,1);
              digitalWrite(11,0);
              digitalWrite(10,0);
              digitalWrite(9,0);
            
              break;

              case 1:
              siete_segmentos1();
              digitalWrite(12,0);
              digitalWrite(11,1);
              digitalWrite(10,0);
              digitalWrite(9,0);
             
              break;

              case 2:
              siete_segmentos2();
              digitalWrite(12,0);
              digitalWrite(11,0);
              digitalWrite(10,1);
              digitalWrite(9,0);
              
              break;

              case 3:
              siete_segmentos3();
              digitalWrite(12,0);
              digitalWrite(11,0);
              digitalWrite(10,0);
              digitalWrite(9,1);
              break;

              
  }
}



void loop() {

  if(J==tiempo){
   J=0;
   if(cont4>9){
    cont4=0;
    cont3++;
    if(cont3>9){
      cont3=0;
      cont2++;
      if(cont2>9){
        cont2=0;
        cont1++;
        if(cont1>9){
          cont1=0;
          }
        }
      }
    }
    cont4++;
  }
 for(k=0;k<=3;k++){
     cifra();
     delay(3);//tiempo de refresco entre segmentos
     }
J++;

}

No leíste lo que te sugerí?