一、多路彩燈控制器設(shè)計(jì)原理
設(shè)計(jì)一個(gè)彩燈控制程序器??梢詫?shí)現(xiàn)四種花型循環(huán)變化,有復(fù)位開關(guān)。整個(gè)系統(tǒng)共有三個(gè)輸入信號(hào)CLK,RST,SelMode,八個(gè)輸出信號(hào)控制八個(gè)彩燈。時(shí)鐘信號(hào)CLK脈沖由系統(tǒng)的晶振產(chǎn)生。各種不同花樣彩燈的變換由SelMode控制。硬件電路的設(shè)計(jì)要求在彩燈的前端加74373鎖存器。用來(lái)對(duì)彩燈進(jìn)行鎖存控制。此彩燈控制系統(tǒng)設(shè)定有四種花樣變化,這四種花樣可以進(jìn)行切換,四種花樣分別為:
?。?)彩燈從左到右逐次閃亮。然后從右到左逐次熄滅。
?。?)彩燈兩邊同時(shí)亮兩個(gè),然后逐次向中間點(diǎn)亮。
?。?)彩燈從左到右兩個(gè)兩個(gè)點(diǎn)亮,然后從右到左兩個(gè)兩個(gè)逐次點(diǎn)亮。
?。?)彩燈中間兩個(gè)點(diǎn)亮。然后同時(shí)向兩邊散開。
二、多路彩燈控制器的VHDL的實(shí)現(xiàn)
本控制電路采用VHDL語(yǔ)言設(shè)計(jì)。運(yùn)用自頂而下的設(shè)計(jì)思想,按功能逐層分割實(shí)現(xiàn)層次化設(shè)計(jì)。根據(jù)多路彩燈控制器的設(shè)計(jì)原理,將整個(gè)控制器分為四個(gè)部分,分別對(duì)應(yīng)彩燈的四種變化模式、利用VHDL語(yǔ)言實(shí)現(xiàn)該功能程序如下:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_loglc_ARITH.ALL;
USE IEEE.std_logic_UNSIGNED.ALL;
ENTITY CaiDeng IS
port(CLK:IN std_logic;
RST:in std_logic;
SelMode:in std_logic_vector(1 downto 0);--彩燈花樣控制
Light:out std_logic_vector(7 downto 0));
END CaiDeng;
ARCHIteCTURE control OF CaiDeng IS
SIGNAL clk1ms:std_logic:=‘0’;
SIGNAL cnt1:std_logic_vector(3 downto 0):=“0000”;
SIGNAL ent2:std_logic_vector(1 downto 0):=“00”;
SIGNAL cnt3:std_logic_vector(3 downto 0):=“0000”;
SIGNAL cnt4:std_logic_vector(1 downto 0):=“00”;
BEGIN
P1:PR0CESS(clk1ms)
BEGIN
if(clk1ms‘EVENT AND clk1ms=’1‘)then
if selmode=“00” then --第一種彩燈花樣的程序
if cnt1=“1111” then
cnt1《=“0000”;
else cnt1《= cnt1+1;
end if;
case cnt1 is
when “0000”=》light《=“10000000”;
when “0001”=》light《=“11000000”;
when “0010”=》light《=“11100000”;
when “0011”=》light《=“11110000”;
when “0100”=》light《=“11111000”;
when “0101”=》light《=“11111100”;
when “0110”=》light《=“11111110”;
when “0111”=》light《=“11111111”;
when “1000”=》light《=“11111110”;
when “1001”=》light《=“11111100”;
when “1010”=》light《=“11111000”;
when “1011”=》light《=“11110000”;
when “1100”=》light《=“11100000”;
when “1101”=》light《=“11000000”;
when “1110”=》light《=“10000000”;
when others=》light《=“00000000”;
end case;
eLSIf selmode=“01” then -- 第二種彩燈花樣的程序
if cnt2=“11” then
cnt2《=“00”;
else cnt2《= cnt2+1;
end if;
case cnt2 is
when “00”=》light《=“10000001”;
when “01”=》light《=“11000011”;
when “10”=》light《=“11100111”;
when “11”=》light《=“11111111”;
when others=》light《=“00000000”;
end ease;
elsif selmode=“10” then --第三種彩燈花樣的程序
if cnt3=“1111” then
cnt3《=“0000”;
else cnt3《=cnt3+1;
end if;
case cnt3 is
when “0000”=》light《=“11000000”;
when “0001”=》light《=“01100000”;
when “0010”=》light《=“00110000”;
when “0011”=》light《=“00011000”;
when “0100”=》light《=“00001100”;
when “0101”=》light《=“00000110”;
when “0110”=》light《=“00000011”;
when “0111”=》light《=“00000110”;
when “1000”=》light《=“00001100”;
when “1001”=》light《=“00011000”;
when “1010”=》light《=“00110000”;
when “1011”=》light《=“01100000”;
when “1100”=》light《=“11000000”;
when others=》light《=“00000000”;
end case;
elsif selmode=“11” then -- 第四種彩燈花樣的程序
if cnt4=“11” then
cnt4《=“00”;
else cnt4《= cnt4+1;
end if;
case cnt4 is
when “00”=》light《=“00011000”;
when “01”=》light《=“00111100”;
when “10”=》light《=“01111110”;
when “11”=》light《=“11111111”;
when others=》light《=“00000000”;
end ease;
end if;
end if;
END PROCESS P1;
P2:PROCESS(clk) --分頻進(jìn)程
variable cnt:integer range 0 to 1000;
BEGIN
IF(RST=’0‘)then
cnt:=0:
ELSIF(clk’EVENT AND clk=‘1’)then
if cnt《999 then
cnt:=cnt+1;
clk1ms《=‘0’;
else
cnt:=0;
clk1ms《=‘1’;
end if;
end if;
end PROCESS P2;
end cONtrol;
各模塊VHDL程序經(jīng)過編譯優(yōu)化后,選擇合適的目標(biāo)芯片進(jìn)行綜合、管腳配置。本電路選用ALTERA公司的可編程邏輯芯片EPM7128SLC84-6,由MAX+Plus II進(jìn)行仿真,從仿真波形可以看出,此程序可以實(shí)現(xiàn)四種不同花樣彩燈的相互變換,每種花樣彩燈可以循環(huán)變化。但是如果系統(tǒng)的固有頻率很大,彩燈的閃爍速度非??欤吹降默F(xiàn)象是每個(gè)花樣的八個(gè)彩燈同時(shí)被點(diǎn)亮,為了實(shí)現(xiàn)絢麗多彩的景象,必須要在程序中加一個(gè)分頻進(jìn)程如上述程序的進(jìn)程P2。
四、結(jié)束語(yǔ)
本次設(shè)計(jì)的程序已經(jīng)在硬件系統(tǒng)上得到了驗(yàn)證,實(shí)驗(yàn)表明。此設(shè)計(jì)方法能夠滿足四種不同花樣彩燈的變化要求,并且該方法便于擴(kuò)展不同變化模式的彩燈花樣,各個(gè)不同花樣的相互轉(zhuǎn)變是手動(dòng)切換實(shí)現(xiàn)的。自動(dòng)切換的方法筆者不再累述。
評(píng)論