Está en la página 1de 3

Tarea: Uso del Teclado (Keyboard).

4.1 Introducción

Otro de los periféricos especiales que se utilizan en los proyectos con microcontroladores es el
teclado matricial.

Vienen generalmente en dos presentaciones: 3x4 y 4x4. Donde el primer número indica las
cantidades de columnas y el segundo las cantidades de filas. Por ejemplo 3x4 significa 3 columnas
por 4 filas, para un total de 12 teclas.

Teclado 3x4 Teclado 4x4

Esta es una conexión típica entre un teclado y un microcontrolador:

Sin embargo si se activan las resistencias pull-ups del puerto B no se hace necesario la conexión de
las resistencias en el circuito anterior. Los microcontroladores PICs han dispuesto de una
interrupción por cambio de nivel en cualquiera de los pines RB4 a RB7, lo cual resulta ideal para
conectarse con un teclado matricial, ya que se puede preparar una función (subrutina) de
interrupción por esta causa.

El compilador de C posee el driver KBD.c para manejar un teclado 3x4. Las funciones que
incorporan son las siguientes:

kbd_init ( )
Inicializa el sistema para manejo del teclado. Debe ser la primera función en el programa.

kbd_getc ( )
Devuelve el valor de la tecla pulsada en función de la tabla que tiene programada.
4.2 Desarrollo.

a) Realice la siguiente simulación con el código propuesto


#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock= 4000000)

#define LCD_ENABLE_PIN PIN_B0


#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7

#include <lcd.c>
#include <kbd.c>
#rom 0x2100={'7','2','3'}

void main() {
char k;
int i;
char data[3], clave[3];
lcd_init();
kbd_init();
port_b_pullups(TRUE);
while (TRUE) {
i=0;
printf(lcd_putc,"\fpulsar tecla 1\n");
while(i<=2){
k=kbd_getc();
if (k!=0)
{data[i]=k;
i++;
printf(lcd_putc,"\fpulsar tecla %u\n",i+1);
}
}
for (i=0;i<=2;i++) {
clave[i]=read_eeprom(i);}
if ((data[0]==clave[0])&&(data[1]==clave[1])&&(data[2]==clave[2]))
{ printf(lcd_putc,"\fPuerta Abierta");
output_high(PIN_A0);
delay_ms(500);
output_low(PIN_A0);}
else printf(lcd_putc,"\fPuerta Cerrada");
delay_ms(1000);
}
}
b) Ckto a simular con el código anterior.
LCD1
LM016L

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
E
1
2
3

4
5
6

7
8
9
10
11
12
13
14
U1

3
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
RB2
35
A 1 2 3
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
5
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RB5
RB6/PGC
39
B 4 5 6
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15
8
RE0/AN5/RD
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
16
C 7 8 9
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
1
MCLR/Vpp/THV
RC4/SDI/SDA
RC5/SDO
24
D 0 #
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A

RL1
12V

BAT1
12V
R1 Q1
BD135
1k

c) Comente el programa anterior para conocer cómo funciona de acuerdo al circuito.


d) ¿Cuál es la función de la circuitería que se encuentra en la parte inferior?
e) Modifique el programa anterior para hacer uso de un teclado 4x4 y cambie la contraseña de
acceso.
f) Investigue como modificar el teclado 4x4 que viene por defecto en el Proteus para que se
parezca a un teclado hexadecimal como se muestra en la figura superior.

4.3 Enviarme las simulaciones al correo con los correspondientes códigos fuentes bien comentados.

También podría gustarte