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

📄 yejing.vhd

📁 一段基于VHDL的液晶显示程序
💻 VHD
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY CYS IS
  PORT(CLK: IN STD_LOGIC;
       CLEAR: IN STD_LOGIC;                        --清零命令
       LEFT:  IN STD_LOGIC;                        --左移命令
       RIGHT: IN STD_LOGIC;                        --右移命令
       BUSY:  IN STD_LOGIC;                        --忙信号标志
       DATA : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);    --8位数据输出
       REQ  : OUT STD_LOGIC);                      --请求信号
END ENTITY CYS;
ARCHITECTURE ART OF CYS IS
SIGNAL S:STD_LOGIC_VECTOR(31 DOWNTO 0);         --汉字高位和低位的区位码
SIGNAL N:STD_LOGIC_VECTOR(3 DOWNTO 0);           --显示十四个汉字的选择信号
SIGNAL COUNT:STD_LOGIC_VECTOR(2 DOWNTO 0);            --五个字节命令的计数器
SIGNAL SEL:STD_LOGIC;                                 --显示十六个汉字的进位时钟信号
SIGNAL GATECLOCK:STD_LOGIC;                              --5个字节命令的计数器时钟信号
SIGNAL SCANCLK:STD_LOGIC;                         --分频时钟信号
 BEGIN
   PROCESS(CLK,SCANCLK)
       VARIABLE SCAN: STD_LOGIC_VECTOR(20 DOWNTO 0);         --分频进程
       BEGIN
          IF CLK'EVENT AND CLK='1' THEN
                  IF SCAN="111111111111111111111" THEN SCAN:="000000000000000000000";
                  ELSE SCAN:=SCAN+1;
                  END IF;
          END IF;
       SCANCLK<=SCAN(3);
     END PROCESS;
  PROCESS(GATECLOCK)  --5个字节计数器的进程
  BEGIN 
  IF GATECLOCK'EVENT AND GATECLOCK='1' THEN
       IF COUNT="100" THEN
         COUNT<="000";
       ELSE
         COUNT<=COUNT+1;
       END IF;
    END IF;
END PROCESS;
PROCESS (SCANCLK) IS
BEGIN
  IF RISING_EDGE(SCANCLK) THEN
     IF BUSY = '0' THEN
       IF CLEAR = '1' THEN
          DATA<=X"F4";
        ELSIF RIGHT='1'  THEN
          DATA<=X"F8";
        ELSIF LEFT='1'   THEN
          DATA<=X"F7"; 
       ELSE
       CASE COUNT IS
         WHEN "000"=>DATA<=X"F0";          SEL<='0';
         WHEN "001"=>DATA<=S(31 DOWNTO 24);
         WHEN "010"=>DATA<=S(23 DOWNTO 16);SEL<='1';
         WHEN "011"=>DATA<=S(15 DOWNTO 8);
         WHEN "100"=>DATA<=S(7 DOWNTO 0);
         WHEN  OTHERS=>NULL;
       END CASE;
       END IF;
     GATECLOCK<='1';
     ELSE
     GATECLOCK<='0';
     END IF; 
    END IF;
END PROCESS;
REQ<='1' WHEN GATECLOCK='1' ELSE
     '0';
PROCESS(SEL)
BEGIN
IF SEL'EVENT AND SEL='0' THEN
    N<=N+1;
         CASE N IS
 WHEN "0000"=> S<=X"00003107";  --  实 
 WHEN "0001"=> S<=X"01002F10";  --  验
 WHEN "0010"=> S<=X"02003756";  --  六
 WHEN "0011"=> S<=X"03003627";  --  第
 WHEN "0100"=> S<=X"0400243C";  --  四
 WHEN "0101"=> S<=X"05001315";  --  组
 WHEN "0110"=> S<=X"06002C54";  --  姓
 WHEN "0111"=> S<=X"0700351D";  --  名
 WHEN "1000"=> S<=X"00011729";  --  聂
 WHEN "1001"=> S<=X"01012B1C";  --  家
 WHEN "1010"=> S<=X"02011F08";  --  宁
 WHEN "1011"=> S<=X"0301165B";  --  第
 WHEN "1100"=> S<=X"0401110D";  --  六
 WHEN "1101"=> S<=X"05012B12";  --  号
 WHEN "1110"=> S<=X"0601360E";  --  台
 WHEN "1111"=> S<=X"07011633";  --  位 
    WHEN OTHERS=>NULL;   
       END CASE; 
   END IF;
END PROCESS;
END ARCHITECTURE;

⌨️ 快捷键说明

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