文档库 最新最全的文档下载
当前位置:文档库 › VHDL_LCD1602

VHDL_LCD1602

VHDL_LCD1602
VHDL_LCD1602

use IEEE.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity lcd1602 is

port(clk, reset: in std_logic;

LCD_Data: out std_logic_vector(8 downto 0);

en: out std_logic;

rw: out std_logic);

end lcd1602;

architecture gongneng of lcd1602 is

signal LCD_Clk: std_logic;

signal s : integer range 0 to 10000000;

begin

--50MHz to 5Hz

process(clk, reset)

begin

if reset = '0' then

LCD_Clk <= '0';

s <= 0;

elsif clk'event and clk = '1' then

if s = 10000000 then

s <= 0;

LCD_Clk <= not LCD_Clk;

else

s <= s + 1;

end if;

end if;

end process;

rw <='0';

en <= LCD_Clk;

process(LCD_Clk)

variable cnt: std_logic_vector(4 downto 0):="00000";

begin

if Reset='0'then

LCD_Data<="000000001"; -- Reset清屏

--LCD_Data[8..0], 其中LCD_Data[8]对应1602的RS,--LCD_Data[7..0]对应1602的八根数据线cnt:="00000"; --计数器清零

elsif rising_edge(LCD_Clk) then

if cnt<"01111" then cnt:=cnt+1;

else cnt:="00000";

--设计计数器,每次计数间隔LCD_CLK定义的一个周期

case cnt is

when "00000"=>LCD_Data<="000111000";--/*设置8位格式,2行,5*7*/ ,顺序2,3的要求when "00001"=>LCD_Data<="000001100"; --/*整体显示,关光标,光标闪烁/ ,顺序4的要求

when "00010"=>LCD_Data<="000000001";--清屏,顺序5的要求

when "00011"=>LCD_Data<="000000110"; --/*显示移动格式,看最后两位,10表示光标右移,顺序6的要求

when "00100"=>LCD_Data<="010000000";--设定显示的位置在00H+80H,即显示屏第一行第一个位置,顺序7的要求

when "00101"=>LCD_Data<="101000011"; --顺序8的要求,上一步指定位置处显示字符C when "00110"=>LCD_Data<="101101000";--上一步基础上地址加一,显示字符h

when "00111"=>LCD_Data<="101100101";--e

when "01000"=>LCD_Data<="101101110";--n

when "01001"=>LCD_Data<="101011010";--Z

when "01010"=>LCD_Data<="101101000";--h

when "01011"=>LCD_Data<="101100101";--e

when "01100"=>LCD_Data<="011000000";--设定显示的位置在10H+80H,即显示屏第2行第一个位置

when "01101"=>LCD_Data<="100110010";--上一步指定位置处显示字符2

when "01110"=>LCD_Data<="100110000";---上一步基础上地址加一,显示字符0

when "01111"=>LCD_Data<="100110000";---0

when "10000"=>LCD_Data<="100111001";---9

when "10001"=>LCD_Data<="100110001";---1

when "10010"=>LCD_Data<="100110001";---1

when "10011"=>LCD_Data<="100110001";---1

when "10100"=>LCD_Data<="100110001";---1

when "10101"=>LCD_Data<="100110000";---0

when "10110"=>LCD_Data<="100111001";---9

when others =>LCD_Data<="101000100";

end case;

end if;

end process;

end gongneng;

相关文档