• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > EDA/PCB > 設計應用 > 基于VHDL實現多路彩燈控制器設計應用

    基于VHDL實現多路彩燈控制器設計應用

    作者: 時間:2012-09-12 來源:網絡 收藏

    一、原理

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

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

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

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

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

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

    二、彩燈控制器的的實現

    本控制電路采用語言設計。運用自頂而下的設計思想,按功能逐層分割實現層次化設計。根據彩燈控制器的設計原理,將整個控制器分為四個部分,分別對應彩燈的四種變化模式、利用語言實現該功能程序如下:

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

    四、結束語

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



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 胶州市| 镇赉县| 达孜县| 西华县| 松桃| 图木舒克市| 古丈县| 高密市| 宝坻区| 岳池县| 苍溪县| 白朗县| 壶关县| 晴隆县| 霍林郭勒市| 丰都县| 崇信县| 鹤壁市| 安吉县| 玛纳斯县| 湖北省| 邵武市| 武陟县| 高陵县| 甘孜县| 桂东县| 武陟县| 高台县| 大姚县| 志丹县| 泉州市| 休宁县| 津南区| 花垣县| 泊头市| 云南省| 耒阳市| 盱眙县| 石门县| 华阴市| 依安县|