Lectura De Un Teclado Matricial En Vhdl
LECTURA DE UN TECLADO MATRICIAL EN VHDL
1. OBJETIVO GENERAL
* Diseñar en vhdl un código que lea un teclado matricial.
1.1 OBJETIVOS
* Implementar la lectura de un teclado matricial a un display 7 segmentos.
* Combinar un diagrama en esquemático con un codigo en vhdl.
2. DISEÑO DEL PROGRAMA
FIGURA 2
CONFIGURACION INTERNA DEL TECLADO
COLUMNAS
FILASFIGURA 1
TECLADO MATRICIAL
Para realizar esta practica utilizamos un teclado matricial de 4 x 4 (figura 1), es decir de cuatro filas y cuatro columnas, que nos da un total de 16 teclas, para manejar el teclado es necesario tener líneas de entrada y líneas de salida, en este caso se utilizo las líneas de entrada como las columnas, y las líneas de salida como filas.
Al presionar una tecla segenera un corto circuito en la fila y columna presiona de esta forma se puede comprobar con ayuda de un multímetro que el teclado funciona o también se puede mirar la configuración de pines que presenta el teclado (figura 2).
Para que el teclado funcione hay que activar las columnas de manera alternada, después de activar una de las columnas hay que verificar si se ha activado alguna de lasfilas, Cuando se active una de las filas implica que una de las teclas ha sido presionada y si una de las teclas ha sido presionada hay que determinar qué tecla fue, la tecla presionada corresponde a la intersección de la columna activada y la fila activada, en el caso de que ninguna de las filas esté activa se asume que ninguna tecla de la columna fue activada o presionada.
El diseño consta dedos bloques en código vhdl, una donde se leerá y enviara información del teclado y un decodificador a 7 segmentos, como se aprecia en el diagrama 1.
El decodificador debe diseñarse para ánodo común esto quiere decir que se polariza con vcc y para q prendan los leds deberán estar en 0 (ver tabla 1).
DIAGRAMA 1. Diagrama circuital
numero | Numero en binario | A | B | C | D | E | F | G |
0| 0000 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
1 | 0001 | 1 | 0 | 0 | 1 | 1 | 1 | 1 |
2 | 0010 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
3 | 0011 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
4 | 0100 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
5 | 0101 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
6 | 0110 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
7 | 0111 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
8 | 1000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
9 | 1001 | 0 | 0 | 0 | 0 | 1| 0 | 0 |
A | 1010 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
B | 1011 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
C | 1100 | 0 | 1 | 1 | 0 | 0 | 0 | 1 |
D | 1101 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
* | 1110 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
# | 1111 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
Tabla 1
PROGRAMA EN VHDL
Se creo el programa en vhdl y se realizo su símbolo para ser acoplado con al otro bloque (diagrama1).
TECLADOlibrary IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
--asignacion de entradas y salidas
entity teclado is
Port ( fil : in STD_LOGIC_VECTOR (3 downto 0);
clk: in STD_LOGIC;
col : out STD_LOGIC_VECTOR (3 downto 0);
ent_tecla:out std_logic_vector(3 downto 0));
end teclado;
--asignacion de sañales ausar
architecture Behavioral of teclado is
signal act:std_logic;
signal cambio:std_logic_vector(3 downto 0):="0001";
signal corre_fil,corre_col:std_logic_vector(3 downto 0);
begin
--inicio del process y asignacion de variables
process(clk)
variable conta,cont:integer;
begin
if (clk'event and clk='1') then -- reloj
cont:=cont+1; -- cada vez que haga uncambio a 1
col<=cambio;
if cont=500000 then -- reinicio de frecuencia
cont:=0;
cambio<=cambio(2 downto 0)& '0';
conta:=conta+1;
if conta=4 then -- reinicio de contador
cambio<="0001";
conta:=0;
end if;
end if;
if fil/="0000" then -- activacion del teclado
cambio<="0000";
act<='1';...
Regístrate para leer el documento completo.