Sei sulla pagina 1di 6

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;
entity Lcd2a is
PORT (CLOCK, CLC_E, R : IN STD_LOGIC;
LCD_E : OUT STD_LOGIC;
LCD_RS : OUT STD_LOGIC;
LCD_RW : OUT STD_LOGIC;
LCD_DB : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
end Lcd2a;
architecture Behavioral of Lcd2a is
SIGNAL
SIGNAL
SIGNAL
SIGNAL

E
RS
RW
DB

:
:
:
:

STD_LOGIC:= '0';
STD_LOGIC:= '0';
STD_LOGIC:= '0';
STD_LOGIC_VECTOR(7 DOWNTO 0):= "00000000";

begin
LCD_E <= E;
LCD_RS <= RS;
LCD_RW <= RW;
LCD_DB <= DB;
PROCESS (R, CLOCK)
VARIABLE COUNTER : INTEGER := 0;
VARIABLE AUX
: INTEGER := 0;
VARIABLE ACT_STEP
: INTEGER := 0;
VARIABLE NEXT_STEP : INTEGER := 0;
BEGIN
IF (R='1') THEN
COUNTER:=0;
ELSE
IF (RISING_EDGE(CLOCK) AND CLC_E='0') THEN
COUNTER := COUNTER + 1;
IF (COUNTER >= AUX) THEN
ACT_STEP := NEXT_STEP;
NEXT_STEP := ACT_STEP + 1;
CASE ACT_STEP IS
-- Inicializacion 1
WHEN 0 => E <= '0';
AUX := 750000;
WHEN 1 => DB <= "00111111";
E <= '1'; AUX := 12;
WHEN 2 => E <= '0';
AUX := 205000;
WHEN 3 => DB <= "00111111";
E <= '1'; AUX := 12;
WHEN 4 => E <= '0';
AUX := 5000;
WHEN 5 => DB <= "00111111";
E <= '1'; AUX := 12;
WHEN 6 => E <= '0';
AUX := 2000;
WHEN 7 => DB <= "00101111";
E <= '1';
AUX := 12;
WHEN 8 =>
E <= '0';
AUX := 2000;
-- Inicializacion 2

-- Function Set con DL 8 bits


WHEN 9 => E <= '1';
RS <= '0';
RW <= '0';
DB <= "00111111";
AUX := 12;
WHEN 10 => E <= '0';
AUX := 50;
WHEN 11 => E <= '1';
RS <= '0';
RW <= '0';
DB <= "10001111";
AUX := 12;
WHEN 12 => E <= '0';
AUX := 2000;
-- ENTRY MODE
WHEN 13 => E <= '1';
RS <= '0';
RW <= '0';
DB <= "00000110";
AUX := 12;
WHEN 14 => E <= '0';
AUX := 2000;
-- Display On/Off
WHEN 15 => E <= '1';
RS <= '0';
RW <= '0';
DB <= "00001100";
AUX := 12;
WHEN 16 => E <= '0';
AUX := 2000;
-- Clear Display
WHEN 17 => E <= '1';
RS <= '0';
RW <= '0';
DB <= "00000001";
AUX := 12;
WHEN 18 => E <= '0';
AUX := 82000;
-- Escribir texto
-- Set DD RAM address (0x03)
WHEN 19 => E <= '1';
RS <= '0';
RW <= '0';
DB <= "10000011";
AUX := 12;
WHEN 20 => E <= '0';
AUX := 2000;
-- Escribir P
WHEN 21 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01010000";
AUX := 12;
WHEN 22 => E <= '0';
AUX := 2000;
-- Escribir R
WHEN 23 => E <= '1';
RS <= '1';
RW <= '0';

DB <= "01010010";
AUX := 12;
WHEN 24 => E <= '0';
AUX := 2000;
-- Escribir O
WHEN 25 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01001111";
AUX := 12;
WHEN 26 => E <= '0';
AUX := 2000;
-- Escribir Y
WHEN 27 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01011001";
AUX := 12;
WHEN 28 => E <= '0';
AUX := 2000;
-- Escribir E
WHEN 29 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01000101";
AUX := 12;
WHEN 30 => E <= '0';
AUX := 2000;
-- Escribir C
WHEN 31 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01000011";
AUX := 12;
WHEN 32 => E <= '0';
AUX := 2000;
-- Escribir T
WHEN 33 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01010100";
AUX := 12;
WHEN 34 => E <= '0';
AUX := 2000;
-- Escribir O
WHEN 35 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01001111";
AUX := 12;
WHEN 36 => E <= '0';
AUX := 2000;
-- Escribir ESPACIO
WHEN 37 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "00100000";
AUX := 12;
WHEN 38 => E <= '0';
AUX := 2000;

-- Escribir D
WHEN 39 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01000100";
AUX := 12;
WHEN 40 => E <= '0';
AUX := 2000;
-- Escribir E
WHEN 41 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01000101";
AUX := 12;
WHEN 42 => E <= '0';
AUX := 2000;
-- Set DD RAM address (0x42)
WHEN 43 => E <= '1';
RS <= '0';
RW <= '0';
DB <= "11000010";
AUX := 12;
WHEN 44 => E <= '0';
AUX := 2000;
-- Escribir D
WHEN 45 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01000100";
AUX := 12;
WHEN 46 => E <= '0';
AUX := 2000;
-- Escribir I
WHEN 47 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01001001";
AUX := 12;
WHEN 48 => E <= '0';
AUX := 2000;
-- Escribir G
WHEN 49 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01000111";
AUX := 12;
WHEN 50 => E <= '0';
AUX := 2000;
-- Escribir I
WHEN 51 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01001001";
AUX := 12;
WHEN 52 => E <= '0';
AUX := 2000;

-- Escribir T
WHEN 53 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01010100";
AUX := 12;
WHEN 54 => E <= '0';
AUX := 2000;
-- Escribir A
WHEN 55 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01000001";
AUX := 12;
WHEN 56 => E <= '0';
AUX := 2000;
-- Escribir L
WHEN 57 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01001100";
AUX := 12;
WHEN 58 => E <= '0';
AUX := 2000;
-- Escribir E
WHEN 59 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01000101";
AUX := 12;
WHEN 60 => E <= '0';
AUX := 2000;
-- Escribir S
WHEN 61 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "01010011";
AUX := 12;
WHEN 62 => E <= '0';
AUX := 2000;
-- Escribir ESPACIO
WHEN 63=> E <= '1';
RS <= '1';
RW <= '0';
DB <= "00100000";
AUX := 12;
WHEN 64 => E <= '0';
AUX := 2000;
-- Escribir 2
WHEN 65 => E <= '1';
RS <= '1';
RW <= '0';
DB <= "00110010";
AUX := 12;
WHEN 66 => E <= '0';
AUX := 2000;
WHEN OTHERS => NEXT_STEP := 19; AUX := 0;
END CASE;
COUNTER := 0;

END IF;
END IF;
END IF;
END PROCESS;
end Behavioral;

Potrebbero piacerti anche