新聞中心

        EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于VHDL實現(xiàn)多路彩燈控制器設(shè)計應(yīng)用

        基于VHDL實現(xiàn)多路彩燈控制器設(shè)計應(yīng)用

        作者: 時間:2012-09-12 來源:網(wǎng)絡(luò) 收藏

        一、原理

        本文引用地址:http://www.104case.com/article/189948.htm

        設(shè)計一個彩制程序器。可以實現(xiàn)四種花型循環(huán)變化,有復(fù)位開關(guān)。整個系統(tǒng)共有三個輸入信號CLK,RST,SelMode,八個輸出信號控制八個彩燈。時鐘信號CLK脈沖由系統(tǒng)的晶振產(chǎn)生。各種不同花樣彩燈的變換由SelMode控制.硬件電路的設(shè)計要求在彩燈的前端加74373鎖存器。用來對彩燈進行鎖存控制。此彩制系統(tǒng)設(shè)定有四種花樣變化,這四種花樣可以進行切換,四種花樣分別為:

        (1)彩燈從左到右逐次閃亮。然后從右到左逐次熄滅。

        (2)彩燈兩邊同時亮兩個,然后逐次向中間點亮。

        (3)彩燈從左到右兩個兩個點亮,然后從右到左兩個兩個逐次點亮。

        (4)彩燈中間兩個點亮。然后同時向兩邊散開。

        二、彩燈控制器的的實現(xiàn)

        本控制電路采用語言設(shè)計。運用自頂而下的設(shè)計思想,按功能逐層分割實現(xiàn)層次化設(shè)計。根據(jù)彩燈控制器的設(shè)計原理,將整個控制器分為四個部分,分別對應(yīng)彩燈的四種變化模式、利用語言實現(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) --分頻進程

        variable cnt:integer range 0 to 1000;

        BEGIN

        IF(RST='0')then

        cnt:=0:

        ELSIF(clk'EVENT AND clk='1')then

        if cnt999 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)芯片進行綜合、管腳配置。本電路選用ALTERA公司的可編程邏輯芯片EPM7128SLC84-6,由MAX+Plus II進行仿真,從仿真波形可以看出,此程序可以實現(xiàn)四種不同花樣彩燈的相互變換,每種花樣彩燈可以循環(huán)變化。但是如果系統(tǒng)的固有頻率很大,彩燈的閃爍速度非常快,看到的現(xiàn)象是每個花樣的八個彩燈同時被點亮,為了實現(xiàn)絢麗多彩的景象,必須要在程序中加一個分頻進程如上述程序的進程P2。

        四、結(jié)束語

        本次設(shè)計的程序已經(jīng)在硬件系統(tǒng)上得到了驗證,實驗表明。此設(shè)計方法能夠滿足四種不同花樣彩燈的變化要求,并且該方法便于擴展不同變化模式的彩燈花樣,各個不同花樣的相互轉(zhuǎn)變是手動切換實現(xiàn)的。自動切換的方法筆者不再累述。



        關(guān)鍵詞: VHDL 多路 燈控 制器設(shè)計

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 抚州市| 九龙坡区| 白水县| 阿克苏市| 灵丘县| 宜宾市| 巴彦县| 黄骅市| 开阳县| 寻甸| 陆河县| 张北县| 峡江县| 墨玉县| 高安市| 南郑县| 松滋市| 格尔木市| 铜陵市| 乐清市| 开阳县| 公安县| 临江市| 旬阳县| 仪征市| 三原县| 五常市| 年辖:市辖区| 贵州省| 万盛区| 汪清县| 昭通市| 永新县| 清水县| 博兴县| 博乐市| 兴义市| 沐川县| 玛曲县| 佳木斯市| 云南省|