Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
El Codificador 74C922
Con este dispositivo se puede controlar fcilmente y sin necesidad de ninguna
librera un teclado 4X4, ampliable fcilmente a 2 teclados 4X4.
Bsicamente el circuito consta de ocho entradas (x1 a x4, y1 a y4), donde
conectaremos las cuatro filas y columnas del teclado. La salida en funcin de la
tecla pulsada la tendremos en formato binario en las patillas A, B, C y D. Si miris
el esquema de bloques del componente, veris que estas salidas van a travs de
unas bsculas tipo D que hacen de memoria, con lo que el valor de la tecla pulsada
se mantiene hasta que se pulsa otra y sobrescribe el antiguo valor.
Adems dispone de una salida (DA) que se pone a nivel alto cada vez que se pulsa
una tecla (ideal para el empleo de interrupciones).
Otra ventaja de este componente electrnico es que est modelado en Proteus, con
lo que podemos simular su funcionamiento junto con un Microcontrolador.
El ejemplo ya hecho del display quedara de la siguiente manera:
01./*-----------------------------------------------------------*\
02.| Control de un teclado 4X4 con con el codificador 74C922
|
03.| autor: biblioman
|
04.|
05.\*-----------------------------------------------------------*/
06.
07.#include <16F877.h>
08.//Configuracin de los fusibles.
09.#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD,
NOWRT, NODEBUG
10.#use delay(clock=4000000) //Frecuencia de reloj 4MHz
11.#byte puerto_B = 0x06
// Identificador para el puerto B.
12.#byte puerto_D = 0x08
// Identificador para el puerto C.
13.
14.#int_EXT
15.void EXT_isr(void){
16.
17.switch( puerto_B & 0xF0 )
18.{
19.
20.case 0x20:
21.puerto_D = 0x3F; //0
22.break;
23.case 0xF0:
24.puerto_D = 0x06; //1
25.break;
26.case 0xE0:
27.puerto_D = 0x5B; //2
28.break;
29.case 0xD0:
30.puerto_D = 0x4F; //3
31.break;
32.case 0xB0:
33.puerto_D = 0x66; //4
34.break;
35.case 0xA0:
36.puerto_D = 0x6D;//5
37.break;
38.case 0x90:
39.puerto_D = 0x7D; //6
40.break;
41.case 0x70:
42.puerto_D = 0x07;//7
43.break;
44.case 0x60:
45.puerto_D = 0x7F; //8
46.break;
47.case 0x50:
48.puerto_D = 0x6F; //9
49.break;
50.case 0x30:
51.puerto_D = 0xF7; //A
52.break;
53.case 0x10:
54.puerto_D = 0x7C; //b
55.break;
56.case 0x00:
57.puerto_D = 0x58; //c
58.break;
59.case 0x40:
60.puerto_D = 0x5E; //d
61.break;
62.case 0x80:
63.puerto_D = 0x79; //E
64.break;
65.case 0xC0:
66.puerto_D = 0x71; //F
67.break;
68.
69.default:
70.
71.break;
72.}
73.
74.}
75.
76.void main()
77.{
78.set_tris_b(0xFF); //Puerto B como entrada
79.set_tris_d( 0x80 );//RD6-RD0 -->como salida, RD7--> Entrada (No
utilizado)
80.
81.enable_interrupts(GLOBAL);//habilito interrupcin global
82.enable_interrupts(INT_EXT);//habilito interrupcin externa
83.
84.
85.
86.puerto_D =0x80; //inicializo puerto D (RD6-RD0=0)
87.
88.while(True)
89.{
90.//cdigo principal
91.
92.}
93.
94.}
Comentario
Dependiendo de cmo se conecten las filas y columnas del teclado al codificador
74C922 se tendr una combinacin de valores a la salida diferente, en funcin del
cdigo que queramos emplear en el teclado. Lo ms fcil es que conectis el
teclado al codificador como queris y simulis el circuito en Proteus antes de
conectar el microcontrolador y hagis una tabla de verdad con los valores de la
salida en funcin de la tecla pulsada.
Tecla
Salida 74C922
0x20
0xF0
0xE0
0xD0
0xB0
0xA0
0x90
0x70
0x60
0x50
0x30
0x10
0x00
0x40
0x80
0xC0
Ventajas: