Вы находитесь на странице: 1из 6

SENSOR DE TEMPERATURA USANDO TECLADO Y LCD

Esta prctica nos permite la deteccin de temperatura a travs del


sensor LM35, que posteriormente es muestreada con el PIC 16F877A,
mediante el uso de teclado se ingresan los limites para la temperatura y
se podrn observar a travs de una pantalla LCD 16x2, adems la
practica cuenta con LEDs que funcionan como indicadores al momento
que la temperatura suministrada por el sensor exceda los lmites
establecidos.
DIAGRAMA EN BLOQUE

Senati
5

Americo Vargas Condori

#include <16F877a.h>
#device adc=10
//10 bits de resolucion para la
conversion
#fuses XT,NOWDT,NOPROTECT,NOLVP//bits de configuracion
#use delay(clock=4000000)
//reloj de 4 MHz
#define use_portb_kbd TRUE
//definimos puerto b para el
teclado
#define use_portd_lcd TRUE
//definimos puerto c para la LCD
#include <lcd.c>
#include <kbd.c>
//libreria teclado 3x4
#include <internal_eeprom.c>
//libreria de la memoria eeprom
interna
#byte port_c=0x07

void main ()
//Menu principal
{
double vari1;
//variables a usar de 16 bits
double vari2;
char p;
//definimos el literal p para usar en el
teclado
char M[4];
//matriz para almacenar 4 datos
int x,z,a,b,c,d,i=0,q,r;
// la variable X es un entero de 8 bits
set_tris_c(0);
//declaro el puerto c como salidas
port_c=0;
//declaro salidas en estado bajo para el
puerto c
setup_adc_ports(a_analog);
//Configuracion
setup_adc(adc_clock_internal); // de conversion
set_adc_channel(0);
// Analogo a digital
delay_us(20);
// actualiza los datos de los puertos
analogos.
lcd_init();
//iniciando LCD
//kbd_init();
//iniciando Teclado
port_b_pullups(TRUE);
//activo las resistencias internas del
puerto
write_eeprom(i,0);
//Mantengo el control de la memoria
i++;
//eeprom en ceros para cuando
write_eeprom(i,0);
//inicia
i++;
write_eeprom(i,0);
Senati
5

Americo Vargas Condori

i++;
write_eeprom(i,0);
Inicio:
while(TRUE)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"TMin:");
lcd_gotoxy(10,1);
printf(lcd_putc,"TMax:");

//funcion de trabajo continuo


//posicion de T Min
//primer dato
//posicion de T max
//primer dato

x=0;
//posicion en el registro
while(x<=3)
//Funcion que me permite leer los datos de
temperatura en solo 4
{
p=kbd_getc();
//la variable K toma los valores del teclado
z=p-48;
//declarando que el caracter se vuelve
entero
if(p!=0)
{if(p=='#')
{goto Condicion;
}

//si k es distinto de 0
//funcion que me envia al control
//etiqueta de control

else
//si no la condicion anterior lee datos
M[x]=z;//la matriz de datos de temperatura es igual a lo leido en el
teclado matricial
x++;
//incremento a 1 la variable x
write_eeprom(00,M[0]);
//escritura del registro 00 en la
memoria eeprom
write_eeprom(01,M[1]);
//escritura del registro 01 en la
memoria eeprom
write_eeprom(02,M[2]);
//escritura del registro 02 en la
memoria eeprom
write_eeprom(03,M[3]);
//escritura del registro 03 en la
memoria eeprom
a=read_eeprom(00);
//lectura del registro 00
b=read_eeprom(01);
//lectura del registro 01
Senati
5

Americo Vargas Condori

c=read_eeprom(02);
//lectura del registro 02
d=read_eeprom(03);
//lectura del registro 03
q=(a*10)+b;
//formula de equivalencia de los dos
primeros datos para obtener el numero real de temperatura deseada.
r=(c*10)+d;
//formula de equivalencia de los dos
siguientes datos para obtener el numero real de temperatura deseada.
}
lcd_gotoxy(6,1);
//posicion en la lcd de la variable a y
b
printf(lcd_putc,"%d",a);
//escritura de la variable a
printf(lcd_putc,"%d",b);
//escritura de la variable b
lcd_gotoxy(15,1);
//posicion en la lcd de la
variable c y d
printf(lcd_putc,"%d",c);
//escritura de la variable c
printf(lcd_putc,"%d",d);
//escritura de la variable d
}
}
Condicion:
//etiqueta de control
while(true)
{vari1=read_adc();
//tomamos el valor convertido y
almacenamos en vari1
vari2=vari1*(0.488758553);//convertimos a valor de temperatura
almacenando en vari2
lcd_gotoxy(1,2);
//posicion del caracter temperatura en la fila 1,
columna 2
printf(lcd_putc,"TAct:");
//se escribe el indicador de la
temperatura actual
lcd_gotoxy(8,2);
printf(lcd_putc,"%2.1f",vari2); //se muestra la temperatura actual en
fila 8 columna 2
delay_ms(500);
//tiempo de muestreo
lcd_gotoxy(8,2);
//se posiciona en el mismo lugar para
borrar
printf(lcd_putc," ");
//y actualizar la lectura
if(vari2<q)
temperatura minima
{output_high(PIN_C0);
}
Senati
5

//indicador cuando se llega a la

Americo Vargas Condori

else if(vari2>r)
temperatura maxima
{output_high(PIN_C1);
}
else
exceden los limites
{output_low(PIN_C0);
output_low(PIN_C1);
}
}
}

//indicador cuando se llega a la

//se apagan los indicadores si no se

NOMBRE:
AMERICO VARGAS CONDORI
CURSO:
Senati
5

Americo Vargas Condori

PLANTAS INDUSTRIALES
PROFESOR:

FERNANDO
HUAMAN
SEMESTRE:
5

Senati
5

Americo Vargas Condori

Вам также может понравиться