Дешифраторы также используются для преобразования кодов. Классический пример - семисегментный индикатор использующийся в калькуляторах итд.
a ######### # # f # # b # g # ######### # # e# # c # d # #########
7-сегментные индикаторы бывают разных типов (по питанию): Семисегментный индикатор с общим катодом:
Семисегментный индикатор с общим анодом:
Пример подключения (цифра 5)
a b c d e f g #### 1 1 1 1 1 1 0 # # # # # # #### # 0 1 1 0 0 0 0 # # # # #### 1 1 0 1 1 0 1 # #### # #### #### 1 1 1 1 0 0 1 # #### # #### # # 0 1 1 0 0 1 1 # # #### # # #### 1 0 1 1 0 1 1 # #### # #### #### 1 0 1 1 1 1 1 # #### # # #### #### 1 1 1 0 0 0 0 # # # # #### 1 1 1 1 1 1 1 # # #### # # #### #### 1 1 1 1 0 1 1 # # #### # #### #### 1 1 1 0 1 1 1 # # #### # # # # # 0 0 1 1 1 1 1 # #### # # #### #### 1 0 0 1 1 1 0 # # # #### # 0 1 1 1 1 0 1 # #### # # #### #### 1 0 0 1 1 1 1 # #### # #### #### 1 0 0 0 1 1 1 # #### # #
Таблица истинности для дешифратора для семисегментного индикатора ---------------------------- A3 A2 A1 A0 | a b c d e f g ------------+--------------- 0 0 0 0 | 1 1 1 1 1 1 0 0 0 0 1 | 0 1 1 0 0 0 0 0 0 1 0 | 1 1 0 1 1 0 1 0 0 1 1 | 1 1 1 1 0 0 1 0 1 0 0 | 0 1 1 0 0 1 1 0 1 0 1 | 1 0 1 1 0 1 1 0 1 1 0 | 1 0 1 1 1 1 1 0 1 1 1 | 1 1 1 0 0 0 0 1 0 0 0 | 1 1 1 1 1 1 1 1 0 0 1 | 1 1 1 1 0 1 1 1 0 1 0 | 1 1 1 0 1 1 1 1 0 1 1 | 0 0 1 1 1 1 1 1 1 0 0 | 1 0 0 1 1 1 0 1 1 0 1 | 0 1 1 1 1 0 1 1 1 1 0 | 1 0 0 1 1 1 1 1 1 1 1 | 1 0 0 0 1 1 1 ----------------------------
Кодер из BCD кода в семисегментный индикатор: library ieee; use ieee.std_logic_1164.all; entity BCD2SSD is port ( src : in std_logic_vector(3 downto 0); display : out std_logic_vector(0 to 6); end BCD2SSD; architecture ARCH of BCD2SSD is begin process(src) begin case src is when "0000" => display <= "1111110"; when "0001" => display <= "1100000"; when "0010" => display <= "1011010"; when "0011" => display <= "1110011"; when "0100" => display <= "1100101"; when "0101" => display <= "0110111"; when "0110" => display <= "0111111"; when "0111" => display <= "1100010"; when "1000" => display <= "1111111"; when "1001" => display <= "1110110"; when others => display <= "0000000"; end process; end ARCH; Пример схемы дешифратора для семисегментного индикатора: