si můžete stáhnou celý projekt, který v druhé a třetí části popisuji, včetně schematu zapojení vlastní součástky. Projekt se jmenuje vývojová deska a pro nedostatek času je nedokončený mám v planu ho někdy dokončit...
Popis klávesnice v multiplexním provozu
Na obrázku máte blokové schéma klávesnice.
Fialové vodiče jsou vyvedeny na vývody pouzdra hradlového pole. Jedná se o vstupy či výstupy.
Směr šipky na libovolném spoji ukazuje tok dat.
Náhled zapojení samotné klávesnice.
Zvětšené zapojení
klavesnice.
-- by HaCeSOFT
--
-- Datum : 9.7.2001
--
--
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
Deklarace entity klávesnice.
Signál RADKY se propojí se vstupy klávesnice V0, V1 a V2.
Totéž se provede se signálem SLOUPCE. Ty se připojí na výstup klávesnice S0, S1, S2 a S3.
Vstupní signály RESET a CLK nepotřebují komentář.
Klávesnice obsahuje 12 tlačítek. Stejné množství výstupu (12) obsahuje výstupní signál VYSTUP_LED1.
Port (sloupce : in std_logic_vector(3 downto 0);
radky : out std_logic_vector(2 downto 0);
vystup_LED1 : buffer std_logic_vector(11 downto 0);
reset : in std_logic;
clk : in std_logic);
end klavesnice;
Signál AKUMULATOR je výstup z obvodu, který je na blokovém schématu označen jako MUX.
signal radky1 : std_logic_vector(1 downto 0);
signal sloupce1 : std_logic_vector(1 downto 0);
signal akumulator : std_logic;
signal buf : std_logic_vector (3 downto 0);
begin
process (clk, reset) begin
Vynuluje všechny sčítače a výstupní buffer.
sloupce1 <= "00";
radky1 <= "00";
vystup_LED1 <= "000000000000";
elsif clk = '1' and clk'event then
Sčítač sloupců.
sloupce1 <= sloupce1 +1;
Obvod MUX.
case sloupce1 is
when "00" => akumulator <= sloupce (0);
when "01" => akumulator <= sloupce (1);
when "10" => akumulator <= sloupce (2);
when "11" => akumulator <= sloupce (3);
when others => NULL;
end case;
Abychom mohli adresovat dekodér 1 z 12 pomocí dvou různých sčítačů musíme výstupy sčítačů spojit do jednoho signálu. Kterým je tady signál BUF.
buf (3 downto 2) <= radky1;
buf (1 downto 0) <= sloupce1;
Dekodér 1 z 12.
Až při realizaci tohoto obvodu zjistíme že při stisku tlačítka A se na výstupu VYSTUP_LED1
neobjeví log. 1 na bitu 0 ale na bitu 8! To jsme si vysvětlili už při realizaci LED display
v multiplexním provozu.
Nápravu opět nechám na vás.
when "0000" => vystup_LED1 (0) <= not akumulator;
when "0001" => vystup_LED1 (1) <= not akumulator;
when "0010" => vystup_LED1 (2) <= not akumulator;
when "0011" => vystup_LED1 (3) <= not akumulator;
when "0100" => vystup_LED1 (4) <= not akumulator;
when "0101" => vystup_LED1 (5) <= not akumulator;
when "0110" => vystup_LED1 (6) <= not akumulator;
when "0111" => vystup_LED1 (7) <= not akumulator;
when "1000" => vystup_LED1 (8) <= not akumulator;
when "1001" => vystup_LED1 (9) <= not akumulator;
when "1010" => vystup_LED1 (10) <= not akumulator;
when "1011" => vystup_LED1 (11) <= not akumulator;
when others => NULL;
end case;
Podmínka SLOUPCE.
if sloupce1 = "11" then
Sčítač RADKY.
radky1 <= radky1 + 1;
Vynulovat sčítač RADKY, když dosáhne stavu "10".
if radky1 = "10" then radky1 <= "00"; end if;
Dekodér 1 ze 3.
case radky1 is
when "00" => radky <= "110";
when "01" => radky <= "101";
when "10" => radky <= "011";
when others => NULL;
end case;
end if;
end if;
end process;
end kl1;
Komentáře
Nebyly přidány žádné komentáře.