1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
| library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Affichage is
port( clk_divise, raz : in std_logic;
Sens : in std_logic_vector(1 downto 0);
Svecteur_affichage : out std_logic_vector(10 downto 0));
end Affichage;
architecture Behavioral of Affichage is
signal compteur_affichage : std_logic_vector(14 downto 0);
signal compteur_rafraichissement : std_logic_vector(4 downto 0);
signal S_rafraichissement : std_logic;
signal S_affichage : std_logic;
signal vecteur_affichage : std_logic_vector(10 downto 0);
signal compteur_etage : std_logic_vector(3 downto 0);
begin -- on veut que l'affichage soit rafraichit à 1kHz, on divise la clk de 50kHz par 64
-- On veut que les étages s'affichent à 1Hz, donc on divise la clk de 50kHz par 32768
Division : process(clk_divise, compteur_affichage, compteur_rafraichissement, S_rafraichissement, S_affichage) -- 1kHz pour le rafraichissement
begin
if raz = '1' then
compteur_affichage <= "000000000000000";
compteur_rafraichissement <= "00000";
end if;
if clk_divise'event and clk_divise = '1' then
compteur_affichage <= compteur_affichage + 1;
compteur_rafraichissement <= compteur_rafraichissement + 1;
if compteur_affichage = "000000000000000" then --Division par 32768
S_affichage <= '1';
elsif compteur_affichage = "100000000000000" then
S_affichage <= '0';
end if;
if compteur_rafraichissement = "00000" then -- Division par 64
S_rafraichissement <= '1';
elsif compteur_rafraichissement = "10000" then
S_rafraichissement <= '0';
end if;
end if;
end process;
Affichage : process(S_affichage, vecteur_affichage, S_rafraichissement, compteur_etage, Sens)
begin
if Sens = "00" then
if S_affichage'event and S_affichage = '1' then
compteur_etage <= compteur_etage;
end if;
else if Sens = "01" then
if S_affichage'event and S_affichage = '1' then
compteur_etage <= compteur_etage + 1;
end if;
else if Sens = "10" then
if S_affichage'event and S_affichage = '1' then
compteur_etage <= compteur_etage - 1;
end if;
end if;
CASE compteur_etage IS -- abcdefg
when "0000" => vecteur_affichage <= "00000010001"; -- 0, AN4
when "0001" => vecteur_affichage <= "10011110001"; -- 1 et 0001 = afficheur AN4
when "0010" => vecteur_affichage <= "00100100001"; -- 2, AN4
when "0011" => vecteur_affichage <= "00001100001"; -- 3, AN4
when "0100" => vecteur_affichage <= "10011000001"; -- 4, AN4
when "0101" => vecteur_affichage <= "01001000001"; -- 5, AN4
when "0110" => vecteur_affichage <= "01000000001"; -- 6, AN4
when "0111" => vecteur_affichage <= "00011110001"; -- 7, AN4
when "1000" => vecteur_affichage <= "00000000001"; -- 8, AN4
when "1001" => vecteur_affichage <= "00001000001"; -- 9, AN4
when "1010" => if S_rafraichissement = '1' then
vecteur_affichage <= "10011110010"; -- 1, AN3
elsif S_rafraichissement = '0' then
vecteur_affichage <= "00000010001"; -- 0, AN4
end if;
when "1011" => if S_rafraichissement = '1' then
vecteur_affichage <= "10011110010"; -- 1, AN3
elsif S_rafraichissement = '0' then
vecteur_affichage <= "10011110001"; -- 1, AN4
end if;
when "1100" => if S_rafraichissement = '1' then
vecteur_affichage <= "10011110010"; -- 1, AN3
elsif S_rafraichissement = '0' then
vecteur_affichage <= "00100100001"; -- 2, AN4
end if;
when "1101" => if S_rafraichissement = '1' then
vecteur_affichage <= "10011110010"; -- 1, AN3
elsif S_rafraichissement = '0' then
vecteur_affichage <= "00001100001"; -- 3, AN4
end if;
when "1110" => if S_rafraichissement = '1' then
vecteur_affichage <= "10011110010"; -- 1, AN3
elsif S_rafraichissement = '0' then
vecteur_affichage <= "10011000001"; -- 4, AN4
end if;
when "1111" => if S_rafraichissement = '1' then
vecteur_affichage <= "10011110010"; -- 1, AN3
elsif S_rafraichissement = '0' then
vecteur_affichage <= "01001000001"; -- 5, AN4
end if;
when OTHERS => NULL;
end case;
end process;
Svecteur_affichage <= vecteur_affichage;
end Behavioral; |
Partager