Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lab 3 Keypad
Lab 3 Keypad
3.1 Introduccin
Otro de los perifricos especiales que se utilizan en los proyectos con microcontroladores es el
teclado matricial.
Vienen generalmente en dos presentaciones: 3x4 y 4x4. Donde el primer nmero 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
Sin embargo si se activan las resistencias pull-ups del puerto B no se hace necesario la conexin de
las resistencias en el circuito anterior. Los microcontroladores PICs han dispuesto de una
interrupcin 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 funcin (subrutina) de
interrupcin 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 funcin en el programa.
kbd_getc ( )
Devuelve el valor de la tecla pulsada en funcin de la tabla que tiene programada.
3.2 Desarrollo.
a) Realice la siguiente simulacin con el cdigo propuesto de una cerradura electrnica.
#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);
}
}
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RC1/T1OSI/CCP2
RE1/AN6/WR
RC2/CCP1
RE2/AN7/CS
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
8
9
10
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
U1
13
14
D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14
RS
RW
E
4
5
6
1
2
3
VSS
VDD
VEE
LM016L
19
20
21
22
27
28
29
30
PIC16F877A
RL1
12V
BAT1
R1
Q1
12V
BD135
1k