▷ Sistema para control de acceso con PIC, LCD y teclado matricial - Microcode


Antes de revisar este post les recomiendo ver el post anterior: TECLADO MATRICIAL Y LCD 16X2 PIC16F877A (MICROCODE & PROTEUS)

MATERIALES:

  • PIC 16F877A
  • LCD 16X2
  • Teclado matricial
  • 5 Resistencias de 1k
  • 1 Transistor 2N2222
  • 1 Rele de 5v

DIAGRAMA DE CONEXIONES:


Conexión PIC/LCD 16x2:

Conectamos los pines del PIC con los del lcd de la siguiente manera:


PORTC.1 con RS

PORTC.2 con E

PORTC.4 con D4

PORTC.5 con D5

PORTC.6 con D6

PORTC.7 con D7


Conexión PIC/TECLADO

Conectamos las filas de la siguiente manera:


PORTD.3 con fila uno (A)

PORTD.2 con fila dos (B)

PORTD.1 con fila tres (C)

PORTD.0 con fila cuatro (D)


Adicional a esto conectamos unas resistencias en configuración PULL-DOWN


Conectamos las columnas de la siguiente manera:

PORTD.4 con columna uno (1)

PORTD.5 con columna dos (2)

PORTD.6 con columna tres (3)


Recuerden que aparte de estos componentes tenemos que conectar el oscilador externo con sus capacitores. En la simulación de este proyecto no lo conecte porque no es necesario.


CÓDIGO Y EXPLICACIÓN:

La parte del como imprimir los caracteres en el LCD la pueden encontrar aquí, en este post no voy a mencionar esa parte.


Los dígitos de la contraseña los vamos a almacenar en un array llamado clave. Definimos un numero de posiciones en este caso le puse 5 porque la clave que utilizaremos tiene 5 dígito. Una vez creado el array creamos la clave, para esto debemos poner valores a cada una de las posiciones del array empezando desde la posición 0 hasta la 4, en este caso la clave es *27#6.

clave VAR BYTE[5]
clave[0] = "*"
clave[1] = 2
clave[2] = 7
clave[3] = "#"
clave[4] = 6

Creamos otro array en el cual almacenaremos el valor de las teclas pulsadas para luego realizar la comparación. Definimos este array con 5 posiciones.

comprobarClave VAR BYTE[5]

En este proyecto ya no vamos a imprimir los valores de los caracteres en el lcd, solo vamos a imprimir "*" cada vez que pulsemos una tecla.


Como veremos en las siguientes lineas de código, cada vez que pulsemos una tecla, definiremos un valor para una variable, en este caso X y nos vamos a una subrutina llamada almacenarnumeros:

IF f0 = 1 THEN
  x = 3:GOSUB almacenarnumeros:ENDIF

En la subrutina almacenarnumeros:


1.- Imprimimos un "*" cada vez que se pulse una tecla.


2.- Hacemos que el cursor se desplace una posición hacia la derecha.


3.- En el array "comprobarClave" vamos almacenando los valores de las teclas pulsadas cambiamos de index con una variable en este caso "n".


4.- Establecemos una pausa de 50us


5.- Sumamos la variable "n", esta variable nos ayuda a realizar el desplazamiento del cursor en el lcd y a cambiar el index del array "comprobarClave".


6.- Cuando el numero de teclas pulsadas sea igual a 5 entonces comparamos los valores de el array "clave" con los de el array "comprobarClave". Si la clave ingresada es correcta, entonces: Imprimimos en el lcd "CLAVE CORRECTA", enceramos la variable n, activamos el portd.7 por un tiempo y lo apagamos, en este pin ira conectado el rele. Si la clave ingresada es incorrecta, entonces: Imprimimos en elLCD "CLAVE INCORRECTA", enceramos la variable n y limpiamos el LCD.

almacenarnumeros: 
1.- LCDOUT "*"
2.- LCDOUT $FE,$C5 + n
3.- comprobarClave[n] = X
4.- PAUSE 50
5.- n = n + 1

6.- IF n = 5 THEN

IF comprobarClave[0] = Clave[0] AND comprobarClave[1] = Clave[1] AND comprobarClave[2] = Clave[2] AND comprobarClave[3] = Clave[3] AND comprobarClave[4] = Clave[4] THEN

LCDOUT $FE,1, $FE,2, "CLAVE CORRECTA"
HIGH led
PAUSE 500
LOW led
N = 0

ELSE

LCDOUT $FE,1, $FE,2, "CLAVE INCORRECTA"
PAUSE 500
n = 0
LCDOUT $FE,1

ENDIF
ENDIF

RETURN

CÓDIGO COMPLETO Y SIMULACIÓN:

0/Post a Comment/Comments