Advertisement
ivosexa

7_segment

Nov 20th, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 2.69 KB | None | 0 0
  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. use IEEE.STD_LOGIC_ARITH.ALL;
  4. use ieee.std_logic_unsigned.all;
  5. use ieee.numeric_std.all;
  6.  
  7. entity ledsa is
  8. port (
  9. clk_50MHz : in std_logic;
  10. disp_7_num : out std_logic_vector (7 downto 0);
  11. disp_7_bits : out std_logic_vector (7 downto 0);
  12. );
  13. end ledsa;
  14.  
  15. architecture key_led_arch of ledsa is
  16.     signal Counter : std_logic_vector(23 downto 0);
  17.     signal value_of_cell :std_logic_vector(3 downto 0);
  18.     signal seven_segment_on :std_logic_vector(7 downto 0) := X"00";
  19.     signal seven_segment_unit :std_logic_vector(2 downto 0) := "111";
  20.     signal led_7_segment_number : std_logic_vector(31 downto 0) := X"00000000";
  21.    
  22. begin
  23.    
  24.     Prescaler : process(clk_50MHz)
  25.     begin
  26.  
  27.     case value_of_cell is
  28.     when X"0" =>   disp_7_num <= "00000011"; --0
  29.     when X"1" =>   disp_7_num <= "10011111";
  30.     when X"2" =>   disp_7_num <= "00100101"; --2
  31.     when X"3" =>   disp_7_num <= "00001101";
  32.     when X"4" =>   disp_7_num <= "10011001"; --4
  33.     when X"5" =>   disp_7_num <= "01001001";
  34.     when X"6" =>   disp_7_num <= "01000001"; --6
  35.     when X"7" =>   disp_7_num <= "00011111";
  36.     when X"8" =>   disp_7_num <= "00000001"; --8
  37.     when X"9" =>   disp_7_num <= "00001001";
  38.     when X"A" =>   disp_7_num <= "00010001"; --A
  39.     when X"B" =>   disp_7_num <= "11000001";
  40.     when X"C" =>   disp_7_num <= "01100011"; --C
  41.     when X"D" =>   disp_7_num <= "10000101";
  42.     when X"E" =>   disp_7_num <= "01100000"; --E
  43.     when X"F" =>   disp_7_num <= "01110001";
  44.     when others => disp_7_num <= "11111111";
  45.     end case;
  46.    
  47.     case seven_segment_unit is
  48.     when "000" =>  
  49.     disp_7_bits <= X"FE";
  50.     value_of_cell <= led_7_segment_number(3 downto 0);
  51.     when "001" =>  
  52.     disp_7_bits <= X"FD";
  53.     value_of_cell <= led_7_segment_number(7 downto 4);
  54.     when "010" =>  
  55.     disp_7_bits <= X"FB";
  56.     value_of_cell <= led_7_segment_number(11 downto 8);
  57.     when "011" =>  
  58.     disp_7_bits <= X"F7";
  59.     value_of_cell <= led_7_segment_number(15 downto 12);
  60.     when "100" =>  
  61.     disp_7_bits <= X"EF";
  62.     value_of_cell <= led_7_segment_number(19 downto 16);
  63.     when "101" =>  
  64.     disp_7_bits <= X"DF";
  65.     value_of_cell <= led_7_segment_number(23 downto 20);
  66.     when "110" =>  
  67.     disp_7_bits <= X"BF";
  68.     value_of_cell <= led_7_segment_number(27 downto 24);
  69.     when "111" =>  
  70.     disp_7_bits <= X"7F";
  71.     value_of_cell <= led_7_segment_number(31 downto 28);
  72.     end case;
  73.    
  74.     if rising_edge(clk_50MHz) then
  75.             if Counter < 50000 then
  76.                 Counter <= Counter + 1;
  77.             else
  78.                 Counter <= (others => '0');
  79.                 led_7_segment_number <= led_7_segment_number + 1;
  80.                 seven_segment_unit <= seven_segment_unit - 1;
  81.                     if seven_segment_unit = "000" then
  82.                         seven_segment_unit <= "111";
  83.                     end if;
  84.             end if;
  85.         end if;
  86.    
  87.     end process Prescaler;
  88.  
  89. end architecture;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement