Advertisement
ForcaDz

7 seg

Dec 3rd, 2023
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 5.49 KB | None | 0 0
  1. use IEEE.STD_LOGIC_1164.ALL;
  2. use IEEE.STD_LOGIC_UNSIGNED.ALL;
  3.  
  4.  
  5. entity aff_mgr_basys is
  6.     Port ( clk25            : in  STD_LOGIC;                                -- Horloge 25 MHz
  7.            reset            : in  STD_LOGIC;                                -- Reset Asynchrone
  8.            pause            : in  STD_LOGIC;                                -- Commande Pause
  9.            master_slave : in STD_LOGIC;                             -- Selection Manette de Jeu (Encodeur / Accéléromètre)
  10.            game_type    : in  STD_LOGIC;                                -- Type de Jeu (Pong / Casse-Briques=
  11.            sel_seg      : out STD_LOGIC_VECTOR (3 downto 0);    -- Selection de l'Afficheur
  12.            seg          : out STD_LOGIC_VECTOR (7 downto 0));   -- Valeur des Segments de l'Afficheur
  13. end aff_mgr_basys;
  14.  
  15. --------------------------------------------------
  16. -- Fonctionnement Afficheurs
  17. --------------------------------------------------
  18. --
  19. --      - Segments Allumés à 0, Eteints à 1
  20. --      - Validation
  21. --              - SEL = 0 --> Affichage des Segments
  22. --              - SEL = 1 --> Segments Eteints
  23.  
  24. --      - Numéro des Segments Afficheur (Point = 7)
  25. --
  26. --                    0
  27. --               --------
  28. --              -           -
  29. --           5  -           - 1
  30. --              -     6 -
  31. --               --------
  32. --              -           -
  33. --           4  -           - 2
  34. --              -           -
  35. --               --------
  36. --                   3
  37. --
  38. --------------------------------------------------
  39.  
  40.  
  41. architecture Behavioral of aff_mgr_basys is
  42.  
  43. signal counter: integer range 0 to 100000; -- COmpteur de Temporisation
  44.  
  45. begin
  46.  
  47. process(clk25, reset)
  48.       begin
  49.       if reset = '0' then
  50.             counter<=0; sel_seg <= not "0000"; seg <= not "00000000";
  51.       elsif rising_edge(clk25) then
  52.      
  53.             -- Gestion du Compteur
  54.             counter <= counter + 1;
  55.          if (counter = 99999) then counter <= 0; end if;
  56.    
  57.             -- affichage de "CASSE BRI(ques)"
  58.             case (counter) is
  59.                
  60.                 when 00000 => sel_seg <= not "0001"; seg <= not "00111001"; --not "00111001"; --C
  61.                 when 25000 => sel_seg <= not "0010"; seg <= not "00010000"; --I
  62.                 when 50000 => sel_seg <= not "0100"; seg <= not "01010000"; --R
  63.                 when 75000 => sel_seg <= not "1000"; seg <= not "01111100"; --B
  64. --              when 40000 => sel_seg <= not "00010000"; seg <= not "01101101"; --s
  65. --              when 50000 => sel_seg <= not "00100000"; seg <= not "01101101"; --s
  66. --              when 60000 => sel_seg <= not "01000000"; seg <= not "01110111"; --a
  67. --              when 70000 => sel_seg <= not "10000000"; seg <= not "00111001"; --c
  68.  
  69.                 when others => NULL;
  70.            
  71.             end case;    
  72.  
  73.             if master_slave = '0' then
  74.            
  75.             -- Affichage de "MANETTE"
  76.                 case (counter) is
  77.  
  78.                     when 00000 => sel_seg <= not "0001"; seg <= not "01111000"; --T
  79.                     when 25000 => sel_seg <= not "0010"; seg <= not "01010100"; --N
  80.                     when 50000 => sel_seg <= not "0100"; seg <= not "01110111"; --A
  81.                     when 75000 => sel_seg <= not "1000"; seg <= not "00110111"; --M
  82.                    
  83. --                  when 00000 => sel_seg <= not "00000001"; seg <= not "00000000";
  84. --                  when 10000 => sel_seg <= not "00000010"; seg <= not "01111001"; --e
  85. --                  when 20000 => sel_seg <= not "00000100"; seg <= not "01111000"; --t
  86. --                  when 30000 => sel_seg <= not "00001000"; seg <= not "01111000"; --t
  87. --                  when 40000 => sel_seg <= not "00010000"; seg <= not "01111001"; --e
  88. --                  when 50000 => sel_seg <= not "00100000"; seg <= not "01010100"; --n
  89. --                  when 60000 => sel_seg <= not "01000000"; seg <= not "01110111"; --a
  90. --                  when 70000 => sel_seg <= not "10000000"; seg <= not "00110111"; --m
  91.      
  92.                     when others => NULL;
  93.  
  94.                 end case;
  95.  
  96.             -- Affichage de "PAUSE"
  97.             elsif pause = '1' then      
  98.      
  99.                 case (counter) is
  100.  
  101.                     when 00000 => sel_seg <= not "0001"; seg <= not "01101101"; --S
  102.                     when 25000 => sel_seg <= not "0010"; seg <= not "00111110"; --U
  103.                     when 50000 => sel_seg <= not "0100"; seg <= not "01110111"; --A
  104.                     when 75000 => sel_seg <= not "1000"; seg <= not "01110011"; --P
  105.  
  106. --                  when 00000 => sel_seg <= not "00000001"; seg <= not "00000000";
  107. --                  when 10000 => sel_seg <= not "00000010"; seg <= not "00000000";
  108. --                  when 20000 => sel_seg <= not "00000100"; seg <= not "00000000";
  109. --                  when 30000 => sel_seg <= not "00001000"; seg <= not "01111001"; --e
  110. --                  when 40000 => sel_seg <= not "00010000"; seg <= not "01101101"; --s
  111. --                  when 50000 => sel_seg <= not "00100000"; seg <= not "00111110"; --u
  112. --                  when 60000 => sel_seg <= not "01000000"; seg <= not "01110111"; --a
  113. --                  when 70000 => sel_seg <= not "10000000"; seg <= not "01110011"; --p
  114.      
  115.                     when others => NULL;
  116.  
  117.                 end case;
  118.  
  119.             -- Affichage de "PONG"
  120.             elsif game_type = '1' then      
  121.                
  122.                 case (counter) is
  123.                
  124.                     when 00000 => sel_seg <= not "0001"; seg <= not "01111101"; --G
  125.                     when 25000 => sel_seg <= not "0010"; seg <= not "00110111"; --N
  126.                     when 50000 => sel_seg <= not "0100"; seg <= not "00111111"; --O
  127.                     when 75000 => sel_seg <= not "1000"; seg <= not "01110011"; --P
  128.  
  129. --                  when 00000 => sel_seg <= not "00000001"; seg <= not "00000000"; --
  130. --                  when 10000 => sel_seg <= not "00000010"; seg <= not "00000000"; --
  131. --                  when 20000 => sel_seg <= not "00000100"; seg <= not "00000000"; --
  132. --                  when 30000 => sel_seg <= not "00001000"; seg <= not "00000000"; --
  133. --                  when 40000 => sel_seg <= not "00010000"; seg <= not "01111101"; --g
  134. --                  when 50000 => sel_seg <= not "00100000"; seg <= not "00110111"; --n
  135. --                  when 60000 => sel_seg <= not "01000000"; seg <= not "00111111"; --o
  136. --                  when 70000 => sel_seg <= not "10000000"; seg <= not "01110011"; --p
  137.      
  138.                     when others => NULL;
  139.  
  140.                 end case;
  141.             end if;    
  142.         end if;
  143.     end process;
  144. end Behavioral;
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement