Es bastante lio, porque tenía un par de display de ánodo común y quería ver como usarlos.
No es ningún problema. El programa tiene una tabla con los valores del 0 al 9 para displays de cátodo común.
O sea, esta:
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
El primer número en hexadecimal: 3F es el 0, el 06 es el 1, el 5B es el 2, etc.
Necesitas cambiarlos por los que serían para ánodo común:
El 0 sería: 0xC0, el 1 sería: 0x9F, el 2 sería: 0xA4, etc.
Y también se necesita invertir la activación de los displays.
Si para cátodo común, el bit 0 corresponde al display 4 (LSB) activado por 1 lógico que después de usar un transistor NPN se obtendrá un 0 por colector para el cátodo.
Entonces invirtiendo este bit, tendríamos que el puerto B tendría la siguiente secuencia (LSB a MSB):
Display unidades = 0b11111110 "0xFE"
Display decenas = 0b11111101 "0xFD"
Display centenas = 0b11111011 "0xFB"
Etcétera.
Y lo haces con output_b(valor); Por ejemplo: output_b(0xFE);
Así se obtendrá un 0 como bit de activación para un transistor PNP por display de ánodo común.
Éste deberá dar un 1 por colector, ya que el emisor deberá estar hacia VCC.
Y también se debe invertir la activación y desactivación del punto.
Lo ves. No es ningún lio.