VHDL18个拨码开关3-8译码器控制数码管的数字显示
时间: 2023-05-30 07:06:11 浏览: 148
VHDL实现3-8译码器
4星 · 用户满意度95%
以下是VHDL代码:
```
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity decoder is
port (
switches : in std_logic_vector(17 downto 0); -- 18个拨码开关
segments : out std_logic_vector(6 downto 0); -- 数码管7段显示输出
cathodes : out std_logic_vector(3 downto 0) -- 数码管位选控制输出
);
end entity decoder;
architecture behavioral of decoder is
signal binary : std_logic_vector(2 downto 0); -- 3位二进制数,用于控制译码器
begin
-- 3-8译码器的真值表
process(switches)
begin
case switches(17 downto 16) is
when "00" => binary <= "000"; -- switch 17-16 = 00,译码器输出 Y0
when "01" => binary <= "001"; -- switch 17-16 = 01,译码器输出 Y1
when "10" => binary <= "010"; -- switch 17-16 = 10,译码器输出 Y2
when "11" => binary <= "011"; -- switch 17-16 = 11,译码器输出 Y3
end case;
end process;
-- 数码管7段显示的真值表
process(binary, switches)
begin
case binary is
when "000" => -- 译码器输出 Y0
segments <= "00111111"; -- 数字 0
cathodes <= "1110"; -- 第1位数码管
when "001" => -- 译码器输出 Y1
segments <= "00000110"; -- 数字 1
cathodes <= "1101"; -- 第2位数码管
when "010" => -- 译码器输出 Y2
segments <= "01011011"; -- 数字 2
cathodes <= "1011"; -- 第3位数码管
when "011" => -- 译码器输出 Y3
segments <= "01001111"; -- 数字 3
cathodes <= "0111"; -- 第4位数码管
end case;
end process;
end architecture behavioral;
```
以上代码实现了18个拨码开关控制3-8译码器,进而控制数码管的数字显示。其中,3-8译码器的输出 Y0-Y3 分别对应数字 0-3 的7段显示编码。同时,使用了一个二进制信号 binary 来控制译码器的输出。数码管的位选控制则使用了另外一个信号 cathodes,通过对其赋不同的值来控制不同的数码管显示。
阅读全文