 #include "18f4550.h"
#fuses hs,noprotect,nowdt
#use delay (clock=5000000)
#define lcd_enable_pin  pin_d2
#define lcd_rs_pin      pin_d0
#define lcd_rw_pin      pin_d1
#define lcd_data4       pin_d4
#define lcd_data5       pin_d5
#define lcd_data6       pin_d6
#define lcd_data7       pin_d7
#include <lcd.c>
#byte portb=0xf82
#include <kbd1.c>
#use standard_io(C)
#use standard_io(A)
#rom int8 0xf00000={'1','2','3','4'}
int n,h,j=0,i;
char s;
char k;
char dato[4],clave[4];

void main()
{
set_tris_d(0x00);
lcd_init();
kbd_init();
port_b_pullups(true);
for(;;)
{
printf(lcd_putc,"\fEscoja una");
printf(lcd_putc,"\nopcion.");
delay_ms(300);
printf(lcd_putc,"\fA=Entrar");
printf(lcd_putc,"\nB=Cambiar clave");
delay_ms(200);
output_Low(pin_a0);
output_low(pin_a1);
output_low(pin_a2);
h=0;
while(h<1)
{
s=kbd_getc();
if(s!=0)
{
h++;
lcd_gotoxy(h,2);
lcd_putc(s);
}
}
if(s=='A')
{
printf(lcd_putc,"\f");
delay_ms(20);
printf(lcd_putc,"\fClave:");
delay_ms(200);
i=0;
while(i<5)
{
k=kbd_getc();
if(k!=0)
{
dato[i]=k;
i++;
lcd_gotoxy(i,2);
lcd_putc('*');
}
}
if(k=='D')
{
for(i=0;i<4;i++)
clave[i]=read_eeprom(i);
if((dato[0]==clave[0]&&dato[1]==clave[1]&&dato[2]==clave[2]&&dato[3]==clave[3]))
{
printf(lcd_putc,"\fPuede pasar");
printf(lcd_putc,"\nbienvenido");
output_low(pin_a0);
output_high(pin_a1);
output_low(pin_a2);
output_low(pin_a4);
output_high(pin_a3);//motor abierto
delay_ms(500);
output_low(pin_a3);//apagar motor
delay_ms(500);
printf(lcd_putc,"\fCerrando");
output_low(pin_a0);
output_high(pin_a1);
output_low(pin_a2);
output_low(pin_a3);
output_high(pin_a4);//cerrando motor
delay_ms(500);
output_low(pin_a4);//apagar
delay_ms(500);
printf(lcd_putc,"\fHasta luego");
output_low(pin_a0);
output_low(pin_a1);
output_low(pin_a2);
delay_ms(1000);
j=0;
}
else
{
j=j+1;
printf(lcd_putc,"\fIncorrecto");
printf(lcd_putc,"\nErrores=%i",j);
output_high(pin_a0);
output_low(pin_a3);
output_low(pin_a1);
delay_ms(1000);
if(j>=3)
{
printf(lcd_putc,"\fBloqueo de");
printf(lcd_putc,"\nteclado:5seg");
delay_ms(500);
printf(lcd_putc,"\fBloqueo de");
printf(lcd_putc,"\nteclado:4seg");
delay_ms(500);
printf(lcd_putc,"\fBloqueo de");
printf(lcd_putc,"\nteclado:3seg");
delay_ms(500);
printf(lcd_putc,"\fBloqueo de");
printf(lcd_putc,"\nteclado:2seg");
delay_ms(500);
printf(lcd_putc,"\fBloqueo de");
printf(lcd_putc,"\nteclado:1seg");
delay_ms(500);
printf(lcd_putc,"\fTeclado:");
printf(lcd_putc,"\ndesbloqueado");
output_high(pin_a0);
output_low(pin_a3);
output_low(pin_a1);
delay_ms(500);
j=0;
}
output_low(pin_a0);
}
}
}
if(s=='B')
{
printf(lcd_putc,"\f");
delay_ms(20);
printf(lcd_putc,"\fCambiando clave");
delay_ms(5);
i=0;
printf(lcd_putc,"\fIngrese clave:");
while(i<=4)
{
k=kbd_getc();
if(k!=0)
{
dato[i]=k;
i++;
lcd_gotoxy(i,2);
lcd_putc('*');
}
}
if (k=='D')
{
for(i=0;i<=4;i++)
{
clave[i]=read_eeprom(i);
}
if ((dato[0]==clave[0]&&dato[1]==clave[1]&&dato[2]==clave[2]&&dato[3]==clave[3]))
{
printf(lcd_putc,"\fNueva clave");
delay_ms(100);
output_low(pin_a2);
output_low(pin_a1);
output_high(pin_a0);
while(n<=0)
{
k=kbd_getc();
if(k!=0)
{
dato[n]=k;
write_eeprom(0xF0000,k);
n++;
lcd_gotoxy(n,2);
lcd_putc('*');
delay_ms(20);
}
}
while(n<=1)
{
k=kbd_getc();
if(k!=0)
{
dato[n]=k;
write_eeprom(0xF00001,k);
n++;
lcd_gotoxy(n,2);
lcd_putc('*');
delay_ms(20);
}
}
while(n<=2)
{
k=kbd_getc();
if(k!=0)
{
dato[n]=k;
write_eeprom(0xF00002,k);
n++;
lcd_gotoxy(n,2);
lcd_putc('*');
delay_ms(20);
}
}
while(n<=3)
{
k=kbd_getc();
if(k!=0)
{
dato[n]=k;
write_eeprom(0xF00003,k);
n++;
lcd_gotoxy(n,2);
lcd_putc('*');
delay_ms(20);
}
}
while(n<=4)
{
k=kbd_getc();
if(k!=0)
{
dato[n]=k;
write_eeprom(0xF00004,k);
n++;
lcd_gotoxy(n,2);
lcd_putc('*');
}
}
printf(lcd_putc,"\fClave:");
printf(lcd_putc,"\ncambiada");
output_low(pin_a0);
output_low(pin_a1);
output_low(pin_a2);
delay_ms(1000);
h=0;
}
else
{
printf(lcd_putc,"\fClave incorrecta");
output_high(pin_a2);
output_low(pin_a0);
output_low(pin_a1);
delay_ms(1000);
}
h=0;
}
}
}
}
