Sie sind auf Seite 1von 5

library IEEE; use IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.

ALL; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity LCD23_00 is Port ( CK100 : in STD_LOGIC; RST : in STD_LOGIC; DB : out STD_LOGIC_VECTOR (7 downto 0); RS : out STD_LOGIC; RW : out STD_LOGIC; E : out STD_LOGIC; SETUP : in STD_LOGIC; START : in STD_LOGIC; STOP : in STD_LOGIC; EXI : in STD_LOGIC; BW : in STD_LOGIC_VECTOR (5 downto 0)); end LCD23_00; architecture Behavioral of LCD23_00 is TYPE STATE IS (POWER_UP_DELAY, FUNCTION_SET, DISPLAY_CONTROL, CLEAR_DISPLAY, RETURN_HOME, SET_DDRAM, STRING_DISPLAY); SIGNAL PR_STATE,NX_STATE : STATE:=POWER_UP_DELAY; SIGNAL THOIGIAN,THOIGIANX,J:INTEGER; TYPE MANG IS ARRAY(0 TO 9) OF STD_LOGIC_VECTOR(7 DOWNTO 0); CONSTANT MASCII: MANG:=(X"30",X"31",X"32",X"33",X"34",X"35",X"36",X"37",X"38",X" 39"); --TYPE MANG2 IS ARRAY(0 TO 5) OF STD_LOGIC_VECTOR(7 DOWNTO 0); --CONSTANT MACHU: MANG:=(X"53",X"45",X"54",X"20",X"55",X"50"); TYPE MANG1 IS ARRAY(0 TO 15) OF STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL MATIME: MANG1:=(X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"2 0",X"20",X"20",X"20",X"20",X"20",X"20"); SIGNAL CHIA:STD_LOGIC_VECTOR(27 DOWNTO 0):=X"0000000"; SIGNAL CK1HZ:STD_LOGIC; SIGNAL CH1 : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL DV1 : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL CH2 : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL DV2 : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL DEM: INTEGER:=0; SIGNAL T: INTEGER; SIGNAL TT,TT1: STD_LOGIC; begin PROCESS(CK100,CHIA,CK1HZ) BEGIN IF FALLING_EDGE(CK100) THEN

IF CHIA=X"17D7840" THEN CHIA<=X"0000000"; CK1HZ <= NOT CK1HZ; ELSE CHIA<=CHIA+1; END IF; END IF; END PROCESS; --------------------------------------------------------------------------------------------------PROCESS VARIABLE SO: INTEGER; BEGIN SO:=0; IF EXI='1' THEN TT<='1'; ELSIF SETUP='1' THEN TT<='0';--TT1<='0'; ELSE IF TT='1' THEN TT<='1'; ELSIF TT='0' THEN TT<='0'; END IF; END IF; IF START='1' THEN TT1<='1'; ELSIF STOP='1' THEN TT1<='0'; ELSE IF TT1='1' THEN TT1<='1'; ELSIF TT1='0' THEN TT1<='0'; END IF; END IF; IF TT='1' THEN TT1<='0'; MATIME(1)<= MATIME(2)<= MATIME(3)<= MATIME(4)<= MATIME(5)<= MATIME(6)<= ELSE IF TT1='0' THEN FOR I IN 0 TO 5 LOOP IF BW(I)='1' THEN SO := SO+ 2**I; END IF; END LOOP; T<=SO; CH1<=MASCII(T/10); DV1<=MASCII(T-10*(T/10));

X"53"; X"45"; X"54"; X"20"; X"55"; X"50";

CH2<=X"30"; DV2<=X"30"; MATIME(1)<=CH1; MATIME(2)<=DV1; MATIME(3)<=X"3A"; MATIME(4)<=CH2; MATIME(5)<=DV2; MATIME(6)<=X"20"; --END IF; --END IF; ELSE IF RISING_EDGE(CK1HZ) THEN T<=T; DEM<=DE M+1; IF DEM=T THEN DEM<=0; END IF; END IF; CH1<=MASCII(T/10); DV1<=MASCII(T-10*(T/10)); CH2<=MASCII(DEM/10); DV2<=MASCII(DEM-10*(DEM/10)); MATIME(1)<=CH1; MATIME(2)<=DV1; MATIME(3)<=X"3A"; MATIME(4)<=CH2; MATIME(5)<=DV2; MATIME(6)<=X"20"; END IF; END IF; END PROCESS; PROCESS(RST,CK100) BEGIN IF RST='1' THEN THOIGIAN<=0; J<=0; PR_STATE<=POWER_UP_DELAY; ELSIF RISING_EDGE(CK100) THEN PR_STATE<=NX_STATE; IF THOIGIAN=THOIGIANX THEN THOIGIAN<=0; IF PR_STATE=STRING_DISPLAY THEN IF J=MATIME'HIGH THEN J<=0; ELSE J<=J+1; END IF; END IF; ELSE THOIGIAN<=THOIGIAN+1; END IF; END IF; END PROCESS; -----------------------------PROCESS(PR_STATE) BEGIN CASE PR_STATE IS WHEN POWER_UP_DELAY => THOIGIANX<=3200000; DB<=X"00"; RS<='0'; RW<='0'; IF THOIGIAN=THOIGIANX THEN NX_STATE<=FUNCTION_SET;

ELSE NX_STATE<=POWER_UP_DELAY; END IF; WHEN FUNCTION_SET => THOIGIANX<=4000; DB<=x"3C"; RS<='0'; RW<='0'; IF THOIGIAN =0 THEN E<='0'; ELSIF THOIGIAN=4 THEN E<='1'; ELSIF THOIGIAN=26 THEN E<='0'; END IF; IF THOIGIAN=THOIGIANX THEN NX_STATE <=DISPLAY_CONTROL; ELSE NX_STATE<=FUNCTION_SET; END IF; WHEN DISPLAY_CONTROL => THOIGIANX<=4000; DB<=X"0C"; RS<='0'; RW<='0'; IF THOIGIAN =0 THEN E<='0'; ELSIF THOIGIAN=4 THEN E<='1'; ELSIF THOIGIAN=26 THEN E<='0'; END IF; IF THOIGIAN=THOIGIANX THEN NX_STATE<=CLEAR_DISPLAY; ELSE NX_STATE<=DISPLAY_CONTROL; END IF; WHEN CLEAR_DISPLAY => THOIGIANX<=164000; DB<=X"01"; RS<='0'; RW<='0'; IF THOIGIAN =0 THEN E<='0'; ELSIF THOIGIAN=4 THEN E<='1'; ELSIF THOIGIAN=26 THEN E<='0'; END IF; IF THOIGIAN=THOIGIANX THEN NX_STATE<=RETURN_HOME; ELSE NX_STATE<=CLEAR_DISPLAY; END IF; WHEN RETURN_HOME => THOIGIANX<=164000; DB<=X"02"; RS<='0'; RW<='0'; IF THOIGIAN =0 THEN E<='0'; ELSIF THOIGIAN=4 THEN E<='1'; ELSIF THOIGIAN=26 THEN E<='0'; END IF; IF THOIGIAN=THOIGIANX THEN NX_STATE<=SET_DDRAM; ELSE NX_STATE<=RETURN_HOME; END IF; WHEN SET_DDRAM => THOIGIANX<=164000; DB<=X"80"; RS<='0'; RW<='0'; IF THOIGIAN =0 THEN E<='0'; ELSIF THOIGIAN=4 THEN E<='1'; ELSIF THOIGIAN=26 THEN E<='0'; END IF; IF THOIGIAN=THOIGIANX THEN NX_STATE<=STRING_DISPLAY; ELSE NX_STATE<=SET_DDRAM;

END IF; WHEN STRING_DISPLAY => THOIGIANX<=4000; DB<=MATIME(J); RS<='1'; RW<='0'; IF THOIGIAN =0 THEN E<='0'; ELSIF THOIGIAN=4 THEN E<='1'; ELSIF THOIGIAN=26 THEN E<='0'; END IF; IF THOIGIAN=THOIGIANX AND J=MATIME'HIGH THEN NX_STATE<=SET_DDRAM ; ELSE NX_STATE<=STRING_DISPLAY; END IF; WHEN OTHERS =>NULL; END CASE; END PROCESS; end Behavioral;

Das könnte Ihnen auch gefallen