You are on page 1of 19

UNIVERSIDAD NACIONAL

PEDRO RUIZ GALLO


Facultad de Ciencias Físicas y
Matemáticas.

Escuela profesional de Ingeniería en


Computación e Informática.
TRABAJO DE MICROPROCESADORES
PROYECTO FINAL
CERRADURA ELECTRONICA

INTEGRANTES:
ESPINOZA MONDRAGON, CARLOS
SALAZAR REYES, FLAVIO ENRIQUE
SANTAMARIA FERNANDEZ, JOSÉ LENNIN

DOCENTE:
AGUILAR ÑAÑEZ, JUAN
SEMESTRE:
2017 – II
FECHA:
22 DICIEMBRE DEL 2017
INFORME CIRCUITO PROYECTO FINAL CERRADURA
ELECTRONICA CON PC 16F877A
CODIGO PIC C
#include <16F877A.h> //Incluye la libreria del PIC
#fuses HS
#use delay(clock=4M) //Define la frecuencia con que se
trabajara

#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={'7','2','3','A'} //contraseña guardada en memoria

void main(void)
{
int item; //declaramos item
int n; // declarmos n
char k;
int i; //Inicializamos i
char data[4], clave[4]; //Espacio de memoria
lcd_init(); //inicializamos lcd
kbd_init(); //inicializamos el teclado
port_b_pullups(TRUE); //habilitamos resistencias de pullups
while(true) //ciclo infinito
{

if(input(PIN_A0)==0) //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
if(input(PIN_A1)==0) //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<=3) //siempre que i sea menor o igual a 3
{
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<=3;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])) //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
if(input(PIN_A1)==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("Ingrese 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,2);
lcd_putc('*'); //se imprime * en representacion de un
caracter
}
}
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,"\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);
}
}
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;
}
}
}
INFORME CIRCUITO TRES ENTRADA Y SALIDA PIC 16F876A

CODIGO PIC C
#include <16f876a.h>
#fuses
XT,NOWDT,NOPUT,NOPROTECT,BROWNOUT,NOLVP,NOCPD,
NOWRT
#use delay (clock = 4000000)

#use standard_io(B)

void main()
{

output_low(PIN_B6); //coloca en estado cero el pin B1


output_low(PIN_B7); //coloca en estado cero el pin B2

while(1)
{

//if (input(PIN_B0)==0)
{

// delay_ms (40);
//caso 1
if (input(PIN_B0)==1)
{
output_high(PIN_B6); //enciende el led
//output_low(PIN_B1); //apaga el led

}
//caso 2
if (input(PIN_B1)==1)
{
output_low(PIN_B6); //apaga el led
}
//caso 3
if (input(PIN_B2)==1)
{
output_high(PIN_B7); //enciende el led
delay_ms (40);
output_low(PIN_B7); //apaga el led
}
//caso 4
if (input(PIN_B3)==1)
{
output_high(PIN_B6); //enciende el led
output_high(PIN_B7); //enciende el led
delay_ms (40);
output_low(PIN_B6); //apaga el led
output_low(PIN_B7); //apaga el led
}
//caso 5
if (input(PIN_B4)==1)
{
output_high(PIN_B6); //enciende el led
//output_low(PIN_B1); //apaga el led
output_high(PIN_B7); //enciende el led
//output_low(PIN_B2); //apaga el led
}
//caso 6
if (input(PIN_B5)==1)
{
//output_high(PIN_B1); //enciende el led
output_low(PIN_B6); //apaga el led
//output_high(PIN_B2); //enciende el led
output_low(PIN_B7); //apaga el led
}
}
}
}
CASO 1
CASO 2

CASO 3 botón presionado

CASO 3 botón sin presionar


CASO 4 boton presionado

CASO 4 boton sin presionar

CASO 5
CASO 6