Академический Документы
Профессиональный Документы
Культура Документы
Senati
5
#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
i++;
write_eeprom(i,0);
Inicio:
while(TRUE)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"TMin:");
lcd_gotoxy(10,1);
printf(lcd_putc,"TMax:");
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
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
else if(vari2>r)
temperatura maxima
{output_high(PIN_C1);
}
else
exceden los limites
{output_low(PIN_C0);
output_low(PIN_C1);
}
}
}
NOMBRE:
AMERICO VARGAS CONDORI
CURSO:
Senati
5
PLANTAS INDUSTRIALES
PROFESOR:
FERNANDO
HUAMAN
SEMESTRE:
5
Senati
5