Sie sind auf Seite 1von 5

#include <16f877a.

h>
#device adc=10
#use delay (clock=4000000)
#fuses HS,XT,NOWDT,NOLVP,PUT
#use standard_io(a)
#use standard_io(b)
#use standard_io(d)
#define use_portb_kbd true
#define use_portd_lcd true
#include<lcd.c>
#include <kbd.c>
#include <stdlib.h>

#rom 0x2100={'1','2','3','4'} //contrase�a guardada en memoria por defecto

void main(void)
{
int menu=0, i, n;
char k;
char data[4], clave[4]; //Espacio de memoria
float temper,medicion;
lcd_init();
kbd_init();
port_b_pullups(TRUE); //habilita resistencias de pullups

while(true)
{
setup_adc (adc_clock_internal);
setup_adc_ports (an0);
set_adc_channel (0); // Elige canal a medir RA0
delay_us (20);
medicion=read_adc (); // Hace conversi�n AD
temper=medicion*(0.48875); // Pasa binario a �C (5v/(1024))
output_high(PIN_A2);

if(temper<=35)
{
if(input(PIN_C0)==0) //Pulsador opciones
{
menu++;
delay_ms(300);
}
switch(menu)
{
case 0:
lcd_gotoxy(1,1);
lcd_putc("<--- MENU ");
lcd_gotoxy(1,2);
lcd_putc("TEMPERATURA ");
lcd_gotoxy(13,2);
printf(lcd_putc,"%02.1f",temper);

break;

case 1:
lcd_gotoxy(1,1);
lcd_putc("1 INGRESAR ");
lcd_gotoxy(1,2);
lcd_putc(" CONTRASENA --->");

if(input(PIN_C1)==0) //pulsador enter


{
lcd_putc("\f"); //Limpia la pantalla LCD
i=0;
lcd_putc(" CLAVE ");
while(i<=3)
{
k=kbd_getc();
if (k!=0)
{
data[i]=k;
i++;
lcd_gotoxy(i+6,2);
lcd_putc('*');
output_high(PIN_A3); //buzzer
delay_ms(80);
output_low(PIN_A3);
}
}
for (i=0;i<=3;i++) //Ciclo para guardar la clave en memoria en una nueva
variable
{
clave[i]=read_eeprom(i);

}
if
((data[0]==clave[0])&&(data[1]==clave[1])&&(data[2]==clave[2])&&(data[3]==clave[3])
)

{
printf(lcd_putc,"\f PUERTA ABIERTA");
output_high(PIN_A1); //led azul
output_high(PIN_A5); //relay
output_low(PIN_A2); //apaga led rojo
delay_ms(2000);
output_low(PIN_A1);
output_low(PIN_A5);
}
else printf(lcd_putc,"\f INCORRECTO");
delay_ms(1000);
menu=0;
break;
}
break;

case 2:
lcd_gotoxy(1,1);
lcd_putc("2 CAMBIAR "); //Imprime este mensaje
lcd_gotoxy(1,2);
lcd_putc(" CONTRASENA --->"); //Imprime este mensaje
if(input(PIN_C1)==0) //Si en el Pin A1 hay un cero logico debido a que se
pulse el boton enter
{
lcd_putc("\f"); //Limpia pantalla lcd
i=0; //Se iguala i a cer
lcd_putc(" INGRESAR CLAVE "); //Imprime este mensaje
while(i<=3) //Condicion de que siempre que i sea menor o igual a 3
{
k=kbd_getc(); //Se obtiene el valor de la tecla pulsada
if (k!=0) //si k esta vacio
{
data[i]=k; //Guarda el valor de la tecla pulsada en la variable
data
i++; //se incrementa item
lcd_gotoxy(i+5,2);
lcd_putc('*'); //se imprime * en representacion de un caracter
output_high(PIN_A3);
delay_ms(80);
output_low(PIN_A3);
}
}
for (i=0;i<=3;i++)
{
clave[i]=read_eeprom(i);//Lee la clave guardada en memoria y la guarda en
una nueva variable
//Para luego compararla con la clave ingresada
por el usuario
}
if
((data[0]==clave[0])&&(data[1]==clave[1])&&(data[2]==clave[2])&&(data[3]==clave[3])
)//comparacion de la clave ingresada

//Con la clave guardada en memoria


{
printf(lcd_putc,"\f NUEVA CLAVE "); //Si las claves son iguales se
imprime este mensaje
while(n<=0) //Siempre que n sea menor o igual a 0
{
k=kbd_getc(); //Se obtiene el valor de la tecla presionada
if (k!=0) //Si k esta vacio
{
data[n]=k; //Guarda el valor de la tecla en la variable data
o
write_eeprom(0x2100,k); //Se escibe el valor de la tecla en el
primer espacio de memoria
n++; //se incrementa n
lcd_gotoxy(n+5,2);
lcd_putc('*'); //Se imprime * en representacion de un caracter
delay_ms(20);
output_high(PIN_A3);
delay_ms(80);
output_low(PIN_A3);
}
}
while(n<=1) //Siempre que n sea menor o igual a 1
{
k=kbd_getc();//Se obtiene el valor de la tecla presionada
if (k!=0) //Si k esta vacio
{
data[n]=k; //Guarda el valor de la tecla en la variable data
1
write_eeprom(0x2101,k);//Se escibe el valor de la tecla en el
segundo espacio de memoria
n++; //se incrementa n
lcd_gotoxy(n+5,2);
lcd_putc('*'); //Se imprime * en representacion de un caracter
delay_ms(20);
output_high(PIN_A3);
delay_ms(80);
output_low(PIN_A3);
}
}
while(n<=2) //Siempre que n sea menor o igual a 2
{
k=kbd_getc(); //Se obtiene el valor de la tecla presionada
if (k!=0) //Si k esta vacio
{
data[n]=k; //Guarda el valor de la tecla en la variable data
2
write_eeprom(0x2102,k);//Se escibe el valor de la tecla en el
tercer espacio de memoria
n++; //se incrementa n
lcd_gotoxy(n+5,2);
lcd_putc('*'); //Se imprime * en representacion de un caracter
delay_ms(20);
output_high(PIN_A3);
delay_ms(80);
output_low(PIN_A3);
}
}
while(n<=3) //Siempre que n sea menor o igual a 3
{
k=kbd_getc(); //Se obtiene el valor de la tecla presionada
if (k!=0) //Si k esta vacio
{
data[n]=k; //Guarda el valor de la tecla en la variable data
3
write_eeprom(0x2103,k);//Se escibe el valor de la tecla en el
tercer espacio de memoria
n++; //se incrementa n
lcd_gotoxy(n+5,2);
lcd_putc('*'); //Se imprime * en representacion de un caracter
delay_ms(20);
output_high(PIN_A3);
delay_ms(80);
output_low(PIN_A3);
}
}
printf(lcd_putc,"\f CLAVE CAMIADA ");//Cuando se introduce la clave
nueva imprime este mensaje
}
else printf(lcd_putc,"\fCLAVE INCORRECTA"); //Si las claves no son iguales
se imprime este mensaje
delay_ms(1000); //Espera 1 segundo
menu=0; //item se iguala a cero con el fin de que se
devuelva al primer caso de item
break;
}
break;
case 3:
menu=0;
break;
default: //Caso por defecto
menu = 0; //Devuelve al primer caso de item
break;
}
}
else
{printf(lcd_putc,"\f BLOQUEADO ");

lcd_gotoxy(1,2);
lcd_putc("TEMP ALTA"); // Imprime este mensaje
lcd_gotoxy(12,2);
printf(lcd_putc,"%02.1fC",temper);

delay_ms(200);
}
}
}

Das könnte Ihnen auch gefallen