Este es uno de los proyectos que llevé a cabo cuando cursé electrónica industrial, espero sirva a aquellos que estan comenzando al igual que yo en el mundo de los microcontroladores:
puedes visitar tambien esta pagina: ahi hay mas proyectos y tutoriales
http://todopic.servepics.com/La programacion fue llevada a cabo en MikroBasic y la he modificado para la comprencion del lector
el sensor es un LM35

program TERMOMETRODIGITAL
SYMBOL PULS1 = TESTBIT(PORTB,4)
SYMBOL PULS2 = TESTBIT(PORTB,5)
DIM VIN AS WORD
DIM R1, R2 AS WORD
DIM K AS WORD
DIM UNIMIL, CENT, DECE, UNIT AS WORD
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SUB PROCEDURE GET_AN
VIN = Adc_Read(0) ''leer el valor de AN0
VIN = VIN * 61
VIN = VIN / 50
PULS1
PULS2
IF (PORTB.4 = 1) AND (PORTB.5 = 0)THEN
K = ((((9 * VIN) / 5) + 320))
ELSE
IF (PORTB.5 = 1) AND (PORTB.4 = 0) THEN
K = VIN
ELSE
IF (PORTB.4 = 0) AND (PORTB.5 = 0) THEN
K = K
END IF
END IF
END IF
END SUB
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SUB PROCEDURE CONV_DEC_BIN
IF (K >= 0) AND (K <= 9) THEN
UNIMIL = 0
CENT = 0
DECE = 0
UNIT = K
END IF
IF (K >= 10) AND (K <= 99) THEN
UNIMIL = 0
CENT = 0
DECE = K / 10
UNIT = K - (DECE * 10)
END IF
IF (K >= 100) AND (K <= 999) THEN
UNIMIL = 0
CENT = K / 100
R1 = K - (CENT * 100)
DECE = R1 / 10
UNIT = R1 - (DECE * 10)
END IF
IF (K >= 1000) AND (K <= 2500) THEN
UNIMIL = K / 1000
R1 = K - (UNIMIL * 1000)
CENT = R1 / 100
R2 = R1 - (CENT * 100)
DECE = R2 / 10
UNIT = R2 - (DECE * 10)
END IF
END SUB
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SUB PROCEDURE HAB1 ''habilitar display 1
PORTB = %00000001
END SUB
SUB PROCEDURE HAB2 ''habilitar display 2
PORTB = %00000010
END SUB
SUB PROCEDURE HAB3 ''habilitar display 3
PORTB = %00000100
END SUB
SUB PROCEDURE HAB4 ''habilitar display 4
PORTB = %00001000
END SUB
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SUB PROCEDURE DESHAB
PORTB = %00000000
END SUB
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SUB PROCEDURE VALOR0
PORTC = %01000000
END SUB
SUB PROCEDURE VALOR1
PORTC = %01111001
END SUB
SUB PROCEDURE VALOR2
PORTC = %00100100
END SUB
SUB PROCEDURE VALOR3
PORTC = %00110000
END SUB
SUB PROCEDURE VALOR4
PORTC = %00011001
END SUB
SUB PROCEDURE VALOR5
PORTC = %00010010
END SUB
SUB PROCEDURE VALOR6
PORTC = %00000010
END SUB
SUB PROCEDURE VALOR7
PORTC = %01111000
END SUB
SUB PROCEDURE VALOR8
PORTC = %00000000
END SUB
SUB PROCEDURE VALOR9
PORTC = %00010000
END SUB
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
main:
ADCON1 = $80 ''poner el PortA como entrada analogica
TRISC = %00000000 ''PortC.0 hasta PortC.6 (displays)
TRISB = %00110000 ''Salidas para activar los displays(las 4 primeras)
''entrada de pulsador (ºF y ºC)
GET_AN
K = VIN
WHILE TRUE
GET_AN
CONV_DEC_BIN
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
IF UNIT = 0 THEN
VALOR0
else
IF UNIT = 1 THEN
VALOR1
else
IF UNIT = 2 THEN
VALOR2
else
IF UNIT = 3 THEN
VALOR3
else
IF UNIT = 4 THEN
VALOR4
else
IF UNIT = 5 THEN
VALOR5
else
IF UNIT = 6 THEN
VALOR6
else
IF UNIT = 7 THEN
VALOR7
else
IF UNIT = 8 THEN
VALOR8
else
IF UNIT = 9 THEN
VALOR9
end if
end if
end if
end if
end if
end if
end if
end if
end if
end if
HAB1
DELAY_MS(7)
DESHAB
'---------------------------------------------------
IF DECE = 0 THEN
VALOR0
else
IF DECE = 1 THEN
VALOR1
else
IF DECE = 2 THEN
VALOR2
else
IF DECE = 3 THEN
VALOR3
else
IF DECE = 4 THEN
VALOR4
else
IF DECE = 5 THEN
VALOR5
else
IF DECE = 6 THEN
VALOR6
else
IF DECE = 7 THEN
VALOR7
else
IF DECE = 8 THEN
VALOR8
else
IF DECE = 9 THEN
VALOR9
end if
end if
end if
end if
end if
end if
end if
end if
end if
end if
HAB2
DELAY_MS(7)
DESHAB
'---------------------------------------------------
IF CENT = 0 THEN
VALOR0
else
IF CENT = 1 THEN
VALOR1
else
IF CENT = 2 THEN
VALOR2
else
IF CENT = 3 THEN
VALOR3
else
IF CENT = 4 THEN
VALOR4
else
IF CENT = 5 THEN
VALOR5
else
IF CENT = 6 THEN
VALOR6
else
IF CENT = 7 THEN
VALOR7
else
IF CENT = 8 THEN
VALOR8
else
IF CENT = 9 THEN
VALOR9
end if
end if
end if
end if
end if
end if
end if
end if
end if
end if
HAB3
DELAY_MS(7)
DESHAB
'---------------------------------------------------
IF UNIMIL = 0 THEN
VALOR0
else
IF UNIMIL = 1 THEN
VALOR1
else
IF UNIMIL = 2 THEN
VALOR2
else
IF UNIMIL = 3 THEN
VALOR3
else
IF UNIMIL = 4 THEN
VALOR4
else
IF UNIMIL = 5 THEN
VALOR5
else
IF UNIMIL = 6 THEN
VALOR6
else
IF UNIMIL = 7 THEN
VALOR7
else
IF UNIMIL = 8 THEN
VALOR8
else
IF UNIMIL = 9 THEN
VALOR9
end if
end if
end if
end if
end if
end if
end if
end if
end if
end if
HAB4
DELAY_MS(7)
DESHAB
WEND
END.