Hola Don Moe....
mira, tenés varios descuidos en tu código, esa parte que te indicaron de las variables Char, no hace falta que sean Char, conceptualmente los pines del pic, no entienden char, solo int8.
Tampoco es necesario que emplees variables tipo float, si el pic es de poca memoria, dudo que el compilador incrunste las rutinas del caso, por falta de memoria.
Cuando trabajas, con led display siete segmentos, tenés que plantearte cuantas cifras mostrarás, partiendo de ese punto, maquinás la rutina que "descompone" tu número a mostrar en simples cifras de 7bit, (o 4 bit BCD si empleas un decodificador).
Parece que queres mostrar tres cifras, dos enteros y una cifra decimal.
de ser el caso, te has planteado que la variable "adc" puede ser hasta 255 (según configuración '#fuses')), y por lo tanto "TensionInt" podría ser: 255*1176=299880
Esto es SEIS cifras!.
TensionInt=adc*1176;
AuxBin=TensionInt/1000;
Decena=AuxBin/100;
AuxBinDec=AuxBin%100;
Unidad=AuxBinDec/10;
Decima=AuxBinDec%10;
No lo miré, pero le problema podría estar en la rutina anterior.
Yo empleo esta:
void Long2bcd( int16 num1) {
fourth=num1/1000;
num1=num1-fourth*1000;
tree=num1/100;
num1=num1-tree*100;
two=num1/10;
num1=num1-two*10;
one=num1; }
fourth, tree, two, one
son variables globales, int8, que se corresponden con las cifras a mostrar en los led display, contando desde derecha a izquierda.
La función que dejo, no fallará mientras la entrada numérica sea entre 9999 y 0.-
Al punto decimal trabajalo FIJO, no intereza que aparezca o no, lo mostras siempre.
p.e. 21v serán 21.0v comprendes?
Cuando haces un programa que muestre números con led display, es buena idea empezar poniendo un LCD o el puerto serial a un terminal en el simulador, esos ahorra tiempo.