Cambio entre displays con botón (Led 7 segmentos)

Realizar un programa en el Arduino para controlar un display de 7 segmentos x 3.
Para la realización de la práctica se necesitan un display de 7 segmentos de 3 módulos (x3)
y dos pulsadores (no se cuentan los cables y resistencias necesarias).
Uno de los dos pulsadores permitirá seleccionar el módulo que se quiere mostrar
(sólo se muestra 1 simultáneamente), es decir, cada pulsación se avanzará al módulo siguiente,
considerando que hay 3 módulos que se numerarán del 1 al 3. El otro pulsador, cuando se pulse,
incrementará en 1 el valor del display seleccionado con el pulsador anterior.
El programa debe recordar que valor tenía cada uno de los displays.Nos ha dicho el profesor que esto
ultimo se hace con vectores */

int num = 0;
int delayTime;
int counter=1;
// estadoBoton1 será el que pulse para contar
//estadoBoton2 será el que cambie entre módulos
int estadoBoton1 = 0; 
int estadoBoton2 = 0;
int P1 = 3;
int P2 = 2;
//Displays multiplexados
int LED1=4;
int LED2=5;
int LED3=6;
void setup (){
//Entradas digitales de los Botones
pinMode(P2, INPUT); 
pinMode(P1, INPUT);
//Salidas digitales 
pinMode(7, OUTPUT); 
pinMode(8, OUTPUT); 
pinMode(9, OUTPUT); 
pinMode(10, OUTPUT); 
pinMode(11, OUTPUT); 
pinMode(12, OUTPUT); 
pinMode(13, OUTPUT);
//3 Leds multiplexados
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);

}

void loop(){

estadoBoton1 = digitalRead(P1); 
estadoBoton2 = digitalRead(P2); 
Serial.println(estadoBoton1);
delay(50);
Serial.println(estadoBoton2);
delay(50);

//Contador del 1 al 9 y vuelve al 0
 if (estadoBoton1 == HIGH) { 
    num = num+ 1; 
  } 
if (num >= 10){
  num=0;
}
//A partir de aqui lo he copiado de internet que se supone que es para cambiar entre displays, pero no he comprobado si funciona
 if (estadoBoton2 == HIGH) { 
    counter + 1;
 }
    //resetear contador
    if(counter == 4) {
      counter = 1;
    }
    
  } 
  
  if(counter == 1)
  {
    delayTime = 250;
  }
  else if(counter == 2)
  {
    delayTime = 100;
  }
  else if(counter == 3)
  {
    delayTime = 50;
  }
  
  //Light show!
  digitalWrite(LED4, HIGH);
  delay(delayTime);
  digitalWrite(LED4, LOW);
  digitalWrite(LED5, HIGH);
  delay(delayTime);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, HIGH);
  delay(delayTime);
  digitalWrite(LED6, LOW);
  delay(delayTime);
}


//Esto ya lo teniamos de antes, es para mostrar cada uno de los numeros
switch (num) { 
case 0: 
limpiar(); 
cero(); 
break; 
case 1: 
limpiar(); 
uno(); 
break; 
case 2: 
limpiar(); 
dos(); 
break; 
case 3: 
limpiar(); 
tres(); 
break; 
case 4: 
limpiar(); 
cuatro(); 
break; 
case 5: 
limpiar(); 
cinco(); 
break; 
case 6: 
limpiar(); 
seis(); 
break; 
case 7: 
limpiar(); 
siete(); 
break; 
case 8: 
limpiar(); 
ocho(); 
break;
case 9:
limpiar();
nueve();
}

}

void cero(){ 
digitalWrite(7,HIGH); 
digitalWrite(8,HIGH); 
digitalWrite(9,HIGH); 
digitalWrite(10,HIGH); 
digitalWrite(11,HIGH); 
digitalWrite(12,HIGH); 
}

void uno(){ 
digitalWrite(8,HIGH); 
digitalWrite(9,HIGH); 
} 
void dos(){ 
digitalWrite(7,HIGH); 
digitalWrite(8,HIGH); 
digitalWrite(10,HIGH); 
digitalWrite(11,HIGH); 
digitalWrite(13,HIGH); 
} 
void tres(){ 
digitalWrite(7,HIGH); 
digitalWrite(8,HIGH); 
digitalWrite(9,HIGH); 
digitalWrite(10,HIGH); 
digitalWrite(13,HIGH); 
} 
void cuatro(){ 
digitalWrite(8,HIGH); 
digitalWrite(9,HIGH); 
digitalWrite(12,HIGH); 
digitalWrite(13,HIGH); 
} 
void cinco(){ 
digitalWrite(7,HIGH); 
digitalWrite(9,HIGH); 
digitalWrite(10,HIGH); 
digitalWrite(12,HIGH); 
digitalWrite(13,HIGH); 
} 
void seis(){ 
digitalWrite(7,HIGH); 
digitalWrite(9,HIGH); 
digitalWrite(10,HIGH); 
digitalWrite(11,HIGH); 
digitalWrite(12,HIGH); 
digitalWrite(13,HIGH);

} 
void siete(){ 
digitalWrite(7,HIGH); 
digitalWrite(8,HIGH); 
digitalWrite(9,HIGH);

} 
void ocho(){

digitalWrite(7,HIGH); 
digitalWrite(8,HIGH); 
digitalWrite(9,HIGH); 
digitalWrite(10,HIGH); 
digitalWrite(11,HIGH); 
digitalWrite(12,HIGH); 
digitalWrite(13,HIGH); 
}

void nueve(){

digitalWrite(7,HIGH); 
digitalWrite(8,HIGH); 
digitalWrite(9,HIGH); 
digitalWrite(12,HIGH); 
digitalWrite(13,HIGH);

}
void limpiar(){ 
digitalWrite(7,LOW); 
digitalWrite(8,LOW); 
digitalWrite(9,LOW); 
digitalWrite(10,LOW); 
digitalWrite(11,LOW); 
digitalWrite(12,LOW); 
digitalWrite(13,LOW); 
}

este tema ya lo había leído unos días antes jejeje
se trata de una tarea, he?
si se puede con vectores o arreglos, es lo mismo.

Edit:

el código no me compila bien.
al menos puedes ver bien los números?

Loadapte de un programa que hice he un tiempo.

// display 4 digit 7 segments
int Digit1 = 10;
int Digit2 = 11;
int Digit3 = 12;
int Digit4 = 13;

int SegmentA = 2;
int SegmentB = 3;
int SegmentC = 4;
int SegmentD = 5;
int SegmentE = 6;
int SegmentF = 7;
int SegmentG = 8;
int SegmentDP = 9;

/*==============*/
byte botonA;
byte botonB;
byte num[4];
byte DX=1;
byte NX=1;
/*
              (A)
          ============                
        //          //
    (F)//          // (B)
      //   (G)    //
      ============
    //          //
(E)//          //(C)
  //          //
  ============    o (DP)
      (D)

*/

void setup() {
  // put your setup code here, to run once:
  pinMode(Digit1, OUTPUT);
  pinMode(Digit2, OUTPUT);
  pinMode(Digit3, OUTPUT);
  pinMode(Digit4, OUTPUT);

  pinMode(SegmentA, OUTPUT);
  pinMode(SegmentB, OUTPUT);
  pinMode(SegmentC, OUTPUT);
  pinMode(SegmentD, OUTPUT);
  pinMode(SegmentE, OUTPUT);
  pinMode(SegmentF, OUTPUT);
  pinMode(SegmentG, OUTPUT);
  pinMode(SegmentDP, OUTPUT);
/* ============================ */

  pinMode(A1,INPUT);
  digitalWrite(A1,HIGH);
  pinMode(A2,INPUT);
  digitalWrite(A2,HIGH);
}

void loop() {
  // put your main code here, to run repeatedly: 
  botonA = digitalRead(A1);
  botonB = digitalRead(A2);
  
  if(!botonA)    //cambia el digito
  {  
   DX++;
   delay(200);    //delay anti rebote
   if(DX > 3) DX=1;
  }
  
  if(!botonB)    //cambia el numero del digito
  {
    num[DX] = NX;
    NX++;
    delay(200);    //delay anti rebote
    if(NX > 9) NX=0;
  }

  numero(num[1]);  
  digitalWrite(Digit1,HIGH);
  delay(1);
  digitalWrite(Digit1,LOW);
  numero(num[2]);
  digitalWrite(Digit2,HIGH);  
  delay(1);
  digitalWrite(Digit2,LOW);
  numero(num[3]);
  digitalWrite(Digit3,HIGH);
  delay(1);
  digitalWrite(Digit3,LOW);
}

// numeros
void numero(int i) //dibuja el numero especificado antes se debe encender el digito
{

  switch (i){

  case 1: 
    digitalWrite(SegmentA, HIGH);
    digitalWrite(SegmentB, LOW);
    digitalWrite(SegmentC, LOW);
    digitalWrite(SegmentD, HIGH);
    digitalWrite(SegmentE, HIGH);
    digitalWrite(SegmentF, HIGH);
    digitalWrite(SegmentG, HIGH);
    break;

  case 2:
    digitalWrite(SegmentA, LOW);
    digitalWrite(SegmentB, LOW);
    digitalWrite(SegmentC, HIGH);
    digitalWrite(SegmentD, LOW);
    digitalWrite(SegmentE, LOW);
    digitalWrite(SegmentF, HIGH);
    digitalWrite(SegmentG, LOW);
    break;

  case 3:
    digitalWrite(SegmentA, LOW);
    digitalWrite(SegmentB, LOW);
    digitalWrite(SegmentC, LOW);
    digitalWrite(SegmentD, LOW);
    digitalWrite(SegmentE, HIGH);
    digitalWrite(SegmentF, HIGH);
    digitalWrite(SegmentG, LOW);
    break;

  case 4:
    digitalWrite(SegmentA, HIGH);
    digitalWrite(SegmentB, LOW);
    digitalWrite(SegmentC, LOW);
    digitalWrite(SegmentD, HIGH);
    digitalWrite(SegmentE, HIGH);
    digitalWrite(SegmentF, LOW);
    digitalWrite(SegmentG, LOW);
    break;

  case 5: 
    digitalWrite(SegmentA, LOW);
    digitalWrite(SegmentB, HIGH);
    digitalWrite(SegmentC, LOW);
    digitalWrite(SegmentD, LOW);
    digitalWrite(SegmentE, HIGH);
    digitalWrite(SegmentF, LOW);
    digitalWrite(SegmentG, LOW);
    break;

  case 6:
    digitalWrite(SegmentA, LOW);
    digitalWrite(SegmentB, HIGH);
    digitalWrite(SegmentC, LOW);
    digitalWrite(SegmentD, LOW);
    digitalWrite(SegmentE, LOW);
    digitalWrite(SegmentF, LOW);
    digitalWrite(SegmentG, LOW);
    break;

  case 7:
    digitalWrite(SegmentA, LOW);
    digitalWrite(SegmentB, LOW);
    digitalWrite(SegmentC, LOW);
    digitalWrite(SegmentD, HIGH);
    digitalWrite(SegmentE, HIGH);
    digitalWrite(SegmentF, HIGH);
    digitalWrite(SegmentG, HIGH);
    break;

  case 8:
    digitalWrite(SegmentA, LOW);
    digitalWrite(SegmentB, LOW);
    digitalWrite(SegmentC, LOW);
    digitalWrite(SegmentD, LOW);
    digitalWrite(SegmentE, LOW);
    digitalWrite(SegmentF, LOW);
    digitalWrite(SegmentG, LOW);
    break;

  case 9:
    digitalWrite(SegmentA, LOW);
    digitalWrite(SegmentB, LOW);
    digitalWrite(SegmentC, LOW);
    digitalWrite(SegmentD, LOW);
    digitalWrite(SegmentE, HIGH);
    digitalWrite(SegmentF, LOW);
    digitalWrite(SegmentG, LOW);
    break;

  case 0:
    digitalWrite(SegmentA, LOW);
    digitalWrite(SegmentB, LOW);
    digitalWrite(SegmentC, LOW);
    digitalWrite(SegmentD, LOW);
    digitalWrite(SegmentE, LOW);
    digitalWrite(SegmentF, LOW);
    digitalWrite(SegmentG, HIGH);
    break;
  }
}