Ciencia

Codigo Vhdl Para Escribir En Pantalla Lcd/ Maquina De Estados



Codigo Vhdl Para Escribir En Pantalla Lcd/ Maquina De Estados - Ciencia

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;

entity LCD is
port(

Clk : in std_logic;
Rst : in std_logic;
E : out std_logic;
RS : out std_logic;
clk_a : out std_logic;
clk_b : out std_logic;
DB : out std_logic_vector(7 downto 0)
);
end entity LCD;

architecture FSM of LCD is
signal contador : integer range 0 to 1_999_999 := 0;
signal clk_inicial : std_logic;
signal clk_rapido : std_logic;

type estados is (s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19, s20,
s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31, s32, s33, s34, s35, s36, s37, s38, s39);
signal estado_presente, estado_siguiente : estados;
begin
reloj_alto: entity work.clk_div port map(
entrada =>clk,
reset =>rst,
salida =>clk_inicial

);
reloj_bajo: entity work.clk_general port map(
entrada =>clk,
reset =>rst,
salida =>clk_rapido

);

–ContadorTiempo:process(Clk, Rst)
–begin
— if Rst = ‘1’ then
— contador <= 0;
— elsif (rising_edge(Clk)) then
— if (estado_presente /= estado_siguiente) then
— contador <= 0;
— else
— if contador /= 1_999_999 then

— contador <= contador + 1;
— end if;
— end if;
–end if;
–end process ContadorTiempo;

process(estado_presente)
begin
case estado_presente is
when s0 =>
if clk_rapido=’1’then
estado_siguiente <= s1;
else
estado_siguiente <= s0;
end if;

when s1 =>
if rising_edge(clk_rapido) then
estado_siguiente <= s2;
else
estado_siguiente <= s1;
end if;

when s2 =>
if rising_edge(clk_rapido) then
estado_siguiente <= s3;
else
estado_siguiente <= s2;
end if;

when s3 =>

if rising_edge(clk_rapido) then
estado_siguiente <= s4;
else
estado_siguiente <= s3;
end if;

when s4 =>
if rising_edge(clk_rapido) then
estado_siguiente <= s5;
else
estado_siguiente <= s4;
end if;

when s5 =>
if rising_edge(clk_rapido) then
estado_siguiente <= s6;
else
estado_siguiente <= s5;
end if;

when s6 =>
estado_siguiente <= s7;

when s7 =>
estado_siguiente <= s8;

when s8 =>
estado_siguiente <= s9;

when s9 =>
estado_siguiente <= s10;

when s10 =>
estado_siguiente <= s11;

when s11 =>
estado_siguiente <= s12;

when s12 =>
estado_siguiente <= s13;

when s13 =>
estado_siguiente <= s14;

when s14 =>
estado_siguiente <= s15;

when s15 =>
estado_siguiente <= s16;

when s16 =>
estado_siguiente <= s17;

when s17 =>
estado_siguiente <= s18;

when s18 =>
estado_siguiente <= s19;

when s19 =>
estado_siguiente <= s20;

when s20 =>
estado_siguiente <= s21;

when s21 =>
estado_siguiente <= s22;

when s22 =>
estado_siguiente <= s23;

when s23 =>
estado_siguiente <= s24;

when s24 =>
estado_siguiente <= s25;

when s25 =>
estado_siguiente <= s26;

when s26 =>
estado_siguiente <= s27;

when s27 =>
estado_siguiente <= s28;

when s28 =>
estado_siguiente <= s29;

when s29 =>
estado_siguiente <= s30;

when s30 =>
estado_siguiente <= s31;

when s31 =>
estado_siguiente <= s32;

when s32 =>
estado_siguiente <= s33;

when s33 =>
estado_siguiente <= s34;

when s34 =>
estado_siguiente <= s35;

when s35 =>
estado_siguiente <= s36;

when s36 =>
estado_siguiente <= s37;

when s37 =>
estado_siguiente <= s38;

when s38 =>
estado_siguiente <= s39;

when s39 =>
estado_siguiente <= s39;

when others =>
estado_siguiente <= s0;

end case;
end process;

process(Clk, Rst)
begin
if Rst = ‘1’ then
estado_presente <= s0;
elsif(rising_edge(Clk_rapido))then
estado_presente <= estado_siguiente;
end if;
end process;

process(estado_presente)
begin
case estado_presente is
when s0 =>
E <=’0′;
RS <=’0′;
DB <=”00110000″;

when s1 =>
E <=’1′;
RS <=’0′;
DB <=”00110000″;

when s2 =>
E <=’0′;
RS <=’0′;
DB <=”00110000″;

when s3 =>
E <=’1′;
RS <=’0′;
DB <=”00110000″;

when s4 =>
E <=’0′;
RS <=’0′;
DB <=”00110000″;

when s5 =>
E <=’1′;
RS <=’0′;
DB <=”00110000″;

when s6 =>
E <=’0′;
RS <=’0′;
DB <=”00111100″;

when s7 =>
E <=’1′;
RS <=’0′;
DB <=”00111100″;

when s8 =>
E <=’0′;
RS <=’0′;
DB <=”00001000″;

when s9 =>
E <=’1′;
RS <=’0′;
DB <=”00001000″;

when s10 =>
E <=’0′;
RS <=’0′;
DB <=”00000001″;

when s11 =>
E <=’1′;
RS <=’0′;
DB <=”00000001″;

when s12 =>
E <=’0′;
RS <=’0′;
DB <=”00000110″;

when s13 =>
E <=’1′;
RS <=’0′;
DB <=”00000110″;
–inicializado

when s14 =>
E <=’0′;
RS <=’1′;
DB <=”01000101″;

when s15 =>
E <=’1′;
RS <=’1′;
DB <=”01000101″;
— E
when s16 =>
E <=’0′;
RS <=’1′;
DB <=”01000100″;

when s17 =>
E <=’1′;
RS <=’1′;
DB <=”01000100″;
— D
when s18 =>
E <=’0′;
RS <=’1′;
DB <=”00110010″;

when s19 =>
E <=’1′;
RS <=’1′;
DB <=”00110010″;
–2
when s20 =>
E <=’0′;
RS <=’1′;
DB <=”10100001″;

when s21 =>
E <=’1′;
RS <=’1′;
DB <=”10100001″;
–__
when s22 =>
E <=’0′;
RS <=’1′;
DB <=”01010101″;

when s23 =>
E <=’1′;
RS <=’1′;
DB <=”01010101″;
–U
when s24 =>
E <=’0′;
RS <=’1′;
DB <=”01110000″;

when s25 =>
E <=’1′;
RS <=’1′;
DB <=”01110000″;
–p
when s26 =>
E <=’0′;
RS <=’1′;
DB <=”01110100″;

when s27 =>
E <=’1′;
RS <=’1′;
DB <=”01110100″;
–t
when s28 =>
E <=’0′;
RS <=’1′;
DB <=”01100011″;

when s29 =>
E <=’1′;
RS <=’1′;
DB <=”01100011″;
–c
when s30 =>
E <=’0′;
RS <=’1′;
DB <=”10100001″;

when s31 =>
E <=’1′;
RS <=’1′;
DB <=”10100001″;
–__
when s32 =>
E <=’0′;
RS <=’1′;
DB <=”00110010″;

when s33 =>
E <=’1′;
RS <=’1′;
DB <=”00110010″;
–2
when s34 =>
E <=’0′;
RS <=’1′;
DB <=”00110000″;

when s35 =>
E <=’1′;
RS <=’1′;
DB <=”00110000″;
–0
when s36 =>
E <=’0′;
RS <=’1′;
DB <=”00110001″;

when s37 =>
E <=’1′;
RS <=’1′;
DB <=”00110001″;
–1
when s38 =>
E <=’0′;
RS <=’1′;
DB <=”00111000″;

when s39 =>
E <=’1′;
RS <=’1′;
DB <=”00111000″;
–8
when others =>
E <=’0′;
RS <=’1′;
DB <=(others=>’0′);
end case;
end process;
clk_a <=clk_inicial;
clk_b <=clk_rapido;

end FSM;

¿Te ha gustado el artículo? ¡Valóralo!

0.00 - 0 votos
Cuanto más alta sea la valoración más visible será el artículo en portada.
¡Compártelo en las redes sociales!

Acerca del autor

hector.aponte01

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Únete a la comunidad de NoCreasNada

¿Te gustaría compartir tus inquietudes y ganar seguidores por todo el mundo?

¿Eres una persona inquieta y quieres descubrir a más gente como tú? 

Únete a NoCreasNada.

Además, te pagaremos por las visitas que recibas.

Más Información