Autor Tema: Problema al intentar mostrar numeros por display de 7 segmentos  (Leído 899 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Problema al intentar mostrar numeros por display de 7 segmentos
« en: 26 de Octubre de 2015, 20:08:51 »
Buenas tardes estoy tratando de mostrar la temperatura en 3 display de 7 segmentos, el codigo original muestra temperaturas sin decimas y yo estoy tratando de mostrar la temperatura con decimas! como se hace para conseguir las decimas en la temperatura? el codigo que por cierto no es mio es:

Código: [Seleccionar]
void main ()
{
int16 q;
float p,Temp;
unsigned int Unidad, Decena, centena;
int Numeros[10] = {0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111};

setup_adc_ports (AN0);
setup_adc(ADC_CLOCK_INTERNAL);


      while(true){
      set_adc_channel(0);
      delay_us(20);
      q = read_adc();
      p = (float)(q * 5) / 1024;
      Temp = (p * 100) / 3;
     
      Unidad=(int)Temp % 10;
      Decena=(int)Temp / 10;
     
      centena= ((int)Temp) % 100;
     
      delay_ms(10);

      output_d(Numeros[Unidad]);
      output_b(Numeros[Decena]);
      output_c(Numeros[Centena]);
     
  }
 
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema al intentar mostrar numeros por display de 7 segmentos
« Respuesta #1 en: 26 de Octubre de 2015, 20:50:07 »
Creo que depende de hasta que valor llegaria Temp.

Suponiendo de 3 digitos:

Centena = ((int)Temp % 100);
Temp -= Centena * 100
Decena = (int)Temp / 10;
Unidad= (int)Temp % 10;
Temp -= Decena*10 + Unidad;
Temp *= 10;
PrimerDigito = Temp % 10;
Temp *= 10;
SegundoDigito = Temp % 10;
Temp *= 10;
TercerDigito = Temp % 10;

o tal ves se pueda resumir a:

numeros[5];

for(i=0;i<5;i++) {
    numeros = (int)Temp % 100;      //Creo que ni hace falta el int
    Temp *= 10;
}

Y en numeros tendrias tus valores, si fuera Temp igual a 123.45, numeros seria [1,2,3,4,5], si es 23.45, tendrias [0,2,3,4,5]
Todo suponiendo que Temp no supere los 1000