Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pr
actica: Teclado 4X4
Acostumbraros a ser obedientes,
porque siempre os ha de tocar obedecer
Madame de Maintenon
1.1.
Enunciado
En1 esta practica vamos a conectar a nuestro PIC un teclado matricial de 4 filas por 4 columnas.
Queremos atender un teclado matricial (pasivo) y aprender como conectarlo. Al mismo tiempo
se busca eliminar los rebotes mecanicos de los pulsadores y disponer de una asignacion dinamica
de valores a las pulsaciones obtenidas. En una segunda parte buscamos atender el teclado usando
interrupciones, lo que permitira al microcontrolador no dedicarse en exclusiva a la atencion del
teclado. Al mismo tiempo tendremos una oportunidad inmejorable de aplicar el modo SLEEP de
bajo consumo del microcontrolador y comprobarlo.
1.1.1.
Especificaciones
Se pide realizar la programacion necesaria para escanear el teclado matricial y su conexion hardware. La rutina debera devolver un valor numerico entre 1 y 16 dependiendo de la tecla pulsada. Si
no se pulso ninguna tecla debera devolver el valor 0. Es muy interesante hacer una traduccion de la
tecla hardware pulsada con el valor serigrafiado en los pulsadores. Realiza la traduccion mediante
una tabla.
1.1.2.
Los rebotes mecanicos son un efecto no deseado. Como los eliminaras? Desarrollalo.
Queremos atender el teclado por interrupciones para que el microcontrolador pueda hacer otras
tareas. Modifica el codigo para que sea posible.
Si el microcontrolador esta esperando a que el usuario pulse una tecla, entonces es buena idea
dormir el micro para reducir el consumo electrico utilizando la instruccion SLEEP. Las interrupciones
lo despertaran. Comprueba experimentalmente la reduccion del consumo.
Enunciado
1.1.3.
Diagramas
Los contactos:
El modulo:
Figura 7.
1.2.
Soluci
on
1.2.1.
Esquema hardware
2
A
10k
X1
U1
16
15
4 MHz
C1
C2
33pF
33pF
RA7/OSC1/CLKIN
RA0/AN0
RA6/OSC2/CLKOUT
RA1/AN1
RA2/AN2/CVREF/VREFRA5/MCLR RA3/AN3/C1OUT/VREF+
RA4/AN4/T0CKI/C2OUT
RB0/INT/CCP1
RB1/SDI/SDA
RB2/SDO/RX/DT
RB3/CCP1
RB4/SCK/SCL
RB5/SS/TX/CK
RB6/AN5/T1OSO/T1CKI
RB7/AN6/T1OSI
17
18
1
2
3
C
1
4
4
1
ON
R1
6
7
8
9
10
11
12
13
PIC16F88
8
FILE NAME:
P_teclado.dsn
DESIGN TITLE:
BY:
1.2.2.
2
19/04/2008
PAGE:
Hoja principal
DATE:
1
REV:
Programas
3
4
5
6
7
8
9
// Para el PIC16F88
__CONFIG ( WDTDIS & XT & UNPROTECT & PWRTDIS & CCPRB0 & DEBUGDIS & LVPDIS
& BORDIS & MCLREN );
// Palabra de configuraci
o n 0 x2007
__CONFIG ( FCMDIS & IESODIS );
// Palabra de configuraci
o n 0 x2008
10
11
12
13
14
15
16
17
18
19
20
21
22
23
7,
4,
1,
0 xC ,
8 , 9 ,0 xF ,
5 , 6 ,0 xE ,
2 , 3 ,0 xD ,
0 ,0 xB ,0 xA };
unsigned
;
;
;
;
;
;
//
//
//
//
//
//
of
TIME:
1
11:20:28
4
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Soluci
on
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
43
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
62
63
64
return 0;
void main ()
65
66
unsigned char T ;
ANSEL = 0;
TRISB = 0 xF0 ;
TRISA = 0 x00 ;
RBPU
= 0;
while (1)
{
T
= TECLADO_Scan ();
T
= Teclas [ T ];
PORTA = T ;
}
67
68
69
70
71
72
73
74
75
76
77
PORTB = B00001110 ;
RBIF = 0;
while (1)
{
if ( ( PORTB & (1 < <4))==0
Tecla ++;
if ( ( PORTB & (1 < <5))==0
Tecla ++;
if ( ( PORTB & (1 < <6))==0
Tecla ++;
if ( ( PORTB & (1 < <7))==0
Tecla ++;
44
61
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
//
//
//
//
// Comprueba el teclado
// Traduce