Hola..
este sirve para multiplexar tres displays, sin usar un decoa la salida sino directamente a los displays, usa la interrupcion del tmr0, espero sirva:
Codigo:
int conv (int);
#define ON_TR1 output_high(PIN_B5)
#define OFF_TR1 output_low(PIN_B5)
#define ON_TR2 output_high(PIN_B6)
#define OFF_TR2 output_low(PIN_B6)
#define ON_TR3 output_high(PIN_B7)
#define OFF_TR3 output_low(PIN_B7)
int otr,otr1,dig1,dig2,dig3;
short flag=0;
#byte port_c = 7
#int_RTCC
visualizacion(){
if(otr==2){ //Primer display
ON_TR1; //habilita el primer transistor
port_c=dig1; //pone el dato en el display
delay_us(300); //un pequeño delay para que salga bien la visualizacion
}else OFF_TR1;
if(otr==3){
ON_TR2;
port_c=dig2+128;
delay_us(300);
}else OFF_TR2;
if(otr==4){
ON_TR3;
port_c=dig3;
delay_us(300);
otr=0;
}else OFF_TR3;
otr++;
}
int conv(int x){ // para decodificar el numero de BCD a 7 segmentos
switch (x){
case 0: return(192);
case 1: return(249);
case 2: return(164);
case 3: return(176);
case 4: return(153);
case 5: return(146);
case 6: return(131);
case 7: return(248);
case 8: return(128);
case 9: return(152);
default: break;
}
}