AYUDA CON ERROR EN SUBRUTINA

BUEN DIA AMIGOS necesito ayuda con el siguiente programa es para controlar dos display 7 segmentos con un teclado 3*4, la subrutina de los displays me muestra error. muchas gracias por su colaboracion

#include <Keypad.h>

// empieza codigo necesario

const byte filas=4;
const byte columnas=3;
byte pinsFilas[filas]={8,7,6,5}; // en orden f1,f2,f3,f4
byte pinsColumnas[columnas]={4,3,2}; // en orden C1,c2,c3,

char teclas[filas][columnas]={

{ '1','2','3'},
{ '4','5','6'},
{ '7','8','9'},
{ '*','0','#'}
};
Keypad teclado = Keypad ( makeKeymap(teclas),pinsFilas,pinsColumnas,filas,columnas);

//termina codigo necesario
char tecla;
int uni;
int dece;
int cont;
int num;

void setup(){
Serial.begin(9600);
pinMode (13,OUTPUT);
pinMode (12,OUTPUT);
pinMode (11,OUTPUT);
pinMode (10,OUTPUT);
pinMode (9,OUTPUT);
pinMode (A0,OUTPUT);
pinMode (A1,OUTPUT);
pinMode (A2,OUTPUT);
pinMode (A3,OUTPUT);

}

void loop (){
tecla= teclado.getKey();
if(tecla!=NO_KEY&&cont==0 ){
uni=tecla-48;

cont=cont+1;
if (tecla==NO_KEY){

num=uni;

digitalWrite (A2,HIGH);
digitalWrite (A3,LOW);
disp();
}
}
if(tecla!=NO_KEY&&cont==1){
dece=tecla-48;
cont=0;
if (tecla==NO_KEY){
digitalWrite (A2,LOW);
digitalWrite (A3,HIGH);
dece=tecla-48;
num=dece;

disp(); llama a disp
}
}

}

void disp (int a, int b, int c, int d, int e, int f, int g)
// Funcion del display

{ switch (num){
case 0:
disp (1,1,1,1,1,1,0); //escribe 0
break;
case 1:
disp (0,1,1,0,0,0,0); //escribe 1
break;
case 2:
disp (1,1,0,1,1,0,1); //escribe 2
break;
case 3:
disp (1,1,1,1,0,0,1); //escribe 3
break;
case 4 :
disp (0,1,1,0,0,1,1); //escribe 4
break;
case 5:
disp (1,0,1,1,0,1,1); //escribe 5
break;
case 6:
disp (1,0,1,1,1,1,1); //escribe 6
break;
case 7:
disp (1,1,1,0,0,0,0); //escribe 7
break;
case 8:
disp (1,1,1,1,1,1,1); //escribe 8
break;
case 9:
disp (1,1,1,0,0,1,1); //escribe 9
break;
}

digitalWrite (A0,f); //Se reciben 7 variables y se asignan
digitalWrite (A1,g); //a cada una de las salidas
digitalWrite (9,a);
digitalWrite (10,b);
digitalWrite (11,c);
digitalWrite (12,d);
digitalWrite (13,e);
}

Hay un post muy similar a este, que juraría era tuyo, pero acabo de comprobar que tienes solo este post, asi que, me equivoqué.
Lo buscaré para que lo uses de guía.

Hola.
Tu función disp recibe siete números; sin embargo la llamas desde loop sin parámetros, y luego desde dentro de la función disp vuelves a autollamarte, esta vez sí, con los parámetros. Tiene pinta de copia-pega mal hecho. El switch debería estar en otra función distinta sin parámetros que es a la que deberías llamar desde el loop; y luego esa función (el case correspondiente) es la que llamará a disp, con los siete parámetros de los segmentos.

Bueno yo he corregido lo que estaba mal pero no entiendo que quiereshacer con los contadores y como decides que va como unidad y que como decena.

Me lo explicas y lo modifico

#include <Keypad.h>

// empieza codigo necesario

byte numero[] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xb6, 0x3E, 0xE0, 0xFE, 0xF6};
const byte filas       = 4; 
const byte columnas    = 3;
byte pinsFilas[filas]  = {8,7,6,5};  // en orden f1,f2,f3,f4
byte pinsColumnas[columnas] = {4,3,2};  // en orden C1,c2,c3,

char teclas[filas][columnas]={
    { '1','2','3'},
    { '4','5','6'},
    { '7','8','9'},
    { '*','0','#'}
};

Keypad teclado = Keypad ( makeKeymap(teclas),pinsFilas,pinsColumnas,filas,columnas);

//termina codigo necesario
char tecla    = '1';
char teclaAnt = '0';
int uni;
int dece;
int cont = 0;
int num;

void setup(){
    Serial.begin(9600);
    pinMode (13,OUTPUT);
    pinMode (12,OUTPUT);
    pinMode (11,OUTPUT);
    pinMode (10,OUTPUT);
    pinMode (9,OUTPUT);
    pinMode (A0,OUTPUT);
    pinMode (A1,OUTPUT);
    pinMode (A2,OUTPUT);
    pinMode (A3,OUTPUT);
}
  
void loop (){
    tecla = teclado.getKey()-48;
    if (tecla != teclaAnt) { 
        if ((tecla) > 0)
            Serial.print(tecla);
        num = teclaAnt = tecla;  
    }
    disp();
    digitalWrite (A2,HIGH);
    digitalWrite (A3,LOW);
    
//    if (tecla != NO_KEY && cont == 0 ){
//        uni = tecla-48;
//            
//        cont = cont+1;
//        if (tecla == NO_KEY){
//            num = uni;
//            digitalWrite (A2,HIGH);
//            digitalWrite (A3,LOW);
//            disp();
//        }
//    }
//    if (tecla != NO_KEY && cont==1){
//       dece = tecla-48;
//       cont = 0;
//       if (tecla == NO_KEY){
//          digitalWrite (A2,LOW);
//          digitalWrite (A3,HIGH);
//          dece = tecla-48;
//          num  = dece;
//          disp(); // llama a disp
//       }
//    }
}

void disp() { // Funcion del display
   
    switch (num){
      case 0:
            display(1,1,1,1,1,1,0); //escribe 0
            break;
      case 1: 
            display(0,1,1,0,0,0,0); //escribe 1
            break;
     case 2: 
            display(1,1,0,1,1,0,1); //escribe 2   
            break;
     case 3:
            display (1,1,1,1,0,0,1); //escribe 3
            break;
     case 4 :
            display (0,1,1,0,0,1,1); //escribe 4
            break;
     case 5:
            display (1,0,1,1,0,1,1); //escribe 5
            break;
     case 6:
            display (1,0,1,1,1,1,1); //escribe 6
            break;
     case 7:
            display (1,1,1,0,0,0,0); //escribe 7
            break;
     case 8:
            display (1,1,1,1,1,1,1); //escribe 8
            break;
     case 9:
            display (1,1,1,0,0,1,1); //escribe 9
            break;
    }
}  

void display (byte a, byte b, byte c, byte d, byte e, byte f, byte g)// Función del display
{
      digitalWrite ( 9, a);
      digitalWrite (10, b);
      digitalWrite (11, c);
      digitalWrite (12, d);
      digitalWrite (13, e);
      digitalWrite (A0, f);   //Se reciben 7 variables y se asignan
      digitalWrite (A1, g);   //a cada una de las salidas
}