⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd1602.vhd

📁 通过VERILOG HDL语言使用CPLD连接PS2键盘
💻 VHD
字号:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity LCD1602 is
  Port ( Clk : in std_logic; 
  Reset:in std_logic;  
         LCD_RS : out std_logic; 
         LCD_RW : out std_logic; 
         LCD_EN : out std_logic; 
         LCD_Data : out std_logic_vector(7 downto 0));  
end LCD1602;

architecture Behavioral of LCD1602 is
  type state is (set_dlnf,set_cursor,set_dcb,set_cgram,write_cgram,set_ddram,writeLCD1,writeLCD2,writeLCD3,writeLCD4,writeLCD5,writeLCD6,writeLCD7,writeLCD8,writeLCD9,writeLCD10,writeLCD11,writeLCD12,writeLCD13,writeLCD14);
  signal Current_State:state;                         
  signal Clkk    : std_logic;
  signal Count   : std_logic_vector(20 downto 0);
  signal Clk_Out : std_logic;
  signal LCD_Clk : std_logic;
begin
  LCD_EN <=  Clk_Out ;  
  LCD_RW <= '0' ;   
clock : 
process(Clk,Reset)
  begin
    if(Reset = '0')then
      Count <= (others => '0');
    elsif(rising_edge(clk))then
      Count <= Count + 1;
      if(Count = 0)then
Clk_Out <= not Clk_Out;
      end if;
    end if;
    LCD_Clk <= Clk_Out;
end process;
control:
process(LCD_Clk,Reset,Current_State)               
  variable cnt1: std_logic_vector(2 downto 0);
  begin
    if Reset='0'then
      Current_State<=set_dlnf;
      cnt1:=(others => '1');
      LCD_RS<='0';
    elsif rising_edge(LCD_Clk)then
      Current_State <= Current_State ;
      LCD_RS <= '0';
    case Current_State is
      when set_dlnf=>               
   LCD_Data<="00000001";
   Current_State<=set_cursor;
      when set_cursor=>
   LCD_Data<="00111000";
   Current_State<=set_dcb;
      when set_dcb=>
   LCD_Data<="00001111";
   Current_State<=set_cgram;
      when set_cgram=>
   LCD_Data<="00000110";
   Current_State<=set_ddram;
      when write_cgram=>        
   LCD_RS<='1';
   cnt1:=cnt1+1;       
   if cnt1 = "001" then
     Current_State<=set_ddram;        
   end if;
      when set_ddram=>         
   LCD_Data<="10000000";
   Current_State<=writeLCD1;
      when writeLCD1=>   
   LCD_RS<='1';
   LCD_Data<="01010111"; 
    Current_State<=writeLCD2;
      when writeLCD2=>   
   LCD_RS<='1';
   LCD_Data<="01010111";
   Current_State<=writeLCD3; 
      when writeLCD3=>   
   LCD_RS<='1';
   LCD_Data<="01010111";
   Current_State<=writeLCD4;
      when writeLCD4=>   
   LCD_RS<='1';
   LCD_Data<="00101110";
   Current_State<=writeLCD5;
   when writeLCD5=>   
   LCD_RS<='1';
   LCD_Data<="00110010";
   Current_State<=writeLCD6;
   when writeLCD6=>   
   LCD_RS<='1';
   LCD_Data<="00110010";
   Current_State<=writeLCD7;
   when writeLCD7=>   
   LCD_RS<='1';
   LCD_Data<="01010011";
   Current_State<=writeLCD8;
   when writeLCD8=>   
   LCD_RS<='1';
   LCD_Data<="01001011";
   Current_State<=writeLCD9;
   when writeLCD9=>   
   LCD_RS<='1';
   LCD_Data<="01011001";
   Current_State<=writeLCD10;
   when writeLCD10=>   
   LCD_RS<='1';
   LCD_Data<="00101110";
   Current_State<=writeLCD11;
   when writeLCD11=>   
   LCD_RS<='1';
   LCD_Data<="01000011";
   Current_State<=writeLCD12;
   when writeLCD12=>   
   LCD_RS<='1';
   LCD_Data<="01001111";
   Current_State<=writeLCD13;
   when writeLCD13=>   
   LCD_RS<='1';
   LCD_Data<="01001101";
Current_State<=writeLCD14;
   when writeLCD14=>   
   LCD_RS<='0';
Current_State<=writeLCD14;
      when others => null;
    end case;
  end if;
end process;
end Behavioral;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -