Está en la página 1de 7

#include <16f877A.

h>
#fuses XT,NOWDT,PROTECT,NOBROWNOUT,NOLVP
#USE DELAY(CLOCK=4MHZ)
#use STANDARD_IO( A,B )
#use rs232(baud=4800,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
//////////////////////////SE DEFINEN DE PINES LCD//////////////////////////////
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
///////////////////////////////////////////////////////////////////////////////
#INCLUDE <lcd.c>
#INCLUDE <kbd_lib.c>
#rom 0x2100={'1','2','3','A','B'} //contrasea guardada en memoria
char password[5];
char act[5]={'1','2','3','4','5'};
char des_tec[3]={'1','2','3'};
char des_door[3];
char pass[5];
char k,A,pck;
int i,j,on,next,var;
void des_out();
void act_out();
void blink();
void activar();
void conf();
void sonar();
void panico();
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
lcd_init();
kbd_init();
port_b_pullups(TRUE);
i=0;
j=0;
on=0;
var=0;
pck='B';
lcd_gotoxy(1,1);
printf(lcd_putc,"\fBienvenido");
delay_ms(600);
for(i=0;i<5;i++)
{
password[i]=read_eeprom(i);
}
while(true)
{
output_low(pin_E1);
while(input(pin_A2)==0)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fAlarma");
lcd_gotoxy(1,2);
printf(lcd_putc,"Activada");
output_high(pin_E0);
on=1;
delay_ms(600);
/*if(input(pin_A0)==0)
sonar();*/
des_out();
}
output_low(pin_E0);
lcd_gotoxy(1,1);
lcd_putc("\fAlarma");
lcd_gotoxy(1,2);
lcd_putc("Desactivada");
delay_ms(600);
on=0;
act_out();
}
}
void des_out()
{
i=0;
lcd_putc("\fenter code...");
while(input(pin_A2)==0)
{
if(input(pin_A0)==0)
{
if(on==1)
sonar();
}
while(i<5)
{
if(input(pin_A2)==1)
return;
if(input(pin_A0)==0)
{
if(on==1)
sonar();
}
k=kbd_getc(); //Se obtiene el valor de la tecla pulsada
if (k!=0) //Si ka es diferente de nulo
{
pass[i]=k; //Guarda el valor de la tecla pulsada en un Espacio de me
moria
i++; //Incrementa i
lcd_gotoxy(i,2);
lcd_putc('*'); //se imprime * en representacion de un caracter
}
}
if(i>=5)
{
if((pass[0]==password[0])&&(pass[1]==password[1])&&(pass[2]==password[2
])&&(pass[3]==password[3])&&(pass[4]==password[4]))
{
printf(lcd_putc,"\fCorrecto");
output_low(pin_E0);
on=0;
delay_ms(600);
}
if((pass[0]==password[4])&&(pass[1]==password[3])&&(pass[2]==password[2
])&&(pass[3]==password[1])&&(pass[4]==password[0]))
{
printf(lcd_putc,"\fSin problema");
panico();
}
if(((pass[0]!=password[0])||(pass[1]!=password[1])||(pass[2]!=password[
2])||(pass[3]!=password[3])||(pass[4]!=password[4]))&&((pass[0]!=password[4])||(
pass[1]!=password[3])||(pass[2]!=password[2])||(pass[3]!=password[1])|(pass[4]!=
password[0])))
{
for(j=0;j<3;j++)
{
blink();
printf(lcd_putc,"\fIncorrecto");
delay_ms(600);
}
return;
}
}
}
}
void blink()
{
int j;
for(j=0;j<=5;j++)
{
output_high(pin_E0);
delay_ms(100);
output_low(pin_E0);
delay_ms(100);
}
}
void act_out()
{
while(input(pin_A2)==1)
{
A=kbd_getc();
if(A!=0)
{
if(A=='*')
{
lcd_putc("\fActivar?");
conf();
while(next==1)
{
i=0;
lcd_gotoxy(1,1);
lcd_putc("\fenter code:");
if(input(pin_A0)==0)
{
if(var==1)
sonar();
}
while(i<5)
{
if(input(pin_A2)==0)
return;
if(input(pin_A0)==0)
{
if(var==1)
sonar();
}
k=kbd_getc(); //Se obtiene el valor de la tecla pulsada
if (k!=0) //Si ka es diferente de nulo
{
pass[i]=k; //Guarda el valor de la tecla pulsada en un Espa
cio de memoria
i++; //Incrementa i
lcd_gotoxy(i,2);
lcd_putc('*'); //se imprime * en representacion de un carac
ter
}
}
if(i>=5)
{
if((pass[0]==act[0])&&(pass[1]==act[1])&&(pass[2]==act[2])&&(p
ass[3]==act[3])&&(pass[4]==act[4]))
{
printf(lcd_putc,"\fActivada");
output_high(pin_E0);
var=1;
delay_ms(600);
}
if((pass[0]==password[0])&&(pass[1]==password[1])&&(pass[2]==p
assword[2])&&(pass[3]==password[3])&&(pass[4]==password[4]))
{
lcd_putc("\fDesactivada");
output_low(pin_E0);
delay_ms(600);
var=0;
next=0;
return;
}
if(((pass[0]!=password[0])||(pass[1]!=password[1])||(pass[2]!=
password[2])||(pass[3]!=password[3])||(pass[4]!=password[4]))&&((pass[0]!=act[0]
)||(pass[1]!=act[1])||(pass[2]!=act[2])||(pass[3]!=act[3])|(pass[4]!=act[4])))
{
for(j=0;j<3;j++)
{
blink();
printf(lcd_putc,"\fIncorrecto");
delay_ms(600);
}
var=0;
}
}
}
while(next==0)
return;
}
delay_ms(500);
}
}
}
void conf()
{
A=0;
while(true)
{
if(input(pin_A2)==1)
{
A=kbd_getc();
while(A!=0)
{
if(A=='*')
{
next=1;
var=1;
A=0;
return;
}
if(A=='#')
{
next=0;
var=0;
A=0;
return;
}
if(A!='*' && A!='#')
{
lcd_putc("\fOpc. no valida");
delay_ms(300);
return;
}
}
}
if(input(pin_A2)==0)
return;
}
}
void sonar()
{
while(true)
{
while(var==1)
{
k=0;
lcd_putc("\fALERTA!!!");
putc('A');
delay_ms(200);
output_high(pin_E1);
//
while(i<3)
{
k=kbd_getc(); //Se obtiene el valor de la tecla pulsada
if (k!=0) //Si ka es diferente de nulo
{
des_door[i]=k; //Guarda el valor de la tecla pulsada en un Esp
acio de memoria
i++; //Incrementa i
lcd_gotoxy(i,2);
lcd_putc('*'); //se imprime * en representacion de un caracter
}
}
if(i>2)
{
if((des_door[0]==des_tec[0])&&(des_door[1]==des_tec[1])&&(des_doo
r[2]==des_tec[2]))
{
printf(lcd_putc,"\fSilenciada");
pck='B';
putc('B');
output_low(pin_E0);
output_low(pin_E1);
var=0;
on=0;
delay_ms(600);
return;
}
if((des_door[0]!=des_tec[0])&&(des_door[1]!=des_tec[1])&&(des_doo
r[2]!=des_tec[2]))
{
lcd_putc("\fError");
delay_ms(600);
var=1;
i=0;
}
//
}
}
while(input(pin_A2)==0)
{
lcd_putc("\fALERTA!!!");
pck='A';
putc('A');
delay_ms(200);
output_high(pin_E1);
while(i<3)
{
k=kbd_getc(); //Se obtiene el valor de la tecla pulsada
if (k!=0) //Si ka es diferente de nulo
{
des_door[i]=k; //Guarda el valor de la tecla pulsada en un Esp
acio de memoria
i++; //Incrementa i
lcd_gotoxy(i,2);
lcd_putc('*'); //se imprime * en representacion de un caracter
}
}
if(i>2)
{
if((des_door[0]==des_tec[0])&&(des_door[1]==des_tec[1])&&(des_doo
r[2]==des_tec[2]))
{
printf(lcd_putc,"\fSilenciada");
pck='B';
putc('B');
output_low(pin_E0);
output_low(pin_E1);
var=0;
on=0;
delay_ms(600);
return;
}
if((des_door[0]!=des_tec[0])&&(des_door[1]!=des_tec[1])&&(des_doo
r[2]!=des_tec[2]))
{
lcd_putc("\fError");
delay_ms(600);
var=1;
i=0;
}
//
}
}
/*pck='B';
putc('B');*/
output_low(pin_E1);
return;
}
}
void panico()
{
while(true)
{
output_high(pin_E0);
delay_ms(300);
output_low(pin_E0);
delay_ms(300);
if(input(pin_A0)==0)
sonar();
return;
}
}

También podría gustarte