8*8点阵显示屏先后显示两个汉字
我想在8*8点阵显示屏上先后显示两个字,都是红字。但是下载到板上后点阵显示屏在不停的扫描,我刚接触EDA,学的不是很好,找不出来问题在哪,希望各路高手能够指点一二。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY seg70 IS
PORT (
clk : IN std_logic;
rst : IN std_logic;
dataout : OUT std_logic_vector(7 DOWNTO 0); --各段数据输出
en : OUT std_logic_vector(7 DOWNTO 0)); --COM使能输出
END seg70;
ARCHITECTURE arch OF seg70 IS
signal cnt_scan : std_logic_vector(17 downto 0 );
signal data4 : std_logic_vector(3 downto 0);
signal dataout_xhdl1 : std_logic_vector(7 downto 0);
signal en_xhdl : std_logic_vector(7 downto 0);
signal clk1 : std_logic;
begin
dataout<=dataout_xhdl1;
en<=en_xhdl;
process(clk,rst)
begin
if(rst='0')then
cnt_scan<="000000000000000000";
elsif(clk'event and clk='1')then
cnt_scan<=cnt_scan+1;
end if;
end process;
process(cnt_scan(17 downto 15))
begin
case cnt_scan(17 downto 15) is
when"000"=> en_xhdl<="11111110";
when"001"=> en_xhdl<="11111101";
when"010"=> en_xhdl<="11111011";
when"011"=> en_xhdl<="11110111";
when"100"=> en_xhdl<="11101111";
when"101"=> en_xhdl<="11011111";
when"110"=> en_xhdl<="10111111";
when"111"=> en_xhdl<="01111111";
when others=> en_xhdl<="11111110";
end case;
end process;
process(en_xhdl)
begin
case en_xhdl is
when "11111110"=> data4<="0000";
when "11111101"=> data4<="0001";
when "11111011"=> data4<="0010";
when "11110111"=> data4<="0011";
when "11101111"=> data4<="0100";
when "11011111"=> data4<="0101";
when "10111111"=> data4<="0110";
when "01111111"=> data4<="0111";
when others => data4<="1000";
end case;
end process;
process(clk)
VARIABLE count:INTEGER RANGE 0 TO 99999999;
BEGIN
IF clk'EVENT AND clk='1' THEN --当时钟脉冲上升沿到来时执行下面语句
IF count<=49999999 THEN
clk1<='0'; --当count<=4999999时divls=0并且count加1
count:=count+1;
ELSIF count>=49999999 AND count<=99999999 THEN --当ount>=4999999 并且 count<=9999998时
clk1<='1'; --
count:=count+1; --clk1=1并且count加1
ELSE count:=0; --当count>=4999999时清零count1
END IF;
END IF;
END PROCESS;
PROCESS(data4,clk1)
variable count1:INTEGER RANGE 0 TO 3; --定义的整型变量用做计数器
BEGIN
IF clk1'event AND clk1='1'THEN --当时钟脉冲上升沿到来时执行下面语句
if count1<=3 then --当COUNT1<=9时执行下面语句
if count1=2 then --当COUNT1=8时,COUNT1清零
count1:=0; --
end if;
if count1 =0 then
case data4 is
WHEN "0000" =>
dataout_xhdl1 <= "11111011";
WHEN "0001" =>
dataout_xhdl1 <= "00000101";
WHEN "0010" =>
dataout_xhdl1 <= "11011000";
WHEN "0011" =>
dataout_xhdl1 <= "11011101";
WHEN "0100" =>
dataout_xhdl1 <= "11011000";
WHEN "0101" =>
dataout_xhdl1 <= "11011011";
WHEN "0110" =>
dataout_xhdl1 <= "11011101";
WHEN "0111" =>
dataout_xhdl1 <= "00000110";
WHEN "1000" =>
dataout_xhdl1 <= "00000100";
WHEN "1001" =>
dataout_xhdl1 <= "00011100";
WHEN "1010" =>
dataout_xhdl1 <= "00010100";
WHEN "1011" =>
dataout_xhdl1 <= "11000001";
WHEN "1100" =>
dataout_xhdl1 <= "01100011";
WHEN "1101" =>
dataout_xhdl1 <= "10000101";
WHEN "1110" =>
dataout_xhdl1 <= "01100001";
WHEN "1111" =>
dataout_xhdl1 <= "01110001";
WHEN OTHERS =>
dataout_xhdl1 <= "00000011";
end case;
elsif count1 =1 then
case data4 is
WHEN "0000" =>
dataout_xhdl1 <= "11111011";
WHEN "0001" =>
dataout_xhdl1 <= "00000101";
WHEN "0010" =>
dataout_xhdl1 <= "11011000";
WHEN "0011" =>
dataout_xhdl1 <= "11011101";
WHEN "0100" =>
dataout_xhdl1 <= "11011000";
WHEN "0101" =>
dataout_xhdl1 <= "11011011";
WHEN "0110" =>
dataout_xhdl1 <= "11011101";
WHEN "0111" =>
dataout_xhdl1 <= "00000110";
WHEN "1000" =>
dataout_xhdl1 <= "00000100";
WHEN "1001" =>
dataout_xhdl1 <= "00011100";
WHEN "1010" =>
dataout_xhdl1 <= "00010100";
WHEN "1011" =>
dataout_xhdl1 <= "11000001";
WHEN "1100" =>
dataout_xhdl1 <= "01100011";
WHEN "1101" =>
dataout_xhdl1 <= "10000101";
WHEN "1110" =>
dataout_xhdl1 <= "01100001";
WHEN "1111" =>
dataout_xhdl1 <= "01110001";
WHEN OTHERS =>
dataout_xhdl1 <= "00000011";
end case;
END if;
count1:=count1+1;
end if;
end if;
end process;
end arch;