第一篇:基于Verilog_HDL的交通燈控制器設計
目
錄
第一章
設計原理.......................................................................................................................................1
1.1設計要求..........................................................................................................................1
1.2設計思路和原理............................................................................................................................1 1.3實現(xiàn)方法..........................................................................................................................................1 第二章
Verilog 程序設計.........................................................................................................2
2.1整體設計...........................................................................................................................22.2 具體設計..........................................................................................................................3
第三章
仿真................................................................................................................................................7
3.1 波形仿真..........................................................................................................................7
第四章
設計總結(jié).......................................................................................................................9
4.1 總結(jié)...................................................................................................................................9
4.2參考資料............................................................................................................................9
程序清單.....................................................................................................................................10
0
交通燈控制器設計
第一章
設計原理
1.1設計要求
設計一個交通控制器,用LED顯示燈表示交通狀態(tài),并以7段數(shù)碼顯示器顯示當前狀態(tài)剩余秒數(shù) 主干道綠燈亮時,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變?yōu)榧t燈的過程中,亮光的黃燈作為過渡,黃燈的時間為5s。能進行特殊狀態(tài)顯示,特殊狀態(tài)時東西、南北路口均顯示紅燈狀態(tài)。用LED燈顯示倒計時,并且能實現(xiàn)總體清零功能,計數(shù)器由初始狀態(tài)開始計數(shù),對應狀態(tài)的顯示燈亮。1.2設計思路和原理
本次設計是針對十字路口,進行南北和東西直行情況下交通燈控制。設定東西方向為主干道方向,根據(jù)交通燈的亮的規(guī)則,在初始狀態(tài)下四個方向的都為紅燈亮啟,進入正常工作狀態(tài)后,當主干道上綠燈亮時,支干道上紅燈亮,持續(xù)35S后,主干道和支干道上的黃燈都亮啟,持續(xù)5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續(xù)25S,之后主干道和支干道上的黃燈都亮啟5s,一個循環(huán)完成。循環(huán)往復的直行這個過程。其過程如下圖所示:
0s主干道方向25s綠燈亮30s紅燈亮黃燈亮65s支干道方向0s紅燈亮35s綠燈亮黃燈亮60s65s
圖1.交通燈點亮時間控制說明
1.3實現(xiàn)方法
本次采用文本編輯法,即利用Verilog 語言描述交通控制器,通過狀態(tài)機計數(shù)法,實現(xiàn)設計所要求的交通燈控制及時間顯示。設計中用兩組紅黃綠LED模擬兩個方向上的交通燈,用4個7段數(shù)碼管分別顯示兩個方向上的交通燈剩余時間,控制時鐘由試驗箱上頻率信號提供。
第二章
Verilog 程序設計
2.1整體設計
根據(jù)上章設計原理,交通燈控制的關(guān)鍵是各個狀態(tài)之間的轉(zhuǎn)換和進行適當?shù)臅r間延時,根據(jù)狀態(tài)機的設計規(guī)范,本次設計了三個狀態(tài)之間的循環(huán)轉(zhuǎn)化,其真值表及狀態(tài)轉(zhuǎn)化圖如下所示:
狀狀00狀狀00狀狀10狀狀11狀狀01狀狀01狀狀11狀狀10狀狀狀狀狀狀狀狀狀狀001狀狀狀狀狀010狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀001狀狀狀狀狀010
圖2.交通燈控制狀態(tài)轉(zhuǎn)化
說明:該狀態(tài)圖為交通燈在正常情況下的狀態(tài)轉(zhuǎn)化圖,進入控制后,狀態(tài)00時主干道綠燈及支干道紅燈亮起,進入狀態(tài)01后兩路黃燈亮起,狀態(tài)11時主干道紅燈及支干道綠燈亮起。進入10狀態(tài)兩路黃燈亮起。結(jié)束一個循環(huán),從00狀態(tài)重新開始循環(huán)。
為實現(xiàn)控制與顯示的功能,需要設計交通燈點亮順序控制程序,倒數(shù)計時程序,七段數(shù)碼管顯示程序,數(shù)碼管顯示掃描程序,其系統(tǒng)結(jié)構(gòu)圖如下所示:
holdrst狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀clk1KHz狀狀狀狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀 圖3.交通燈控制系統(tǒng)結(jié)構(gòu)圖
其中rst為復位信號,clk為時鐘信號,hold為特殊情況控制信號,輸入hold時兩個方向紅燈無條件亮起。
2.2 具體設計
根據(jù)整體設計要求,編寫各個功能部分Verilog 程序,設置各輸入輸出變量說明如下
clk: 為計數(shù)時鐘; qclk:為掃描顯示時鐘;
en: 使能信號,為1 的話,則控制器開始工作; rst: 復位信號,為1的話,控制及技術(shù)回到初始狀態(tài);
hoid:特殊情況控制信號,為1的話,則兩個方向無條件顯示為紅燈;
light1: 控制主干道方向四盞燈的亮滅;其中,light1[0]~light[2],分別控制主干道方向的 綠燈、黃燈和紅燈;
light2: 控制支干道方向四盞燈的亮滅;其中,light2[0] ~ light2[2],分別控制支干道方向的 綠燈、黃燈和紅燈;
num1: 用于主干道方向燈的時間顯示,8 位,可驅(qū)動兩個數(shù)碼管; num2: 用于支干道方向燈的時間顯示,8 位,可驅(qū)動兩個數(shù)碼管; counter:用于數(shù)碼管的譯碼輸出; st1,st2:數(shù)碼管掃描信號。輸入輸出及中間變量設置如下:
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;
1.二極管點亮控制
該部分程序的作用是根據(jù)計數(shù)器的計數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計時數(shù)值給七段數(shù)碼管的譯碼電路。此外,當檢測到特殊情況(hold=‘1’)發(fā)生時,無條件點亮紅燈的二極管,當檢測到復位信號,兩個方向計數(shù)與控制回復到00狀態(tài)。因為主、支干道兩個方向二極管點亮的順序與延遲時間不同,顧編寫兩個獨立的部分來控制,具體程序如下:
1)主干道方向 always @(posedge clk)begin if(rst)//復位與特殊情況控制
begin light1<=3'b001;num1<=green1;end else if(hold)begin light1<=3'b100;num1<=green1;end else if(en)
begin //使能有效開始控制計數(shù)
if(!tim1)//
begin //主干道交通燈點亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
End
2)支干道方向
always @(posedge clk)begin
if(rst)//復位與特殊情況控制
begin
light2<=3'b100;
num2<=red2;
end
else if(hold)
begin
light2<=3'b100;
num2<=red2;
end
else if(en)
begin
if(!tim2)
begin
tim2<=1;
case(state1)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
End
2.倒數(shù)計時
該部分程序完成二極管發(fā)光時延的計數(shù),并將計數(shù)結(jié)果送到數(shù)碼管顯示電路,每切換到一個狀態(tài),計數(shù)器的初值都被重置,以實現(xiàn)不同顏色二極管不同的時延要求。本次設計直接用邏輯運算完成2位十進制數(shù)的計數(shù),未采用分位器的設計。因為主、支干道上計數(shù)器的結(jié)構(gòu)完全相同,顧只列出一路的程序,其具體程序如下所示:
always @(posedge clk)begin else begin //倒數(shù)計時
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1)tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end
end
3.數(shù)碼管的譯碼及掃描顯示
該段程序主要完成4個7段數(shù)碼管的譯碼顯示及掃描,使系統(tǒng)能正常顯示主、支干道兩個方向上的剩余時間。譯碼的時鐘頻率要低,為Hz級。掃描的時鐘頻率要高,最低不得小于人眼分辨頻率50Hz,具體程序如下所示:
always @(posedge qclk)begin //數(shù)碼管掃描
if(rst1)
begin
st1=0;
st2=0;
end else
begin
case({st2,st1})
2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end
2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end
2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end
2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end
endcase
end end always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule 總體程序見程序清單所示 6
第三章
仿真 3.1 波形仿真
在QuartursⅡ軟件下創(chuàng)建工程,新建編輯設計文件,將程序輸入,整體編譯后,新建波形仿真文件。設置仿真時間,時鐘周期,輸入輸出端口,進行波形仿真。具體仿真波形圖及說明如下所示: 仿真截止時間:100us; 時鐘:clk 1us,qclk 0.1us 1.正常工作時波形仿真圖
圖4.正常工作時波形仿真圖
圖形說明
波形仿真主要完成了控制與計數(shù)以及數(shù)碼管顯示的波形圖。en為低電品時,計數(shù)器置初值,高電平時開始正常控制與計數(shù)。控制發(fā)光二極管首次輸出為“l(fā)ight1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計數(shù)器num1和num2從“00110101”開始遞減計數(shù),計數(shù)至“00000000”時,進入下一個狀態(tài),控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計數(shù)器num1和num2從“00000101”開始計數(shù)遞減,計數(shù)至”00000000”時進入下一個狀態(tài),light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮。Counter根據(jù)num1,num2變化隨時鐘上升沿輸出譯碼后的數(shù)據(jù)。由于屏幕顯示大小有限,未仿真出一個完整周期。
2.特殊情況仿真波形
圖5.特殊情況仿真波形
圖形說明
當hold輸入高電平時,在時鐘上升沿的控制下,light 1與light2被強制置位為”100”,表示兩路紅燈均亮起
3.復位情況仿真波形
圖6.復位情況仿真波形
圖形說明
當rst輸入高電平時,在時鐘上升沿控制下,計數(shù)與控制都回到00狀態(tài),即light1=001,light2=100,計數(shù)器num1和num2從“00110101”開始遞減計數(shù)。
第四章 設計總結(jié)
4.1 總結(jié)
在設計中采用V erilog HDL語言設計交通燈控制系統(tǒng), 借助其功能強大的語言結(jié)構(gòu), 簡明的代碼描述復雜控制邏輯設計, 與工藝無關(guān)特性, 在提高工作效率的同時達到求解目的, 并可以通過V erilog HDL 語言的綜合工具進行相應硬件電路生成, 具有傳統(tǒng)邏輯設計方法所無法比擬的優(yōu)越性。
在設計過程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過但仿真出不了正確的波形,不是計數(shù)器無法正常計數(shù),就是控制輸出無法進入到下一個狀態(tài),每次出現(xiàn)問題就必須返回重新修改程序。實踐證明,在編寫一個較復雜的程序時,一開始一定要畫流程圖,弄清楚各個功能及實現(xiàn)它們的邏輯算法,做到心中有數(shù)后在開始下筆寫編寫程序。在編寫的時候要尤其要注意語言的規(guī)范,如本次設計中編寫的V erilog在Quartus7.0中可以正常生成時序圖,而在低版本的軟件中卻無法生成,原因就是語言使用不規(guī)范,在解決這個問題時我總結(jié)了一些經(jīng)驗,首先程序要邏輯清晰,簡潔明了,避免不必要的嵌套與條用,其次要適當?shù)亟o程序加上注解文字,提高可讀性,以方便之后的程序出錯時進行查找,最后充分利用仿真軟件提供的各項編譯工具與報錯消息,按圖索驥,有方向的完成程序調(diào)試。
完成仿真后進行,進行試驗箱上的硬件調(diào)試,該步驟主要是要求細心,按照引腳清單,逐一完成連線,本次設計用到兩個時鐘輸入,注意一定要選擇合適頻率的時鐘,以便達到期望的效果。注意觀察實物的現(xiàn)象,看是否滿足設計要求,不滿足時檢查是硬件問題還是程序問題,如果是程序問題,在修改完之后必須要重新編譯,重新燒入。不斷排查錯誤,直至達到滿意的效果。
通過這次課程設計,熟悉了簡單EDA設計的整個流程,加深了對Verilog HDL硬件描述語言的理解,提高了動手能力,并且鍛煉了自己的耐心,收獲頗豐,我會把在本次課程設計中學到的東西應用到今后的工作學習中。最后感謝同學及老師提供的幫助與指導。4.2參考資料
[1] 夏宇聞.復雜數(shù)字電路與系統(tǒng)的V erilog HDL設計技術(shù) [M ].北京: 北京航空航天大學出版社, 1998 [2] 郭梯云.移動通信[M ].西安: 西安電子科技大學出版社, 1995 [3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 數(shù)字移動通信系統(tǒng)[M ].駱健霞, 顧龍信, 徐云霄譯.北京: 電子工業(yè)出版社, 1996 [4] 張毅剛, 喬立巖.虛擬儀器軟件開發(fā)環(huán)境L abW indow s?CV I 610 編程指南[M ].北京: 機械工業(yè)出版社, 2002 [5] 劉國權(quán).GSM 手機的測試[J ].中國無線電管理, 2003 [6] 俞定玖, 劉湘慧.GSM 數(shù)字蜂窩移動交換系統(tǒng)測試[J ].電信科學, 2000 [7] 張明.V erilog HDL 實用教程[M ].成都: 電子科技大學出版社, 1999 [8] Hyde D C.Bucknell Handbook on V erilog HDL 1Computer Science Department, Bucknell U niversity L ew is burg, 1995 [9] 康華光.電子技術(shù)基礎(數(shù)字部分)[M ].北京: 高等教育出版社, 1988
程序清單
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;
always @(en)if(!en)begin //設置計數(shù)初值 green1<=8'b00110101;red1<=8'b00100101;yellow1<=8'b00000101;green2<=8'b00100101;red2<=8'b00110101;yellow2<=8'b00000101;end
always @(posedge clk)begin if(rst)//復位與特殊情況控制
begin
light1<=3'b001;num1<=green1;
end else if(hold)
begin
light1<=3'b100;
num1<=green1;
end else if(en)
begin //使能有效開始控制計數(shù)
if(!tim1)//開始控制
begin //主干道交通燈點亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
end
else
begin //倒數(shù)計時
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1)tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end
end
always @(posedge clk)begin
if(rst)//復位與特殊情況控制
begin
light2<=3'b100;
num2<=red2;
end
else if(hold)
begin
light2<=3'b100;
num2<=red2;
end
else if(en)
begin
if(!tim2)
begin
tim2<=1;
case(state1)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
end
else
begin //倒數(shù)計時
if(num2>0)
if(num2[3:0]==0)
begin
num2[3:0]<=4'b1001;
num2[7:4]<=num2[7:4]-1;
end
else num2[3:0]<=num2[3:0]-1;
if(num2==1)tim2<=0;
end
end
else
begin
tim2<=0;
state2<=2'b00;
light2<=3'b010;
end
end
always @(posedge qclk)begin //數(shù)碼管掃描
if(rst1)
begin
st1=0;
st2=0;
end else
begin
case({st2,st1})
2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end
2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end
2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end
2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end
endcase
end end
always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule
第二篇:交通燈控制器設計實驗報告
設計性實驗項目名稱
交通燈控制器設計
實驗項目學時:3學時
實驗要求:■ 必修
□ 選修
一、實驗目的
1、學習與日常生活相關(guān)且較復雜數(shù)字系統(tǒng)設計;
2、進一步熟悉EDA實驗裝置和QuartusⅡ軟件的使用方法;
3、學習二進制碼到BCD碼的轉(zhuǎn)換;
4、學習有限狀態(tài)機的設計應用。
二、實驗原理
交通燈的顯示有很多方式,如十字路口、丁字路口等,而對于同一個路口又 有很多不同的顯示要求,比如十字路口,車輛如果只要東西和南北方向通行就很 簡單,而如果車子可以左右轉(zhuǎn)彎的通行就比較復雜,本實驗僅針對最簡單的南北 和東西直行的情況。
要完成本實驗,首先必須了解交通路燈的燃滅規(guī)律。本實驗需要用到實驗箱上交通燈模塊中的發(fā)光二極管,即紅、黃、綠各三個。依人們的交通常規(guī),“紅燈停,綠燈行,黃燈提醒”。其交通燈的燃滅規(guī)律為:初始態(tài)是兩個路口的紅燈全亮之后,主干道的綠燈亮,鄉(xiāng)間道路的紅燈亮,主干道方向通車,延時一段時間后,鄉(xiāng)間公路來車,主干道綠燈滅,黃燈開始閃爍。閃爍若干次后,主干道紅燈亮,而同時鄉(xiāng)間公路的綠燈亮,延時一段時間后,鄉(xiāng)間公路的綠燈滅,黃燈開始閃爍。閃爍若干次后,再切換到主干道方向,重復上述過程。
三、設計要求
完成設計、仿真、調(diào)試、下載、硬件測試等環(huán)節(jié),在型EDA實驗裝置上實現(xiàn)一個由一條主干道和一條鄉(xiāng)間公路的匯合點形成的十字交叉路口的交通燈控制器功能,具體要求如下:
1、有MR(主紅)、MY(主黃)、MG(主綠)、CR(鄉(xiāng)紅)、CY(鄉(xiāng)黃)、CG(鄉(xiāng)綠)六盞交通燈需要控制;
2、交通燈由綠轉(zhuǎn)紅前有4秒亮黃燈的間隔時間,由紅轉(zhuǎn)綠沒有間隔時間;
3、鄉(xiāng)間公路右側(cè)各埋有一個串連傳感器,當有車輛準備通過鄉(xiāng)間公路時,發(fā)出請求信號S=1,其余時間S=0;
4、平時系統(tǒng)停留在主干道通行(MGCR)狀態(tài),一旦S信號有效,經(jīng)主道黃燈4秒(MYCR)狀態(tài)后轉(zhuǎn)入鄉(xiāng)間公路通行(MRCG)狀態(tài),但要保證主干道通行大于一分鐘后才能轉(zhuǎn)換;
5、一旦S信號消失,系統(tǒng)脫離MRCG狀態(tài),即經(jīng)鄉(xiāng)道黃燈4秒(MRCY)狀態(tài)進入MGCR狀態(tài),即使S信號一直有效,MRCG狀態(tài)也不得長于20秒鐘;
6、控制對象除紅綠燈之外,還包括分別在主干道和鄉(xiāng)間公路各有一個兩位十進制倒計時數(shù)碼管顯示。
四、主要儀器設備
1、微機
1臺
1套 1套
2、QuartusII集成開發(fā)軟件
3、EDA實驗裝置
五、實驗步驟
源程序:
0module traffic1(clk,s,rst,light,sel,SG);input clk,s,rst;output[5:0] light;
output [2:0]sel;output [7:0]SG;reg [5:0] light;reg clk1;reg [3:0] sc;
reg [7:0] count;reg [7:0] cnt,SG;reg [2:0] sel;reg [3:0]a;parameter s0=0,s1=1,s2=2,s3=3,s4=4;initial
begin
count<=8'b01100000;
light<=6'b001100;
sc=s0;
end
always @(posedge clk)begin
begin cnt=cnt+1;
if(cnt==100)begin clk1=1'b1;cnt=0;end
else clk1=1'b0;//100分頻,CLK為數(shù)碼管掃描頻率,CLK1為計數(shù)頻率
if(sel<7)sel=sel+1;else sel=6;
end //sel為數(shù)碼管選擇
begin
case(sel)
7: a=count[3:0];//0數(shù)碼管為個位
6: a=count[7:4];//1數(shù)碼管為十位
default: a=0;
endcase
case(a)
0:SG<=8'b00111111;1:SG<=8'b00000110;
2:SG<=8'b01011011;3:SG<=8'b01001111;
4:SG<=8'b01100110;5:SG<=8'b01101101;
6:SG<=8'b01111101;7:SG<=8'b00000111;
8:SG<=8'b01111111;9:SG<=8'b01101111;//8段譯碼值
default: SG=8'b11111111;
endcase
end end
always @(posedge clk1 or negedge rst)
begin
if(!rst)begin count = 0;sc=s3;end // count set nothing but else 0
else if(count == 0)
begin
case(sc)
s0: begin if(s)begin sc=s1;count = 8'b00000100;light=6'b010100;end else begin sc=s4;count = 8'b01100000;end end
s1: begin count = 8'b00100000;sc=s2;light=6'b100001;end
s2: begin count = 8'b00000100;sc=s3;light=6'b100010;end
s3: begin count = 8'b01100000;sc=s0;light=6'b001100;end
s4: begin if(s)begin sc=s1;count = 8'b00000100;light=6'b010100;end else begin sc = s4;count = 8'b01100000;light<=6'b001100;end end
default begin sc=s0;count =8'h60;end
endcase
end
else
if((sc==s2)&(s==0))begin sc=s3;count = 8'b00000100;light=6'b100010;end
else
if((sc==s4)&(s==1))begin sc=s1;count = 8'b00000100;light=6'b010100;end
else if(count[3:0] == 4'b0000)
begin count = count-7;end
else
begin count = count-1;end
end endmodule
管腳鎖定
六、波形仿真
主干道60s倒計時
s信號為1時
七、實驗心得
通過本次實驗,讓我進一步掌握了軟件quartus的使用流程,一開始實驗時波形仿真是正確的,但在電路上實現(xiàn)時主干道亮黃燈時,鄉(xiāng)間道路亮的是綠燈,這顯然是不對的,后面發(fā)現(xiàn)是管腳鎖定時出現(xiàn)了問題,改回來之后就沒問題了。管腳鎖定時不能粗心,不然很容易出現(xiàn)問題。
曹軍
生醫(yī)121班
第三篇:基于FPGA的交通燈控制器設計
數(shù)字系統(tǒng)課程設計
基于FPGA的交通控制燈設計
姓名:
學號:
班級:
摘要
隨著社會的發(fā)展,城市規(guī)模的不斷擴大,城市交通成為制約城市發(fā)展的一大因素。人口和汽車日益增長,市區(qū)交通也日益擁擠,人們的安全問題當然也日益重要。因此,紅綠交通信號燈成為交管部門管理交通的重要工具之一。有了交通燈,人們的安全出行也有了很大的保障。自從交通燈誕生以來,其內(nèi)部的電路控制系統(tǒng)就不斷的被改進,設計方法也開始多種多樣,從而使交通燈顯得更加智能化。尤其是近幾年來,隨著電子與計算機技術(shù)的飛速發(fā)展,電子電路分析和設計方法有了很大的改進,電子設計自動化也已經(jīng)成為現(xiàn)代電子系統(tǒng)中不可或缺的工具和手段,這些都為交通燈控制系統(tǒng)的設計提供了一定的技術(shù)基礎。本課程設計運用erilog HDL語言描述交通控制器,通過狀態(tài)機計數(shù)法,實現(xiàn)設計所要求的交通燈控制及時間顯示,并最后進行了軟件實現(xiàn),達到了系統(tǒng)要求的功能。
設計原理
1.1設計要求
設計一個交通控制器,用LED顯示燈表示交通狀態(tài),并以7段數(shù)碼顯示器顯示當前狀態(tài)剩余秒數(shù) 主干道綠燈亮時,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變?yōu)榧t燈的過程中,亮光的黃燈作為過渡,黃燈的時間為5s。能進行特殊狀態(tài)顯示,特殊狀態(tài)時東西、南北路口均顯示紅燈狀態(tài)。用LED燈顯示倒計時,并且能實現(xiàn)總體清零功能,計數(shù)器由初始狀態(tài)開始計數(shù),對應狀態(tài)的顯示燈亮。能實現(xiàn)特殊狀態(tài)的功能顯示,1.2設計思路和原理
本次設計是針對十字路口,進行南北和東西直行情況下交通燈控制。設定東西方向為主干道方向,根據(jù)交通燈的亮的規(guī)則,在初始狀態(tài)下四個方向的都為紅燈亮啟,進入正常工作狀態(tài)后,當主干道上綠燈亮時,支干道上紅燈亮,持續(xù)35S后,主干道和支干道上的黃燈都亮啟,持續(xù)5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續(xù)25S,之后主干道和支干道上的黃燈都亮啟5s,一個循環(huán)完成。循環(huán)往復的直行這個過程。其過程如下圖所示:
0s主干道方向25s綠燈亮30s紅燈亮黃燈亮65s支干道方向0s紅燈亮35s綠燈亮黃燈亮60s65s
圖1.交通燈點亮時間控制說明
1.3實現(xiàn)方法
本次采用文本編輯法,即利用Verilog HDL語言描述交通控制器,通過狀態(tài)機計數(shù)法,實現(xiàn)設計所要求的交通燈控制及時間顯示。設計中用兩組紅黃綠LED模擬兩個方向上的交通燈,用4個7段數(shù)碼管分別顯示兩個方向上的交通燈剩余時間,控制時鐘由試驗箱上頻率信號提供。
Verilog HDL程序設計
2.1整體設計
根據(jù)上章設計原理,交通燈控制的關(guān)鍵是各個狀態(tài)之間的轉(zhuǎn)換和進行適當?shù)臅r間延時,根據(jù)狀態(tài)機的設計規(guī)范,本次設計了三個狀態(tài)之間的循環(huán)轉(zhuǎn)化,其真值表及狀態(tài)轉(zhuǎn)化圖如下所示:
狀狀00狀狀00狀狀10狀狀11狀狀01狀狀01狀狀11狀狀10狀狀狀狀狀狀狀狀狀狀001狀狀狀狀狀010狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀001狀狀狀狀狀010
圖2.交通燈控制狀態(tài)轉(zhuǎn)化
說明:該狀態(tài)圖為交通燈在正常情況下的狀態(tài)轉(zhuǎn)化圖,進入控制后,狀態(tài)00時主干道綠燈及支干道紅燈亮起,進入狀態(tài)01后兩路黃燈亮起,狀態(tài)11時主干道紅燈及支干道綠燈亮起。進入10狀態(tài)兩路黃燈亮起。結(jié)束一個循環(huán),從00狀態(tài)重新開始循環(huán)。
為實現(xiàn)控制與顯示的功能,需要設計交通燈點亮順序控制程序,倒數(shù)計時程序,七段數(shù)碼管顯示程序,數(shù)碼管顯示掃描程序,其系統(tǒng)結(jié)構(gòu)圖如下所示:
holdrst狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀clk1KHz狀狀狀狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀 圖3.交通燈控制系統(tǒng)結(jié)構(gòu)圖
其中rst為復位信號,clk為時鐘信號,hold為特殊情況控制信號,輸入hold時兩個方向紅燈無條件亮起。
2.2 具體設計
根據(jù)整體設計要求,編寫各個功能部分Verilog HDL程序,設置各輸入輸出變量說明如下 clk: 為計數(shù)時鐘; qclk:為掃描顯示時鐘;
en: 使能信號,為1 的話,則控制器開始工作; rst: 復位信號,為1的話,控制及技術(shù)回到初始狀態(tài);
hoid:特殊情況控制信號,為1的話,則兩個方向無條件顯示為紅燈;
light1: 控制主干道方向四盞燈的亮滅;其中,light1[0]~light[2],分別控制主干道方向的 綠燈、黃燈和紅燈;
light2: 控制支干道方向四盞燈的亮滅;其中,light2[0] ~ light2[2],分別控制支干道方向的 綠燈、黃燈和紅燈;
num1: 用于主干道方向燈的時間顯示,8 位,可驅(qū)動兩個數(shù)碼管; num2: 用于支干道方向燈的時間顯示,8 位,可驅(qū)動兩個數(shù)碼管; counter:用于數(shù)碼管的譯碼輸出; st1,st2:數(shù)碼管掃描信號。輸入輸出及中間變量設置如下:
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;
1.二極管點亮控制
該部分程序的作用是根據(jù)計數(shù)器的計數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計時數(shù)值給七段數(shù)碼管的譯碼電路。此外,當檢測到特殊情況(hold=‘1’)發(fā)生時,無條件點亮紅燈的二極管,當檢測到復位信號,兩個方向計數(shù)與控制回復到00狀態(tài)。因為主、支干道兩個方向二極管點亮的順序與延遲時間不同,顧編寫兩個獨立的部分來控制,具體程序如下: 1)主干道方向 always @(posedge clk)begin
if(rst)//復位與特殊情況控制
begin light1<=3'b001;num1<=green1;end else if(hold)begin light1<=3'b100;num1<=green1;end else if(en)
begin //使能有效開始控制計數(shù)
if(!tim1)//
begin //主干道交通燈點亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
end 2)支干道方向
always @(posedge clk)begin
if(rst)//復位與特殊情況控制
begin
light2<=3'b100;
num2<=red2;
end
else if(hold)
begin
light2<=3'b100;
num2<=red2;
end
else if(en)
begin
if(!tim2)
begin
tim2<=1;
case(state1)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
end
2.倒數(shù)計時
該部分程序完成二極管發(fā)光時延的計數(shù),并將計數(shù)結(jié)果送到數(shù)碼管顯示電路,每切換到一個狀態(tài),計數(shù)器的初值都被重置,以實現(xiàn)不同顏色二極管不同的時延要求。本次設計直接用邏輯運算完成2位十進制數(shù)的計數(shù),未采用分位器的設計。因為主、支干道上計數(shù)器的結(jié)構(gòu)完全相同,顧只列出一路的程序,其具體程序如下所示:
always @(posedge clk)begin else begin //倒數(shù)計時
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1)tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end end
3.數(shù)碼管的譯碼及掃描顯示
該段程序主要完成4個7段數(shù)碼管的譯碼顯示及掃描,使系統(tǒng)能正常顯示主、支干道兩個方向上的剩余時間。譯碼的時鐘頻率要低,為Hz級。掃描的時鐘頻率要高,最低不得小于人眼分辨頻率50Hz,具體程序如下所示: always @(posedge qclk)begin //數(shù)碼管掃描
if(rst1)
begin
st1=0;
st2=0;
end else
begin
case({st2,st1})
2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end
2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end
2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end
2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end
endcase
end end always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule 總體程序見程序清單所示
仿真與硬件調(diào)試
3.1 波形仿真
在QuartursⅡ軟件下創(chuàng)建工程,新建編輯設計文件,將程序輸入,整體編譯后,新建波形仿真文件。設置仿真時間,時鐘周期,輸入輸出端口,進行波形仿真。具體仿真波形圖及說明如下所示: 仿真截止時間:100us; 時鐘:clk 1us,qclk 0.1us 1.正常工作時波形仿真圖
圖4.正常工作時波形仿真圖
圖形說明
波形仿真主要完成了控制與計數(shù)以及數(shù)碼管顯示的波形圖。en為低電品時,計數(shù)器置初值,高電平時開始正常控制與計數(shù)。控制發(fā)光二極管首次輸出為“l(fā)ight1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計數(shù)器num1和num2從“00110101”開始遞減計數(shù),計數(shù)至“00000000”時,進入下一個狀態(tài),控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計數(shù)器num1和num2從“00000101”開始計數(shù)遞減,計數(shù)至”00000000”時進入下一個狀態(tài),light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮。Counter根據(jù)num1,num2變化隨時鐘上升沿輸出譯碼后的數(shù)據(jù)。由于屏幕顯示大小有限,未仿真出一個完整周期。
2.特殊情況仿真波形
圖5.特殊情況仿真波形
圖形說明
當hold輸入高電平時,在時鐘上升沿的控制下,light 1與light2被強制置位為”100”,表示兩路紅燈均亮起
3.復位情況仿真波形
圖6.復位情況仿真波形
圖形說明
當rst輸入高電平時,在時鐘上升沿控制下,計數(shù)與控制都回到00狀態(tài),即light1=001,light2=100,計數(shù)器num1和num2從“00110101”開始遞減計數(shù)。3.2 硬件調(diào)試
完成時序仿真確認無誤后,進行實驗箱管腳設置,注意設置完成后一定要再進行一次全局仿真,使程序真正對應于硬件輸出輸出。具體連接說明如下所示
輸入變量:rst、clk、qclk、hold、en 其中en,hold,rst接”0-1”撥碼開關(guān),以穩(wěn)定的輸出可變化的電平。計數(shù)時鐘clk接實驗箱上1Hz時鐘,掃描顯示時鐘qclk接125Khz時鐘。
輸出變量:light1[2:0]、light2[2:0]、counter[6:0]、st1、st2 其中l(wèi)ight1[0]、light2[0]分別接綠色的發(fā)光二極管;light1[1]、light2[1] 分別接黃色的發(fā)光二極管;light1[2]、light2[2]分別接紅色的發(fā)光二極管。counter[0]~counter[6],分別接七段數(shù)碼管的a~f,st1、st2分別接試驗箱上”4-16”譯碼器的低兩位。
完成接線后將程序燒寫到芯片上,開始功能調(diào)試。分辨改變使能信號,復位信號以及特殊情況信號,觀察數(shù)碼管以及發(fā)光二級管情況。
程序清單
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;
always @(en)if(!en)begin //設置計數(shù)初值 green1<=8'b00110101;red1<=8'b00100101;yellow1<=8'b00000101;green2<=8'b00100101;red2<=8'b00110101;yellow2<=8'b00000101;end
always @(posedge clk)begin if(rst)//復位與特殊情況控制
begin
light1<=3'b001;num1<=green1;
end else if(hold)
begin
light1<=3'b100;
num1<=green1;
end
else if(en)
begin //使能有效開始控制計數(shù)
if(!tim1)//開始控制
begin //主干道交通燈點亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
end
else
begin //倒數(shù)計時
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1)tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end
end
always @(posedge clk)begin
if(rst)//復位與特殊情況控制
begin
light2<=3'b100;
num2<=red2;
end
else if(hold)
begin
light2<=3'b100;
num2<=red2;
end
else if(en)
begin
if(!tim2)
begin
tim2<=1;
case(state1)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
end
else
begin //倒數(shù)計時
if(num2>0)
if(num2[3:0]==0)
begin
num2[3:0]<=4'b1001;
num2[7:4]<=num2[7:4]-1;
end
else num2[3:0]<=num2[3:0]-1;
if(num2==1)tim2<=0;
end
end
else
begin
tim2<=0;
state2<=2'b00;
light2<=3'b010;
end
end
always @(posedge qclk)begin //數(shù)碼管掃描
if(rst1)
begin
st1=0;
st2=0;
end else
begin
case({st2,st1})
2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end
2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end
2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end
2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end
endcase
end end always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule
總結(jié)
在設計中采用V erilog HDL語言設計交通燈控制系統(tǒng), 借助其功能強大的語言結(jié)構(gòu), 簡明的代碼描述復雜控制邏輯設計, 與工藝無關(guān)特性, 在提高工作效率的同時達到求解目的, 并可以通過V erilog HDL 語言的綜合工具進行相應硬件電路生成, 具有傳統(tǒng)邏輯設計方法所無法比擬的優(yōu)越性。
在設計過程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過但仿真出不了正確的波形,不是計數(shù)器無法正常計數(shù),就是控制輸出無法進入到下一個狀態(tài),每次出現(xiàn)問題就必須返回重新修改程序。實踐證明,在編寫一個較復雜的程序時,一開始一定要畫流程圖,弄清楚各個功能及實現(xiàn)它們的邏輯算法,做到心中有數(shù)后在開始下筆寫編寫程序。在編寫的時候要尤其要注意語言的規(guī)范,如本次設計中編寫的V erilog在Quartus8.1中可以正常生成時序圖,而在低版本的軟件中卻無法生成,原因就是語言使用不規(guī)范,在解決這個問題時我總結(jié)了一些經(jīng)驗,首先程序要邏輯清晰,簡潔明了,避免不必要的嵌套與條用,其次要適當?shù)亟o程序加上注解文字,提高可讀性,以方便之后的程序出錯時進行查找,最后充分利用仿真軟件提供的各項編譯工具與報錯消息,按圖索驥,有方向的完成程序調(diào)試。
完成仿真后進行,進行試驗箱上的硬件調(diào)試,該步驟主要是要求細心,按照引腳清單,逐一完成連線,本次設計用到兩個時鐘輸入,注意一定要選擇合適頻率的時鐘,以便達到期望的效果。注意觀察實物的現(xiàn)象,看是否滿足設計要求,不滿足時檢查是硬件問題還是程序問題,如果是程序問題,在修改完之后必須要重新編譯,重新燒入。不斷排查錯誤,直至達到滿意的效果。
通過這次課程設計,熟悉了簡單EDA設計的整個流程,加深了對Verilog HDL硬件描述語言的理解,提高了動手能力,并且鍛煉了自己的耐心,收獲頗豐,我會把在本次課程設計中學到的東西應用到今后的工作學習中。
參考資料
[1] 夏宇聞.復雜數(shù)字電路與系統(tǒng)的V erilog HDL設計技術(shù) [M ].北京: 北京航空航天大學出版社, 1998 [2] 郭梯云.移動通信[M ].西安: 西安電子科技大學出版社, 1995 [3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 數(shù)字移動通信系統(tǒng)[M ].駱健霞, 顧龍信, 徐云霄譯.北京: 電子工業(yè)出版社, 1996 [4] 張毅剛, 喬立巖.虛擬儀器軟件開發(fā)環(huán)境L abW indow s?CV I 610 編程指南[M ].北京: 機械工業(yè)出版社, 2002 [5] 劉國權(quán).GSM 手機的測試[J ].中國無線電管理, 2003 [6] 俞定玖, 劉湘慧.GSM 數(shù)字蜂窩移動交換系統(tǒng)測試[J ].電信科學, 2000 [7] 張明.V erilog HDL 實用教程[M ].成都: 電子科技大學出版社, 1999 [8] Hyde D C.Bucknell Handbook on V erilog HDL 1Computer Science Department, Bucknell U niversity L ew is burg, 1995 [9] 康華光.電子技術(shù)基礎(數(shù)字部分)[M ].北京: 高等教育出版社, 1988
第四篇:基于單片機AT89C51的交通燈控制器的設計
2014屆本科生畢業(yè)設計
分類號:TP368.1
題目:基于單片機AT89C51的交通燈控制器的設計
姓 名: 張建猛 學 號 : 2010080870 學 院: 機械與電子工程學院 專 業(yè): 自動化 指導教師職稱: 胡波 劉明
指導教師職稱: 助教(碩士)工程師
2014-05-11
摘 要
本文采用AT89C51單片機芯片為核心控制器件設計的交通燈控制器,該系統(tǒng)主要包括單片機最小系統(tǒng),按鍵,數(shù)碼管顯示,交通燈演示系統(tǒng)。系統(tǒng)主要具有有人行道,交通燈的基本功能,倒計時,緊急情況處理,根據(jù)具體情況手動控制等功能。通過AT89C51并接數(shù)碼管和發(fā)光二極管來實現(xiàn)交通燈的變化規(guī)律,P1口設置紅,綠燈點亮時間功能的實現(xiàn);紅綠燈循環(huán)點亮,倒計時剩余10秒時黃燈閃爍警示。本系統(tǒng)的研發(fā)周期短,可靠性高,實用性,操作簡單,維護方便,擴展功能強大。本系統(tǒng)軟硬件相結(jié)合,通過Proteus軟件仿真,基本實現(xiàn)了交通信號燈的模擬。
關(guān)鍵詞:AT89C51;數(shù)碼管;交通燈控制器
ABSTRACT In this paper, AT89C51 chip as the core control device design traffic light controller, the system includes smallest single-chip system, keyboard, digital display, traffic lights demonstration system.System mainly has a sidewalk, the basic functions of traffic lights, countdown, emergency treatment, according to the specific circumstances of manual control and other functions.And connected via AT89C51 LED digital tube and realized traffic lights change, P1 port settings of red, green lighting time function is implemented;traffic light cycle light, countdown 10 seconds remaining yellow flashing warning.The system development cycle is short, high reliability, practicality, simple operation, easy maintenance, expansion and powerful.This system combines hardware and software, Through the Proteus Software Simulation,the basic realization of traffic lights simulation.Keywords: AT89C51;System;Digital pipe;Traffic light controller
目錄
緒
論...........................................................................................................................1 1.整體方案設計...........................................................................................................2 1.1 方案分析.........................................................................................................2 1.2 方案確立.........................................................................................................3 2.系統(tǒng)的硬件設計.......................................................................................................3
2.1設計原理及方法..............................................................................................3 2.2 AT89C51單片機最小系統(tǒng)..............................................................................4 2.2.1 復位電路..............................................................................................4 2.2.2 時鐘電路..............................................................................................5 2.2.2 EA腳的功能及接法.............................................................................6 2.3其它硬件模塊介紹及連接..............................................................................7
2.3.1 倒計時顯示模塊.................................................................................7
2.3.2 交通燈顯示模塊................................................................................8
2.3.3 按鍵控制模塊......................................................................................9 2.3.4 電源模塊............................................................................................10 3.系統(tǒng)的軟件設計.....................................................................................................10
3.1系統(tǒng)相關(guān)參數(shù)計算........................................................................................10 3.1.1 T0的計數(shù)初值...................................................................................10 3.1.2 倒計時顯示的理論分析....................................................................10 3.1.2 交通燈狀態(tài)顯示的理論分析............................................................11 3.2系統(tǒng)主程序設計............................................................................................11 4.系統(tǒng)的 Proteus軟件仿真....................................................................................12 4.1 Proteus仿真圖............................................................................................12 4.2 Proteus仿真的結(jié)果分析............................................................................12 結(jié)束語.........................................................................................................................14 參考文獻.....................................................................................................................14 致 謝.........................................................................................................................15 附錄:程序源代碼.....................................................................................................16
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
緒 論
隨著人口的迅速增長,道路資源的有限性和交通工具爆炸性的發(fā)展,城市交通正面臨著嚴峻考驗,因此造成日益嚴重的交通問題,每天的交通擁堵成了家常便飯但又不得不忍受。在這種情況下,與我國城市道路交通的實際情況相結(jié)合,開發(fā)出適合我們自身特點的智能信號燈控制系統(tǒng)已成為一個主要的任務。一個好的交通燈控制系統(tǒng),將給道路擁堵,違章行駛等方面給予技術(shù)創(chuàng)新。隨著電子技術(shù)的發(fā)展,采用單片機技術(shù),能夠智能管理交通燈,已成為目前廣泛使用的方法。
在人類的生活,工作環(huán)境中,交通扮演著極其重要的角色,人們的出行與交通時時刻刻打著交道。城市交通控制系統(tǒng)是基于城市交通信號控制技術(shù)為主導的發(fā)展,與汽車行業(yè)的發(fā)展并行。在其發(fā)展的不同階段,由于交通出現(xiàn)的各種矛盾,人們總是試圖把各個歷史階段的最新科技成果應用到交通自動控制中,從而促進交通自動控制技術(shù)不斷發(fā)展。
早在1850年,城市交叉路口處安全和擁堵問題引起人們的關(guān)注,全球第一個自動交通燈誕生,打開城市交通控制的序幕。在1868年,英國工程師娜奕特在倫敦西部威斯敏斯特街口安裝一個紅色和綠色煤氣照明燈,用來控制交叉路口的馬車通行,但一次煤氣爆炸事故致使交通信號燈消失了近半個世紀。1914年,美國克利夫蘭,紐約和芝加哥重新出現(xiàn)的交通信號燈,他們使用電動驅(qū)動,與現(xiàn)在意義的交通信號燈幾乎是一樣的。隨著時代的發(fā)展,各種運輸方式和交通管制的需要,第一光名副其實的三色燈(紅,黃,綠)出生于1918年。它的周圍是三色圓形投影機被安裝在紐約市五號街一座高塔上,由于它的誕生,城市交通大大改善。
在近一個世紀的發(fā)展,道路交通信號控制系統(tǒng)經(jīng)歷了一個手動到自動,從固定到靈活配時,從無感應控制到有感應控制,從單點控制到干線控制,從區(qū)域控制到網(wǎng)絡控制的長期過程。
交通網(wǎng)絡是城市的動脈,是一個城市的生活經(jīng)濟水平,工業(yè)文明的象征。交通關(guān)系到人民對財產(chǎn),安全和時間相關(guān)的利益。憑借優(yōu)良科學的交通控制技術(shù)對資源物流和人們出行是非常有價值的,確保交通安全線的暢通,才能確保舒適的出行,物流按時到位,甚至是生命通道延伸。為了確保安全,高效的交通秩序,除了制定一系列的交通規(guī)則,而且還必須通過一定的技術(shù)手段來實現(xiàn)。隨著單片機和傳感器技術(shù)的迅速發(fā)展,自動檢測領域發(fā)生了翻天覆地的變化,交通自動檢測控制研究已經(jīng)取得了顯著的進步,必將以其優(yōu)良的性能價格比,逐步取代傳統(tǒng)的交通控制措施。
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
1.整體方案設計
1.1 方案分析
交通燈一般設在城市道路的十字路口,可以分為東西方向(主干道)和南北方向(次干道),東西南北四個路口均設有有紅綠黃3種燈和1個二位數(shù)碼顯示管。在某一時刻規(guī)定只有一個方向可以通行,另一方向被禁行,狀態(tài)經(jīng)過一定的過渡時間,將通行方向和禁行方向相互對換。其具體狀態(tài)如下圖所示。(白色表示滅)。通過具體的路口交通燈狀態(tài)的演示分析我們可以把這四個狀態(tài)歸納如圖1:
圖1 交通燈狀態(tài)圖
·東西方向(主干道)紅燈滅,同時綠燈亮,南北方向(次干道)黃燈滅,同時紅燈亮,倒計時顯示60秒。在此種狀態(tài)下,東西方向(主干道)允許通行,南北方向(次干道)禁止通行。
·東西方向(主干道)綠燈滅,同時黃燈閃爍,南北方向(次干道)紅燈亮,倒計時顯示10秒。在此種狀態(tài)下,除了正在通行中的車輛外,其他所有的車輛都應該等待狀態(tài)轉(zhuǎn)換。
·南北方向(次干道)紅燈滅,同時綠燈亮,東西方向(主干道)黃燈滅,同時紅燈亮,倒計時50秒。在此種狀態(tài)下,東西方向(主干道)禁止通行,南北向允許通行。
·南北方向(次干道)綠燈滅,同時黃燈閃爍,東西方向(主干道)紅燈亮,倒計時10秒。在此種狀態(tài)下,除了正在通行中的車輛外,其他所有車輛都應該等待狀態(tài)轉(zhuǎn)換。
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
1.2 方案確立
本設計系統(tǒng)以AT89C51單片機為控制核心,連接成最小系統(tǒng),由倒計時顯示模塊、交通燈顯示模塊、按鍵開關(guān)控制模塊組成。軟件部分使用的是C 語言編程,由軟件設置交通燈的初始時間,東西方向(主干道)通行60秒,南北方向(支干道)通行50秒,數(shù)碼管采用動態(tài)顯示,P0口送字形碼,P2口送字位選通信號,通過單片機的P1口控制各種信號燈的點亮與熄滅,采用中斷方式實現(xiàn)各按鍵的功能。
2.系統(tǒng)的硬件設計
2.1 設計原理及方法
本設計采用模塊化的分層次設計方法,以單片機AT 89C 51為控制核心,連接成最小系統(tǒng),由倒計時顯示模塊、交通燈顯示模塊、按鍵開關(guān)控制模塊等組成。系統(tǒng)的總體框圖如下所示。
圖2 交通燈控制器框圖
本系統(tǒng)采用AT89C51單片機及外圍器件構(gòu)成最小控制系統(tǒng),12個發(fā)光二極管分成4組紅綠黃三色燈構(gòu)成信號燈指示模塊,4個數(shù)碼管東西南北方向各一個構(gòu)成倒計時顯示模塊,通過四個按鍵K0、K1、K2、K3模擬控制交通燈東西通行,南北通行,返回,緊急情況各個交通燈工作情況之間相互轉(zhuǎn)化。
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
2.2 AT89C51單片機最小系統(tǒng)
單片機最小系統(tǒng)一般有晶振、復位、電源、系統(tǒng)的輸入控制、輸出顯示,以及其他外圍模塊(如通信、數(shù)據(jù)采集等)等模塊組成。2.2.1 復位電路
單片機復位電路原理是在單片機的復位引腳RST上外接電阻和電容,實現(xiàn)上電復位。當復位電平持續(xù)兩個機器周期以上時復位有效。復位電平的持續(xù)時間必須大于單片機的兩個機器周期。具體數(shù)值可以由RC電路計算出時間常數(shù)。復位電路由手動復位和上電復位兩部分組成。
(1)上電復位電路要求接通電源后,通過外部電容充電來實現(xiàn)單片機自動復位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要能保持足夠的時間(2個機器周期),單片機就可以進行復位操作。
(2)手動復位:手動復位就是在復位電容上并聯(lián)一個開關(guān),當開關(guān)按下時電容被放電、RST也被拉到高電平,而且由于電容的充電,會保持一段時間的高電平來使單片機復位。單片機復位期間不產(chǎn)生ALE和PSEN信號,即ALE=1和PSEN=1。這表明單片機復位期間不會有任何取指操作。
圖3 單片機手動復位電路
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
2.2.2 時鐘電路
單片機系統(tǒng)里都有晶振,在單片機系統(tǒng)里晶振作用非常大,全稱叫晶體振蕩器,它結(jié)合單片機內(nèi)部電路產(chǎn)生單片機所需的時鐘頻率,單片機晶振提供的時鐘頻率越高,那么單片機運行速度就越快,單片機的一切指令的執(zhí)行都是建立在單片機晶振提供的時鐘頻率。單片機晶振的作用是為系統(tǒng)提供基本的時鐘信號。單片機的時鐘電路由外接的一只晶振和兩只起振電容,以及單片機內(nèi)部的時鐘電路組成,晶振的頻率越高,單片機處理數(shù)據(jù)的速度越快,系統(tǒng)功耗也會相應增加,穩(wěn)定性也會下降。
單片機的時鐘電路設計有兩種方式,一種是內(nèi)部時鐘方式,一種是外部時鐘方式。
在內(nèi)部時鐘方式下單片機內(nèi)部的高增益、反相放大器通過XTAL1、XTAL2外接作為反饋元件的外部晶體管振蕩器與電容組成的并聯(lián)諧振回路構(gòu)成一個穩(wěn)定的自激振蕩器,向內(nèi)部時鐘電路提供振蕩時鐘。振蕩器的頻率主要取決于晶體的振蕩頻率。外部時鐘方式是把外部已有的時鐘信號引入到單片機內(nèi)。此方式常用于多片單片機同時工作,以便于各單片機的同步。一般要求外部信號高電平的持續(xù)時間大于20μs,且為頻率低于12MHz的方波。本設計采用內(nèi)部時鐘方式,單片機系統(tǒng)常用的晶振頻率有6MHz、11.0592MHz、12MHz、本系統(tǒng)采用11.0592MHz晶振,電容選22pF或30pF均可。
圖4 單片機時鐘電路
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
2.2.2 EA腳的功能及接法
AT89C51 單片機的EA/VPP(31 腳)是內(nèi)部和外部程序存儲器的選擇管腳。當EA 保持高電平時,單片機訪問內(nèi)部程序存儲器;當EA 保持低電平時,則不管是否有內(nèi)部程序存儲器,只訪問外部存儲器。由于現(xiàn)在單片機內(nèi)部的flash容量都很大,因此基本都是從內(nèi)部的存儲器讀取程序,即不需要外接ROM來存儲程序,因此,EA腳必須接高電平。
圖5 單片機最小系統(tǒng)
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
2.3 其它硬件模塊介紹及連接 2.3.1 倒計時顯示模塊
系統(tǒng)要求南北和東西方向的信號燈時間不一樣,所以就利用單片機的P0口送出數(shù)據(jù)的段碼,位選信號用P2口送出,用動態(tài)掃描的方法顯示東西、南北的倒計時間。7段數(shù)碼管一般由8個發(fā)光二極管組成,其中由7個細長的發(fā)光二極管組成數(shù)字顯示,另外一個圓形的發(fā)光二極管顯示小數(shù)點。當發(fā)光二極管導通時,相應的一個點或一個筆畫發(fā)光。控制相應的二極管導通,就能顯示出各種字符。本設計采用共陰數(shù)碼管,需要接上470歐上拉電阻以提供足夠大的電流來驅(qū)動數(shù)碼管,數(shù)碼管的每段的電流是約10毫安。
圖6 數(shù)碼管顯示模塊
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
2.3.2 交通燈顯示模塊
本系統(tǒng)利用單片機的P1口來驅(qū)動和控制各種信號燈的燃亮和燃亮時間,在實際中,交通燈的信號燈需要用高電壓控制,在這里我們只是模擬一下它的控制信號,所以我們就只用單片機的信號引腳直接來控制發(fā)光二極管。發(fā)光二極管是半導體二極管的一種,可以把電能轉(zhuǎn)化成光能,常簡寫為LED。發(fā)光二極管與普通二極管一樣是由一個PN結(jié)組成,也具有單向?qū)щ娦浴.斀o發(fā)光二極管加上正向電壓后,從P區(qū)注入到N區(qū)的空穴和由N區(qū)注入到P區(qū)的電子,在PN結(jié)附近數(shù)微米內(nèi)分別與N區(qū)的電子和P區(qū)的空穴復合,產(chǎn)生自發(fā)輻射的熒光。不同的半導體材料中電子和空穴所處的能量狀態(tài)不同。當電子和空穴復合時釋放出的能量多少不同,釋放出的能量越多,則發(fā)出的光的波長越短。常用的是發(fā)紅光、綠光或黃光的二極管。發(fā)光二極管的反向擊穿電壓約5伏。它的正向伏安特性曲線
很陡,使用時必須串聯(lián)限流電阻以控制通過管子的電流。
圖7 交通燈模塊
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
2.3.3 按鍵控制模塊
本系統(tǒng)設置了有4個鍵:K0鍵,K1鍵,K2鍵,K3鍵。每個按鍵一端接地,另一端接上二極管。低電平有效,當按鍵按下端口接地,單片機捕獲到低電平,從而得到相應的輸入信息。本系統(tǒng)采用了二極管做開關(guān),是為了防止有一按鍵被按下3根線同時被低,中斷無效。二極管在正向電壓作用下電阻很小,處于導通狀態(tài),相當于一只接通的開關(guān);在反向電壓作用下,電阻很大,處于截止狀態(tài),如同一只斷開的開關(guān)。利用二極管的開關(guān)特性,可以組成各種邏輯電路。
程序開始運行先東西段通行、南北段禁止60s,后南北段通行、東西段禁止50s,依此循環(huán)。系統(tǒng)分三種工作模式:南北通行模式、東西通行模式、返回模式、緊急情況模式,并且通過四個按鍵K0、K1、K2、K3實現(xiàn)之間的相互轉(zhuǎn)化。
圖8 按鍵控制模塊
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
2.3.4 電源模塊
單片機工作時需要的+5V電壓,所以在設計電源電路時,需要一個電子元件能提供+5V電壓,由于78L05能夠提供5V電壓的三端穩(wěn)壓電源,78L05一腳為電源輸入端,二腳為公共接地端,三腳即為我們所需要的+5V電壓輸出端.本系統(tǒng)采用典型的78L05提供電壓的電路,即在78L05的1腳和公共接地端(即2腳)之間接入0.3μF的電容,在公共接地端和三腳+5V電壓輸出端之間接入0.1μF的電容.圖9 電源模塊
3.系統(tǒng)的軟件設計
3.1 系統(tǒng)相關(guān)參數(shù)計算 3.1.1 T0的計數(shù)初值
T0的計數(shù)初值:X=216-12*50*1000/12=15536=3CB0H 3.1.2 倒計時顯示的理論分析
倒計時顯示的理論分析:利用定時器中斷,設TH0=TH1=(65536-50000)/256,即每0.05秒中斷一次。每到第20次中斷即過了20*0.05秒=1秒時,使時間的計數(shù)值減1,便實現(xiàn)了倒計時的功能。
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
3.1.2 交通燈狀態(tài)顯示的理論分析
狀態(tài)燈顯示的理論分析:黃燈閃爍同樣可以利用定時器中斷。每到第10次中斷即過了10*0.05秒=0.5秒時,使黃燈標志位反置,即可讓黃燈1秒閃爍一次。
3.2 系統(tǒng)主程序設計
本系統(tǒng)采用AT89C51單片機實現(xiàn)交通燈的控制,程序的編寫用C語言來完成。系統(tǒng)控制程序可以分為若干模塊:初始化程序,按鍵開關(guān)控制程序,交通燈轉(zhuǎn)換控制程序,LED數(shù)碼管顯示程序,按鍵消抖動程序,延時程序,中斷服務子程序等。系統(tǒng)相應的程序流程如圖所示。
圖10 程序流程圖
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
4.系統(tǒng)的 Proteus軟件仿真
4.1 Proteus仿真圖
交通燈控制系統(tǒng)的仿真是通過 proteus 軟件實現(xiàn)的交通燈控制系統(tǒng)仿真效果,仿真如下圖9所示:
圖11 仿真圖
4.2 Proteus仿真的結(jié)果分析
Proteus仿真實現(xiàn)東西方向和南北方向的十字路口的車輛相互交替通過,東西方向(主干道)每次通行時間設置為60秒、南北方向(次干道)通行時間設置為50秒。同時可以實現(xiàn)紅燈、黃燈、綠燈各狀態(tài)之間的相互轉(zhuǎn)換,黃燈閃爍時間設置為10秒,數(shù)碼管可以準確進行倒計時顯示。按下東西放行鍵K0,東西方向(主干道)綠燈亮,南北方向(次干道)紅燈亮;按下南北放行鍵K1,南北方向(次干道)綠燈亮,東西方向(主干道)紅燈亮;無論在任何時候按下返回鍵K2,該控制系統(tǒng)都將返回到初始狀態(tài);若遇緊急情況,按下緊急情況按鍵K3,東西南北方向都亮紅燈,實現(xiàn)主干道和支干道全部禁止通行;模擬了控制交通燈東西方向(主干道)通行,南北方向(次干道)通行,返回,緊急情況各個交通燈工作情況之間相互轉(zhuǎn)化,實現(xiàn)了課程設計的要求。宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
結(jié)束語
通過這次畢業(yè)設計,使我受益匪淺。使我在軟硬件結(jié)合的綜合運用能力上有了進一步的提升,對課堂上所學的單片機知識有了進一步的加深和鞏固,在C語言的掌握方面也向前邁了一大步,在老師和同學的幫助下,提高了個人分析解決實際問題的綜合能力以及協(xié)同合作的能力,同時還鍛煉了我查閱資料的能力、動手能力、發(fā)現(xiàn)問題、解決問題的能力。面對電腦搜索資料,一點點,一塊塊的電路慢慢拼成完整的電路經(jīng)過一次次的反復修改終于設計出了屬于自己的程序和電路,雖然還有諸多不足之處,不過使自己真正的體會到了探索事物的奧秘的快樂,同時自己也更深入的了解到了單片機的巨大的潛力,雖然有的時候可能遇到了一些困難,但是我最終解決了,我也會感覺到成功給我?guī)淼南矏偅抑牢以趯I(yè)知識上的掌握還是遠遠不夠的,我還要更加努力的去學習,提高自己了實踐能力。
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
參考文獻
[1] 楊素行.模擬電子技術(shù)[M].北京:高等教育出版社.2006 [2] 余孟嘗.數(shù)字電子技術(shù)[M].北京:高等教育出版社. 2006 [3] 邱關(guān)源,羅先覺.電路[M].北京:高等教育出版社.2011 [4] 張毅剛.單片機原理及應用[M].北京:高等教育出版社.2011 [5] 凌志浩.AT89C52單片機原理與接口技術(shù)[M].北京:高等教育出版社.2011 [6] 郭循釗,鄺帆.基于單片機的多功能交通燈控制系統(tǒng)設計與仿真實現(xiàn)[J].公路交通技術(shù).2010 [7] 劉日華,宋海.基于單片機的交通燈設計[J].科技致富向?qū)В?012 [9] 高文慶,呂英英. 基于AT89C51單片機的數(shù)字秒表設計[J]. 電腦知識與技術(shù).2012 [10] 譚浩強著,C程序設計 第三版[M].清華大學出版社.2006 [11] 彭虎,周佩玲. 微機原理與接口技術(shù)[M].電子工業(yè)出版社.2011 [12] GUO Haili.Design of Traffic Light Control System Based on Proteus and Single-chip Computer.Journal of Hengshui University[J].2012 [13] Tang Jing-nan, Qin Shen .Development and Examples of 51 Microcontroller's C Language [M].Posts & Telecom Press.2008
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
致 謝
本畢業(yè)設計在胡波和劉明老師的親切關(guān)懷和悉心指導以及同學們的熱心幫助下完成的。感謝他們在此次畢業(yè)設計過程中給予我的悉心指導與各方面的幫助,他們給了我許多非常有益的建議和意見,使我在思路上得到了很大的啟發(fā),從中認識到了自己存在的不足,并且學到了很多非常寶貴的知識。同時也要感謝系里其它同學和我的朋友在設計中給我提供的幫助和支持。總的來說,這次設計給了我一個很好的鍛煉機會,讓我學到了很多東西,讓我將自己所掌握的理論知識切實運用于工作和生活實踐中,這不僅有利于加深對書本知識的理解和鞏固,而且在很大程度上提高了我們在理論知識的指導下觀察、分析和解決問題的能力。最后,再次向所有幫助過我的老師、同學表示衷心的感謝!謝謝你們!宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
附錄:程序源代碼
/*#include
code 宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
{ uchar i;
while(ms--){ {} for(i=0;i<200;i++)}
} /*中斷0處理程序*/ void int0(void)interrupt 0 { EA=0;/*CPU禁止響應一切中斷*/ P1=0xF6,P0=duanma[0];/*東西南北方向均紅燈亮,P0口輸出0*/
{ P2=weima[0],P0=duanma[(SN_G+Y)%10];/*南北方向數(shù)碼管顯示可通行 while(1)/*無條件循環(huán)*/ 時間的個位*/ delayms(10);/*延時*/
P2=weima[1],P0=duanma[(SN_G+Y)/10];/*南北方向數(shù)碼管顯示可通行 delayms(10);/*延時*/ 時間的十位*/ P2=weima[2],P0=duanma[(WE_G+Y)%10];/*東西方向數(shù)碼管顯示可通行時間的個位*/ delayms(10);/*延時*/
P2=weima[3],P0=duanma[(WE_G+Y)/10];/*東西方向數(shù)碼管顯示可通行時間的十位*/
/*設置南北方向通行時間*/ if(K0==0)/*P3^7=0*/ { delayms(10);/*延時*/ 17 宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
delayms(20);/*延時,把抖動的時間拋掉*/ if(K0==0)*/ { } SN_G++;/*南北方向綠燈時間+1*/ if(SN_G==100)SN_G=0;/*由于使用的是兩位數(shù)碼管,當南北方向綠燈時間加到100后清零*/ }
} /*設置東西方向通行時間*/ if(K1==0)/*P3^6=0*/ { { while(K0==0)/*當松開K0開關(guān)時,跳出空循環(huán),執(zhí)行后面的程序 delayms(20);/*延時,把抖動的時間拋掉*/ if(K1==0){ while(K1==0)/*當松開K1開關(guān)時,跳出空循環(huán),執(zhí)行后面的程序*/ { } WE_G++;/*東西方向綠燈時間+1*/ if(WE_G==100)WE_G=0;/*由于使用的是兩位數(shù)碼管,當東西方向綠燈時間加到100后清零*/ }
} /*返回*/ if(K3==0)/*P3^5=0*/ delayms(20);/*延時,把抖動的時間拋掉*/ if(K3==0){ { 18 宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
while(K3==0)/*當松開K3開關(guān)時,跳出空循環(huán),執(zhí)行后面的程
{ } count=0;/*清零*/ k=0;/*南北方向通車,東西方向不通車*/ SN=SN_G,WE=SN_G+Y;/*南北方向顯示時間為南北方向綠燈通行序*/ 時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮時間*/ light();/*調(diào)用交通燈函數(shù)*/
led();/*調(diào)用數(shù)碼管函數(shù)*/ EA=1;/*CPU開放總中斷*/
break;/*跳出*/ }
} } } /*中斷1處理程序*/ {
P1=0xF6,P0=duanma[0];/*東西南北方向均紅燈亮,P0口輸出0*/ TR0=!TR0;/*計數(shù)器停止工作*/ {/*數(shù)碼管掃描程序,*/ P2=weima[0];/*顯示南北方向個位*/ delayms(10);/*延時*/ delayms(10);/*延時*/ P2=weima[2];/*顯示東西方向個位*/ delayms(10);/*延時*/ P2=weima[3];/*顯示東西方向十位*/ delayms(10);/*延時*/ /*返回*/ EA=0;/*CPU禁止響應一切中斷*/ while(1)/*無條件循環(huán)*/
void int1(void)interrupt 2 P2=weima[1];/*顯示南北方向十位*/ if(K3==0)/*P3^5=0*/ { 19 宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
delayms(20);/*延時,把抖動的時間拋掉*/
if(K3==0){ while(K3==0)/*當松開K3開關(guān)時,跳出空循環(huán),執(zhí)行后面的程序*/
{ } TR0=!TR0;/*啟動計數(shù)器*/ EA=1;/*CPU開放總中斷*/
break;/*跳出*/
}
} } } /*鍵盤程序*/ void key(){ /*南北有車而東西無車*/ if(K0==0)/*K0=0*/ { delayms(20);/*延時,把抖動的時間拋掉*/ if(K0==0){ while(K0==0)/*當松開K0開關(guān)時,跳出循環(huán),執(zhí)行后面的程序*/ { light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } count=0;/*清零*/ k=0;/*南北方向通車,東西方向不通車*/ SN=SN_G,WE=SN_G+Y;/*南北方向顯示時間為南北方向綠燈通行時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮時間*/ light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } }
宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
/*南北無車而東西有車*/ if(K1==0)/*K1=0*/ { delayms(20);/*延時,把抖動的時間拋掉*/ if(K1==0){ while(K1==0)/*當松開K1開關(guān)時,跳出循環(huán),執(zhí)行后面的程序*/ { light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } count=0;/*清零*/ k=1;/*南北方向不通車,東西方向通車*/ SN=WE_G+Y,WE=WE_G;/*南北方向顯示時間為東西方向綠燈通行時間加黃燈閃亮時間,東西方向顯示時間為東西方向綠燈通行時間*/ light();/*調(diào)用交通燈函數(shù)*/
} /*定時函數(shù)*/ void time1(void)interrupt 1 {
TH0=0x3c;TL0=0xb0;/*計50000個數(shù),用時50ms*/ count++;/*自增運算*/ if(count>=20)/*當count大于或等于20時,歷時1s,執(zhí)行程序*/ { SN--;/*自減運算*/ WE--;/*自減運算*/ count=0;/*清零*/ if(SN==0||WE==0)/*當SN=0或者WE=0時,執(zhí)行程序*/ { } led();/*調(diào)用數(shù)碼管函數(shù)*/ } k++;/*自增運算*/ if(k>3)/*當k>3時,執(zhí)行程序*/ 21 宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
k=0;/*清零*/ switch(k)/*switch 語句*/ { case 0:SN=SN_G,WE=SN_G+Y;break;/*南北方向顯示時間為南北方向綠燈通行時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮時間*/ case 1:SN=Y,WE=Y;break;/*東西南北方向顯示時間均為黃燈閃亮時間*/ case 2:SN=WE_G+Y,WE=WE_G;break;/*南北方向顯示時間為東西方向綠燈通行時間加黃燈閃亮時間,東西方向顯示時間為東西方向綠燈通行時間*/ case 3:SN=Y,WE=Y;break;/*東西南北方向顯示時間均為黃燈閃亮時間*/ } } } /*交通燈函數(shù)*/ void light(){
P1=deng[k];/*交通燈對應著k的值變化*/ if(P1==deng[1]&&count==0)/*當南北方向亮黃燈且count=0時,執(zhí)行程序*/
{ TH1=(65536-50000)/256;
} TL1=(65536-50000)%256;/*延時50ms*/
P1=0xDF;/*南北方向黃燈熄滅,東西方向亮紅燈*/ } else if(P1==deng[3]&&count==0)/*當東西方向亮黃燈且count=0時,執(zhí)行程序*/ { TH1=(65536-300000)/256;
TL1=(65536-300000)%256;/*延時50ms*/ P1=0xFB;/*南北方向亮紅燈,東西方向黃燈熄滅*/ 22 宿州學院本科生畢業(yè)設計
基于單片機AT89C51的交通燈控制器的設計
} } /*數(shù)碼管函數(shù)*/ void led(){
} /*主函數(shù)*/
void main(void){
init();/*調(diào)用程序初始化函數(shù)*/ { key();/*調(diào)用鍵盤程序*/ light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } while(1)/*無條件循環(huán)*/ P2=weima[0],P0=duanma[SN%10];/*顯示南北方向個位*/ P2=weima[1],P0=duanma[SN/10];/*顯示南北方向十位*/ delayms(10);/*延時*/ P2=weima[2],P0=duanma[WE%10];/*顯示東西方向個位*/ delayms(10);/*延時*/ P2=weima[3],P0=duanma[WE/10];/*顯示東西方向十位*/ delayms(10);/*延時*/ delayms(10);/*延時*/ } 23
第五篇:基于Verilog HDL的交通燈控制器設計
目
錄
第一章
設計原理.......................................................................................................................................1
1.1設計要求..........................................................................................................................1
1.2設計思路和原理............................................................................................................................1 1.3實現(xiàn)方法..........................................................................................................................................1 第二章
Verilog HDL程序設計...................................................................................................2
2.1整體設計...........................................................................................................................22.2 具體設計..........................................................................................................................3
第三章
仿真與硬件調(diào)試.........................................................................................................................7
3.1 波形仿真..........................................................................................................................7
3.2 硬件調(diào)試..........................................................................................................................9
第四章
設計總結(jié).....................................................................................................................10 程序清單.....................................................................................................................................11 參考資料.....................................................................................................................................15
交通燈控制器設計
第一章
設計原理
1.1設計要求
設計一個交通控制器,用LED顯示燈表示交通狀態(tài),并以7段數(shù)碼顯示器顯示當前狀態(tài)剩余秒數(shù) 主干道綠燈亮時,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變?yōu)榧t燈的過程中,亮光的黃燈作為過渡,黃燈的時間為5s。能進行特殊狀態(tài)顯示,特殊狀態(tài)時東西、南北路口均顯示紅燈狀態(tài)。用LED燈顯示倒計時,并且能實現(xiàn)總體清零功能,計數(shù)器由初始狀態(tài)開始計數(shù),對應狀態(tài)的顯示燈亮。能實現(xiàn)特殊狀態(tài)的功能顯示,1.2設計思路和原理
本次設計是針對十字路口,進行南北和東西直行情況下交通燈控制。設定東西方向為主干道方向,根據(jù)交通燈的亮的規(guī)則,在初始狀態(tài)下四個方向的都為紅燈亮啟,進入正常工作狀態(tài)后,當主干道上綠燈亮時,支干道上紅燈亮,持續(xù)35S后,主干道和支干道上的黃燈都亮啟,持續(xù)5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續(xù)25S,之后主干道和支干道上的黃燈都亮啟5s,一個循環(huán)完成。循環(huán)往復的直行這個過程。其過程如下圖所示:
0s主干道方向25s綠燈亮30s紅燈亮黃燈亮65s支干道方向0s紅燈亮35s綠燈亮黃燈亮60s65s
圖1.交通燈點亮時間控制說明
1.3實現(xiàn)方法
本次采用文本編輯法,即利用Verilog HDL語言描述交通控制器,通過狀態(tài)機計數(shù)法,實現(xiàn)設計所要求的交通燈控制及時間顯示。設計中用兩組紅黃綠LED模擬兩個方向上的交通燈,用4個7段數(shù)碼管分別顯示兩個方向上的交通燈剩余時間,控制時鐘由試驗箱上頻率信號提供。
第二章
Verilog HDL程序設計
2.1整體設計
根據(jù)上章設計原理,交通燈控制的關(guān)鍵是各個狀態(tài)之間的轉(zhuǎn)換和進行適當?shù)臅r間延時,根據(jù)狀態(tài)機的設計規(guī)范,本次設計了三個狀態(tài)之間的循環(huán)轉(zhuǎn)化,其真值表及狀態(tài)轉(zhuǎn)化圖如下所示:
狀狀00狀狀00狀狀10狀狀11狀狀01狀狀01狀狀11狀狀10狀狀狀狀狀狀狀狀狀狀001狀狀狀狀狀010狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀001狀狀狀狀狀010
圖2.交通燈控制狀態(tài)轉(zhuǎn)化
說明:該狀態(tài)圖為交通燈在正常情況下的狀態(tài)轉(zhuǎn)化圖,進入控制后,狀態(tài)00時主干道綠燈及支干道紅燈亮起,進入狀態(tài)01后兩路黃燈亮起,狀態(tài)11時主干道紅燈及支干道綠燈亮起。進入10狀態(tài)兩路黃燈亮起。結(jié)束一個循環(huán),從00狀態(tài)重新開始循環(huán)。
為實現(xiàn)控制與顯示的功能,需要設計交通燈點亮順序控制程序,倒數(shù)計時程序,七段數(shù)碼管顯示程序,數(shù)碼管顯示掃描程序,其系統(tǒng)結(jié)構(gòu)圖如下所示:
holdrst狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀clk1KHz狀狀狀狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀
圖3.交通燈控制系統(tǒng)結(jié)構(gòu)圖
其中rst為復位信號,clk為時鐘信號,hold為特殊情況控制信號,輸入hold時兩個方向紅燈無條件亮起。
2.2 具體設計
根據(jù)整體設計要求,編寫各個功能部分Verilog HDL程序,設置各輸入輸出變量說明如下 clk: 為計數(shù)時鐘; qclk:為掃描顯示時鐘;
en: 使能信號,為1 的話,則控制器開始工作; rst: 復位信號,為1的話,控制及技術(shù)回到初始狀態(tài);
hoid:特殊情況控制信號,為1的話,則兩個方向無條件顯示為紅燈;
light1: 控制主干道方向四盞燈的亮滅;其中,light1[0]~light[2],分別控制主干道方向的 綠燈、黃燈和紅燈;
light2: 控制支干道方向四盞燈的亮滅;其中,light2[0] ~ light2[2],分別控制支干道方向的 綠燈、黃燈和紅燈;
num1: 用于主干道方向燈的時間顯示,8 位,可驅(qū)動兩個數(shù)碼管; num2: 用于支干道方向燈的時間顯示,8 位,可驅(qū)動兩個數(shù)碼管; counter:用于數(shù)碼管的譯碼輸出; st1,st2:數(shù)碼管掃描信號。輸入輸出及中間變量設置如下:
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;
1.二極管點亮控制
該部分程序的作用是根據(jù)計數(shù)器的計數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計時數(shù)值給七段數(shù)碼管的譯碼電路。此外,當檢測到特殊情況(hold=‘1’)發(fā)生時,無條件點亮紅燈的二極管,當檢測到復位信號,兩個方向計數(shù)與控制回復到00狀態(tài)。因為主、支干道兩個方向二極管點亮的順序與延遲時間不同,顧編寫兩個獨立的部分來控制,具體程序如下: 1)主干道方向 always @(posedge clk)begin
if(rst)//復位與特殊情況控制
begin light1<=3'b001;num1<=green1;end else if(hold)begin light1<=3'b100;num1<=green1;end else if(en)
begin //使能有效開始控制計數(shù)
if(!tim1)//
begin //主干道交通燈點亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
end 2)支干道方向
always @(posedge clk)begin
if(rst)//復位與特殊情況控制
begin
light2<=3'b100;
num2<=red2;
end
else if(hold)
begin
light2<=3'b100;
num2<=red2;
end
else if(en)
begin
if(!tim2)
begin
tim2<=1;
case(state1)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
end
2.倒數(shù)計時
該部分程序完成二極管發(fā)光時延的計數(shù),并將計數(shù)結(jié)果送到數(shù)碼管顯示電路,每切換到一個狀態(tài),計數(shù)器的初值都被重置,以實現(xiàn)不同顏色二極管不同的時延要求。本次設計直接用邏輯運算完成2位十進制數(shù)的計數(shù),未采用分位器的設計。因為主、支干道上計數(shù)器的結(jié)構(gòu)完全相同,顧只列出一路的程序,其具體程序如下所示:
always @(posedge clk)begin else begin //倒數(shù)計時
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1)tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end
end 3.數(shù)碼管的譯碼及掃描顯示
該段程序主要完成4個7段數(shù)碼管的譯碼顯示及掃描,使系統(tǒng)能正常顯示主、支干道兩個方向上的剩
余時間。譯碼的時鐘頻率要低,為Hz級。掃描的時鐘頻率要高,最低不得小于人眼分辨頻率50Hz,具體程序如下所示: always @(posedge qclk)begin //數(shù)碼管掃描
if(rst1)
begin
st1=0;
st2=0;
end else
begin
case({st2,st1})
2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end
2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end
2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end
2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end
endcase
end end
always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule 總體程序見程序清單所示
第三章
仿真與硬件調(diào)試
3.1 波形仿真
在QuartursⅡ軟件下創(chuàng)建工程,新建編輯設計文件,將程序輸入,整體編譯后,新建波形仿真文件。設置仿真時間,時鐘周期,輸入輸出端口,進行波形仿真。具體仿真波形圖及說明如下所示: 仿真截止時間:100us; 時鐘:clk 1us,qclk 0.1us 1.正常工作時波形仿真圖
圖4.正常工作時波形仿真圖
圖形說明
波形仿真主要完成了控制與計數(shù)以及數(shù)碼管顯示的波形圖。en為低電品時,計數(shù)器置初值,高電平時開始正常控制與計數(shù)。控制發(fā)光二極管首次輸出為“l(fā)ight1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計數(shù)器num1和num2從“00110101”開始遞減計數(shù),計數(shù)至“00000000”時,進入下一個狀態(tài),控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計數(shù)器num1和num2從“00000101”開始計數(shù)遞減,計數(shù)至”00000000”時進入下一個狀態(tài),light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮。Counter根據(jù)num1,num2變化隨時鐘上升沿輸出譯碼后的數(shù)據(jù)。由于屏幕顯示大小有限,未仿真出一個完整周期。
2.特殊情況仿真波形
圖5.特殊情況仿真波形
圖形說明
當hold輸入高電平時,在時鐘上升沿的控制下,light 1與light2被強制置位為”100”,表示兩路紅燈均亮起 3.復位情況仿真波形
圖6.復位情況仿真波形
圖形說明
當rst輸入高電平時,在時鐘上升沿控制下,計數(shù)與控制都回到00狀態(tài),即light1=001,light2=100,計數(shù)器num1和num2從“00110101”開始遞減計數(shù)。3.2 硬件調(diào)試
完成時序仿真確認無誤后,進行實驗箱管腳設置,注意設置完成后一定要再進行一次全局仿真,使程序真正對應于硬件輸出輸出。具體連接說明如下所示
輸入變量:rst、clk、qclk、hold、en 其中en,hold,rst接”0-1”撥碼開關(guān),以穩(wěn)定的輸出可變化的電平。計數(shù)時鐘clk接實驗箱上1Hz時鐘,掃描顯示時鐘qclk接125Khz時鐘。
輸出變量:light1[2:0]、light2[2:0]、counter[6:0]、st1、st2 其中l(wèi)ight1[0]、light2[0]分別接綠色的發(fā)光二極管;light1[1]、light2[1] 分別接黃色的發(fā)光二極管;light1[2]、light2[2]分別接紅色的發(fā)光二極管。counter[0]~counter[6],分別接七段數(shù)碼管的a~f,st1、st2分別接試驗箱上”4-16”譯碼器的低兩位。
完成接線后將程序燒寫到芯片上,開始功能調(diào)試。分辨改變使能信號,復位信號以及特殊情況信號,觀察數(shù)碼管以及發(fā)光二級管情況,實物照片如下所示:
圖7.硬件實物圖
第四章
設計總結(jié)
在設計中采用V erilog HDL語言設計交通燈控制系統(tǒng), 借助其功能強大的語言結(jié)構(gòu), 簡明的代碼描述復雜控制邏輯設計, 與工藝無關(guān)特性, 在提高工作效率的同時達到求解目的, 并可以通過V erilog HDL 語言的綜合工具進行相應硬件電路生成, 具有傳統(tǒng)邏輯設計方法所無法比擬的優(yōu)越性。
在設計過程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過但仿真出不了正確的波形,不是計數(shù)器無法正常計數(shù),就是控制輸出無法進入到下一個狀態(tài),每次出現(xiàn)問題就必須返回重新修改程序。實踐證明,在編寫一個較復雜的程序時,一開始一定要畫流程圖,弄清楚各個功能及實現(xiàn)它們的邏輯算法,做到心中有數(shù)后在開始下筆寫編寫程序。在編寫的時候要尤其要注意語言的規(guī)范,如本次設計中編寫的V erilog在Quartus7.0中可以正常生成時序圖,而在低版本的軟件中卻無法生成,原因就是語言使用不規(guī)范,在解決這個問題時我總結(jié)了一些經(jīng)驗,首先程序要邏輯清晰,簡潔明了,避免不必要的嵌套與條用,其次要適當?shù)亟o程序加上注解文字,提高可讀性,以方便之后的程序出錯時進行查找,最后充分利用仿真軟件提供的各項編譯工具與報錯消息,按圖索驥,有方向的完成程序調(diào)試。
完成仿真后進行,進行試驗箱上的硬件調(diào)試,該步驟主要是要求細心,按照引腳清單,逐一完成連線,本次設計用到兩個時鐘輸入,注意一定要選擇合適頻率的時鐘,以便達到期望的效果。注意觀察實物的現(xiàn)象,看是否滿足設計要求,不滿足時檢查是硬件問題還是程序問題,如果是程序問題,在修改完之后必須要重新編譯,重新燒入。不斷排查錯誤,直至達到滿意的效果。
通過這次課程設計,熟悉了簡單EDA設計的整個流程,加深了對Verilog HDL硬件描述語言的理解,提高了動手能力,并且鍛煉了自己的耐心,收獲頗豐,我會把在本次課程設計中學到的東西應用到今后的工作學習中。最后感謝同學及老師提供的幫助與指導。
程序清單
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;
always @(en)if(!en)begin //設置計數(shù)初值 green1<=8'b00110101;red1<=8'b00100101;yellow1<=8'b00000101;green2<=8'b00100101;red2<=8'b00110101;yellow2<=8'b00000101;end
always @(posedge clk)begin if(rst)//復位與特殊情況控制
begin
light1<=3'b001;num1<=green1;
end else if(hold)
begin
light1<=3'b100;
num1<=green1;
end else if(en)
begin //使能有效開始控制計數(shù)
if(!tim1)//開始控制
begin //主干道交通燈點亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
end
else
begin //倒數(shù)計時
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1)tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end
end
always @(posedge clk)begin
if(rst)//復位與特殊情況控制
begin
light2<=3'b100;
num2<=red2;
end
else if(hold)
begin
light2<=3'b100;
num2<=red2;
end
else if(en)
begin
if(!tim2)
begin
tim2<=1;
case(state1)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
end
else
begin //倒數(shù)計時
if(num2>0)
if(num2[3:0]==0)
begin
num2[3:0]<=4'b1001;
num2[7:4]<=num2[7:4]-1;
end
else num2[3:0]<=num2[3:0]-1;
if(num2==1)tim2<=0;
end
end
else
begin
tim2<=0;
state2<=2'b00;
light2<=3'b010;
end
end
always @(posedge qclk)begin //數(shù)碼管掃描
if(rst1)
begin
st1=0;
st2=0;
end else
begin
case({st2,st1})
2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end
2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end
2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end
2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end
endcase
end end
always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule
參考資料
[1] 夏宇聞.復雜數(shù)字電路與系統(tǒng)的V erilog HDL設計技術(shù) [M ].北京: 北京航空航天大學出版社, 1998 [2] 郭梯云.移動通信[M ].西安: 西安電子科技大學出版社, 1995 [3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 數(shù)字移動通信系統(tǒng)[M ].駱健霞, 顧龍信, 徐云霄譯.北京: 電子工業(yè)出版社, 1996 [4] 張毅剛, 喬立巖.虛擬儀器軟件開發(fā)環(huán)境L abW indow s?CV I 610 編程指南[M ].北京: 機械工業(yè)出版社, 2002 [5] 劉國權(quán).GSM 手機的測試[J ].中國無線電管理, 2003 [6] 俞定玖, 劉湘慧.GSM 數(shù)字蜂窩移動交換系統(tǒng)測試[J ].電信科學, 2000 [7] 張明.V erilog HDL 實用教程[M ].成都: 電子科技大學出版社, 1999 [8] Hyde D C.Bucknell Handbook on V erilog HDL 1Computer Science Department, Bucknell U niversity L ew is burg, 1995 [9] 康華光.電子技術(shù)基礎(數(shù)字部分)[M ].北京: 高等教育出版社, 1988