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

📄 lcm.vhd

📁 代码是12864的vhdl驱动程序 并带有字库
💻 VHD
📖 第 1 页 / 共 2 页
字号:
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 + -