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

📄 xianshi.vhd

📁 基于CPLD的数字频率计
💻 VHD
字号:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY XIANSHI IS
   PORT (
         RST                     : IN STD_LOGIC;
         clk1                    : IN  std_logic;
         K                       : IN STD_LOGIC;
         data_in_buff            : in std_logic_vector(31 downto 0);
         en                      : OUT std_logic_vector(7 DOWNTO 0);   --输出一个低电平给矩阵键盘的某一行
         seg_data                : OUT std_logic_vector(7 DOWNTO 0)); --  数码管使能


 end xianshi;
ARCHITECTURE behave_shu OF XIANSHI IS
 SIGNAL cnt_scan                 :  std_logic_vector(11 DOWNTO 0); 
 SIGNAL en_xhdl3                 :  std_logic_vector(7 DOWNTO 0);   
 SIGNAL seg_data_buf             :  std_logic_vector(3 DOWNTO 0);   
 SIGNAL seg_data_xhdl4           :  std_logic_vector(7 DOWNTO 0);
 SIGNAL DATAIN                   :  std_logic_vector(32 downto 1); 
 begin
 seg_data<=seg_data_xhdl4;
 en(7 downto 0)<= en_xhdl3;
  PROCESS(clk1)
   BEGIN
     IF(clk1'event and clk1='1')THEN
          IF(K='0') THEN
             DATAIN<=DATA_IN_BUFF;
                   ELSE 
                    DATAIN<="10101010101010101010101010100000";
                END IF;
              END IF;
          END PROCESS;
             
   
PROCESS(clk1)
   BEGIN

     IF (NOT RST = '1') THEN
         cnt_scan <= "000000000000";    
         en_xhdl3 <= "11111110";    
      ELSIF(clk1'event and clk1='1')THEN
         cnt_scan <= cnt_scan + "000000000001";    
         IF (cnt_scan = "101111111111"and (en_xhdl3="11111110")) THEN
            en_xhdl3 <= "11111101";
         elsIF (cnt_scan = "111111111111"and (en_xhdl3="11111101")) THEN
            en_xhdl3 <= "11111011"; 
         elsIF (cnt_scan = "111111111111"and (en_xhdl3="11111011")) THEN
            en_xhdl3 <= "11110111"; 
         elsIF (cnt_scan = "111111111111"and (en_xhdl3="11110111")) THEN
            en_xhdl3 <= "11101111"; 
         elsif(cnt_scan = "101111111111"and (en_xhdl3="11101111")) THEN
            en_xhdl3 <= "11011111";
         elsIF (cnt_scan = "101111111111"and (en_xhdl3="11011111")) THEN
            en_xhdl3 <= "10111111"; 
         elsIF (cnt_scan = "101111111111"and (en_xhdl3="10111111")) THEN
            en_xhdl3 <= "01111111"; 
         elsIF (cnt_scan = "101111111111"and (en_xhdl3="01111111")) THEN
            en_xhdl3 <= "11111110";    
         END IF;
      END IF;
   END PROCESS;
     

   PROCESS(data_in_buff)
   BEGIN
      CASE en_xhdl3 IS
         WHEN "11111110" =>
                  seg_data_buf <=  dataIN(32 downto 29); 
         WHEN "11111101" =>
                  seg_data_buf <=  dataIN(28 downto 25); 
         WHEN "11111011" =>
                  seg_data_buf <=  dataIN(24 downto 21); 
         WHEN "11110111" =>
                  seg_data_buf <=  dataIN(20 downto 17); 
         WHEN "11101111" =>
                  seg_data_buf <=  dataIN(16 downto 13); 
         WHEN "11011111" =>
                  seg_data_buf <=  dataIN(12 downto 9); 
         WHEN "10111111" =>
                  seg_data_buf <=  dataIN(8 downto 5); 
         WHEN "01111111" =>
                  seg_data_buf <=  dataIN(4 downto 1);   
         WHEN OTHERS  =>
                  seg_data_buf <= "0000";    
         
      END CASE;
   END PROCESS;

   PROCESS(seg_data_buf)
   BEGIN
      CASE seg_data_buf IS
         WHEN "0000" =>
                  seg_data_xhdl4 <= "00000011";    
         WHEN "0001" =>
                  seg_data_xhdl4 <= "10011111";    
         WHEN "0010" =>
                  seg_data_xhdl4 <= "00100101";    
         WHEN "0011" =>
                  seg_data_xhdl4 <= "00001101";    
         WHEN "0100" =>
                  seg_data_xhdl4 <= "10011001";    
         WHEN "0101" =>
                  seg_data_xhdl4 <= "01001001";    
         WHEN "0110" =>
                  seg_data_xhdl4 <= "01000001";    
         WHEN "0111" =>
                  seg_data_xhdl4 <= "00011111";    
         WHEN "1000" =>
                  seg_data_xhdl4 <= "00000001";    
         WHEN "1001" =>
                  seg_data_xhdl4 <= "00011001";    
         WHEN "1010" =>
                  seg_data_xhdl4 <= "00010001";    
         WHEN "1011" =>
                  seg_data_xhdl4 <= "11000001";    
         WHEN "1100" =>
                  seg_data_xhdl4 <= "01100011";    
         WHEN "1101" =>
                  seg_data_xhdl4 <= "10000101";    
         WHEN "1110" =>
                  seg_data_xhdl4 <= "01100001";    
         WHEN "1111" =>
                  seg_data_xhdl4 <= "01110001";    
         WHEN OTHERS  =>
                  seg_data_xhdl4 <= "11111111";    
         
      END CASE;
   END PROCESS;
  END  behave_shu;

⌨️ 快捷键说明

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