Sie sind auf Seite 1von 6

library ieee;

use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity interfata_LCD is
port(iRST
:
in std_logic;
iCLK :
in std_logic;

oData
oRW
oRS
oEN
end interfata_lcd;

:
:
:
:

out std_logic_vector(3 downto 0);


out std_logic;
out std_logic;
out std_logic);

architecture behave of interfata_LCD is


type xxx is (power, initializare, ready, afisare);
signal stare :
xxx;
begin
process (iCLK,iRST)
variable counter : integer := 0;
begin
if iRST <= '1'then
oData <= (others => '0');
oEN <= '0';
oRS <= '0';
oRW <= '0';
elsif rising_edge(iCLK) then
case stare is
when power =>
if counter < 3000000 then
counter := counter + 1;
stare <= power;
else
counter := 0;
oRS <= '0';
oRW <= '0';
oData <= "0000";
oEN <= '0';
stare <= initializare;
end if;
when initializare =>
counter :=counter + 1;
--function set:4 biti,1 linie, 5x8 dots;
if counter < 40 then

oEN <='1';
oData <= "0010";
stare <= initializare;
elsif counter < 80 then
oEN <= '1';
oData <= "0000";
stare <= initializare;
elsif counter < 3980 then
--asteapta 39 us;
oEN <= '0';
oData <= "0000";
stare <= initializare;
--display on,cursor on, blink on;
elsif counter < 4020 then
oEN <= '1';
oData <= "0000"
stare <= initializare;
elsif counter < 4060 then
oEN <= '1';
oData <= "1111";
stare <= initializare;
elsif counter < 7960 then
--asteapta 39 us;
oEN <= '0';
oData <= "0000";
stare <= initializare;
--sterge display;
elsif counter < 8000 then
oEN <= '1';
oData <= "0001";
stare <= initializare;
elsif counter < 8040 then
oEN <= '1';
oData <= "0001";
stare <= initializare;
elsif counter < 161040 then --asteapta 1.53 ms;
oEN <= '0';
oData <= "0000";
stare <= initializare;
--set mode:mod incrementare fara shift-are;
elsif counter < 161080 then
oEN <= '1';
oData <= "0000";
stare <= initializare;
elsif counter < 161120 then
oEN <= '1';
oData <= "0110";
stare <= initializare;
elsif counter < 165020 then --asteapta 39 us
oEN <= '0';
oData <= "0000";

stare <= initializare;


else
counter := 0;
stare <= ready;
end if;
when ready =>
counter := counter + 1;
if counter < 10 then
oRS <= '1';
oRW <= '0';
oData <= "0000";
stare <= afisare;
end if;
when afisare =>
counter := counter + 1;
--afiseaza P;
if counter < 40 then
oEN <= '1';
oData <= "0101";
stare <= afisare;
elsif counter < 80 then
oEN <= '1';
oData <= "0000";
stare <= afisare;
elsif counter < 4380 then
oEN <='0';
oData <= "0000";
stare <= afisare;
--afiseaza R;
elsif counter < 4420 then
oEN <= '1';
oData <= "0101";
stare <= afisare;
elsif counter < 4460 then
oEN <= '1';
oData <= "0010";
stare <= afisare;
elsif counter < 8680 then
oEN <= '0';
oData <= "0000";
stare <= afisare;
--afiseaza O;
elsif counter < 8720 then
oEN <= '1';
oData <= "0100"
stare <= afisare;
elsif counter < 8760 then
oEN <= '1';
oData <= "1111";

--asteapta 43 us;

--asteapta 43 us;

stare <= afisare;


elsif counter < 13060 then
oEN <= '0';
oData <= "0000";
stare <= afisare;
--afiseaza I;
elsif counter < 13100 then
oEN <= '1';
oData <="0100";
stare <= afisare;
elsif counter < 13140 then
oEN <= '1';
oData <= "1001";
stare <= afisare;
elsif counter < 17440 then
oEN <= '0';
oData <= "0000";
stare <= afisare;
--afiseaza E;
elsif counter < 17480 then
oEN <= '1';
oData <= "0100"
stare <= afisare;
elsif counter < 17520 then
oEN <= '1';
oData <= "0101";
stare <= afisare;
elsif counter < 21820 then
oEN <= '0';
oData <= "0000";
stare <= afisare;
--afiseaza C;
elsif counter < 21860 then
oEN <= '1';
oData <= "0100";
stare <= afisare;
elsif counter < 21900 then
oEN <= '1';
oData <= "0011";
stare <= afisare;
elsif counter < 26200 then
oEN <= '0';
oData <= "0000";
stare <= afisare;
--afiseaza T;
elsif counter < 26240 then
oEN <= '1';
oData <= "0101";
stare <= afisare;

--asteapta 43 us;

--asteapta 43 us;

--asteapta 43 us;

--asteapta 43 us;

elsif counter < 26280 then


oEN <= '1';
oData <= "0100";
stare <= afisare;
elsif counter < 30580 then
oEN <= '0';
oData <= "0000";
stare <= afisare;
--afiseaza spatiu;
elsif counter < 30620 then
oEN <= '1';
oData <= "1111";
stare <= afisare;
elsif counter < 30660 then
oEN <= '1';
oData <= "1110";
stare <= afisare;
elsif counter < 34960 then
oEN <= '0';
oData <= "0000";
stare <= afisare;
--afiseaza S;
elsif counter < 35000 then
oEN <= '1';
oData <= "0101"
stare <= afisare;
elsif counter < 35040 then
oEN <= '1';
oData <= "0011";
stare <= afisare;
elsif counter < 39340 then
oEN <= '0';
oData <= "0000";
stare <= afisare;
--afiseaza O;
elsif counter < 39380 then
oEN <= '1';
oData <= "0100"
stare <= afisare;
elsif counter < 39420 then
oEN <= '1';
oData <= "1111"
stare <= afisare;
elsif counter < 43720 then
oEN <= '0';
oData <= "0000";
stare <= afisare;
--afiseaza C;
elsif counter < 43760 then

--asteapta 43 us;

--asteapta 43 us;

--asteapta 43 us;

--asteapta 43 us;

oEN <= '1';


oData <= "0100";
stare <= afisare;
else
oEN <= '1';
oData <= "0011";
stare <= afisare;
end if;
end case;
end if;
end process;
end behave;

Das könnte Ihnen auch gefallen