Te pongo lo que tengo yo:
No utilizo multiplexor para el display, era añadir un integrado más, así que codifiqué los digitos.
void main()
{
int dig[10]={0xE7, 0x84, 0xD3, 0xD6, 0xB4, 0x76, 0x77, 0xC4, 0xF7, 0xF4}; // Codificamos los digitos para el display según nuestras conexiones
long temp;
setup_adc_ports(sAN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
set_tris_a(0x01);
for(;
{
output_b(dig[temp%10]);
output_high(PIN_A4);
delay_ms(2);
temp = (long)(temp/10);
output_b(dig[temp%10]);
output_high(PIN_A3);
delay_ms(2);
temp = (long)(temp/10);
output_b(dig[temp%10]);
output_high(PIN_A2);
delay_ms(2);
for(i=0; i<200;i++) //Tomas 200 muestras y las sumas en grados_temperatura
{
grados_temperatura += read_adc();
}
grados_temperatura /= 200; //aqui calculas el promedio de 200 muestras;
temp = (long)(((long)grados_temperatura*4.88)/10); // 5000mV / 1024 (10 bits) muestras posibles
}
}
Espero que te sirva.
Un saludo. Au.