Upload
carlox-ortega
View
748
Download
4
Embed Size (px)
Citation preview
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.
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.
Teclado 3x4 Teclado 4x4
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.
RA0/AN02
RA1/AN13
RA2/AN2/VREF-/CVREF4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RE0/AN5/RD8
RE1/AN6/WR9
RE2/AN7/CS10
OSC1/CLKIN13
OSC2/CLKOUT14
RC1/T1OSI/CCP216
RC2/CCP117
RC3/SCK/SCL18
RD0/PSP019
RD1/PSP120
RB7/PGD40
RB6/PGC39
RB538
RB437
RB3/PGM36
RB235
RB134
RB0/INT33
RD7/PSP730
RD6/PSP629
RD5/PSP528
RD4/PSP427
RD3/PSP322
RD2/PSP221
RC7/RX/DT26
RC6/TX/CK25
RC5/SDO24
RC4/SDI/SDA23
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI15
MCLR/Vpp/THV1
U1
PIC16F877A
1 2 3
4 5 6
7 8 9
0 #
1 2 3
A
B
C
D
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9D
18
D0
7
E6
RW
5R
S4
VS
S1
VD
D2
VE
E3
LCD1LM016L
R1
1k
Q1BD135
RL112V
BAT112V
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.