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

📄 vhdl1.vhd

📁 基于北京革新公司出品的EDA实验工具箱的键盘扫描与同步显示程序。编译环境为quartusll.5.1版本。fpga芯片为EP18CQ240C6
💻 VHD
字号:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;                   -----库文件

entity jianpan is
port(clk   :   in  std_logic;                   -----主时钟信号
	start :   in  std_logic;                    -----高电平有效
	KBCol  :   in  std_logic_vector(3 downto 0); -----列扫描信号
	KBRow  :   out std_logic_vector(3 downto 0); -----行扫描信号
	seg7  :   out std_logic_vector(6 downto 0); -----7段显示信号
    scan  :   out std_logic_vector(7 downto 0)  -----7段选择信号
	);
end ;

architecture bev of jianpan is
	signal count: std_logic_vector(1 downto 0);
	signal sta:  std_logic_vector(1 downto 0);
begin
  scan<="00000001";  --只使用一个数码管,也可以使用数码管跳线选中一个
  a: process(clk)                              ------循环扫描计数器
  begin
   if clk'event and clk='1' then
     count<=count+1;
   end if; 
  end process a;  

  b: process(clk)                           -----循环列扫描进程
  begin
    if(clk'event and clk='1')then
      case count(1 downto 0) is
        when  "00"=> KBRow<="0111";
               sta<="00";
        when  "01"=> KBRow<="1011";
               sta<="01";
        when  "10"=> KBRow<="1101";
               sta<="10";
        when  "11"=> KBRow<="1110";
               sta<="11";
        when others=> KBRow<="1111";
      end case;
    end if;
  end process b;


  c:process(clk,start)                      -----行扫描译码进程
  begin
    if start='0' then
      seg7<="0000000";
    elsif(clk'event and clk='1')then
      case sta is
	    when "00"=>     --c840列
	      case KBCol is
	        when  "1110"=>  seg7<="1001110";
	        when  "1101"=>  seg7<="1111111";
	        when  "1011"=>  seg7<="0110011";
	        when  "0111"=>  seg7<="1111110";
	        when others=>   seg7<="0000000";  --1取消这四行结果会有什么变化?
	      end case;
	    when "01"=>     --d951列
	      case KBCol is
	        when  "1110"=>  seg7<="0111101";
	        when  "1101"=>  seg7<="1110011";
	        when  "1011"=>  seg7<="1011011";
	        when  "0111"=>  seg7<="0110000";
	        when others=>   seg7<="0000000"; --1取消这四行结果会有什么变化?
	      end case;
	    when "10"=>     --ea62列
	      case KBCol is
	        when  "0001"=>  seg7<="1001111"; 
 	        when  "0010"=>  seg7<="1110111"; 
	        when  "0100"=>  seg7<="1011111";
	        when  "1000"=>  seg7<="1101101";
	        when others=>   seg7<="0000000"; --1取消这四行结果会有什么变化?
	      end case;
        when "11"=>     --fb73
          case KBCol is	
	        when  "0001"=>  seg7<="1000111"; 
	        when  "0010"=>  seg7<="0011111";  
	        when  "0100"=>  seg7<="1110000";  
	        when  "1000"=>  seg7<="1111001";  
	        when others=>   seg7<="0000000"; --1取消这四行结果会有什么变化?
          end case; 
	    when others=>   seg7<="0000000";    
	  end case;
    end if;
  end process;
end bev;

⌨️ 快捷键说明

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