發(fā)光二極管走馬燈電路的設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)
實(shí)驗(yàn)程序:
設(shè)計(jì)思路:首先用按鍵SW1來控制顯示模式。用狀態(tài)機(jī)來實(shí)現(xiàn)單點(diǎn)移動(dòng)和幕布式移動(dòng)。
VHDL程序如下
library ieee;
use ieee.std_logic_1164.all;
entity scan is
port(clk,reset:in std_logic;
light:out std_logic_vector(7 downto 0);
a:in std_logic
);
end scan;
architecture arch_scan of scan is
TYPE state_type is(s0,s1,s2,s3,s4,s5,s6,s7);
signal state:state_type;
begin
process(a,clk,reset) ——————process使用嵌套
begin
if(reset='1') then light<="00000000";
elsif(rising_edge(clk)) then
if a='0' then ——————‘a(chǎn)’代表BW1的值,控制顯示模式
case state is ——————實(shí)現(xiàn)單點(diǎn)移動(dòng)
when s0=>
state<=s1;
light<="10000000";
when s1=>
state<=s2;
light<="01000000";
when s2=>
state<=s3;
light<="00100000";
when s3=>
state<=s4;
light<="00010000";
when s4=>
state<=s5;
light<="00001000";
when s5=>
state<=s6;
light<="00000100";
when s6=>
state<=s7;
light<="00000010";
when s7=>
state<=s0;
light<="00000001";
end case;
else
case state is ——————實(shí)現(xiàn)幕布式移動(dòng)
when s0=>
state<=s1;
light<="00011000";
when s1=>
state<=s2;
light<="00111100";
when s2=>
state<=s3;
light<="01111110";
when s3=>
state<=s4;
light<="11111111";
when s4=>
state<=s5;
light<="01111110";
when s5=>
state<=s6;
light<="00111100";
when s6=>
state<=s7;
light<="00011000";
when s7=>
state<=s0;
light<="00000000";
end case;
end if;
end if;
end process;
end arch_scan;