Anda di halaman 1dari 4

Cap tulo 1 Pr actica: Teclado 4X4

Acostumbraros a ser obedientes, porque siempre os ha de tocar obedecer Madame de Maintenon

1.1.

Enunciado

En1 esta pr actica vamos a conectar a nuestro PIC un teclado matricial de 4 las por 4 columnas. Queremos atender un teclado matricial (pasivo) y aprender como conectarlo. Al mismo tiempo se busca eliminar los rebotes mec anicos de los pulsadores y disponer de una asignaci on din amica de valores a las pulsaciones obtenidas. En una segunda parte buscamos atender el teclado usando interrupciones, lo que permitir a al microcontrolador no dedicarse en exclusiva a la atenci on del teclado. Al mismo tiempo tendremos una oportunidad inmejorable de aplicar el modo SLEEP de bajo consumo del microcontrolador y comprobarlo.

1.1.1.

Especicaciones

Se pide realizar la programaci on necesaria para escanear el teclado matricial y su conexi on hardware. La rutina deber a devolver un valor num erico entre 1 y 16 dependiendo de la tecla pulsada. Si no se puls o ninguna tecla deber a devolver el valor 0. Es muy interesante hacer una traducci on de la tecla hardware pulsada con el valor serigraado en los pulsadores. Realiza la traducci on mediante una tabla.

1.1.2.

Para sacar nota

Los rebotes mec anicos son un efecto no deseado. C omo los eliminar as? Desarr ollalo. Queremos atender el teclado por interrupciones para que el microcontrolador pueda hacer otras tareas. Modica el c odigo para que sea posible. Si el microcontrolador est a esperando a que el usuario pulse una tecla, entonces es buena idea dormir el micro para reducir el consumo el ectrico utilizando la instrucci on SLEEP. Las interrupciones lo despertar an. Comprueba experimentalmente la reducci on del consumo.

Versi on de 19 de abril de 2008

Enunciado

1.1.3.

Diagramas

Los contactos:

El m odulo:

Figura 7.

Esquema mecnico del teclado matricial.

Cap tulo 1. Pr actica: Teclado 4X4

1.2.
1.2.1.
A

Soluci on
Esquema hardware
B C D E F G H J K

2
A

7 4 1
ON C
1

8 5 2 0
2

9 6

R1
10k

3 =
3 4

X1
4
4 MHz 16 15 4

U1
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 PIC16F88 17 18 1 2 3 6 7 8 9 10 11 12 13

C1
33pF

C2
33pF

8
FILE NAME: DESIGN TITLE:

P_teclado.dsn Prctica "Teclado 4x4"


REV:

DATE:

19/04/2008
PAGE:

9
BY:

Hoja principal
Jess M. Hernndez Mangas

1 A
J

of

1
11:20:28

TIME:

1.2.2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

Programas

 E ? K@A < pic .h >  E ? K@A " binario . h "


// 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

IJ K IEC A@ ?D=H Teclas []={0 ,

7, 4, 1, 0 xC ,

8 , 9 ,0 xF , 5 , 6 ,0 xE , 2 , 3 ,0 xD , 0 ,0 xB ,0 xA };

K IEC A@ ?D=H TECLADO_Scan () K IEC A@ ; ; ; ; ; ; ?D=H Tecla =1; Muestrea el teclado 1. Pone la variable Tecla a 1 para el primer c o digo 2. Pone todas las filas de salida a 1 , excepto la fila a muestrear que tiene un 0. 3. Se chequea cada columna de entrada buscando el 0 Si no hay ninguna tecla pulsada la columna se leer a

// // // // // //

4
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

Soluci on
// // // // // // // // // // // // // // // // // // // ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; como un 1 gracias a las resistencias de pull - up . Si est a pulsada se leer a un 0. 4. Se continua el proceso con todas las filas . Si se ha pulsado una tecla , se sale de la rutina con el valor de la tecla pulsada en la variable Tecla Col . 1 2 3 4 Fila + - - - -+ - - - -+ - - - -+ - - - -+ 1 | 1 | 2 | 3 | 4 | + - - - -+ - - - -+ - - - -+ - - - -+ 2 | 5 | 6 | 7 | 8 | + - - - -+ - - - -+ - - - -+ - - - -+ 3 | 9 | 10 | 11 | 12 | + - - - -+ - - - -+ - - - -+ - - - -+ 4 | 13 | 14 | 15 | 16 | + - - - -+ - - - -+ - - - -+ - - - -+ Si no se ha pulsado ninguna tecla se sale con el valor 0 en Tecla . Si se pulsan dos o m a s teclas a la vez s o lo la primera ( siguiendo el orden ) se detecta . // Saco un cero en la fila cero // Borro la notificaci o n ( por si interrupciones ) ) HAJKH ) HAJKH ) HAJKH ) HAJKH Tecla ; // Comprueba la primera columna Tecla ; // Comprueba la segunda columna Tecla ; // Comprueba la tercera columna Tecla ; // Comprueba la cuarta columna

2 46* = B00001110 ; 4*1. = 0; MDE A (1) { EB ( ( 2 46* & (1 < <4))==0 Tecla ++; EB ( ( 2 46* & (1 < <5))==0 Tecla ++; EB ( ( 2 46* & (1 < <6))==0 Tecla ++; EB ( ( 2 46* & (1 < <7))==0 Tecla ++; EB ( Tecla ==17) HAJKH 2 46* = 2 46* << 1;
0; 0;

// Si no se puls o ninguna retorna cero // Selecciona otra fila

} } {

HAJKH

L E@ main () K IEC A@ ?D=H T ; ) 5= 0; 6415* = 0 xF0 ; 6415) = 0 x00 ; 4*27 = 0; MDE A (1) { T = TECLADO_Scan (); T = Teclas [ T ]; 2 46) = T ; }
// // // // Configuro el PORTA como digital RB0 .. RB3 salidas , RB4 .. RB7 entradas RA0 .. RA4 salidas Resistencias pull - up entrada activadas

// Comprueba el teclado // Traduce

Anda mungkin juga menyukai