急求一个彩灯控制的VHDL程序
试设计一种彩灯控制器控制8盏灯。该彩灯控制器有4种自动切换的花样。第一种花样为彩灯从右到左,然后从左到右逐次点亮,全灭全亮;第二种花样为彩灯两边同时亮一个逐次向中间移动再...
试设计一种彩灯控制器控制8盏灯。该彩灯控制器有4种自动切换的花样。第一种花样为彩灯从右到左,然后从左到右逐次点亮,全灭全亮;第二种花样为彩灯两边同时亮一个逐次向中间移动再散开;第三种花样为彩灯两边同时亮两个逐次向中间移动再散开;第四种花样为彩灯两边同时亮三个,然后四亮四灭,四灭四亮,最后一灭一亮。四个花样自动变换,重复以上过程。输入时钟频率为500Hz,灯亮的时间在1—4秒之间,可以自由控制。电路中以“1”代表灯亮,以“0”代表灯灭。
需要叙述原理和VHDL程序代码 展开
需要叙述原理和VHDL程序代码 展开
3个回答
展开全部
跟你说的有点区别,原理一样,自己动脑搞定~~~·~
--********************************************
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
--********************************************
ENTITY light is
PORT(
clk1 : IN STD_LOGIC;
light: buffer std_logic_vector(7 downto 0)
);
END light;
--*********************************************
ARCHITECTURE behv OF light IS
constant len : integer:=7;
signal banner : STD_LOGIC:='0';
signal clk,clk2: STD_LOGIC;
BEGIN
clk<=(clk1 and banner) or (clk2 and not banner);
process(clk1)
begin
if clk1'event and clk1='1' then
clk2<=not clk2;
end if;
end process;
process (clk)
variable flag: bit_vector(2 downto 0):="000";
begin
if clk'event and clk='1' then
if flag="000" then
light<='1' & light(len downto 1);从左向右点亮
if light(1)='1' then
flag:="001";
end if;
elsif flag="001" then
light<=light (len-1 downto 0) & '0';从右向左逐渐灭
if light(6)='0' then
flag:="010";
end if;
elsif flag="010" then
light(len downto 4) <=light (len-1 downto 4)&'1';从两侧向中心亮
light(len-4 downto 0) <='1'& light(len-4 downto 1);
if light(1)='1' then
flag:="011";
end if;
elsif flag="011" then
light(len downto 4) <='0'& light(len downto 5);从两侧向中心逐渐灭
light(len-4 downto 0) <= light(len-5 downto 0)&'0';
if light(2)='0' then
flag:="100";
end if;
elsif flag="100" then
light(len downto 4)<='1'&light(len downto 5);7-4+3-0顺序点亮
light(len-4 downto 0) <='1'& light(len-4 downto 1);
if light(1)='1' then
flag:="101";
end if;
elsif flag="101" then
light<="00000000";全灭
flag:="110";
elsif flag="110" then
banner<=not banner;
flag:="000";重复
end if;
end if;
end process;
end behv;
--********************************************
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
--********************************************
ENTITY light is
PORT(
clk1 : IN STD_LOGIC;
light: buffer std_logic_vector(7 downto 0)
);
END light;
--*********************************************
ARCHITECTURE behv OF light IS
constant len : integer:=7;
signal banner : STD_LOGIC:='0';
signal clk,clk2: STD_LOGIC;
BEGIN
clk<=(clk1 and banner) or (clk2 and not banner);
process(clk1)
begin
if clk1'event and clk1='1' then
clk2<=not clk2;
end if;
end process;
process (clk)
variable flag: bit_vector(2 downto 0):="000";
begin
if clk'event and clk='1' then
if flag="000" then
light<='1' & light(len downto 1);从左向右点亮
if light(1)='1' then
flag:="001";
end if;
elsif flag="001" then
light<=light (len-1 downto 0) & '0';从右向左逐渐灭
if light(6)='0' then
flag:="010";
end if;
elsif flag="010" then
light(len downto 4) <=light (len-1 downto 4)&'1';从两侧向中心亮
light(len-4 downto 0) <='1'& light(len-4 downto 1);
if light(1)='1' then
flag:="011";
end if;
elsif flag="011" then
light(len downto 4) <='0'& light(len downto 5);从两侧向中心逐渐灭
light(len-4 downto 0) <= light(len-5 downto 0)&'0';
if light(2)='0' then
flag:="100";
end if;
elsif flag="100" then
light(len downto 4)<='1'&light(len downto 5);7-4+3-0顺序点亮
light(len-4 downto 0) <='1'& light(len-4 downto 1);
if light(1)='1' then
flag:="101";
end if;
elsif flag="101" then
light<="00000000";全灭
flag:="110";
elsif flag="110" then
banner<=not banner;
flag:="000";重复
end if;
end if;
end process;
end behv;
宿兴电子
2024-10-18 广告
2024-10-18 广告
产品展示1.压电式蜂鸣器 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1...
点击进入详情页
本回答由宿兴电子提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询