Autor Tema: termometro con display 7 segmentos  (Leído 1846 veces)

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

Desconectado nitro

  • PIC10
  • *
  • Mensajes: 5
termometro con display 7 segmentos
« en: 08 de Diciembre de 2013, 00:34:16 »
Hola. Este es mi primer mensaje en el foro, aunque lo visito desde hace varios años.
Hace un par de meses compenze a progrmar los pic en c (antes lo hacia en ensamblador).
Ahora estoy queriendo hacer un termometro con un lm35 y mostrarlo en un par de display de 7 segmentos usando un pic 16f877.
El problema es que me trabe en la parte en la que hay que mostrar la temperatura en el display.
Hasta obtener el valor de la temperatura esta todo bien pero como hago para convertir el valor que me el convertidor a/d y mostrarlo en el display?

Aqui va el codigo hasta donde yo pude llegar. Quien me pueda ayudar bienvenido sea. Saludos.

#include <16f877a.h>
#device adc=10
#fuses xt, nowdt
#use delay (clock=4M)

void main ()
{
   INT16 q;
   FLOAT p;
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   
   FOR (;;)
   {
      set_adc_channel(0);
      delay_us(20);
      q=read_adc();
      p=5.0*q/1024.0;
     
      //aqui deberia comenzar la parte del codigo para mostrar el valor p en los display
     
   }
}

Desconectado bagmel

  • PIC12
  • **
  • Mensajes: 56
    • Semaforos los Llanos C.A.
Re: termometro con display 7 segmentos
« Respuesta #1 en: 16 de Diciembre de 2013, 23:40:59 »
amigo el valor que almacenas en la variable Float lo debes dividir con este codigo:

total=24;
uni=total%10;  //separo la unidad
dece=(total%100)/10;//separo la decena

hay otra manera y mucho mas facil pero no recuerdo cuando lo encuentre y recuerde jajaja te los pongo aqui
La necesidad es la madre de todos los inventos!!!!!!!!!!!!!!

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: termometro con display 7 segmentos
« Respuesta #2 en: 17 de Diciembre de 2013, 09:23:55 »
Hola, otra forma de hacerlo

Código: CSS
  1. //definicion de variables
  2.  
  3. char cadena_ad[4];
  4. long temperatura;
  5. int const segmentos[]={ 0b11111100,
  6.                                         0b01100000,
  7.                                         0b11011010,
  8.                                         0b11110010,
  9.                                         0b01100110,
  10.                                         0b10110110,
  11.                                         0b10111110,
  12.                                         0b11100100,
  13.                                         0b11111110,
  14.                                         0b11110110,};
  15.                                                
  16.  
  17.  
  18. //descomponer el binario completo en variables                                         
  19. sprintf(cadena_ad, "%03d", temperatura);
  20.  
  21.  
  22.  
  23. ///////////////////////////////////////////////////////////////
  24. //rutina de display
  25. void display()
  26. {
  27.         portb = segmentos[cadena_ad[0] - 0x30];
  28.         bit_set(d1);}  
  29.         delay_ms(1);
  30.         bit_clear(d1);
  31.        
  32.         portb = segmentos[cadena_ad[1] - 0x30];
  33.         bit_set(d2);}  
  34.         delay_ms(1);
  35.         bit_clear(d2);
  36.        
  37.         portb = segmentos[cadena_ad[2] - 0x30];
  38.         bit_set(d3);}  
  39.         delay_ms(1);
  40.         bit_clear(d3);
  41.        
  42. }

Saludos


 

anything