专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

FPGA流星雨灯的VHDL程序

作者:佚名   来源:本站原创   点击数:  更新时间:2013年11月08日   【字体:

用6个灯制造流星的效果程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity deng50 is
  port(clk:in std_logic;
       d0,d1,d2,d3,d4,d5:out std_logic);
end deng50;
architecture deng of deng50 is
signal q0:std_logic_vector(24 downto 0);
signal qq0:std_logic_vector(13 downto 0);
signal qq1:std_logic_vector(2 downto 0);
signal c0: std_logic;
begin
  process(clk)
    begin
      if clk'event and clk='1' then
          if q0=4500000 then q0<="0000000000000000000000000";c0<='1';
           else q0<=q0+1;c0<='0';
          end if;     
          if qq0=13650 then qq0<="00000000000000";
          else qq0<=qq0+1;
          end if;
      end if;
      if c0'event and c0='1' then qq1<=qq1+1;
         if qq1=7 then qq1<="000";end if;
      end if;      
      case qq1 is
        when "000"=>
            if qq0<5 then d1<='0';else d1<='0';end if;
            if qq0<30 and qq0>10 then d2<='0';else d2<='0';end if;
            if qq0<130 and qq0>50 then d3<='0';else d3<='0';end if;
            if qq0<530 and qq0>210 then d4<='0';else d4<='0';end if;             
            if qq0<2210 and qq0>850 then d5<='0';else d5<='0';end if;
            if qq0<13650 and qq0>3410 then d0<='1';else d0<='0';end if;
         when "001"=>
            if qq0<5 then d2<='0';else d2<='0';end if;
            if qq0<30 and qq0>10 then d3<='0';else d3<='0';end if;
            if qq0<130 and qq0>50 then d4<='0';else d4<='0';end if;
            if qq0<530 and qq0>210 then d5<='0';else d5<='0';end if;             
            if qq0<2210 and qq0>850 then d0<='1';else d0<='0';end if;
            if qq0<13650 and qq0>3410 then d1<='1';else d1<='0';end if;
        when "010"=>
            if qq0<5 then d3<='0';else d3<='0';end if;
            if qq0<10 and qq0>10 then d4<='0';else d4<='0';end if;
            if qq0<80 and qq0>50 then d5<='0';else d5<='0';end if;
            if qq0<330 and qq0>210 then d0<='1';else d0<='0';end if;             
            if qq0<1310 and qq0>850 then d1<='1';else d1<='0';end if;
            if qq0<13650 and qq0>3410 then d2<='1';else d2<='0';end if;
        when "011"=>
            if qq0<2 then d4<='0';else d4<='0';end if;
            if qq0<10 and qq0>10 then d5<='0';else d5<='0';end if;
            if qq0<80 and qq0>50 then d0<='1';else d0<='0';end if;
            if qq0<330 and qq0>210 then d1<='1';else d1<='0';end if;             
            if qq0<1310 and qq0>850 then d2<='1';else d2<='0';end if;
            if qq0<13650 and qq0>3410 then d3<='1';else d3<='0';end if;
        when "100"=>
            if qq0<2 then d5<='0';else d1<='0';end if;
            if qq0<10 and qq0>10 then d0<='1';else d0<='0';end if;
            if qq0<80 and qq0>50 then d1<='1';else d1<='0';end if;
            if qq0<330 and qq0>210 then d2<='1';else d2<='0';end if;             
            if qq0<1310 and qq0>850 then d3<='1';else d3<='0';end if;
            if qq0<13650 and qq0>3410 then d4<='1';else d4<='0';end if;
      when "101"=>
            if qq0<2 then d0<='1';else d0<='0';end if;
            if qq0<10 and qq0>10 then d1<='1';else d1<='0';end if;
            if qq0<80 and qq0>50 then d2<='1';else d2<='0';end if;
            if qq0<330 and qq0>210 then d3<='1';else d3<='0';end if;             
            if qq0<1310 and qq0>850 then d4<='1';else d4<='0';end if;
            if qq0<13650 and qq0>3410 then d5<='1';else d5<='0';end if;            
      when others=>d0<='0';d2<='0';d2<='0';d3<='0';d4<='0';d5<='0';
      end case;
        end process;
        end;
时间的简便编法:
if clk'event and clk='1' then  secondL<=secondL+1;
                if secondL=9 then  secondL<="0000";secondH<=secondH+1;end if;
                if secondH=5 and  secondL=9  then   secondH<="0000";monthL<=monthL+1;end if;
                if monthL=9 and   secondH=5 and secondL=9   then monthL<="0000";monthH<=monthH+1;end if;
                if monthH=5 and monthL=9 and secondH=5 and secondL=9  then monthH<="0000";hourL<=hourL+1;end if;
                if hourL=9 and  monthH=5 and monthL=9 and secondH=5 and secondL=9  then hourL<="0000";hourH<=hourH+1;end if;
                if hourH=2 and hourL=3  and  monthH=5 and monthL=9 and secondH=5 and secondL=9   then
                     hourL<="0000";hourH<="0000";day<=day+1;
                end if;
end if;
 

关闭窗口

相关文章