《《彩燈控制器設計》word版》由會員分享,可在線閱讀,更多相關《《彩燈控制器設計》word版(6頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、彩燈控制器設計
摘要
一、系統(tǒng)設計要求
設計一個控制電路來實現(xiàn)8路彩燈按照一定的次序和時間間隔閃爍。具體要求如下:
1、當控制開關為0時,燈全滅;當控制開關為1時,從第一盞開始,依次點亮,時間間隔為1秒。期間一直保持只有一盞燈亮、其他燈全滅的狀態(tài)。
2、?8盞燈依次亮完后,從第8盞開始依次滅,期間一直保持只有一盞燈滅、其他燈全亮的狀態(tài)。
3、當8盞燈依次滅完后,8盞燈同時亮同時滅,其時間間隔為0.5秒,并重復4次。
4、只要控制開關為1,上述亮燈次序不斷重復。
5、用層次化設計方法設計該電路,編寫各個功能模塊的程序。
6、仿真各功能模塊,通過觀察有關波形確認電路設計是否正確。
2、
7、完成電路設計后,用實驗系統(tǒng)下載驗證設計的正確性。
二、系統(tǒng)總體結構
系統(tǒng)框圖如下所示,
ENA為控制開關,輸入信號為2Hz,經(jīng)過分頻器分頻之后產(chǎn)生一個1Hz的時鐘信號,用兩個12位內(nèi)部信號的左、右移后的中間8位來控制8個燈的亮與滅。計數(shù)器1和計數(shù)器2的作用:一方面用2Hz和1Hz的時鐘信號控制燈亮、滅的時間間隔;另一方面控制八盞燈的依次亮、依次滅和全亮、全滅。
使能信號ENA為無效電平時(低電平),8只LED燈保持全滅的狀態(tài);當使能信號ENA為有效電平時(高電平),8只按照既定的花型進行變換,首先2Hz的時鐘信號在分頻器的左右下改變?yōu)?Hz的時鐘信號,該1Hz的時鐘信號送至計數(shù)
3、器2、左移和右移模塊,并由計數(shù)器2實現(xiàn)左、右移模塊的選擇。分別實現(xiàn)8只LED燈的自左向右依次點亮,以及自右向左依次熄滅的花型變換;當完成自右向左的花型變換后,計數(shù)器2給出一個控制信號給計數(shù)器1,執(zhí)行全亮全滅的花型變換,該模塊的時鐘信號是未經(jīng)分頻器分頻的原始時鐘信號2Hz。只要使能信號有效,那么該系統(tǒng)就按照以上的花型變換順序一直永序的變換下去。
三、各功能模塊
1、時鐘信號二分頻模塊:
功能描述:該模塊的功能主要是將頻率為2Hz的時鐘信號分頻頻率為1Hz的時鐘信號,并將頻率為1Hz的時鐘信號輸出給左移、右移模塊作為這兩個模塊時鐘觸發(fā)信號。
代碼部分:
LIBRARY IEEE;
US
4、E IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY clk_div2 IS
PORT(CLK:IN STD_LOGIC;
?????OUTPUT:BUFFER STD_LOGIC);
END clk_div2 ;
ARCHITECTURE one OF clk_div2 IS
??BEGIN
PROCESS(CLK)
??????BEGIN
????????IF CLK'EVENT AND CLK='1' THEN
??????????OUTPUT<=NOT OUTPUT;
???????
5、?END IF;
??END PROCESS;
END one;?
仿真波形:
2、計數(shù)器模塊:
功能描述:該模塊的主要功能是通過計數(shù),實現(xiàn)對左移及右移模塊的選通,并在右移和左移模塊完成后,跳轉到循環(huán)取反模塊執(zhí)行指令。
計數(shù)器1代碼部分:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY count1 IS
PORT(CLK,ENA:IN STD_LOGIC;
?????OUTPUT:BUFFER STD_LOGIC_VECTOR(1 DOWNTO 0))
6、;
END count1;
ARCHITECTURE one OF count1 IS
??SIGNAL CQ:STD_LOGIC_VECTOR(5 DOWNTO 0);
???BEGIN
PROCESS(CLK,ENA)
???????BEGIN
?????????IF CLK'EVENT AND CLK='1' THEN
???????????IF ENA='1' THEN
?????????????IF CQ<"100111" THEN CQ<=CQ+1;
???????????????IF CQ="100000" THEN OUTPUT<="10";
??????
7、?????????ELSIF CQ="100001" THEN OUTPUT<="01";
???????????????ELSIF CQ="100010" THEN OUTPUT<="10";
???????????????ELSIF CQ="100011" THEN OUTPUT<="01";
???????????????ELSIF CQ="100100" THEN OUTPUT<="10";
???????????????ELSIF CQ="100101" THEN OUTPUT<="01";
???????????????ELSIF CQ="100110" THEN OUT
8、PUT<="10";
???????????????ELSIF CQ="100111" THEN OUTPUT<="01";
???????????????END IF;???
?????????????ELSE CQ<="000000";OUTPUT<="00";
?????????????END IF;
???????????ELSE CQ<="111111";
???????????END IF;
????????END IF;
?????END PROCESS;
?END one;
仿真波形:
計數(shù)器2代碼:
LIBRARY?IEEE;
USE IEEE.ST
9、D_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY count2 IS
PORT(CLK,ENA:IN STD_LOGIC;
?????OUTPUT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));
END count2;
ARCHITECTURE one OF count2 IS
??SIGNAL CQ:STD_LOGIC_VECTOR(5 DOWNTO 0);
???BEGIN
PROCESS(CLK,ENA)
???????BEGIN
?????????IF CLK'EVENT AN
10、D CLK='1' THEN
???????????IF ENA='1' THEN
?????????????IF CQ<"010011" THEN CQ<=CQ+1;
???????????????ELSE CQ<="000000";
?????????????END IF;
???????????ELSE CQ<="111111";
?????????END IF;
???????END IF;
?????END PROCESS;
?????OUTPUT<=CQ;
END one;
仿真波形:
3、循環(huán)右移模塊:
功能描述:該功能實現(xiàn)8只LED燈的從左向右依次點亮
11、的功能,點亮過程中,每時每刻都保證只有一個LED被點亮,其它LED全滅的狀態(tài)。時間間隔為1S。
代碼部分:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY rightmove IS
PORT(CLK,ENA:IN STD_LOGIC;
?????COUNT:IN STD_LOGIC_VECTOR(5 DOWNTO 0);
?????OUTPUT:OUT STD_LOGIC_VECTOR(11 DOWNTO 0));
END rightmove ;
ARCHI
12、TECTURE one OF rightmove IS
??BEGIN
PROCESS(CLK,ENA,COUNT)
??????BEGIN
????????IF CLK'EVENT AND CLK='1' THEN
??????????IF ENA='1' THEN
??????????????CASE COUNT IS
????????????????WHEN "000000"=>OUTPUT<="001000000000";
????????????????WHEN "000001"=>OUTPUT<="000100000000";
????????????????WH
13、EN "000010"=>OUTPUT<="000010000000";
????????????????WHEN "000011"=>OUTPUT<="000001000000";
????????????????WHEN "000100"=>OUTPUT<="000000100000";
????????????????WHEN "000101"=>OUTPUT<="000000010000";
????????????????WHEN "000110"=>OUTPUT<="000000001000";
????????????????WHEN "000111"=>OUTPUT<
14、="000000000100";
????????????????WHEN OTHERS=>OUTPUT<="000000000000";
??????????????END CASE;
??????????ELSE OUTPUT<="000000000000";
??????????END IF;
???????END IF;
????END PROCESS;
END one;
仿真波形:
4、循環(huán)左移模塊:
功能描述:該功能實現(xiàn)8只LED燈在從左向右依次點亮結束后,從右向左依次熄滅一只LED,熄滅過程中,每時每刻都保證只有一個LED被熄滅,其它LED全亮的狀態(tài)。時間間隔
15、為1S。
代碼部分:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY leftmove IS
PORT(CLK,ENA:IN STD_LOGIC;
?????COUNT:IN STD_LOGIC_VECTOR(5 DOWNTO 0);
?????OUTPUT:OUT STD_LOGIC_VECTOR(11 DOWNTO 0));
END leftmove ;
ARCHITECTURE one OF leftmove IS
??BEGIN
PROCESS(
16、CLK,ENA,COUNT)
??????BEGIN
????????IF CLK'EVENT AND CLK='1' THEN
??????????IF ENA='1' THEN
??????????????CASE COUNT IS
????????????????WHEN OTHERS=>OUTPUT<="000000000000";
??????????????END CASE;
??????????ELSE OUTPUT<="000000000000";
??????????END IF;
???????END IF;
????END PROCESS;
END
17、one;
仿真波形:
5、循環(huán)取反模塊:
功能描述:該模塊實現(xiàn)的是對完成逐個點亮和逐個熄滅的過程后,實現(xiàn)每秒2次的全亮、全滅的閃爍。即相鄰兩個動作之間的時間間隔為0.5S。
代碼部分:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY qufan IS
PORT(CLK,ENA:IN STD_LOGIC;
?????COUNT:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
?????OUTPUT:BUFFER STD_LOGIC_VECT
18、OR(11 DOWNTO 0));
END qufan;
ARCHITECTURE one OF qufan IS
??BEGIN
PROCESS(CLK,ENA,COUNT)
??????BEGIN
????????IF CLK'EVENT AND CLK='1' THEN
??????????IF ENA='1' THEN
??????????????CASE COUNT IS
?????????????????WHEN "01"=>OUTPUT<=NOT OUTPUT;
?????????????????WHEN OTHERS=>OUTPUT<="0000000000
19、00";
??????????????END CASE;
??????????ELSE OUTPUT<="000000000000";
??????????END IF;
???????END IF;
????END PROCESS;
END one;
仿真波形:
6、多選一模塊:
功能描述:此模塊選擇左移、右移或者是循環(huán)取反中的一個模塊信號送至8只LED燈。
代碼部分:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY qufan IS
PORT(
20、CLK,ENA:IN STD_LOGIC;
?????COUNT:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
?????OUTPUT:BUFFER STD_LOGIC_VECTOR(11 DOWNTO 0));
END qufan;
ARCHITECTURE one OF qufan IS
??BEGIN
PROCESS(CLK,ENA,COUNT)
??????BEGIN
????????IF CLK'EVENT AND CLK='1' THEN
??????????IF ENA='1' THEN
??????????????CASE COUNT I
21、S
?????????????????WHEN "01"=>OUTPUT<=NOT OUTPUT;
?????????????????WHEN OTHERS=>OUTPUT<="000000000000";
??????????????END CASE;
??????????ELSE OUTPUT<="000000000000";
??????????END IF;
???????END IF;
????END PROCESS;
END one;
仿真波形:
7、系統(tǒng)組合電路:
以上詳細地介紹了各個模塊的功能、代碼以及仿真波形。下面將把6個分模塊系統(tǒng)有序的整合在一起,形成
22、一個功能完整的系統(tǒng)。
仿真波形:
四、系統(tǒng)調(diào)試
1、該系統(tǒng)使用開發(fā)板電路模式N0.6,其電路結構為
2、使用的可編程芯片型號為FLEX EPF10K10-PLCC84。
3、在將程序下載到實驗箱上實際檢測的時候,引腳的設置是一項簡單
但極易出現(xiàn)錯誤的工作。時鐘信號由clock0送出,其時鐘頻率為2Hz,
使能信號ENA接的是實驗箱上的3號按鍵。
4、當控制開關ENA為0時,8只彩燈保持全滅的狀態(tài);當控制開關ENA
為1時,彩燈按照預先設定的先自左向右依次點亮,全部點亮后按照自右向左的順序依次熄滅,依次漸亮和依次熄滅的過程中,始終保持只有一盞彩燈被點亮或熄滅,且時間間隔為1S。
23、當彩燈依次熄滅后,加快變換頻率,以0.5S的時間間隔全亮、全亮交替。
5、調(diào)試結果:此系統(tǒng)可以順利的實現(xiàn)了4的設定顯示效果。
五、總結
本次實驗課題主要包括四個階段:課題選擇階段、查閱資料階段、編程仿真階段、實驗箱檢測調(diào)試階段。
課題的選定是抽簽決定的,有不少人說彩燈是最簡單的一個課題。不過我認為沒什么簡單困難之分,不同的只是你對待它的態(tài)度。
查閱資料階段則主要圍繞的是選擇何種方案可以更好的實現(xiàn)要求得功能,并最終確定各個功能模塊的實現(xiàn)方案。
編程仿真階段則主要是把上一階段確定的方案變?yōu)閂HDL代碼,并編譯仿真得到仿真波形。
最后一個階段就是實驗箱檢測和調(diào)試階段,將已經(jīng)編譯仿真過的程序下載到實驗箱進行實際的檢測和調(diào)試。最終系統(tǒng)沒出現(xiàn)什么問題,編譯后的代碼下載到實驗箱后,彩燈順利實現(xiàn)要求的花型變換。
最后要感謝老師的悉心指導,課程設計中,遇到了不少問題,多虧了老師的悉心指導才能夠順利、及時地解決問題,使得課題能夠順利完成。通過這次的課題設計,我深深體會到知識通過應用才能體現(xiàn)其價值。