2016年5月26日 星期四

BCD計數器 0-99 顯示於7-segment





library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned;
-- pin 86 selector de display 1
-- pin 87 selec2 display
-- Seg A pin 85, Seg B 84, Seg C 83, D 82, E 81, F 78, Seg g pin 77, H 76
entity cnt_99 is
    port(
        CLK : in std_logic; -- se le asigna el pin   12
        --clk1hz : out std_logic ;-- se le asigna el pin 51
        datos : out std_logic_vector (6 downto 0);
        unidades : out std_logic;
        decenas: out std_logic
    );
end entity;

architecture BH_Examen2Parcial of cnt_99 is
    signal freq1 : integer range 0 to 5000 := 0;
    signal freqDec : integer range 0 to 24999999 := 0;
    signal freq100 : integer range 0 to 249999999 := 0;
 
    signal tmp1 : std_logic := '0';
    signal tmp100 : std_logic := '0';
    signal tmpDec : std_logic := '0';
    signal counterUnidades : integer range 0 to 10 := 0;
    signal counterDecenas : integer range 0 to 10 := 0;
    signal segDecenas : std_logic_vector(6 downto 0);
    signal segUnidades : std_logic_vector(6 downto 0);

 begin
    process(CLK) is
    begin
        if(CLK'event and CLK = '1') then
            if(freq1 >= 5000) then
                freq1 <= 0;
                tmp1 <= not tmp1;
            else
                freq1 <= freq1 + 1;
            --    tmp1 <= tmp1;
            end if;

            if(freqDec >= 24999999) then
                freqDec <= 0;
                tmpDec <= not tmpDec;
            else
                freqDec <= freqDec + 1;
               -- tmpDec <= tmpDec;
            end if;
         end if;
   end process;


 process(tmp1) is
    begin
        if(tmp1 = '1') then
            unidades <= '0';
            decenas <= '1';
            datos <= segDecenas;
        else
            datos <= SegUnidades;
            decenas <= '0';
            unidades <= '1';
        end if;
    end process;


--ParaContarUnidades:
---------------------------------------------------
---a,b,c,d,e,f,g,dp---  0 : on  1: off
---------------------------------------------------

ParaContarDecenas:
  process(tmpDec) is
    begin
        if (tmpDec = '1') then
            if(counterDecenas = 0) then
                segDecenas <= "0000001";
            elsif (counterDecenas = 1 ) then
                segDecenas <= "1001111";
            elsif (counterDecenas = 2 ) then
                segDecenas <= "0010010";
            elsif (counterDecenas = 3 ) then
                segDecenas <= "0000110";
            elsif (counterDecenas = 4 ) then
                segDecenas <= "1001100";
            elsif (counterDecenas = 5 ) then
                segDecenas <= "0100100";
            elsif (counterDecenas = 6 ) then
                segDecenas <= "1100000";
            elsif (counterDecenas = 7 ) then
                segDecenas <= "0001111";
            elsif (counterDecenas = 8 ) then
                segDecenas <= "0000000";
            elsif (counterDecenas = 9) then
                segDecenas <= "0001100";
            else
                segDecenas <= "1111111";
            end if;
         
---------------------------------------------------------
-- ParaContarUnidades:process(tmp100) is
---------------------------------------------------------    
           if(counterUnidades = 0) then
               segUnidades <= "0000001";
           elsif (counterUnidades = 1 ) then
               segUnidades <= "1001111";
           elsif (counterUnidades = 2 ) then
               segUnidades <= "0010010";
           elsif (counterUnidades = 3 ) then
               segUnidades <= "0000110";
           elsif (counterUnidades = 4 ) then
               segUnidades <= "1001100";
           elsif (counterUnidades = 5 ) then
               segUnidades <= "0100100";
           elsif (counterUnidades = 6 ) then
               segUnidades <= "1100000";
           elsif (counterUnidades = 7 ) then
              segUnidades <= "0001111";
           elsif (counterUnidades = 8 ) then
               segUnidades <= "0000000";
          elsif (counterUnidades = 9) then
               segUnidades <= "0001100";
          else
               segUnidades <= "1111111";
          end if;


           
            if(counterDecenas >= 9) then
                counterDecenas <= 0;
if(counterUnidades >= 9) then
counterUnidades <= 0;            
else
counterUnidades <= counterUnidades + 1;
end if;
            else
                counterDecenas <= counterDecenas + 1;
            end if;


        end if;
     
    end process;
 
end architecture;

沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...