Electgpl

PIC - Termometro con Barra LCD

Oct 29th, 2015
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.74 KB | None | 0 0
  1. #include<16f883.h>                                  //Microcontrolador
  2. #device adc=10                                      //Resolución del ADC a 10bit
  3. #use delay(int=4000000)                             //Oscilador interno a 4MHz
  4. #include<LCD.C>                                     //Liberia del LCD 2x16
  5. double map(float valor, float entradaMin,           //Declaración de función MAP
  6.            float entradaMax, float salidaMin,       //Variables de ingreso
  7.            float salidaMax){                        //Variables de ingreso
  8.    return ((((valor-entradaMin)*                    //Ecuación de adaptación
  9.              (salidaMax-salidaMin))/                //Ecuación de adaptación
  10.              (entradaMax-entradaMin))+salidaMin);   //Ecuación de adaptación
  11. }  
  12. void main(){                                        //Función principal
  13.    setup_adc_ports(sAN0|VSS_VDD);                   //Configuración del canal analógico AN0
  14.    setup_adc(ADC_CLOCK_DIV_2);                      //Configuración de la velocidad del ADC
  15.    lcd_init();                                      //Limpiar el LCD
  16.    int16 salida=0, leeAdc=0, salida_A=0, i=0;       //Definición de variables entero de 16bit
  17.    float temp=0;                                    //Definición de variables punto flotante
  18.    while(true){                                     //Lazo de iteración infinito
  19.       set_adc_channel(0);                           //Activa canal 0 del ADC
  20.       delay_us(10);                                 //Espera 10us a que termine la conversión
  21.       leeAdc = read_adc();                          //Mueve el valor del ADC a leeADC
  22.       temp = (leeADC*5.0/1023.0)*10;                //Convierte ADC a Grados Celsius
  23.       salida = map(temp, 0, 40, 0, 16);             //Aplica función MAP para redimencionar la Barra
  24.       delay_ms(1000);                               //Delay de 1s para el refresco de datos
  25.       lcd_gotoxy(12,1);                             //Posiciona el cursor en carácter 12 renglón 1
  26.       lcd_putc(0xDF);                               //Carácter 11011111 correspondiente a "°"
  27.       lcd_gotoxy(13,1);                             //Posiciona el cursor en carácter 13 renglón 1
  28.       lcd_putc(0x43);                               //Carácter 01000011 correspondiente a "C"
  29.       lcd_gotoxy(1,1);                              //Posiciona el cursor en carácter 1 renglón 1
  30.       printf(lcd_putc,"Temp: %2.1f",temp);          //Muestra el valor XX.X de temperatura
  31.       for(i=1;i<salida+1;i++){                      //Lazo for para posicionar la barra en la posición inicial
  32.          lcd_gotoxy(i,2);                           //Se incrementa la posición dinámica en el segundo renglón
  33.          lcd_putc(0xFF);                            //Se completa con carácter especial "█"
  34.       }
  35.       if(salida_A<salida){                          //Si se incrementa la barra
  36.          lcd_gotoxy(salida,2);                      //Se incrementa la posición del segundo renglón
  37.          lcd_putc(0xFF);                            //Se completa con carácter especial "█"
  38.       }
  39.       if(salida_A>salida){                          //Si se decrementa la barra
  40.          lcd_gotoxy(salida+1,2);                    //Se decrementa la posición del segundo renglón
  41.          lcd_putc(0x20);                            //Se completa con espacios vacíos
  42.       }
  43.       salida_A = salida;                            //Intercambio de variables
  44.    }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment