當前位置:文思屋>學習教育>畢業論文>

發光二極體走馬燈電路的設計與實現實驗(一)

文思屋 人氣:2.51W

實驗程式:
 設計思路:首先用按鍵SW1來控制顯示模式。用狀態機來實現單點移動和幕布式移動。
VHDL程式如下
library ieee;
use _logic_;
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’代表BW1的值,控制顯示模式
  case state is    ——————實現單點移動
   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     ——————實現幕布式移動
  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;

發光二極體走馬燈電路的設計與實現實驗(一)

模擬波形如下:

600)makesmallpic(this,600,1800);' src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ksohtml/wps_clip_image-0.png" width="662" height="244" />


實驗總結
 仿照上個實驗的狀態機設計,自己寫出了以上的程式。雖然程式簡單,容易寫出,但由於語法不熟,在編寫的過程中走了很多的彎路也出現了較多的錯誤。還好,在老師的指導下,經過不段的除錯,改正終於得出了正確的結果。
 最初,我由於不知道要用巢狀PROCESS,而在一個PROCESS中又加入倆個PROCESS。導致編譯不能通過。這是由於語法不清而犯的錯誤。
 還有就是在寫程式的.時候沒有進行深入的思考。簡單的認為狀態機不能實現幕布式的移動(因為我認為狀態機的狀態不足以表達幕布式的各個狀態,其實