?? lcm.vhd
字號:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY lcm IS
PORT
(
clk : IN STD_LOGIC;
rst : IN STD_LOGIC;
ena : OUT STD_LOGIC;
data_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
ctrl : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
cs : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)
);
END lcm;
ARCHITECTURE a OF lcm IS
BEGIN
PROCESS(clk,rst)
VARIABLE data : STD_LOGIC_VECTOR(7 DOWNTO 0); --output to "data_out" when LCM is displaying at left half
--screen,left half`s value is fixed, read from inner ROM
VARIABLE cs_reg : STD_LOGIC_VECTOR(1 DOWNTO 0); --"cs" register
VARIABLE st : STD_LOGIC; --1,into change page state. 0,into write data state
VARIABLE ini : STD_LOGIC_VECTOR(2 DOWNTO 0); --initialize the lcm. First,open lcd
--switch,then set column to the first
--column,then set page to the first page,
--then into write data state
VARIABLE y_cnt : STD_LOGIC_VECTOR(5 DOWNTO 0); --shows which colum are writting to
VARIABLE x_cnt : STD_LOGIC_VECTOR(2 DOWNTO 0); --shows which page are writting to
BEGIN
ena<=clk;
IF rst='0' THEN
cs_reg:="10";
st:='0';
ini:="000";
y_cnt:="000000";
x_cnt:="000";
ELSIF clk'event AND clk='1' THEN
CASE ini IS
WHEN "000" =>
st:='0';
y_cnt:="000000";
x_cnt:="000";
cs<="11";
ctrl<="00";
data_out<="00111111";
ini:=ini+'1';
WHEN "001" =>
st:='0';
y_cnt:="000000";
x_cnt:="000";
cs<="11";
ctrl<="00";
data_out<="01000000";
ini:=ini+'1';
WHEN "010" =>
st:='0';
y_cnt:="000000";
x_cnt:="000";
cs<="11";
ctrl<="00";
data_out<="10111000";
ini:=ini+'1';
WHEN "011" =>
st:='0';
y_cnt:="000000";
x_cnt:="000";
cs<="10";
ctrl<="10";
data_out<="00000000";
ini:=ini+'1';
WHEN OTHERS =>
cs<=cs_reg;
IF x_cnt&y_cnt="111111110" THEN
cs_reg:="11"-cs_reg;
ELSE
cs_reg:=cs_reg;
END IF;
CASE st IS
WHEN '0' =>
ctrl<="10";
y_cnt:=y_cnt+'1';
IF y_cnt/="111111" THEN
st:='0';
ELSE
st:='1';
END IF;
WHEN '1' =>
x_cnt:=x_cnt+'1';
IF cs_reg="10" THEN
data_out<=data;
CASE x_cnt IS
WHEN "000" =>
CASE y_cnt IS
WHEN "000001" =>
data:="11111100";
WHEN "000010" =>
data:="01000100";
WHEN "000011" =>
data:="01000100";
WHEN "000100" =>
data:="01000100";
WHEN "000101" =>
data:="11111100";
WHEN "000110" =>
data:="00010000";
WHEN "000111" =>
data:="10010000";
WHEN "001000" =>
data:="00010000";
WHEN "001001" =>
data:="00010000";
WHEN "001010" =>
data:="00010000";
WHEN "001011" =>
data:="11111111";
WHEN "001100" =>
data:="00010000";
WHEN "001101" =>
data:="00010000";
WHEN "001110" =>
data:="00010000";
WHEN "010001" =>
data:="11111000";
WHEN "010010" =>
data:="00000001";
WHEN "010011" =>
data:="00000110";
WHEN "010101" =>
data:="11110000";
WHEN "010110" =>
data:="10010010";
WHEN "010111" =>
data:="10010010";
WHEN "011000" =>
data:="10010010";
WHEN "011001" =>
data:="10010010";
WHEN "011010" =>
data:="11110010";
WHEN "011011" =>
data:="00000010";
WHEN "011100" =>
data:="00000010";
WHEN "011101" =>
data:="11111110";
WHEN OTHERS =>
data:="00000000";
END CASE;
WHEN "001" =>
CASE y_cnt IS
WHEN "000001" =>
data:="00000111";
WHEN "000010" =>
data:="00000100";
WHEN "000011" =>
data:="00000100";
WHEN "000100" =>
data:="00000100";
WHEN "000101" =>
data:="00000111";
WHEN "001000" =>
data:="00000011";
WHEN "001001" =>
data:="01000000";
WHEN "001010" =>
data:="10000000";
WHEN "001011" =>
data:="01111111";
WHEN "010001" =>
data:="11111111";
WHEN "010101" =>
data:="00000111";
WHEN "010110" =>
data:="00000100";
WHEN "010111" =>
data:="00000100";
WHEN "011000" =>
data:="00000100";
WHEN "011001" =>
data:="00000100";
WHEN "011010" =>
data:="00000111";
WHEN "011011" =>
data:="01000000";
WHEN "011100" =>
data:="10000000";
WHEN "011101" =>
data:="01111111";
WHEN OTHERS =>
data:="00000000";
END CASE;
WHEN "010" =>
CASE y_cnt IS
WHEN "000000" => --the 1st column
data:="00100000";
WHEN "000001" => --the 2nd column
data:="00111100";
WHEN "000010" => --the 3rd column
data:="00100000";
WHEN "000011" =>
data:="00100000";
WHEN "000100" =>
data:="10111111";
WHEN "000101" =>
data:="00100100";
WHEN "000110" =>
data:="00100100";
WHEN "001000" =>
data:="11110010";
WHEN "001001" =>
data:="00011010";
WHEN "001010" =>
data:="11010110";
WHEN "001011" =>
data:="00010010";
WHEN "001100" =>
data:="00010010";
WHEN "001101" =>
data:="11110010";
WHEN "001110" =>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -