You are on page 1of 5

#include <xc.

h>
#include <string.h>
#include <stdio.h>

#pragma config FOSC = INTOSCIO_EC


#pragma config WDT = OFF
#pragma config LVP = OFF

#define _XTAL_FREQ 8000000


#define time 10

//LCD
#define CD 0x01
#define RH 0x02
#define EMS 0X06
#define DC 0X0F
#define DSr 0X1C
#define DS1 0X18
#define FS 0X28
#define RAW1 0X80
#define RAW2 0XC0
#define E LATE0
#define RS LATE1

char text7[20];
char text6[20];
char text5[20];
char text4[20];
char text3[20];
char text[11] ={"CONTRASEÑA:"},text2[11];
unsigned char i, j;
int k;
int s;
int p;
int t;
int r;
int q;
char m;
char l;
int teclado[4][4] = {
{1, 2, 3, 15},
{4, 5, 6, 14},
{7, 8, 9, 13},
{10, 0, 11, 12}};

int n;

void LCD (unsigned char data){


E = 1;
__delay_ms(time);
LATD = data;
__delay_ms(time);
E = 0;
__delay_ms(time);
}

void SettingsLCD(unsigned char word){


RS = 0;
LCD (word >> 4);
LCD (word & 0X0F);
}

void WriteLCD(unsigned char word){


RS = 1;
LCD (word >> 4);
LCD (word & 0X0F);
}

void settings (void){


OSCCON = 0X72;
ADCON1 = 0X0F;
TRISB = 0XF0;
LATB = 0X0F;
TRISD = 0X00;
TRISE = 0X00;
LATD = 0X00;
LATE = 0X00;

//LCD

SettingsLCD(0x02);
SettingsLCD(EMS);
SettingsLCD(DC);
SettingsLCD(FS);
SettingsLCD(CD);
SettingsLCD(RAW1+3);

for(i = 0; i < strlen(text);i++){


WriteLCD(text[i]);

GIE = 1;
RBIE = 1;
RBIF = 0;
}

int barrido (void){


LATB = 0X01;
for(i = 0; i <= 3; i++){
if(PORTBbits.RB4){
j = 0;
break;

if(PORTBbits.RB5){
j=1;
break;

}
if(PORTBbits.RB6){
j = 2;
break;

}
if(PORTBbits.RB7){
j = 3;
break;

}
LATB = LATB <<1;
}
return teclado[i][j];
}

void __interrupt() CHAO(void){


if(RBIF){
RBIF = 0;
if((PORTB & 0XF0) != 0X00){
n = barrido();
if(n<10){
SettingsLCD(RAW2+k+6);
sprintf(text2,"%d",n);
for(i=0; i < 5; i++){
WriteLCD(text2[i]);
}
LATB = 0X0F;

if(n==1){
p=1;
}
if(p==1){
if(n==2){
t=1;
}
}
if(t==1){
if(n==3){
r=1;
}
}
if(r==1){
if(n==9){
q=1;
}
}
if(q==1 & r==1 & t==1 & p==1){
if(n==0){
SettingsLCD(RAW2+4);
sprintf(text3,"CORRECTA",l);
for(i=0; i < 8; i++){
WriteLCD(text3[i]);
__delay_ms(300);
}
LATB = 0X0F;
SettingsLCD(CD);
p = 0;
r = 0;
q = 0;
t = 0;
n = 1;
k = 0;
settings();
}
}
//
if(n==0){
if(q!=1){
SettingsLCD(RAW2+3);
sprintf(text4,"INCORRECTA",l);
__delay_ms(1000);
for(i=0; i < 10; i++){
WriteLCD(text4[i]);
__delay_ms(300);
}
LATB = 0X0F;
SettingsLCD(CD);
settings();
k=0;
}

// if(t!=1){
// SettingsLCD(RAW2+3);
// sprintf(text5,"INCORRECTA",l);
// for(i=0; i < 10; i++){
// WriteLCD(text5[i]);
// }
// LATB = 0X0F;
// SettingsLCD(CD);
// settings();
// }
//
//
// if(r!=1){
// SettingsLCD(RAW2+3);
// sprintf(text6,"INCORRECTA",l);
// for(i=0; i < 10; i++){
// WriteLCD(text6[i]);
// }
// LATB = 0X0F;
// SettingsLCD(CD);
// settings();
// }
//
//
// if(q!=1){
// SettingsLCD(RAW2+3);
// sprintf(text7,"INCORRECTA",l);
// for(i=0; i < 10; i++){
// WriteLCD(text7[i]);
// }
// LATB = 0X0F;
// SettingsLCD(CD);
// settings();
// }

}
//
k++;
}
}
}

void main(void) {
settings();
while(1){

You might also like