Está en la página 1de 12

Tecnológico Nacional de México

Campus Querétaro

Practica 6 Teclado matricial: numero de 3 dígitos


(unidades, decenas y centenas)

Que presenta:
Sandoval Frías David.

Estudiante de la carrera:

Ingeniería en electrónica

Docente:

VICTOR JUAN ARCE FARFAN

Asignatura:

Diseño digital con VHDL

Fecha:10/05/2022
DISEÑO DIGITAL VHDL

I.- Introducción:

En esta práctica tendrá como finalidad el crear un programa que digite


números de un teclado matricial del 0 al 9 en tres displays
conformando así un numero con un formato de unidades, decenas y
centenas, la función del programa será hacer una FMS (máquina de
estados) para con un reloj determinar cuándo se presiona una tecla
del teclado matricial cambie de estado los cuales serán que conforme
se vayan apretando las teclas el numero introducido se desplace de
unidades a decenas y de decenas a centenas por los displays siendo el primero
display para unidades, el segundo para decenas y el tercero para centenas, para
conseguir que los números se muestren en el display es necesario multiplexarlos, en
cuanto al teclado matricial será necesario exportar una librería cuya función es impedir
el rebote del teclado al momento de presionar la tecla y ahorrarnos el trabajo del
código del teclado.

II.- Marco teórico:

FPGA: es el acrónimo de Field Programmable Gate Arrays y no es más que una serie
de dispositivos basados en semiconductores a base de matrices de bloques lógicos
configurables o CLB, donde además se conectan a través de lo que en el sector se
denomina como interconexiones programables.

Quartus II: Altera Quartus II es un programa de software de diseño que te permite


crear diseños para el arreglo de compuertas programables en campo (FPGA),
HardCopy Application Specific Integrated Circuit (ASIC) y dispositivos lógicos
programables complejos (CPLD). Este programa cuenta con una interfaz gráfica de
usuario (GUI) y crear archivos de programación.

Display: El display de 7 segmentos es un dispositivo electrónico que se utiliza para


representar visualmente números y algunos caracteres. Este display es muy popular
debido a su gran efectividad y simplicidad al momento de utilizarlo.

Decodificador (BCD a 7 Segmentos): es un circuito combinacional, cuya función es


convertir un código binario de entrada (natural, BCD, etc.) de N bits de entrada y M
líneas de salida (N puede ser cualquier entero y M es un entero menor o igual a 2N),
tales que cada línea de salida será activada para una sola de las combinaciones
posibles de entrada.
DISEÑO DIGITAL VHDL

El reloj digital: es un componente del microprocesador que emite una serie de pulsos
eléctricos a intervalos constantes llamados ciclos, estos ciclos marcan el ritmo que ha
de seguirse para la realización de cada paso para poder simular el tiempo
dependiendo de longitud de onda entre más corta más rápido y entre más larga más
lenta así pudiendo calcular segundos si se ajusta correctamente en la medida que es
aproximadamente 50MGhz.

Multiplexación: es el dispositivo de multiplexado que combina las señales de los


transmisores y las envía a través de un canal de alta velocidad. Un demultiplexor es
el dispositivo de multiplexado a través del cual los receptores se conectan al canal de
alta velocidad.

Teclado matricial: Un teclado matricial es un arreglo o matriz de pulsadores que


permiten darle a nuestros proyectos un método de interacción con el usuario para el
ingreso de diferentes datos que posteriormente pueden ser procesados dentro del
programa del microcontrolador PIC.

III.- Desarrollo:

----Programa -----------------------------------------------------------------------------------------------

Library IEEE;

use ieee.std_logic_1164.all;

Entity Teclado_Matricial is

port(

Reloj: in std_logic;

col: in std_logic_vector(3 downto 0);

filas: out std_logic_vector(3 downto 0);

display: out std_logic_vector(2 downto 0);

Seg: out std_logic_vector(7 downto 0)

);

end Teclado_Matricial;

---------------------------------

---------------------------------
DISEÑO DIGITAL VHDL

architecture tecla of Teclado_Matricial is

component LIB_TEC_MATRICIAL_4x4_INTESC_RevA is

GENERIC(

FREQ_CLK : INTEGER := 50_000_000 --FRECUENCIA DE LA


TARJETA

);

PORT(

CLK : IN STD_LOGIC; --RELOJ


FPGA

COLUMNAS : IN STD_LOGIC_VECTOR(3 DOWNTO 0); --PUERTO


CONECTADO A LAS COLUMNAS DEL TECLADO

FILAS : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --PUERTO CONECTADO A


LA FILAS DEL TECLADO

BOTON_PRES : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --PUERTO QUE


INDICA LA TECLA QUE SE PRESION

IND : OUT STD_LOGIC --


BANDERA QUE INDICA CUANDO SE PRESION UNA TECLA (S LO DURA UN CICLO DE
RELOJ)

);

end component LIB_TEC_MATRICIAL_4x4_INTESC_RevA ;

type maquina is(unidades,decenas,centenas);

signal EDO_P,EDO_F : maquina := unidades;

constant delay_fin :integer:= 149_999;

signal Selection: integer range 0 to delay_fin :=0;

signal contador_principal: integer range 0 to 15:= 0;

signal unidades_E1, decenas_E2, centenas_E3: integer range 0 to 15 := 0;

signal boton_pres:std_logic_vector(3 downto 0):= (OTHERS =>'0');

signal ind:std_logic:= '0';


DISEÑO DIGITAL VHDL

begin

libreria: LIB_TEC_MATRICIAL_4x4_INTESC_RevA Generic map (FREQ_CLK=>


50000000)

port map (Reloj,col,filas,boton_pres,ind);

Proceso_Teclado: process (Reloj,ind,boton_pres) begin

if rising_edge(Reloj)then

if ind = '1'and boton_pres =x"0" then

unidades_E1<=0 ;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"1" then

unidades_E1<=1 ;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"2" then

unidades_E1<=2;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"3" then

unidades_E1<=3;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"4" then

unidades_E1<=4 ;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"5" then

unidades_E1<=5;
DISEÑO DIGITAL VHDL

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"6" then

unidades_E1<=6 ;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"7" then

unidades_E1<=7 ;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"8" then

unidades_E1<=8;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"9" then

unidades_E1<=9;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"A" then

unidades_E1<=10;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"B" then

unidades_E1<=11;
DISEÑO DIGITAL VHDL

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"C" then

unidades_E1<=12;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"D" then

unidades_E1<=13;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"E" then

unidades_E1<=14;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

elsif ind = '1'and boton_pres =x"F" then

unidades_E1<=15 ;

decenas_E2<=unidades_E1 ;

centenas_E3<=decenas_E2;

else

unidades_E1<=unidades_E1;

decenas_E2<=decenas_E2 ;

centenas_E3<=centenas_E3;

end if;
DISEÑO DIGITAL VHDL

end if;

end process;

-------------------------

process(EDO_P )

begin

case EDO_P is

when unidades=>

display<="110";

EDO_F<=decenas;

when decenas=>

display <="101";

EDO_F<=centenas;

when centenas=>

display <="011";

EDO_F<=unidades;

when others => null;

end case;

end process;

----------------------------- LISTO (palomita)---------------------------------------

PROCESS(Reloj)

BEGIN

if (Reloj'event and Reloj = '1') then

Selection<= Selection +1;

if (Selection = delay_fin) then

Selection <= 0;

EDO_P<=EDO_F;

end if;
DISEÑO DIGITAL VHDL

end if;

end process;

---------------------------------

contador_principal<= unidades_E1 when EDO_P = unidades else

decenas_E2 when EDO_P = decenas else

centenas_E3 when EDO_P = centenas ;

Seg<= "11000000" when contador_principal = 0 else

"11111001" when contador_principal = 1 else

"10100100" when contador_principal = 2 else

"10110000" when contador_principal = 3 else

"10011001" when contador_principal = 4 else

"10010010" when contador_principal = 5 else

"10000010" when contador_principal = 6 else

"11111000" when contador_principal = 7 else

"10000000" when contador_principal = 8 else

"10011000" when contador_principal = 9 else

"10001000" when contador_principal = 10 else

"10000011" when contador_principal = 11 else

"11000110" when contador_principal = 12 else

"10100001" when contador_principal = 13 else

"10000110" when contador_principal = 14 else

"10001110";

end tecla;
DISEÑO DIGITAL VHDL

----------------------------------------------------------------------------------------------------------------------

--Pin planner –
DISEÑO DIGITAL VHDL

------------------------------------------------------------------------------------------------------------

--Imágenes--

Conformar el numero 521: primero el 5 como unidad luego el 2 se convierte en


unidad y el 5 se desplaza a decenas y por ultimo el 1 se convierte en unidad el
2 se desplaza como decena y el 5 se desplaza como centena

Numero extra:

IV.- Conclusiones:

• Esta práctica podría considerarse como un nivel más de complejidad a la


práctica anterior en donde solo digitábamos un digito con un teclado matricial
en un display y aquí pusimos en práctica todo lo antes visto como máquina
de estados, señales, decodificadores y divisor de reloj con el uso del teclado
matricial.

• En esta práctica la considero una buena introducción mas compleja para el uso
de displays a partir del teclado matricial y a partir de las teclas seleccionadas
crean condiciones en la maquina de estados y para futuras practicas crear
condiciones dado el numero dado
DISEÑO DIGITAL VHDL

Bibliografía:

----------------------------------------------------------------------------------------------------------------

Página web (2012). Altera Quartus II Herramientas de desarrollo. 2022, de


Computer informacion Sitio web: Altera Quartus II Herramientas de desarrollo
(wingwit.com)

JFVILLA. (2020). Decodificadores BCD a 7 segmentos . 22-11-2021, de 7Robot Sitio


web: https://wp.7robot.net/decodificadores-de-bcd-a-7-segmentos/

LORENAGANTISANCH. (9 SEPTIEMBRE, 2019). Decodificador binario a 7


segmentos. 13 Marzo,2022, de PSOC BLOG Sitio web: Decodificador binario a 7
segmentos – PSOC BLOG (wordpress.com)

Ingeniería Mecafenix. (2018). Display de 7 segmentos. 2022, de La enciclopedia de


la ingeniería Sitio web: Display de 7 segmentos (como se usa) - Ingeniería
Mecafenix (ingmecafenix.com)

LORENAGANTISANCH. (2019). LORENAGANTISANCH. 2022, de PSOC BLOG


Sitio web: https://psocprojectblog.wordpress.com/2019/10/13/teclado-matricial/

----------------------------------------------------------------------------------------------------

También podría gustarte