Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- use ieee.std_logic_unsigned.all;
- entity microwave is
- port(
- b15, b30, b60, b90: in std_logic;
- clk: in std_logic;
- digits: out std_logic_vector (6 downto 0);
- switcha: out std_logic_vector (1 downto 0);
- lon: out std_logic_vector (1 downto 0);
- cooking: out std_logic
- );
- end microwave;
- architecture Behavioral of microwave is
- signal is_cooking: std_logic:='0';
- signal doswitch: std_logic:='0';
- begin
- process(clk,b15,b30,b60,b90)
- variable digit01dec: integer range 0 to 15;
- variable digit10dec: integer range 0 to 15;
- variable count:integer range 0 to 25000000;
- variable segswitcha: integer range 0 to 100000;
- begin
- lon<="11";
- if (clk'event and clk='1') then
- if (segswitcha=100000) then
- segswitcha:=0;
- doswitch <= not doswitch;
- else
- segswitcha:=segswitcha+1;
- end if;
- if (digit10dec>0) then
- if (count=25000000) then
- count:=0;
- if (digit01dec=0) then
- digit10dec:=digit10dec-1;
- digit01dec:=9;
- else
- digit01dec:=digit01dec-1;
- end if;
- else
- count:=count+1;
- end if;
- end if;
- end if;
- if (digit10dec=0) then
- is_cooking<='0';
- digit01dec:=0;
- else
- --nothing
- end if;
- if (doswitch='1') then
- case digit01dec is
- -- -0
- -- |5 |1
- -- -6
- -- |4 |2
- -- -3
- when 00 => digits <= "1000000"; --0
- when 01 => digits <= "1111001"; --1
- when 02 => digits <= "0100100"; --2
- when 03 => digits <= "0110000"; --3
- when 04 => digits <= "0011001"; --4
- when 05 => digits <= "0010010"; --5
- when 06 => digits <= "0000010"; --6
- when 07 => digits <= "1111000"; --7
- when 08 => digits <= "0000000"; --8
- when 09 => digits <= "0010000"; --9
- --when 10 => digits <= "0001000"; --A
- --when 11 => digits <= "0000011"; --B
- --when 12 => digits <= "1000110"; --C
- --when 13 => digits <= "0100001"; --D
- --when 14 => digits <= "0000110"; --E
- --when 15 => digits <= "0001110"; --F
- when others => digits <= "1111111"; --turns off all lights when invalid input
- end case;
- else
- case digit10dec is
- -- -0
- -- |5 |1
- -- -6
- -- |4 |2
- -- -3
- when 01 => digits <= "1000000"; --0
- when 02 => digits <= "1111001"; --1
- when 03 => digits <= "0100100"; --2
- when 04 => digits <= "0110000"; --3
- when 05 => digits <= "0011001"; --4
- when 06 => digits <= "0010010"; --5
- when 07 => digits <= "0000010"; --6
- when 08 => digits <= "1111000"; --7
- when 09 => digits <= "0000000"; --8
- when 10 => digits <= "0010000"; --9
- --when 11 => digits <= "0001000"; --A
- --when 12 => digits <= "0000011"; --B
- --when 13 => digits <= "1000110"; --C
- --when 14 => digits <= "0100001"; --D
- --when 15 => digits <= "0000110"; --E
- when 00 => digits <= "1000000"; --F
- when others => digits <= "1111111"; --turns off all lights when invalid input
- end case;
- end if;
- if (b90 = '1') then
- count := 0;
- is_cooking<='1';
- digit10dec:=10;
- digit01dec:=0;
- elsif (b60='1') then
- count := 0;
- is_cooking<='1';
- digit10dec:=7;
- digit01dec:=0;
- elsif (b30='1') then
- count := 0;
- is_cooking<='1';
- digit10dec:=4;
- digit01dec:=0;
- elsif (b15='1') then
- count := 0;
- is_cooking<='1';
- digit10dec:=2;
- digit01dec:=5;
- else
- --nothing
- end if;
- end process;
- process (doswitch)
- begin
- if (doswitch='1') then
- switcha<="10";
- else
- switcha<="01";
- end if;
- end process;
- cooking<=is_cooking;
- end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment