mira aqui esta un ejemplo pero este no usa decodificadores, si no que mediante el puerto B escribo el numero que necesito y se va multiplexando
#include <16F88.h>
#USE DELAY( CLOCK=4000000)
#FUSES nowdt,noput,nobrownout,nolvp,noprotect,NOMCLR,INTRC_IO
byte CONST DISPLAY[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main(){
byte ud=0,dec=0;
SET_TRIS_B(0x00);
SET_TRIS_A(0x00);
OUTPUT_B(0);
for( ;; ){
for (dec=0;dec<10;dec++){ //Cuenta digito decenas
for (ud=0;ud<10;ud++){
OUTPUT_A(0x02); //cat_D=apagado,cat_U=encendido
OUTPUT_B(DISPLAY[ud]); //Digito unidades
delay_ms(100); //Para evitar parpadeos
if (dec==0) output_a(0x03); //Si decenas=0, cat_D=apagado
else output_a(0x01); //Si decenas>0, cat_D=encendido
OUTPUT_B(DISPLAY[dec]); //Digito decenas
delay_ms(100); //Para evitar parpadeos
}
}
}
}
Algo que puedes hacer es que del B0 al B3 manejes las unidades y del B4 al B7 las decenas, solo tendiras que estar realizando impreciones.
Ahora viendo lo que pides hay que manejar el puerto a y el puerto b asi que con un par de If seria mas que aqui nuestro problema es saber que tipo de lenguaje usas para programar