📄 lcd.vhd
字号:
library IEEE;-------------------------------------------Succeed!
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity LCD is
port( clk:in std_logic; ---------------50MHZ
rs: out std_logic;
rw: out std_logic;
en: out std_logic;
lcd_on: out std_logic;
lcd_blon: out std_logic;
Reset : in std_logic; --------------key0
--ckout: out std_logic;-----------------
--bcout: out std_logic;-------------------
data: out std_logic_vector(7 downto 0));
end LCD;
architecture Behavioral of LCD is
type datatype is array (0 to 15) of std_logic_vector(7 downto 0);
CONSTANT WELLCOME : datatype :=(x"31",x"32",x"33",x"34",
x"35",x"36",x"37",x"38",
x"39",x"41",x"42",x"43",
x"44",x"45",x"46",x"46");
type statetype is(s1,s2,s3,s4);
signal state :statetype;
signal datacnt :integer range 0 to 15;
signal b :integer range 0 to 12499;
signal bc :std_logic;
signal ck :std_logic;
begin
process(clk)
begin
if rising_edge(clk) then
if b=12499 then
b<=0;
else
b<=b+1;
end if;
end if;
if b<6249 then
bc<='1';
else
bc<='0';
end if;
end process;
process(bc)
variable s:integer range 0 to 7;
begin
if rising_edge(bc) then
if s=7 then
s:=0;
else
s:=s+1;
end if;
end if;
if s<4 then
ck<='0';
else
ck<='1';
end if;
end process;
process(ck,state)
begin
if Reset='0' then
state <= s1;
--LCD_RS <= '0';
elsif rising_edge(ck) then
case state is
when s1=>
rs<='0';
if(datacnt=0)then
data<="00000110"; --/////传送的是命令0x06
datacnt<=datacnt+1;
elsif(datacnt=1)then
data<="00001100"; --/////传送的是命令0X0C
datacnt<=datacnt+1;
elsif(datacnt=2)then
data<="00111000"; ------/ 传送的是吗命令0X38
datacnt<=datacnt+1;
else
data<="10000000"; -------- 传送 的是0X80;
datacnt<=0;
state<=s2;
end if;
when s2=>
rs<='1';
if datacnt=15 then
state <= s3;
data <= WELLCOME(datacnt);
datacnt<=0;
else
state <= s2;
data <= WELLCOME(datacnt); ------/ 把数组中的数据送入液晶控制模块进行显示
datacnt<=datacnt+1;
end if;
when s3=>
rs<='0';
data<="11000000"; ------/ 传递的是命令0XC0;
state<=s4;
when s4=>
rs<='1';
if datacnt=15 then -------- 回到出示状态进行显示
state <= s1;
data <= WELLCOME(datacnt);
datacnt<=0;
else
state <= s4;
data <= WELLCOME(datacnt); -------- 于第二行中显示数据
datacnt<=datacnt+1;
end if;
when others=>state<=s1;
end case;
end if;
end process;
rw<='0';
en<=ck;
--ckout<=ck;--------------------
--bcout<=bc;-----------------------
lcd_on <= '1';
lcd_blon <= '1';
end Behavioral;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -