El método de visualización es el de multiplexión o conmutación, en donde los displays se encienden de forma alternada uno a la vez. Si la velocidad de conmutación es elevada, se observan los 3 displays como si estuviesen encendidos al mismo tiempo. (para este caso 1ms)
program Termómetro2'Programa Termómetro con displays de 7 segmentos *************************************
'Rutina que permite medir y visualizar con tres displays de 7 segmentos un rango de
'temperatura entre 0 y 150 grados(C) empleando el conversor ADC del PIC + sensor LM35.
'Mikrobasic 7.2
'
'Creado y verificado por: Alejandro De Nóbrega
'Web: http://www.jvmbots.es
'
'-HARDWARE:
' MCU: PIC 16F88
' Cristal o resonador: 4Mhz
' 3- Displays cátodo común. (RB0) --> SegA, (RB1) --> SegB, ..... (RB6) --> SegG.
' 1- Sensor de temperatura LM35 (RA0)
' 7- Resistencias de 220R
' 3- Resistencias de 1K
' 3- Transistores NPN de uso general (2N2222)
' El cátodo del display de la derecha (menos significativo) se conecta a través
' del transistor, cuya base se conecta en RA1, el segundo display en RA2 y el
' tercer display en RA3.
'************************************************************************************dim valor, conv, aux as word
const numero as byte[10] = (63, 6, 91, 79, 102, 109, 125, 7, 127, 111)
main:OPTION_REG = 0
INTCON = 0
ANSEL = %00000001
CMCON = %00000111
TRISA = %00000001
TRISB = %00000000
PORTB = 0
PORTA = 0
while true
valor = ADC_read(0)
aux = valor * 61
aux = aux / 125
valor = aux
conv = Dec2Bcd16(valor)
aux = conv and $000F
PORTB = numero[aux]
PORTA.1 = 1
delay_ms(1)
PORTA.1 = 0
conv = word(conv >> 4)
aux = conv and $000F
PORTB = numero[aux]
PORTA.2 = 1
delay_ms(1)
PORTA.2 = 0
conv = word(conv >> 4)
aux = conv and $000F
PORTB = numero[aux]
PORTA.3 = 1
delay_ms(1)
PORTA.3 = 0
wend
end.

Video de la simulación en proteus (simulación a muy baja velocidad, 500ms de retardo entre displays):
Programa optimizado:
program Termómetro2.1
dim valor, conv, aux as word
dim i as byte
const numero as byte[10] = (63, 6, 91, 79, 102, 109, 125, 7, 127, 111)
main:
OPTION_REG = 0
INTCON = 0
ANSEL = %00000001
CMCON = %00000111
TRISA = %00000001
TRISB = %00000000
PORTB = 0
PORTA = 0
while true
valor = ADC_read(0)
valor = valor * 61
valor = valor / 125
conv = Dec2Bcd16(valor)
for i = 1 to 3
aux = conv and $000F
PORTB = numero[aux]
PORTA.i = 1
delay_ms(1)
PORTA.i = 0
conv = word(conv >> 4)
next i
wend
end.






