library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity KEYSCAN is
port (CLK1: in STD_LOGIC;
KEYIN1,KEYIN2: in STD_LOGIC;
LED_SA: out STD_LOGIC;
LED_SB: out STD_LOGIC;
LED_SC: out STD_LOGIC;
LED_A: out STD_LOGIC;
LED_B: out STD_LOGIC;
LED_C: out STD_LOGIC;
LED_D: out STD_LOGIC;
LED_E: out STD_LOGIC;
LED_F: out STD_LOGIC;
LED_G: out STD_LOGIC;
LED_DP: out STD_LOGIC);
end KEYSCAN;
architecture KEYSCAN_ARCH of KEYSCAN is
SIGNAL SEG : STD_LOGIC_VECTOR (6 DOWNTO 0);
SIGNAL SEL : STD_LOGIC_VECTOR (2 DOWNTO 0);
SIGNAL NUM : STD_LOGIC_VECTOR (3 DOWNTO 0);
SIGNAL COUNT : STD_LOGIC_VECTOR (4 DOWNTO 0);
SIGNAL COUNT0: STD_LOGIC;
Begin
PROCESS (CLK1)
BEGIN
IF CLK1'event AND CLK1 = '1' THEN
COUNT <= COUNT+1;
END IF;
END PROCESS;
COUNT0 <= COUNT(0);
PROCESS (count0,COUNT,KEYIN1,KEYIN2)
BEGIN
IF Count0'event and (COUNT0 = '1')THEN
IF (KEYIN1 = '0') and (COUNT(1) = '0') THEN
NUM(3)<= '0';
NUM(2 DOWNTO 0) <= COUNT(4 DOWNTO 2);
ELSIF (KEYIN2 = '0') AND (COUNT(1) = '0') THEN
NUM <='1' & COUNT(4 DOWNTO 2);
END IF;
END IF;
if(num="1111")
IF Count0'event and (COUNT0 = '1')THEN
IF (KEYIN1 = '0') and (COUNT(1) = '0') THEN
NUM(3)<= '0';
NUM(2 DOWNTO 0) <= COUNT(4 DOWNTO 2);
ELSIF (KEYIN2 = '0') AND (COUNT(1) = '0') THEN
NUM <='1' & COUNT(4 DOWNTO 2); END IF;
END IF;
SEL <= COUNT(4 DOWNTO 2);
sel(0)=not(sel(0));sel(1)=not(sel(1));sel(2)=not(sel(2));
else
IF Count0'event and (COUNT0 = '1')THEN
IF (KEYIN1 = '0') and (COUNT(1) = '0') THEN
NUM(3)<= '0';
NUM(2 DOWNTO 0) <= COUNT(4 DOWNTO 2);
ELSIF (KEYIN2 = '0') AND (COUNT(1) = '0') THEN
NUM <='1' & COUNT(4 DOWNTO 2);
END IF;
END IF;
SEL <= COUNT(4 DOWNTO 2);
end if;
end process;
process(NUM)
begin
case NUM IS
WHEN"0000" => SEG<="0111111";
WHEN"0001" => SEG<="0000110";
WHEN"0010" => SEG<="1011011";
WHEN"0011" => SEG<="1001111";
WHEN"0100" => SEG<="1100110";
WHEN"0101" => SEG<="1101101";
WHEN"0110" => SEG<="1111101";
WHEN"0111" => SEG<="0000111";
WHEN"1000" => SEG<="1111111";
WHEN"1001" => SEG<="1101111";
WHEN"1010" => SEG<="1101111";
WHEN"1011" => SEG<="1111100";
WHEN"1100" => SEG<="0111001";
WHEN"1101" => SEG<="1011110";
WHEN"1110" => SEG<="1111001";
WHEN"1111" => SEG<="1110001";
WHEN OTHERS => NULL;
END case;
END PROCESS;
LED_SA <= SEL(0);
LED_SB <= SEL(1);
LED_SC <= SEL(2);
LED_A <= SEG(0);
LED_B <= SEG(1);
LED_C <= SEG(2);
LED_D <= SEG(3);
LED_E <= SEG(4);
LED_F <= SEG(5);
LED_G <= SEG(6);
LED_DP <= '0';
end KEYSCAN_ARCH;
eda.rar_Commutation
版权申诉
147 浏览量
2022-09-14
21:40:12
上传
评论
收藏 5KB RAR 举报
APei
- 粉丝: 64
- 资源: 1万+