#include <16F877A.h> //Incluye la libreria del PIC
#fuses XT
#use delay(clock=4M) //Define la frecuencia con que se trabajara
#byte PORTB = 0x06
#define LCD_ENABLE_PIN PIN_C5
#define LCD_RS_PIN PIN_C6
#define LCD_RW_PIN PIN_C7
#define LCD_DATA4_PIN PIN_D4
#define LCD_DATA5_PIN PIN_D5
#define LCD_DATA6_PIN PIN_D6
#define LCD_DATA7_PIN PIN_D7
#define use_portb_kbd TRUE //Sentencia para poder conectar el teclado al puerto B
#include <lcd.c> // incluye libreia del lcd
#include <KBD2.c> //incluye libreria del teclado modificada
#rom 0x2100={'1','9','9','4','A'} //contraseña guardada en memoria
void main(void)
{
int teclapresionada;
int item; //declaramos item
int n; // declarmos n
char k;
int i; //Inicializamos i
char data[5], clave[5]; //Espacio de memoria
lcd_init(); //inicializamos lcd
kbd_init(); //inicializamos el teclado
port_b_pullups(TRUE); //habilitamos resistencias de pullups
while(true) //ciclo infinito
{
teclapresionada = kbd_getc();
if(teclapresionada == '#') //Si en el Pin AO hay un cero logico debido a que se pulse el boton opciones
{
item++; //Incrementar item
delay_ms(300);
}
switch(item)
{
case 0: //si item es igual a cero
lcd_gotoxy(1,1);
lcd_putc("Elija una opcion y"); // Imprime este mensaje
lcd_gotoxy(1,2);
lcd_putc("presione enter"); //Imprime este mensaje
break;
case 1: // si item igual a 1
lcd_gotoxy(1,1);
lcd_putc("Opcion 1 "); //imprime este mensaje
lcd_gotoxy(1,2);
lcd_putc("Ingresar Contra"); //Imprime este mensaje
teclapresionada = kbd_getc();
if(teclapresionada == '*') //Si en el Pin A1 hay un cero logico debido a que se pulse el boton enter
{
lcd_putc("\f"); //Limpia la pantalla LCD
i=0; // i igual a cero
lcd_putc("Ingresar clave"); //Imprime este mensaje
while(i<=4) //siempre que i sea menor o igual a 4
{
k=kbd_getc(); //Se obtiene el valor de la tecla pulsada
if (k!=0) //Si ka es diferente de nulo
{
data[i]=k; //Guarda el valor de la tecla pulsada en un
//Espacio de memoria
i++; //Incrementa i
lcd_gotoxy(i,2);
lcd_putc('*'); //se imprime * en representacion de un caracter
}
}
for (i=0;i<=4;i++) //Ciclo para guardar la clave en moria en una nueva variable
{
clave[i]=read_eeprom(i);//Lee la clave guardada en memoria y la guarda en una nueva variable
//Para luego comprobarla con la clave ingresada por el usuario
}
if ((data[0]==clave[0])&&(data[1]==clave[1])&&(data[2]==clave[2])&&(data[3]==clave[3])&&(data[4]==clave[4])) //comparacion de la clave ingresada
//Con la clave guardada en memoria
{
printf(lcd_putc
,"\fPuerta Abierta"); //Si las claves son iguales se imprime este mensaje output_high(PIN_A3); //Si las claves son iguales el PIN A3 se pone en alto
delay_ms(1000); // Espera 1 segundo
output_low(PIN_A3); //El PIN A3 se pone en bajo
}
else printf(lcd_putc
,"\fPuerta Cerrada"); //Si las claves no son iguales se imprime este mensaje delay_ms(1000); //Espera 1 segundo
item=0; //item se iguala a cero con el fin de que se devuelva al primer caso de item
break;
}
break;
case 2: //Si item igua a2
lcd_gotoxy(1,1);
lcd_putc("Opcion 2 "); //Imprime este mensaje
lcd_gotoxy(1,2);
lcd_putc("Cambiar Contra"); //Imprime este mensaje
teclapresionada = kbd_getc();
if(teclapresionada == '#') //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("Ingrese clave"); //Imprime este mensaje
while(i<=4) //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,2);
lcd_putc('*'); //se imprime * en representacion de un caracter
}
}
for (i=0;i<=4;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])&&(data[4]==clave[4]))//comparacion de la clave ingresada
//Con la clave guardada en memoria
{
printf(lcd_putc
,"\fClave nueva"); //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,2);
lcd_putc('*'); //Se imprime * en representacion de un caracter
delay_ms(20);
}
}
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,2);
lcd_putc('*'); //Se imprime * en representacion de un caracter
delay_ms(20);
}
}
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,2);
lcd_putc('*'); //Se imprime * en representacion de un caracter
delay_ms(20);
}
}
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,2);
lcd_putc('*'); //Se imprime * en representacion de un caracter
delay_ms(20);
}
}
while(n<=4)
{
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,2);
lcd_putc('*'); //Se imprime * en representacion de un caracter
delay_ms(20);
}
}
printf(lcd_putc
,"\fClave cambiada");//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
item=0; //item se iguala a cero con el fin de que se devuelva al primer caso de item
break;
}
break;
default: //Caso por defecto
item = 0; //Devuelve al primer caso de item
break;
}
}
}