LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY LED_BUPT IS
PORT(clk:IN STD_LOGIC;
rst:IN STD_LOGIC;
disp_row:OUT STD_LOGIC_VECTOR(7 downto 0);
-- clktmp1:BUFFER STD_LOGIC;
--clktmp2:BUFFER STD_LOGIC;
--tmp1:BUFFER INTEGER RANGE 0 TO 9;
-- tmp2:BUFFER INTEGER RANGE 0 TO 9;
-- i:BUFFER INTEGER RANGE 0 TO 7;
-- j:BUFFER INTEGER RANGE 0 TO 7;
disp_col:OUT STD_LOGIC_VECTOR(0 to 7));
END LED_BUPT;
ARCHITECTURE LED_display OF LED_BUPT IS
signal timer_count:INTEGER RANGE 0 TO 9;
SIGNAL clktmp1:STD_LOGIC;
SIGNAL clktmp2:STD_LOGIC;
SIGNAL tmp1:INTEGER RANGE 0 TO 499;
SIGNAL tmp2:INTEGER RANGE 0 TO 9;
SIGNAL i:INTEGER RANGE 0 TO 7;
SIGNAL j:INTEGER RANGE 0 TO 7;
TYPE CHAR is array (1 to 8) of std_logic_vector(0 to 7);
TYPE PHRASE is array (1 to 7) of CHAR;
signal b:CHAR;
signal u:CHAR;
signal p:CHAR;
signal t:CHAR;
signal liu:CHAR;
signal jun:CHAR;
signal ling:CHAR;
signal index:CHAR;
SIGNAL circle:PHRASE;
BEGIN
--DIV 1k/8 AS clktmp1
--DIV 1k/64 AS clktmp2
p2:PROCESS (clk)
BEGIN
IF (clk'EVENT AND clk = '1') THEN
IF (tmp2 = 3) THEN
tmp2<=0;clktmp2<= NOT clktmp2;
ELSE
tmp2<=tmp2+1;
END IF;
IF (j=8) THEN
j<=1;
ELSE j<=j+1;
END IF;
END IF;
END PROCESS;
p3:PROCESS (clktmp2)
BEGIN
IF (clktmp2'EVENT AND clktmp2 = '1') THEN
IF (i=8) then
i<=1;
ELSE IF (tmp1=499) THEN
i<=i+1;
END IF;
END IF;
END IF;
END PROCESS;
p4:PROCESS (j)
BEGIN
index<=("01111111","10111111","11011111","11101111","11110111","11111011","11111101","11111110");
disp_row<=index(j+1);
-- disp_col<="11111100";
disp_col<=circle(i)(j+1);
-- disp_row lit when 0 ; disp_col lit when 1 ; disp_row lit actual column ; disp_col lit actual row
circle<=(b,u,p,t,liu,jun,ling);
b<=("11111100",
"01000110",
"01000110",
"01111000",
"01000110",
"01000010",
"01000110",
"11111100");
u<=("11100111",
"01000010",
"01000010",
"01000010",
"01000010",
"01000010",
"01100010",
"00111100");
p<=("11111100",
"01100110",
"01100010",
"01100110",
"01111100",
"01100000",
"01100000",
"11110000");
t<=("11111111",
"10011001",
"00011000",
"00011000",
"00011000",
"00011000",
"00011000",
"00111100");
liu<=("11110000",
"01100000",
"01100000",
"01100000",
"01100000",
"01100001",
"01100011",
"11111111");
jun<=("00011111",
"00001110",
"00000110",
"00000110",
"00000110",
"01000110",
"11100100",
"00111000");
ling<=("11110000",
"01100000",
"01100000",
"01100000",
"01100000",
"01100001",
"01100011",
"11111111");
END PROCESS;
END;