第一篇:華南理工大學簡易交通燈控制電路的設計
簡易交通燈控制電路的設計
一、設計題目
題目一:在某交叉路口的南北方向設置有紅燈(A1)、黃燈(B1)、綠燈C1),東西方向也設置有紅燈(A2)、黃燈(B 2)、綠燈(C2)。紅燈亮是停車信號,綠燈亮是通車信號,黃燈亮是右轉彎信號。根據交通規(guī)則,上述信號燈應按下圖流程循環(huán)。試用三個 JK 觸發(fā)器構成一個同步二進制計數器,并將其輸出信號 Q3、Q2、Q1 譯碼后啟動紅、黃、綠信號燈,使其按圖5.2.1 流程循環(huán)。(譯碼電路全部用與非門實現)。
二、原理推導 1、列真值表
第二篇:基于FPGA的交通燈控制電路設計
基于FPGA的交通燈控制電路設計
關鍵字: 交通信號機 FPGA 脈沖發(fā)生器
目前交通燈廣泛應用于道路交通建設中。本文設計一個十字路口交通燈控制電路,要求東西、南北兩條干道的紅、綠、黃交通燈按要求循環(huán)變化,并以倒計時方式指示干道通行或禁止的維持時間。在QuartusⅡ軟件環(huán)境中設計、仿真,并在FPGA實驗板上實現所設計電路的功能。
系統(tǒng)概述
1.1 設計思想
基于FPGA的交通燈系統(tǒng)控制設計包括4大模塊,分別為脈沖發(fā)生、狀態(tài)定時、交通燈閃爍的控制、閃爍時間的控制,基本原理如圖1所示。
1.2 總體工作情況
交通燈控制要求如表1所示。
該設計的交通燈控制分為6個狀態(tài)。由于各狀態(tài)持續(xù)時間不同,所以電路的核心控制部分是狀態(tài)機和定時器,狀態(tài)機在定時器觸發(fā)下周期性循環(huán),狀態(tài)碼控制6個燈以一定的規(guī)律變化。變化情況如圖2所示。
系統(tǒng)脈沖由FPGA開發(fā)板晶振經過分頻電路實現。狀態(tài)定時由74190可逆十進制計數器和T’觸發(fā)器實現,只要置數合理,翻轉信號到位,就可以使電路在東西(I)、南北(J)兩個控制狀態(tài)間翻轉。紅、黃、綠燈的閃爍由7485數字比較器和組合邏輯控制,其中7485數字比較器用于比較計數器當前持續(xù)狀態(tài)和所需要的狀態(tài)全部時間,并做出相應的變化。組合邏輯控制由AHDL文件編寫真值表實現。時間顯示由AHDL文件編寫真值表實現,輸入正確的邏輯,七段譯碼電路即能得到正確的時間顯示。
1.3 各功能的組成
整個電路可以分為4大部分,包括脈沖發(fā)生、狀態(tài)定時、時間顯示和數字比較一組合邏輯控制。
1.3.1 脈沖發(fā)生
脈沖發(fā)生器為整個系統(tǒng)提供驅動,將輸入端分配給FPGA實驗板的PIN55引腳,則會由實驗板上產生頻率為10 MHz的輸入脈沖,用7片7490,每一級都構成10分頻電路,使頻率從10 MHz降低為1Hz。
1.3.2 狀態(tài)定時
狀態(tài)定時可由預置BCD碼初值的74190級聯(lián)實現,構成減計數器。級聯(lián)原則是:低位計數器從全0狀態(tài)變?yōu)樽畲蟠a值狀態(tài)時可使高位計數器減1。級聯(lián)方式分為異步和同步兩種,本文采取的是異步級聯(lián)方式,即低位計數器溢出信號控制高位計數器的記數脈沖輸入端。可根據計數器的時鐘觸發(fā)方式,在低位計數器狀態(tài)碼從全“0”變?yōu)樽畲蟠a值的瞬間,為高位計數器提供有效的計數脈沖邊沿。具體做法是將低片位的溢出信號RCON端口接到高片位的計數脈沖CLK,實現兩位BCD碼的置數、翻轉和借位,使系統(tǒng)表示的數字能在22~16之間循環(huán)。
74190功能說明:
(1)GN為計數器使能控制端,低電平有效。當GN為高電平時,禁止計數。
(2)DNUP為計數方式控制,接高電平為減計數,接低電平為加計數。
(3)LDN為異步預置數控制。當LDN為低電平時,計數器狀態(tài)QD,QC,QB,QA分別等于D,C,B,A。
(4)計數器位序由高至低順序為QD,QC,QB,QA。QD為最高位MSB,QA為最低位LSB。
(5)計數脈沖CLK上升沿有效。
(6)當計數器輸出QDQCQBQA為十進制加計數的最大狀態(tài)碼“1001”或為減計數的最小狀態(tài)碼全“0”時,極值狀態(tài)碼指示MAX/MIN輸出為高電平。
(7)當極值狀態(tài)碼指示MAX/MIN為高電平且CLK為低電平時,溢出信號RCON為低電平,即RCON與計數脈沖同步。
系統(tǒng)記數脈沖為1 Hz時,如表2所示,當I狀態(tài)(東西控制狀態(tài))的定時時間為22 s,計數器應該先預置22的BCD碼;同理,J狀態(tài)(南北控制狀態(tài))之前應該預置16的BCD碼。
狀態(tài)計時電路由兩片74190級聯(lián)而成,構成22和16自翻轉的電路。其要解決的核心問題包括置數,翻轉和借位。根據74190芯片的特點,可分析其實現原理如圖4所示,通過溢出信號RCON的上升沿實現借位,使得數字能夠從20到19,個位向十位借位,順利過渡。
置數和翻轉之間有先后關系,即須先置數后翻轉。如表3所示,分析兩個BCD碼各位特點,可知兩者D7D6D3D0位均為1,D1位均為0,而D5D4D2位不同,如圖5,D5D4D2位由狀態(tài)電平S來控制,當為I狀態(tài)時,計數器的預置的數為D5=0,D4=D2=1,而為J狀態(tài)時,計數器的預置的數為D5=1,D4=D2=0,根據74190的功能,將2片74190的MAX/MIN引出,通過與非門,分別連在高位和低位的LDN置數端,通過分析可知,當計數器從01減到00時候,高低位的MAX/MIN均為高電平,經過與非門以后為低電平,74190被置數,其置數值由狀態(tài)S來決定,S是由LDN端信號經過一個T’觸發(fā)器決定的,即LDN信號每置數一次,S翻轉1次,從而區(qū)分16和22狀態(tài)。按這個結構,可分別置數16和22,使其實現自翻轉。
圖5為狀態(tài)定時模塊的實際連接圖。
1.3.3 時間顯示
時間顯示要用到7段顯示譯碼電路,由于是兩位BCD碼,故用二選一數據選擇器。選擇端S接一個頻率很高的方波(如1 kHz);數據比較器的輸出和1 Hz脈沖作為AHDL模塊的輸入,即可正確顯示時間。
為正確顯示時間,用AHDL文件自編譯碼真值表如下:
1.3.4 數字比較一組合邏輯控制
該模塊將狀態(tài)定時模塊輸出的時間與時間節(jié)點進行比較,從而確定電路處于22 s或者16 s的具體的某個狀態(tài)。由表1可知,東西(I)或南北(J)的控制狀態(tài)都有3個階段的控制邏輯,分別對應3個時間段:1~3 s,4~6 s和大于6 s,因此,采用數字比較器進行比較,確定定時值小于4 s或大于6 s,方法如圖7所示,采用4片7485數字比較器,兩兩級聯(lián),其中一個由狀態(tài)定時模塊的輸出與4即二進制0100比較;另一個由狀態(tài)定時模塊的輸出與6即二進制0110比較。
編寫組合邏輯真值表,將狀態(tài)信號S,兩個數字比較器的輸出Y1,Y2和1 Hz脈沖作為輸入,各個燈的狀態(tài)作為輸出。從而根據邏輯關系得出對應時間電路的狀態(tài),控制紅、黃、綠燈處于不同的狀態(tài)。S判斷電路處于22 s狀態(tài)還是16 s狀態(tài),Y1,Y2區(qū)分東西、南北六個階段狀態(tài),1 Hz脈沖實現綠燈閃爍。電路的組構與調試
來用QuartusⅡ軟件設計各個模塊,并進行仿真。確認結果后,下載至FPGA實驗板中,進行相應的硬件調試,調試結果與仿真結果相一致。圖8為仿真波形,系統(tǒng)上電需要調整的過程,因此電路正常工作前重復了22s的狀態(tài)。
第三篇:基于51單片機的交通燈控制電路設計
交通燈
一、功能要求
要求甲車道和乙車道兩條交叉道路上的車輛交替運行,每次通行時間都設為25秒,黃燈先亮5秒鐘,才能變換運行車道;黃燈亮時,要求每秒鐘閃亮一次。
二、電路圖
說明:1)每一位數碼管位選要分開,對應IO口參照程序中紅色部分 2)圖示數碼管為共陽,沒加驅動數碼管顯示較暗,建議加驅動
三、程序
//TrafficLight.c #include“reg52.h”
//IO口定義 sbit red_1 =P2^0;//南北方向 sbit red_2 =P2^3;//東西方向 sbit yellow_1 =P2^1;sbit yellow_2 =P2^4;sbit green_1 =P2^2;sbit green_2 =P2^5;sbit com1_1 =P3^6;//十位 南北方向 數碼管位選 sbit com1_2 =P3^7;//個位 南北方向 sbit com2_1 =P3^4;//十位 東西方向 sbit com2_2 =P3^5;//個位 東西方向
//全局變量 char time=30;//倒計時
unsigned char num1=0,num2=0;//輔助計時 unsigned char flag1=0,flag2=0;//黃燈閃標志位 unsigned char shi1,shi2,ge1,ge2;//數碼管十位個位
const unsigned char ledNum[] =
{// 0 1
A
b
c
d
E
F
不顯示-o(18)H(19)h(20)C(21)0(22)n(23)0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8e,0xFF,0xbf,0xa3,0x89,0x8b,0xc6,0xc0,0xab };//共陽數碼管
//中斷優(yōu)先級別T0>T1,數碼管顯示中斷間隔2ms,計時時間間隔50ms //計時要求比較精確,間隔長,不應該被打斷,故中斷優(yōu)先級要高,使用T0 //數碼管中斷可以被打斷,打斷時間較短,不會影響顯示,使用T1 //在交通燈中,計時和數碼管顯示一直進行,故定時器開啟后不用停止 void InitInter(void){ TMOD=0x11;//設置定時器工作方式為16位計時器
TH0=(65535-45872)/256;//11.0592M晶振,50ms TL0=(65535-45872)%256;TH1=(65535-1835)/256;//11.0592M晶振,2ms TL1=(65535-1835)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;}
void Display(void){ static unsigned char i=1;
switch(i){ case 1:
com2_2=0;
P0=ledNum[shi1];
com1_1=1;
break;case 2:
com1_1=0;
P0=ledNum[ge1];
com1_2=1;
break;case 3:
com1_2=0;
P0=ledNum[shi2];
com2_1=1;
break;case 4:
com2_1=0;
P0=ledNum[ge2];
com2_2=1;
break;
default:;}
i++;if(i>4)i=1;}
//紅燈可以直接變成綠燈,但綠燈必須先變成黃燈再變紅燈 void main(void){ bit i=0;InitInter();
while(1){
red_1=0;//0為亮
red_2=1;
green_2=0;
time=30;
while(time>5)
{
shi1=time/10;
ge1=time%10;
shi2=(time-5)/10;
ge2=(time-5)%10;
}
green_2=1;
yellow_2=0;
flag2=1;
num2=0;
while(time>0)
{
shi1=time/10;
ge1=time%10;
shi2=time/10;
ge2=time%10;
}
flag2=0;
yellow_2=1;
red_2=0;
red_1=1;
green_1=0;
time=30;
while(time>5)
{
shi2=time/10;
ge2=time%10;
shi1=(time-5)/10;
ge1=(time-5)%10;
}
green_1=1;
yellow_1=0;
flag1=1;
num2=0;
while(time>0)
{
shi2=time/10;
ge2=time%10;
shi1=time/10;
ge1=time%10;
}
flag1=0;
yellow_1=1;
//red_1=0;
//green_2=0;} } void Timer_0(void)interrupt 1//計時 { TH0=(65535-45872)/256;TL0=(65535-45872)%256;num1++;if(num1>=20){
num1=0;
time--;
//if(time<0)time=30;
//處理time,顯示方式
} if(flag1||flag2){
num2++;
if(num2>=10)
{
num2=0;
if(flag1)yellow_1=~yellow_1;
if(flag2)yellow_2=~yellow_2;
} } }
void Timer_1(void)interrupt 3 { TH1=(65535-1835)/256;//11.0592M晶振,2ms TL1=(65535-1835)%256;
Display();}
第四篇:課程設計任務書-24交通燈控制電路設計
課程設計任務書
題目:交通燈控制電路設計
時間: 年 月 日—— 年 月 日
設計的說明:
本設計需要用到實驗箱上交通燈模塊中的發(fā)光二極管,即紅、黃、綠各三個。依人們的交通常規(guī),“紅燈停,綠燈行,黃燈提醒”。交通燈顯示用實驗箱的交通燈模塊和七段碼管中的任意兩個來顯示。系統(tǒng)時鐘選擇時鐘模塊的1KHz時鐘,黃燈閃爍時鐘要求為2Hz,七段碼管的時間顯示為1Hz 脈沖,即每1s 中遞減一次,在顯示時間小于3 秒的時候,通車方向的黃燈以2Hz 的頻率閃爍。系統(tǒng)中用S1 按鍵進行復位。
設計的任務和要求:
1、在十字路口的兩個方向上各設一組紅、綠、黃燈;初始狀態(tài)是兩個路口的紅燈全亮之后,東西路口的綠燈亮,南北路口的紅燈亮,東西方向通車,延時一段時間后,東西路口綠燈滅,黃燈開始閃爍。閃爍若干次后,東西路口紅燈亮,而同時南北路口的綠燈亮,南北方向開始通車,延時一段時間后,南北路口的綠燈滅,黃燈開始閃爍。閃爍若干次后,再切換到東西路口方向,重復上述過程。
2、設置數碼管顯示允許通行或者禁止通行的時間,東西路和南北路的通車時間均設定為20s。數碼管的時間總是顯示為19、18、17……2、1、0、19、18……。在顯示時間小于3 秒的時候,通車方向的黃燈閃爍。
3、當各條路中任意一條上出現特殊情況,如消防車、救護車或其他需要優(yōu)先放行的車輛時,各方向上均是紅燈亮。倒計時停止,且顯示數字在閃爍。當特殊運行狀態(tài)結束后,控制器恢復原來狀態(tài),繼續(xù)正常運行。
4、要求對整體電路進行仿真,提供仿真波形圖,并分析結果
5、硬件測試結果用照片的形式記錄下來。
提高部分:編寫能手動控制交通燈通行時間的交通燈控制器。
指導教師:
學生:
日期:
第五篇:交通燈控制邏輯電路設計與總結報告
交通燈控制邏輯電路設計與總結報告
一、設計任務
用CPLD設計路口交通燈控制器
二、設計要求
1、滿足一下時序要求:南北方向紅燈亮,東西方向綠燈亮;南北方向綠燈亮,東西方向紅燈亮;
2、每一方向的紅(綠)黃燈總共維持30秒;
3、十字路口要有時間顯示,具體為:當某一方向綠燈亮時,置顯示器為30秒,然后以每秒減一技術方式工作,直至減到數為4秒時,紅綠燈熄滅,黃燈開始間隙閃耀4秒,減到0時,紅綠燈交換,一次工作循環(huán)結束,進入下一步另一方向的工作循環(huán);
4、紅綠燈均采用發(fā)光二極管;
5、設計由晶振電路產生1Hz標準秒信號的單元電路(實際秒脈沖由開發(fā)箱提供);
6、要求對整體電路進行仿真,觀察并記錄下仿真波形;
7、選作部分:
a、手動調整和自動控制,夜間為黃燈閃耀;
b、白天黃燈亮時,以2Hz的速度閃爍點亮四秒; c、紅綠燈循環(huán)點亮時間可以自由修改。
三、設計設備
含有Quartus軟件的電腦一臺,可下載的試驗臺;
四、設計方法
使用VHDL語言進行程序的設計運行和仿真,以及波形的運行仿真,最后進行下載仿真;
五、方案論證
方案1:把整個流程分成幾個進程來做;
方案2:每個進程都使用if和case語句實現功能的實現; 方案3:使用狀態(tài)機來實現狀態(tài)間的轉換;
方案論證:
1、要實現整個流程,需要做的輸出內容類型不同,如果放在一個進程里面就比較容易混淆,產生混亂。而采用分成幾個進程來做的方式就明確了每個模塊的內容和分工,使其調理清晰,一目了然;
2、if語句是條件語句,是VHDL語言中常用的基本語句。該流程中的變量比較繁多,而使用case語句分情況列出來,簡潔明了。
3、狀態(tài)機的使用格式簡潔,使用簡單方便,特別是在進行狀態(tài)的轉換時候。并行的狀態(tài)轉換不易出錯,可將狀態(tài)轉換、賦值、計數等多個功能封裝在某一個狀態(tài)中,并且更加便于為系統(tǒng)添加新的狀態(tài)功能。
方案選定:
通過以上分析,確定用以上方案為本次設計的方案。
六、工作原理
先對所給時鐘脈沖進行分頻到標準時鐘脈沖;設計兩個時鐘控制倒計時,倒計時的時間可自由修改,由輸入決定;設計另一個時鐘,用以控制白天與夜間模式的轉換;在白天時,根據倒計時的數字進行紅綠燈的狀態(tài)轉換;夜間時,紅綠燈狀態(tài)改為夜間模式:黃燈閃爍。
七、程序設計
------交通燈控制系統(tǒng)所使用的庫和包
-------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
-------------------------------交通燈控制系統(tǒng)的實體
-------------------------entity jt is
port(clk,reset:in std_logic;
------------------時鐘脈沖clk由系統(tǒng)直接提供,需要進行分
頻;reset是啟動鍵,當reset為1是,系統(tǒng)啟動
t0:integer range 0 to30;
------------------紅綠燈循環(huán)點亮的時間,根據輸入的不同
系統(tǒng)運行的不同
r1,y1,g1,r2,y2,g2:out std_logic;
------------------r1為東西方向紅燈,y1為東西方
向黃燈,g1為東西方向綠燈;r2為南北方向紅燈,y2為南北方向黃燈,g2為南北方向綠燈
ec0,ec1,nc0,nc1:out std_logic_vector(3 downto 0));
------------------ec0,ec1分別為東西方向的倒計時間的個位和十位;
nc0,nc1分別為南北方向的倒計時間的個位和十位
end jt;-------------------------------交通燈控制系統(tǒng)的結構體(5個進程)
-------------------------architecture one of jt is
type state_type is(s0,s1,s2,s3);
------------------定義狀態(tài)的類型
signal state:state_type;
------------------使用狀態(tài)機
signal k:std_logic;
------------------分頻后的1Hz的標準時鐘脈沖
signal c1,c2:integer range 0 to 30;
------------------定義東西、南北方向的兩個
倒計時的計數
signal t1:integer range 0 to 3600;
signal t2:integer range 0 to 24;------------------定義一個時鐘,用以控制白天與夜間模式 Begin------該進程用以分頻
-------------------------q0:process(clk)
variable tt:std_logic_vector(9 downto 0);
------------------中間變量
begin
if clk'event and clk='1' then
if tt=“1111101000” then
----------------------把所給1kHz分頻成1Hz的脈沖
k,10000分頻,仿真值用“ 0000000100”八分頻
tt:=(others=>'0');
k<='1';
else
tt:=tt+1;k<='0';
end if;
end if;end process q0;-------------------------
------該進程用以設計時鐘
-------------------------q1:process(k,reset)
begin
if reset='1' then
------------------啟動開關為1時,系統(tǒng)開始運行
t1<=0;t2<=0;
------------------從0點開始 elsif k='1' and k'event then if t1=3599 then
------------------一個t1循環(huán)是一個秒,仿真值用“35” if t2=23 then
-------------------一個t1循環(huán)是一個小時,一天24小時 t2<=0;
else t2<=t2+1;end if;t1<=0;else t1<=t1+1;end if;end if;end process q1;-------------------------------該進程用以控制白天黑天模式和紅綠燈狀態(tài)轉換
-------------------------q2:process(k,reset,t2)
begin
if t2>=5 and t2<=22 then
-------------------白天模式5:00到22:00之間
if reset='1' then
-------------------啟動開關為1時,系統(tǒng)開始運
行,進行狀態(tài)轉換
r1<='0';y1<='0';g1<='1';-------------------東西方向綠燈亮 r2<='1';y2<='0';g2<='0';-------------------南北方向紅燈亮 state<=s0;-------------------紅綠燈處于初始狀態(tài)s0 c1<=t0;
c2<=t0;-------------------倒計時從自由輸入值開始遞減 elsif k='1' and k'event then
case state is
when s0=>-------------------當處于第1狀態(tài)時,討論
if c1=5 then
--------------由于進程內部的并列進
行,當倒計時第4秒時,進入到第2狀態(tài)s1
state<=s1;
c1<=c1-1;
c2<=c2-1;
--------------倒計時遞減
elsif c2=0 then
------------倒計時減到0時,再從
初始值開始
c1<=t0;
c2<=t0;
else
----------------否則繼續(xù)保持第1狀態(tài)s0
state<=s0;
c1<=c1-1;
c2<=c2-1;
end if;
when s1=>-------------------當處于第2狀態(tài)時,討論
if c1=1 then--------------由于進程內部的并列進行,當
倒計時第t0秒時,進入到第3狀態(tài)s2
state<=s2;
c1<=c1-1;
c2<=c2-1;
else----------------否則繼續(xù)保持第2狀態(tài)
state<=s1;
c1<=c1-1;
c2<=c2-1;
end if;
when s2=>-------------------當處于第3狀態(tài)時,討論
if c2=5 then--------------由于進程內部的并列進行,當倒計時第4秒時,進入到第4狀態(tài)s3
state<=s3;
c1<=c1-1;
c2<=c2-1;
elsif c1=0 then
------------倒計時減到0時,再從初
始值開始
c1<=t0;
c2<=t0;
else
----------------否則繼續(xù)保持第3狀態(tài)
state<=s2;
c1<=c1-1;
c2<=c2-1;
end if;
when s3=>-------------------當處于第4狀態(tài)時,討論 if c2=1 then--------------由于進程內部的并列進行,當倒
計時第t0秒時,進入到第1狀態(tài)s0
state<=s0;
c1<=c1-1;
c2<=c2-1;
else----------------否則繼續(xù)保持第4狀態(tài)
state<=s3;
c1<=c1-1;
c2<=c2-1;
end if;
when others=> state<=s0;
end case;if state=s0 then
r1<='0';y1<='0';g1<='1';
r2<='1';y2<='0';g2<='0';elsif state=s1 then
r1<='0';g1<='0';
r2<='1';y2<='0';g2<='0';
if c1=4 or c1=2 then y1<='1';
else y1<='0';
end if;elsif state=s2 then
r1<='1';y1<='0';g1<='0';
r2<='0';y2<='0';g2<='1';elsif state=s3 then
r1<='1';y1<='0';g1<='0';
r2<='0';g2<='0';
if c2=4 or c2=2 then y2<='1';
else y2<='0';
end if;end if;
--各個狀態(tài)的紅綠燈變量的賦值,‘1’亮‘0’熄 end if;else-------------------夜間模式22:00到次日5:00之間
c2<=0;c1<=0;r1<='0';r2<='0';g1<='0';g2<='0';y1<=k;y2<=k----------------紅綠燈的狀態(tài):脈沖k賦給黃燈變量,黃燈閃爍
end if;end process q2;-------------------------------該進程用于東西方向倒計時的譯碼顯示
-------------------------q3:process(c1)
begin case c1 is when 0=>ec0<=“0000”;ec1<=“0000”;when 1=>ec0<=“0001”;ec1<=“0000”;when 2=>ec0<=“0010”;ec1<=“0000”;when 3=>ec0<=“0011”;ec1<=“0000”;when 4=>ec0<=“0100”;ec1<=“0000”;when 5=>ec0<=“0101”;ec1<=“0000”;when 6=>ec0<=“0110”;ec1<=“0000”;when 7=>ec0<=“1000”;ec1<=“0000”;when 9=>ec0<=“1001”;ec1<=“0000”;when 10=>ec0<=“0000”;ec1<=“0001”;when 11=>ec0<=“0001”;ec1<=“0001”;when 12=>ec0<=“0010”;ec1<=“0001”;when 13=>ec0<=“0011”;ec1<=“0001”;when 14=>ec0<=“0100”;ec1<=“0001”;when 15=>ec0<=“0101”;ec1<=“0001”;when 16=>ec0<=“0110”;ec1<=“0001”;when 17=>ec0<=“0111”;ec1<=“0001”;when 18=>ec0<=“1000”;ec1<=“0001”;when 19=>ec0<=“1001”;ec1<=“0001”;when 20=>ec0<=“0000”;ec1<=“0010”;when 21=>ec0<=“0001”;ec1<=“0010”;when 22=>ec0<=“0010”;ec1<=“0010”;when 23=>ec0<=“0011”;ec1<=“0010”;when 24=>ec0<=“0100”;ec1<=“0010”;when 25=>ec0<=“0101”;ec1<=“0010”;when 26=>ec0<=“0110”;ec1<=“0010”;when 27=>ec0<=“0111”;ec1<=“0010”;when 28=>ec0<=“1000”;ec1<=“0010”;when 29=>ec0<=“1001”;ec1<=“0010”;when 30=>ec0<=“0000”;ec1<=“0011”;----------------------------當在設定范圍內時,分別為個位十位譯碼并顯示
when others=>ec0<=“0000”;ec1<=“0000”;
-------------------------否則,LED燈顯示0
end case;
end process q3;-------------------------------該進程用于南北方向倒計時的譯碼顯示
-------------------------q4:process(c2)
begin
case c2 is when 0=>nc0<=“0000”;nc1<=“0000”;when 1=>nc0<=“0001”;nc1<=“0000”;when 2=>nc0<=“0010”;nc1<=“0000”;when 3=>nc0<=“0011”;nc1<=“0000”;when 4=>nc0<=“0100”;nc1<=“0000”;when 5=>nc0<=“0101”;nc1<=“0000”;when 6=>nc0<=“0110”;nc1<=“0000”;when 7=>nc0<=“0111”;nc1<=“0000”;when 8=>nc0<=“1000”;nc1<=“0000”;when 9=>nc0<=“1001”;nc1<=“0000”;when 10=>nc0<=“0000”;nc1<=“0001”;when 11=>nc0<=“0001”;nc1<=“0001”;when 12=>nc0<=“0010”;nc1<=“0001”;when 13=>nc0<=“0011”;nc1<=“0001”;when 14=>nc0<=“0100”;nc1<=“0001”;when 15=>nc0<=“0101”;nc1<=“0001”;when 16=>nc0<=“0110”;nc1<=“0001”;when 17=>nc0<=“0111”;nc1<=“0001”;when 18=>nc0<=“1000”;nc1<=“0001”;when 19=>nc0<=“1001”;nc1<=“0001”;when 20=>nc0<=“0000”;nc1<=“0010”;when 21=>nc0<=“0001”;nc1<=“0010”;when 22=>nc0<=“0010”;nc1<=“0010”;when 23=>nc0<=“0011”;nc1<=“0010”;when 24=>nc0<=“0100”;nc1<=“0010”;when 25=>nc0<=“0101”;nc1<=“0010”;when 26=>nc0<=“0110”;nc1<=“0010”;when 27=>nc0<=“0111”;nc1<=“0010”;when 28=>nc0<=“1000”;nc1<=“0010”;when 29=>nc0<=“1001”;nc1<=“0010”;when 30=>nc0<=“0000”;nc1<=“0011”;---------------------------當在設定范圍內時,分別為個位十位譯碼并顯示
when others=>nc0<=“0000”;nc1<=“0000”;
end process q4;-------------------------end architecture one;
----所有進程結束-------------------------
八、仿真結果
1、clk為輸入脈沖;開始令reset為’1’,啟動系統(tǒng),系統(tǒng)正常工作后值為’0; t0為紅綠燈循環(huán)時間,可自由修改,如果輸入值為’0010000’,則為16秒倒計時。如下圖:系統(tǒng)從0點開始運行,處于夜間模式時,倒計時都為“00”,兩個方向都為黃燈閃爍,紅綠燈都熄滅。
---------------------------否則,LED燈顯示0
end case;2、5:00之后,進入到白天模式:從第1狀態(tài)(東西方向綠燈亮、南北方向紅燈)開始,倒計時從16秒開始遞減。倒計時第4秒后進入第2 狀態(tài)(東西方向黃燈閃爍,南北方向紅燈亮)。
3、倒計時第0秒后進入第3 狀態(tài)(東西方向紅燈亮,南北方向綠燈亮),倒計時再從16秒開始遞減;倒計時第4秒后進入第4 狀態(tài)(東西方向紅燈亮,南北方向黃燈閃爍);倒計時第0秒后進入第1 狀態(tài)(東西方向綠燈亮,南北方向紅燈亮),倒計時再從16秒開始遞減
。如此循環(huán)。
4、當計時器到22:00時,再次進入夜間模式:東西南北方向黃燈閃爍;到次日5:00時又回到白天模式。如此循環(huán)。
九、討論與改進
特點:
1、在整個設計過程中,分進程實現整個功能,簡單明了;
2、狀態(tài)機的功能和優(yōu)點得到了較為完整的體現;
3、分夜間和白天模式不同,系統(tǒng)自動調節(jié);
4、黃燈以閃爍的形式亮;系統(tǒng)運行后紅綠燈循環(huán)點亮的時間也可自由修改。不足:
1、整個系統(tǒng)啟動后從夜間0點開始運行,而不能隨意調為哪個時間的交通燈狀態(tài),只能從程序中改,不能手動調節(jié);
2、整個功能還是比較簡單,未能分左右轉和直行的情況;
3、緊急情況處理時也無特殊處理的設置。
改進:
1、在進程中可增加一個輸入量,用以控制系統(tǒng)的時鐘時間,方便調節(jié)模式和交通燈狀態(tài);
2、在進程中可加入幾個紅綠燈狀態(tài)來分別控制東西方向和南北方向的左轉、右轉和直行的紅綠燈狀態(tài);
3、在原有程序的基礎上,可通過增加一個輸入量來控制一種特殊狀態(tài),用以控制特殊情況的處理,視該特殊情況而定。
二○一○年九月三日