久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

交通燈控制器設計實驗報告

時間:2019-05-14 01:34:51下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《交通燈控制器設計實驗報告》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《交通燈控制器設計實驗報告》。

第一篇:交通燈控制器設計實驗報告

設計性實驗項目名稱

交通燈控制器設計

實驗項目學時:3學時

實驗要求:■ 必修

□ 選修

一、實驗目的

1、學習與日常生活相關且較復雜數字系統設計;

2、進一步熟悉EDA實驗裝置和QuartusⅡ軟件的使用方法;

3、學習二進制碼到BCD碼的轉換;

4、學習有限狀態機的設計應用。

二、實驗原理

交通燈的顯示有很多方式,如十字路口、丁字路口等,而對于同一個路口又 有很多不同的顯示要求,比如十字路口,車輛如果只要東西和南北方向通行就很 簡單,而如果車子可以左右轉彎的通行就比較復雜,本實驗僅針對最簡單的南北 和東西直行的情況。

要完成本實驗,首先必須了解交通路燈的燃滅規律。本實驗需要用到實驗箱上交通燈模塊中的發光二極管,即紅、黃、綠各三個。依人們的交通常規,“紅燈停,綠燈行,黃燈提醒”。其交通燈的燃滅規律為:初始態是兩個路口的紅燈全亮之后,主干道的綠燈亮,鄉間道路的紅燈亮,主干道方向通車,延時一段時間后,鄉間公路來車,主干道綠燈滅,黃燈開始閃爍。閃爍若干次后,主干道紅燈亮,而同時鄉間公路的綠燈亮,延時一段時間后,鄉間公路的綠燈滅,黃燈開始閃爍。閃爍若干次后,再切換到主干道方向,重復上述過程。

三、設計要求

完成設計、仿真、調試、下載、硬件測試等環節,在型EDA實驗裝置上實現一個由一條主干道和一條鄉間公路的匯合點形成的十字交叉路口的交通燈控制器功能,具體要求如下:

1、有MR(主紅)、MY(主黃)、MG(主綠)、CR(鄉紅)、CY(鄉黃)、CG(鄉綠)六盞交通燈需要控制;

2、交通燈由綠轉紅前有4秒亮黃燈的間隔時間,由紅轉綠沒有間隔時間;

3、鄉間公路右側各埋有一個串連傳感器,當有車輛準備通過鄉間公路時,發出請求信號S=1,其余時間S=0;

4、平時系統停留在主干道通行(MGCR)狀態,一旦S信號有效,經主道黃燈4秒(MYCR)狀態后轉入鄉間公路通行(MRCG)狀態,但要保證主干道通行大于一分鐘后才能轉換;

5、一旦S信號消失,系統脫離MRCG狀態,即經鄉道黃燈4秒(MRCY)狀態進入MGCR狀態,即使S信號一直有效,MRCG狀態也不得長于20秒鐘;

6、控制對象除紅綠燈之外,還包括分別在主干道和鄉間公路各有一個兩位十進制倒計時數碼管顯示。

四、主要儀器設備

1、微機

1臺

1套 1套

2、QuartusII集成開發軟件

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為數碼管掃描頻率,CLK1為計數頻率

if(sel<7)sel=sel+1;else sel=6;

end //sel為數碼管選擇

begin

case(sel)

7: a=count[3:0];//0數碼管為個位

6: a=count[7:4];//1數碼管為十位

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的使用流程,一開始實驗時波形仿真是正確的,但在電路上實現時主干道亮黃燈時,鄉間道路亮的是綠燈,這顯然是不對的,后面發現是管腳鎖定時出現了問題,改回來之后就沒問題了。管腳鎖定時不能粗心,不然很容易出現問題。

曹軍

生醫121班

第二篇:基于Verilog_HDL的交通燈控制器設計

第一章

設計原理.......................................................................................................................................1

1.1設計要求..........................................................................................................................1

1.2設計思路和原理............................................................................................................................1 1.3實現方法..........................................................................................................................................1 第二章

Verilog 程序設計.........................................................................................................2

2.1整體設計...........................................................................................................................22.2 具體設計..........................................................................................................................3

第三章

仿真................................................................................................................................................7

3.1 波形仿真..........................................................................................................................7

第四章

設計總結.......................................................................................................................9

4.1 總結...................................................................................................................................9

4.2參考資料............................................................................................................................9

程序清單.....................................................................................................................................10

0

交通燈控制器設計

第一章

設計原理

1.1設計要求

設計一個交通控制器,用LED顯示燈表示交通狀態,并以7段數碼顯示器顯示當前狀態剩余秒數 主干道綠燈亮時,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變為紅燈的過程中,亮光的黃燈作為過渡,黃燈的時間為5s。能進行特殊狀態顯示,特殊狀態時東西、南北路口均顯示紅燈狀態。用LED燈顯示倒計時,并且能實現總體清零功能,計數器由初始狀態開始計數,對應狀態的顯示燈亮。1.2設計思路和原理

本次設計是針對十字路口,進行南北和東西直行情況下交通燈控制。設定東西方向為主干道方向,根據交通燈的亮的規則,在初始狀態下四個方向的都為紅燈亮啟,進入正常工作狀態后,當主干道上綠燈亮時,支干道上紅燈亮,持續35S后,主干道和支干道上的黃燈都亮啟,持續5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續25S,之后主干道和支干道上的黃燈都亮啟5s,一個循環完成。循環往復的直行這個過程。其過程如下圖所示:

0s主干道方向25s綠燈亮30s紅燈亮黃燈亮65s支干道方向0s紅燈亮35s綠燈亮黃燈亮60s65s

圖1.交通燈點亮時間控制說明

1.3實現方法

本次采用文本編輯法,即利用Verilog 語言描述交通控制器,通過狀態機計數法,實現設計所要求的交通燈控制及時間顯示。設計中用兩組紅黃綠LED模擬兩個方向上的交通燈,用4個7段數碼管分別顯示兩個方向上的交通燈剩余時間,控制時鐘由試驗箱上頻率信號提供。

第二章

Verilog 程序設計

2.1整體設計

根據上章設計原理,交通燈控制的關鍵是各個狀態之間的轉換和進行適當的時間延時,根據狀態機的設計規范,本次設計了三個狀態之間的循環轉化,其真值表及狀態轉化圖如下所示:

狀狀00狀狀00狀狀10狀狀11狀狀01狀狀01狀狀11狀狀10狀狀狀狀狀狀狀狀狀狀001狀狀狀狀狀010狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀001狀狀狀狀狀010

圖2.交通燈控制狀態轉化

說明:該狀態圖為交通燈在正常情況下的狀態轉化圖,進入控制后,狀態00時主干道綠燈及支干道紅燈亮起,進入狀態01后兩路黃燈亮起,狀態11時主干道紅燈及支干道綠燈亮起。進入10狀態兩路黃燈亮起。結束一個循環,從00狀態重新開始循環。

為實現控制與顯示的功能,需要設計交通燈點亮順序控制程序,倒數計時程序,七段數碼管顯示程序,數碼管顯示掃描程序,其系統結構圖如下所示:

holdrst狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀clk1KHz狀狀狀狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀 圖3.交通燈控制系統結構圖

其中rst為復位信號,clk為時鐘信號,hold為特殊情況控制信號,輸入hold時兩個方向紅燈無條件亮起。

2.2 具體設計

根據整體設計要求,編寫各個功能部分Verilog 程序,設置各輸入輸出變量說明如下

clk: 為計數時鐘; qclk:為掃描顯示時鐘;

en: 使能信號,為1 的話,則控制器開始工作; rst: 復位信號,為1的話,控制及技術回到初始狀態;

hoid:特殊情況控制信號,為1的話,則兩個方向無條件顯示為紅燈;

light1: 控制主干道方向四盞燈的亮滅;其中,light1[0]~light[2],分別控制主干道方向的 綠燈、黃燈和紅燈;

light2: 控制支干道方向四盞燈的亮滅;其中,light2[0] ~ light2[2],分別控制支干道方向的 綠燈、黃燈和紅燈;

num1: 用于主干道方向燈的時間顯示,8 位,可驅動兩個數碼管; num2: 用于支干道方向燈的時間顯示,8 位,可驅動兩個數碼管; counter:用于數碼管的譯碼輸出; st1,st2:數碼管掃描信號。輸入輸出及中間變量設置如下:

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.二極管點亮控制

該部分程序的作用是根據計數器的計數值控制發光二極管的亮、滅,以及輸出倒計時數值給七段數碼管的譯碼電路。此外,當檢測到特殊情況(hold=‘1’)發生時,無條件點亮紅燈的二極管,當檢測到復位信號,兩個方向計數與控制回復到00狀態。因為主、支干道兩個方向二極管點亮的順序與延遲時間不同,顧編寫兩個獨立的部分來控制,具體程序如下:

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 //使能有效開始控制計數

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.倒數計時

該部分程序完成二極管發光時延的計數,并將計數結果送到數碼管顯示電路,每切換到一個狀態,計數器的初值都被重置,以實現不同顏色二極管不同的時延要求。本次設計直接用邏輯運算完成2位十進制數的計數,未采用分位器的設計。因為主、支干道上計數器的結構完全相同,顧只列出一路的程序,其具體程序如下所示:

always @(posedge clk)begin else begin //倒數計時

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.數碼管的譯碼及掃描顯示

該段程序主要完成4個7段數碼管的譯碼顯示及掃描,使系統能正常顯示主、支干道兩個方向上的剩余時間。譯碼的時鐘頻率要低,為Hz級。掃描的時鐘頻率要高,最低不得小于人眼分辨頻率50Hz,具體程序如下所示:

always @(posedge qclk)begin //數碼管掃描

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 //數碼管譯碼顯示 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Ⅱ軟件下創建工程,新建編輯設計文件,將程序輸入,整體編譯后,新建波形仿真文件。設置仿真時間,時鐘周期,輸入輸出端口,進行波形仿真。具體仿真波形圖及說明如下所示: 仿真截止時間:100us; 時鐘:clk 1us,qclk 0.1us 1.正常工作時波形仿真圖

圖4.正常工作時波形仿真圖

圖形說明

波形仿真主要完成了控制與計數以及數碼管顯示的波形圖。en為低電品時,計數器置初值,高電平時開始正常控制與計數。控制發光二極管首次輸出為“light1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計數器num1和num2從“00110101”開始遞減計數,計數至“00000000”時,進入下一個狀態,控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計數器num1和num2從“00000101”開始計數遞減,計數至”00000000”時進入下一個狀態,light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮。Counter根據num1,num2變化隨時鐘上升沿輸出譯碼后的數據。由于屏幕顯示大小有限,未仿真出一個完整周期。

2.特殊情況仿真波形

圖5.特殊情況仿真波形

圖形說明

當hold輸入高電平時,在時鐘上升沿的控制下,light 1與light2被強制置位為”100”,表示兩路紅燈均亮起

3.復位情況仿真波形

圖6.復位情況仿真波形

圖形說明

當rst輸入高電平時,在時鐘上升沿控制下,計數與控制都回到00狀態,即light1=001,light2=100,計數器num1和num2從“00110101”開始遞減計數。

第四章 設計總結

4.1 總結

在設計中采用V erilog HDL語言設計交通燈控制系統, 借助其功能強大的語言結構, 簡明的代碼描述復雜控制邏輯設計, 與工藝無關特性, 在提高工作效率的同時達到求解目的, 并可以通過V erilog HDL 語言的綜合工具進行相應硬件電路生成, 具有傳統邏輯設計方法所無法比擬的優越性。

在設計過程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過但仿真出不了正確的波形,不是計數器無法正常計數,就是控制輸出無法進入到下一個狀態,每次出現問題就必須返回重新修改程序。實踐證明,在編寫一個較復雜的程序時,一開始一定要畫流程圖,弄清楚各個功能及實現它們的邏輯算法,做到心中有數后在開始下筆寫編寫程序。在編寫的時候要尤其要注意語言的規范,如本次設計中編寫的V erilog在Quartus7.0中可以正常生成時序圖,而在低版本的軟件中卻無法生成,原因就是語言使用不規范,在解決這個問題時我總結了一些經驗,首先程序要邏輯清晰,簡潔明了,避免不必要的嵌套與條用,其次要適當地給程序加上注解文字,提高可讀性,以方便之后的程序出錯時進行查找,最后充分利用仿真軟件提供的各項編譯工具與報錯消息,按圖索驥,有方向的完成程序調試。

完成仿真后進行,進行試驗箱上的硬件調試,該步驟主要是要求細心,按照引腳清單,逐一完成連線,本次設計用到兩個時鐘輸入,注意一定要選擇合適頻率的時鐘,以便達到期望的效果。注意觀察實物的現象,看是否滿足設計要求,不滿足時檢查是硬件問題還是程序問題,如果是程序問題,在修改完之后必須要重新編譯,重新燒入。不斷排查錯誤,直至達到滿意的效果。

通過這次課程設計,熟悉了簡單EDA設計的整個流程,加深了對Verilog HDL硬件描述語言的理解,提高了動手能力,并且鍛煉了自己的耐心,收獲頗豐,我會把在本次課程設計中學到的東西應用到今后的工作學習中。最后感謝同學及老師提供的幫助與指導。4.2參考資料

[1] 夏宇聞.復雜數字電路與系統的V erilog HDL設計技術 [M ].北京: 北京航空航天大學出版社, 1998 [2] 郭梯云.移動通信[M ].西安: 西安電子科技大學出版社, 1995 [3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 數字移動通信系統[M ].駱健霞, 顧龍信, 徐云霄譯.北京: 電子工業出版社, 1996 [4] 張毅剛, 喬立巖.虛擬儀器軟件開發環境L abW indow s?CV I 610 編程指南[M ].北京: 機械工業出版社, 2002 [5] 劉國權.GSM 手機的測試[J ].中國無線電管理, 2003 [6] 俞定玖, 劉湘慧.GSM 數字蜂窩移動交換系統測試[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] 康華光.電子技術基礎(數字部分)[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 //設置計數初值 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 //使能有效開始控制計數

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 //倒數計時

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 //倒數計時

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 //數碼管掃描

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 //數碼管譯碼顯示 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

第三篇:基于FPGA的交通燈控制器設計

數字系統課程設計

基于FPGA的交通控制燈設計

姓名:

學號:

班級:

摘要

隨著社會的發展,城市規模的不斷擴大,城市交通成為制約城市發展的一大因素。人口和汽車日益增長,市區交通也日益擁擠,人們的安全問題當然也日益重要。因此,紅綠交通信號燈成為交管部門管理交通的重要工具之一。有了交通燈,人們的安全出行也有了很大的保障。自從交通燈誕生以來,其內部的電路控制系統就不斷的被改進,設計方法也開始多種多樣,從而使交通燈顯得更加智能化。尤其是近幾年來,隨著電子與計算機技術的飛速發展,電子電路分析和設計方法有了很大的改進,電子設計自動化也已經成為現代電子系統中不可或缺的工具和手段,這些都為交通燈控制系統的設計提供了一定的技術基礎。本課程設計運用erilog HDL語言描述交通控制器,通過狀態機計數法,實現設計所要求的交通燈控制及時間顯示,并最后進行了軟件實現,達到了系統要求的功能。

設計原理

1.1設計要求

設計一個交通控制器,用LED顯示燈表示交通狀態,并以7段數碼顯示器顯示當前狀態剩余秒數 主干道綠燈亮時,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變為紅燈的過程中,亮光的黃燈作為過渡,黃燈的時間為5s。能進行特殊狀態顯示,特殊狀態時東西、南北路口均顯示紅燈狀態。用LED燈顯示倒計時,并且能實現總體清零功能,計數器由初始狀態開始計數,對應狀態的顯示燈亮。能實現特殊狀態的功能顯示,1.2設計思路和原理

本次設計是針對十字路口,進行南北和東西直行情況下交通燈控制。設定東西方向為主干道方向,根據交通燈的亮的規則,在初始狀態下四個方向的都為紅燈亮啟,進入正常工作狀態后,當主干道上綠燈亮時,支干道上紅燈亮,持續35S后,主干道和支干道上的黃燈都亮啟,持續5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續25S,之后主干道和支干道上的黃燈都亮啟5s,一個循環完成。循環往復的直行這個過程。其過程如下圖所示:

0s主干道方向25s綠燈亮30s紅燈亮黃燈亮65s支干道方向0s紅燈亮35s綠燈亮黃燈亮60s65s

圖1.交通燈點亮時間控制說明

1.3實現方法

本次采用文本編輯法,即利用Verilog HDL語言描述交通控制器,通過狀態機計數法,實現設計所要求的交通燈控制及時間顯示。設計中用兩組紅黃綠LED模擬兩個方向上的交通燈,用4個7段數碼管分別顯示兩個方向上的交通燈剩余時間,控制時鐘由試驗箱上頻率信號提供。

Verilog HDL程序設計

2.1整體設計

根據上章設計原理,交通燈控制的關鍵是各個狀態之間的轉換和進行適當的時間延時,根據狀態機的設計規范,本次設計了三個狀態之間的循環轉化,其真值表及狀態轉化圖如下所示:

狀狀00狀狀00狀狀10狀狀11狀狀01狀狀01狀狀11狀狀10狀狀狀狀狀狀狀狀狀狀001狀狀狀狀狀010狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀001狀狀狀狀狀010

圖2.交通燈控制狀態轉化

說明:該狀態圖為交通燈在正常情況下的狀態轉化圖,進入控制后,狀態00時主干道綠燈及支干道紅燈亮起,進入狀態01后兩路黃燈亮起,狀態11時主干道紅燈及支干道綠燈亮起。進入10狀態兩路黃燈亮起。結束一個循環,從00狀態重新開始循環。

為實現控制與顯示的功能,需要設計交通燈點亮順序控制程序,倒數計時程序,七段數碼管顯示程序,數碼管顯示掃描程序,其系統結構圖如下所示:

holdrst狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀clk1KHz狀狀狀狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀 圖3.交通燈控制系統結構圖

其中rst為復位信號,clk為時鐘信號,hold為特殊情況控制信號,輸入hold時兩個方向紅燈無條件亮起。

2.2 具體設計

根據整體設計要求,編寫各個功能部分Verilog HDL程序,設置各輸入輸出變量說明如下 clk: 為計數時鐘; qclk:為掃描顯示時鐘;

en: 使能信號,為1 的話,則控制器開始工作; rst: 復位信號,為1的話,控制及技術回到初始狀態;

hoid:特殊情況控制信號,為1的話,則兩個方向無條件顯示為紅燈;

light1: 控制主干道方向四盞燈的亮滅;其中,light1[0]~light[2],分別控制主干道方向的 綠燈、黃燈和紅燈;

light2: 控制支干道方向四盞燈的亮滅;其中,light2[0] ~ light2[2],分別控制支干道方向的 綠燈、黃燈和紅燈;

num1: 用于主干道方向燈的時間顯示,8 位,可驅動兩個數碼管; num2: 用于支干道方向燈的時間顯示,8 位,可驅動兩個數碼管; counter:用于數碼管的譯碼輸出; st1,st2:數碼管掃描信號。輸入輸出及中間變量設置如下:

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.二極管點亮控制

該部分程序的作用是根據計數器的計數值控制發光二極管的亮、滅,以及輸出倒計時數值給七段數碼管的譯碼電路。此外,當檢測到特殊情況(hold=‘1’)發生時,無條件點亮紅燈的二極管,當檢測到復位信號,兩個方向計數與控制回復到00狀態。因為主、支干道兩個方向二極管點亮的順序與延遲時間不同,顧編寫兩個獨立的部分來控制,具體程序如下: 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 //使能有效開始控制計數

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.倒數計時

該部分程序完成二極管發光時延的計數,并將計數結果送到數碼管顯示電路,每切換到一個狀態,計數器的初值都被重置,以實現不同顏色二極管不同的時延要求。本次設計直接用邏輯運算完成2位十進制數的計數,未采用分位器的設計。因為主、支干道上計數器的結構完全相同,顧只列出一路的程序,其具體程序如下所示:

always @(posedge clk)begin else begin //倒數計時

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.數碼管的譯碼及掃描顯示

該段程序主要完成4個7段數碼管的譯碼顯示及掃描,使系統能正常顯示主、支干道兩個方向上的剩余時間。譯碼的時鐘頻率要低,為Hz級。掃描的時鐘頻率要高,最低不得小于人眼分辨頻率50Hz,具體程序如下所示: always @(posedge qclk)begin //數碼管掃描

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 //數碼管譯碼顯示 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 波形仿真

在QuartursⅡ軟件下創建工程,新建編輯設計文件,將程序輸入,整體編譯后,新建波形仿真文件。設置仿真時間,時鐘周期,輸入輸出端口,進行波形仿真。具體仿真波形圖及說明如下所示: 仿真截止時間:100us; 時鐘:clk 1us,qclk 0.1us 1.正常工作時波形仿真圖

圖4.正常工作時波形仿真圖

圖形說明

波形仿真主要完成了控制與計數以及數碼管顯示的波形圖。en為低電品時,計數器置初值,高電平時開始正常控制與計數。控制發光二極管首次輸出為“light1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計數器num1和num2從“00110101”開始遞減計數,計數至“00000000”時,進入下一個狀態,控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計數器num1和num2從“00000101”開始計數遞減,計數至”00000000”時進入下一個狀態,light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮。Counter根據num1,num2變化隨時鐘上升沿輸出譯碼后的數據。由于屏幕顯示大小有限,未仿真出一個完整周期。

2.特殊情況仿真波形

圖5.特殊情況仿真波形

圖形說明

當hold輸入高電平時,在時鐘上升沿的控制下,light 1與light2被強制置位為”100”,表示兩路紅燈均亮起

3.復位情況仿真波形

圖6.復位情況仿真波形

圖形說明

當rst輸入高電平時,在時鐘上升沿控制下,計數與控制都回到00狀態,即light1=001,light2=100,計數器num1和num2從“00110101”開始遞減計數。3.2 硬件調試

完成時序仿真確認無誤后,進行實驗箱管腳設置,注意設置完成后一定要再進行一次全局仿真,使程序真正對應于硬件輸出輸出。具體連接說明如下所示

輸入變量:rst、clk、qclk、hold、en 其中en,hold,rst接”0-1”撥碼開關,以穩定的輸出可變化的電平。計數時鐘clk接實驗箱上1Hz時鐘,掃描顯示時鐘qclk接125Khz時鐘。

輸出變量:light1[2:0]、light2[2:0]、counter[6:0]、st1、st2 其中light1[0]、light2[0]分別接綠色的發光二極管;light1[1]、light2[1] 分別接黃色的發光二極管;light1[2]、light2[2]分別接紅色的發光二極管。counter[0]~counter[6],分別接七段數碼管的a~f,st1、st2分別接試驗箱上”4-16”譯碼器的低兩位。

完成接線后將程序燒寫到芯片上,開始功能調試。分辨改變使能信號,復位信號以及特殊情況信號,觀察數碼管以及發光二級管情況。

程序清單

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 //設置計數初值 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 //使能有效開始控制計數

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 //倒數計時

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 //倒數計時

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 //數碼管掃描

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 //數碼管譯碼顯示 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

總結

在設計中采用V erilog HDL語言設計交通燈控制系統, 借助其功能強大的語言結構, 簡明的代碼描述復雜控制邏輯設計, 與工藝無關特性, 在提高工作效率的同時達到求解目的, 并可以通過V erilog HDL 語言的綜合工具進行相應硬件電路生成, 具有傳統邏輯設計方法所無法比擬的優越性。

在設計過程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過但仿真出不了正確的波形,不是計數器無法正常計數,就是控制輸出無法進入到下一個狀態,每次出現問題就必須返回重新修改程序。實踐證明,在編寫一個較復雜的程序時,一開始一定要畫流程圖,弄清楚各個功能及實現它們的邏輯算法,做到心中有數后在開始下筆寫編寫程序。在編寫的時候要尤其要注意語言的規范,如本次設計中編寫的V erilog在Quartus8.1中可以正常生成時序圖,而在低版本的軟件中卻無法生成,原因就是語言使用不規范,在解決這個問題時我總結了一些經驗,首先程序要邏輯清晰,簡潔明了,避免不必要的嵌套與條用,其次要適當地給程序加上注解文字,提高可讀性,以方便之后的程序出錯時進行查找,最后充分利用仿真軟件提供的各項編譯工具與報錯消息,按圖索驥,有方向的完成程序調試。

完成仿真后進行,進行試驗箱上的硬件調試,該步驟主要是要求細心,按照引腳清單,逐一完成連線,本次設計用到兩個時鐘輸入,注意一定要選擇合適頻率的時鐘,以便達到期望的效果。注意觀察實物的現象,看是否滿足設計要求,不滿足時檢查是硬件問題還是程序問題,如果是程序問題,在修改完之后必須要重新編譯,重新燒入。不斷排查錯誤,直至達到滿意的效果。

通過這次課程設計,熟悉了簡單EDA設計的整個流程,加深了對Verilog HDL硬件描述語言的理解,提高了動手能力,并且鍛煉了自己的耐心,收獲頗豐,我會把在本次課程設計中學到的東西應用到今后的工作學習中。

參考資料

[1] 夏宇聞.復雜數字電路與系統的V erilog HDL設計技術 [M ].北京: 北京航空航天大學出版社, 1998 [2] 郭梯云.移動通信[M ].西安: 西安電子科技大學出版社, 1995 [3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 數字移動通信系統[M ].駱健霞, 顧龍信, 徐云霄譯.北京: 電子工業出版社, 1996 [4] 張毅剛, 喬立巖.虛擬儀器軟件開發環境L abW indow s?CV I 610 編程指南[M ].北京: 機械工業出版社, 2002 [5] 劉國權.GSM 手機的測試[J ].中國無線電管理, 2003 [6] 俞定玖, 劉湘慧.GSM 數字蜂窩移動交換系統測試[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] 康華光.電子技術基礎(數字部分)[M ].北京: 高等教育出版社, 1988

第四篇:基于單片機AT89C51的交通燈控制器的設計

2014屆本科生畢業設計

分類號:TP368.1

題目:基于單片機AT89C51的交通燈控制器的設計

姓 名: 張建猛 學 號 : 2010080870 學 院: 機械與電子工程學院 專 業: 自動化 指導教師職稱: 胡波 劉明

指導教師職稱: 助教(碩士)工程師

2014-05-11

摘 要

本文采用AT89C51單片機芯片為核心控制器件設計的交通燈控制器,該系統主要包括單片機最小系統,按鍵,數碼管顯示,交通燈演示系統。系統主要具有有人行道,交通燈的基本功能,倒計時,緊急情況處理,根據具體情況手動控制等功能。通過AT89C51并接數碼管和發光二極管來實現交通燈的變化規律,P1口設置紅,綠燈點亮時間功能的實現;紅綠燈循環點亮,倒計時剩余10秒時黃燈閃爍警示。本系統的研發周期短,可靠性高,實用性,操作簡單,維護方便,擴展功能強大。本系統軟硬件相結合,通過Proteus軟件仿真,基本實現了交通信號燈的模擬。

關鍵詞:AT89C51;數碼管;交通燈控制器

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.系統的硬件設計.......................................................................................................3

2.1設計原理及方法..............................................................................................3 2.2 AT89C51單片機最小系統..............................................................................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.系統的軟件設計.....................................................................................................10

3.1系統相關參數計算........................................................................................10 3.1.1 T0的計數初值...................................................................................10 3.1.2 倒計時顯示的理論分析....................................................................10 3.1.2 交通燈狀態顯示的理論分析............................................................11 3.2系統主程序設計............................................................................................11 4.系統的 Proteus軟件仿真....................................................................................12 4.1 Proteus仿真圖............................................................................................12 4.2 Proteus仿真的結果分析............................................................................12 結束語.........................................................................................................................14 參考文獻.....................................................................................................................14 致 謝.........................................................................................................................15 附錄:程序源代碼.....................................................................................................16

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

緒 論

隨著人口的迅速增長,道路資源的有限性和交通工具爆炸性的發展,城市交通正面臨著嚴峻考驗,因此造成日益嚴重的交通問題,每天的交通擁堵成了家常便飯但又不得不忍受。在這種情況下,與我國城市道路交通的實際情況相結合,開發出適合我們自身特點的智能信號燈控制系統已成為一個主要的任務。一個好的交通燈控制系統,將給道路擁堵,違章行駛等方面給予技術創新。隨著電子技術的發展,采用單片機技術,能夠智能管理交通燈,已成為目前廣泛使用的方法。

在人類的生活,工作環境中,交通扮演著極其重要的角色,人們的出行與交通時時刻刻打著交道。城市交通控制系統是基于城市交通信號控制技術為主導的發展,與汽車行業的發展并行。在其發展的不同階段,由于交通出現的各種矛盾,人們總是試圖把各個歷史階段的最新科技成果應用到交通自動控制中,從而促進交通自動控制技術不斷發展。

早在1850年,城市交叉路口處安全和擁堵問題引起人們的關注,全球第一個自動交通燈誕生,打開城市交通控制的序幕。在1868年,英國工程師娜奕特在倫敦西部威斯敏斯特街口安裝一個紅色和綠色煤氣照明燈,用來控制交叉路口的馬車通行,但一次煤氣爆炸事故致使交通信號燈消失了近半個世紀。1914年,美國克利夫蘭,紐約和芝加哥重新出現的交通信號燈,他們使用電動驅動,與現在意義的交通信號燈幾乎是一樣的。隨著時代的發展,各種運輸方式和交通管制的需要,第一光名副其實的三色燈(紅,黃,綠)出生于1918年。它的周圍是三色圓形投影機被安裝在紐約市五號街一座高塔上,由于它的誕生,城市交通大大改善。

在近一個世紀的發展,道路交通信號控制系統經歷了一個手動到自動,從固定到靈活配時,從無感應控制到有感應控制,從單點控制到干線控制,從區域控制到網絡控制的長期過程。

交通網絡是城市的動脈,是一個城市的生活經濟水平,工業文明的象征。交通關系到人民對財產,安全和時間相關的利益。憑借優良科學的交通控制技術對資源物流和人們出行是非常有價值的,確保交通安全線的暢通,才能確保舒適的出行,物流按時到位,甚至是生命通道延伸。為了確保安全,高效的交通秩序,除了制定一系列的交通規則,而且還必須通過一定的技術手段來實現。隨著單片機和傳感器技術的迅速發展,自動檢測領域發生了翻天覆地的變化,交通自動檢測控制研究已經取得了顯著的進步,必將以其優良的性能價格比,逐步取代傳統的交通控制措施。

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

1.整體方案設計

1.1 方案分析

交通燈一般設在城市道路的十字路口,可以分為東西方向(主干道)和南北方向(次干道),東西南北四個路口均設有有紅綠黃3種燈和1個二位數碼顯示管。在某一時刻規定只有一個方向可以通行,另一方向被禁行,狀態經過一定的過渡時間,將通行方向和禁行方向相互對換。其具體狀態如下圖所示。(白色表示滅)。通過具體的路口交通燈狀態的演示分析我們可以把這四個狀態歸納如圖1:

圖1 交通燈狀態圖

·東西方向(主干道)紅燈滅,同時綠燈亮,南北方向(次干道)黃燈滅,同時紅燈亮,倒計時顯示60秒。在此種狀態下,東西方向(主干道)允許通行,南北方向(次干道)禁止通行。

·東西方向(主干道)綠燈滅,同時黃燈閃爍,南北方向(次干道)紅燈亮,倒計時顯示10秒。在此種狀態下,除了正在通行中的車輛外,其他所有的車輛都應該等待狀態轉換。

·南北方向(次干道)紅燈滅,同時綠燈亮,東西方向(主干道)黃燈滅,同時紅燈亮,倒計時50秒。在此種狀態下,東西方向(主干道)禁止通行,南北向允許通行。

·南北方向(次干道)綠燈滅,同時黃燈閃爍,東西方向(主干道)紅燈亮,倒計時10秒。在此種狀態下,除了正在通行中的車輛外,其他所有車輛都應該等待狀態轉換。

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

1.2 方案確立

本設計系統以AT89C51單片機為控制核心,連接成最小系統,由倒計時顯示模塊、交通燈顯示模塊、按鍵開關控制模塊組成。軟件部分使用的是C 語言編程,由軟件設置交通燈的初始時間,東西方向(主干道)通行60秒,南北方向(支干道)通行50秒,數碼管采用動態顯示,P0口送字形碼,P2口送字位選通信號,通過單片機的P1口控制各種信號燈的點亮與熄滅,采用中斷方式實現各按鍵的功能。

2.系統的硬件設計

2.1 設計原理及方法

本設計采用模塊化的分層次設計方法,以單片機AT 89C 51為控制核心,連接成最小系統,由倒計時顯示模塊、交通燈顯示模塊、按鍵開關控制模塊等組成。系統的總體框圖如下所示。

圖2 交通燈控制器框圖

本系統采用AT89C51單片機及外圍器件構成最小控制系統,12個發光二極管分成4組紅綠黃三色燈構成信號燈指示模塊,4個數碼管東西南北方向各一個構成倒計時顯示模塊,通過四個按鍵K0、K1、K2、K3模擬控制交通燈東西通行,南北通行,返回,緊急情況各個交通燈工作情況之間相互轉化。

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

2.2 AT89C51單片機最小系統

單片機最小系統一般有晶振、復位、電源、系統的輸入控制、輸出顯示,以及其他外圍模塊(如通信、數據采集等)等模塊組成。2.2.1 復位電路

單片機復位電路原理是在單片機的復位引腳RST上外接電阻和電容,實現上電復位。當復位電平持續兩個機器周期以上時復位有效。復位電平的持續時間必須大于單片機的兩個機器周期。具體數值可以由RC電路計算出時間常數。復位電路由手動復位和上電復位兩部分組成。

(1)上電復位電路要求接通電源后,通過外部電容充電來實現單片機自動復位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要能保持足夠的時間(2個機器周期),單片機就可以進行復位操作。

(2)手動復位:手動復位就是在復位電容上并聯一個開關,當開關按下時電容被放電、RST也被拉到高電平,而且由于電容的充電,會保持一段時間的高電平來使單片機復位。單片機復位期間不產生ALE和PSEN信號,即ALE=1和PSEN=1。這表明單片機復位期間不會有任何取指操作。

圖3 單片機手動復位電路

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

2.2.2 時鐘電路

單片機系統里都有晶振,在單片機系統里晶振作用非常大,全稱叫晶體振蕩器,它結合單片機內部電路產生單片機所需的時鐘頻率,單片機晶振提供的時鐘頻率越高,那么單片機運行速度就越快,單片機的一切指令的執行都是建立在單片機晶振提供的時鐘頻率。單片機晶振的作用是為系統提供基本的時鐘信號。單片機的時鐘電路由外接的一只晶振和兩只起振電容,以及單片機內部的時鐘電路組成,晶振的頻率越高,單片機處理數據的速度越快,系統功耗也會相應增加,穩定性也會下降。

單片機的時鐘電路設計有兩種方式,一種是內部時鐘方式,一種是外部時鐘方式。

在內部時鐘方式下單片機內部的高增益、反相放大器通過XTAL1、XTAL2外接作為反饋元件的外部晶體管振蕩器與電容組成的并聯諧振回路構成一個穩定的自激振蕩器,向內部時鐘電路提供振蕩時鐘。振蕩器的頻率主要取決于晶體的振蕩頻率。外部時鐘方式是把外部已有的時鐘信號引入到單片機內。此方式常用于多片單片機同時工作,以便于各單片機的同步。一般要求外部信號高電平的持續時間大于20μs,且為頻率低于12MHz的方波。本設計采用內部時鐘方式,單片機系統常用的晶振頻率有6MHz、11.0592MHz、12MHz、本系統采用11.0592MHz晶振,電容選22pF或30pF均可。

圖4 單片機時鐘電路

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

2.2.2 EA腳的功能及接法

AT89C51 單片機的EA/VPP(31 腳)是內部和外部程序存儲器的選擇管腳。當EA 保持高電平時,單片機訪問內部程序存儲器;當EA 保持低電平時,則不管是否有內部程序存儲器,只訪問外部存儲器。由于現在單片機內部的flash容量都很大,因此基本都是從內部的存儲器讀取程序,即不需要外接ROM來存儲程序,因此,EA腳必須接高電平。

圖5 單片機最小系統

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

2.3 其它硬件模塊介紹及連接 2.3.1 倒計時顯示模塊

系統要求南北和東西方向的信號燈時間不一樣,所以就利用單片機的P0口送出數據的段碼,位選信號用P2口送出,用動態掃描的方法顯示東西、南北的倒計時間。7段數碼管一般由8個發光二極管組成,其中由7個細長的發光二極管組成數字顯示,另外一個圓形的發光二極管顯示小數點。當發光二極管導通時,相應的一個點或一個筆畫發光。控制相應的二極管導通,就能顯示出各種字符。本設計采用共陰數碼管,需要接上470歐上拉電阻以提供足夠大的電流來驅動數碼管,數碼管的每段的電流是約10毫安。

圖6 數碼管顯示模塊

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

2.3.2 交通燈顯示模塊

本系統利用單片機的P1口來驅動和控制各種信號燈的燃亮和燃亮時間,在實際中,交通燈的信號燈需要用高電壓控制,在這里我們只是模擬一下它的控制信號,所以我們就只用單片機的信號引腳直接來控制發光二極管。發光二極管是半導體二極管的一種,可以把電能轉化成光能,常簡寫為LED。發光二極管與普通二極管一樣是由一個PN結組成,也具有單向導電性。當給發光二極管加上正向電壓后,從P區注入到N區的空穴和由N區注入到P區的電子,在PN結附近數微米內分別與N區的電子和P區的空穴復合,產生自發輻射的熒光。不同的半導體材料中電子和空穴所處的能量狀態不同。當電子和空穴復合時釋放出的能量多少不同,釋放出的能量越多,則發出的光的波長越短。常用的是發紅光、綠光或黃光的二極管。發光二極管的反向擊穿電壓約5伏。它的正向伏安特性曲線

很陡,使用時必須串聯限流電阻以控制通過管子的電流。

圖7 交通燈模塊

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

2.3.3 按鍵控制模塊

本系統設置了有4個鍵:K0鍵,K1鍵,K2鍵,K3鍵。每個按鍵一端接地,另一端接上二極管。低電平有效,當按鍵按下端口接地,單片機捕獲到低電平,從而得到相應的輸入信息。本系統采用了二極管做開關,是為了防止有一按鍵被按下3根線同時被低,中斷無效。二極管在正向電壓作用下電阻很小,處于導通狀態,相當于一只接通的開關;在反向電壓作用下,電阻很大,處于截止狀態,如同一只斷開的開關。利用二極管的開關特性,可以組成各種邏輯電路。

程序開始運行先東西段通行、南北段禁止60s,后南北段通行、東西段禁止50s,依此循環。系統分三種工作模式:南北通行模式、東西通行模式、返回模式、緊急情況模式,并且通過四個按鍵K0、K1、K2、K3實現之間的相互轉化。

圖8 按鍵控制模塊

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

2.3.4 電源模塊

單片機工作時需要的+5V電壓,所以在設計電源電路時,需要一個電子元件能提供+5V電壓,由于78L05能夠提供5V電壓的三端穩壓電源,78L05一腳為電源輸入端,二腳為公共接地端,三腳即為我們所需要的+5V電壓輸出端.本系統采用典型的78L05提供電壓的電路,即在78L05的1腳和公共接地端(即2腳)之間接入0.3μF的電容,在公共接地端和三腳+5V電壓輸出端之間接入0.1μF的電容.圖9 電源模塊

3.系統的軟件設計

3.1 系統相關參數計算 3.1.1 T0的計數初值

T0的計數初值:X=216-12*50*1000/12=15536=3CB0H 3.1.2 倒計時顯示的理論分析

倒計時顯示的理論分析:利用定時器中斷,設TH0=TH1=(65536-50000)/256,即每0.05秒中斷一次。每到第20次中斷即過了20*0.05秒=1秒時,使時間的計數值減1,便實現了倒計時的功能。

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

3.1.2 交通燈狀態顯示的理論分析

狀態燈顯示的理論分析:黃燈閃爍同樣可以利用定時器中斷。每到第10次中斷即過了10*0.05秒=0.5秒時,使黃燈標志位反置,即可讓黃燈1秒閃爍一次。

3.2 系統主程序設計

本系統采用AT89C51單片機實現交通燈的控制,程序的編寫用C語言來完成。系統控制程序可以分為若干模塊:初始化程序,按鍵開關控制程序,交通燈轉換控制程序,LED數碼管顯示程序,按鍵消抖動程序,延時程序,中斷服務子程序等。系統相應的程序流程如圖所示。

圖10 程序流程圖

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

4.系統的 Proteus軟件仿真

4.1 Proteus仿真圖

交通燈控制系統的仿真是通過 proteus 軟件實現的交通燈控制系統仿真效果,仿真如下圖9所示:

圖11 仿真圖

4.2 Proteus仿真的結果分析

Proteus仿真實現東西方向和南北方向的十字路口的車輛相互交替通過,東西方向(主干道)每次通行時間設置為60秒、南北方向(次干道)通行時間設置為50秒。同時可以實現紅燈、黃燈、綠燈各狀態之間的相互轉換,黃燈閃爍時間設置為10秒,數碼管可以準確進行倒計時顯示。按下東西放行鍵K0,東西方向(主干道)綠燈亮,南北方向(次干道)紅燈亮;按下南北放行鍵K1,南北方向(次干道)綠燈亮,東西方向(主干道)紅燈亮;無論在任何時候按下返回鍵K2,該控制系統都將返回到初始狀態;若遇緊急情況,按下緊急情況按鍵K3,東西南北方向都亮紅燈,實現主干道和支干道全部禁止通行;模擬了控制交通燈東西方向(主干道)通行,南北方向(次干道)通行,返回,緊急情況各個交通燈工作情況之間相互轉化,實現了課程設計的要求。宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

結束語

通過這次畢業設計,使我受益匪淺。使我在軟硬件結合的綜合運用能力上有了進一步的提升,對課堂上所學的單片機知識有了進一步的加深和鞏固,在C語言的掌握方面也向前邁了一大步,在老師和同學的幫助下,提高了個人分析解決實際問題的綜合能力以及協同合作的能力,同時還鍛煉了我查閱資料的能力、動手能力、發現問題、解決問題的能力。面對電腦搜索資料,一點點,一塊塊的電路慢慢拼成完整的電路經過一次次的反復修改終于設計出了屬于自己的程序和電路,雖然還有諸多不足之處,不過使自己真正的體會到了探索事物的奧秘的快樂,同時自己也更深入的了解到了單片機的巨大的潛力,雖然有的時候可能遇到了一些困難,但是我最終解決了,我也會感覺到成功給我帶來的喜悅,我知道我在專業知識上的掌握還是遠遠不夠的,我還要更加努力的去學習,提高自己了實踐能力。

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

參考文獻

[1] 楊素行.模擬電子技術[M].北京:高等教育出版社.2006 [2] 余孟嘗.數字電子技術[M].北京:高等教育出版社. 2006 [3] 邱關源,羅先覺.電路[M].北京:高等教育出版社.2011 [4] 張毅剛.單片機原理及應用[M].北京:高等教育出版社.2011 [5] 凌志浩.AT89C52單片機原理與接口技術[M].北京:高等教育出版社.2011 [6] 郭循釗,鄺帆.基于單片機的多功能交通燈控制系統設計與仿真實現[J].公路交通技術.2010 [7] 劉日華,宋海.基于單片機的交通燈設計[J].科技致富向導.2012 [9] 高文慶,呂英英. 基于AT89C51單片機的數字秒表設計[J]. 電腦知識與技術.2012 [10] 譚浩強著,C程序設計 第三版[M].清華大學出版社.2006 [11] 彭虎,周佩玲. 微機原理與接口技術[M].電子工業出版社.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

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

致 謝

本畢業設計在胡波和劉明老師的親切關懷和悉心指導以及同學們的熱心幫助下完成的。感謝他們在此次畢業設計過程中給予我的悉心指導與各方面的幫助,他們給了我許多非常有益的建議和意見,使我在思路上得到了很大的啟發,從中認識到了自己存在的不足,并且學到了很多非常寶貴的知識。同時也要感謝系里其它同學和我的朋友在設計中給我提供的幫助和支持。總的來說,這次設計給了我一個很好的鍛煉機會,讓我學到了很多東西,讓我將自己所掌握的理論知識切實運用于工作和生活實踐中,這不僅有利于加深對書本知識的理解和鞏固,而且在很大程度上提高了我們在理論知識的指導下觀察、分析和解決問題的能力。最后,再次向所有幫助過我的老師、同學表示衷心的感謝!謝謝你們!宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

附錄:程序源代碼

/*#include */ #include #define uchar unsigned char uchar duanma[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};uchar code weima[4]={0x0D,0x0E,0x07,0x0B};uchar code deng[4]={0xDE,0xDD,0xF3,0xEB};char SN=50,WE=60;char SN_G=50,WE_G=40,Y=10;uchar i,k=0,count=0;void delayms(uchar ms);void light();void led();sbit K0=P3^7;sbit K1=P3^6;sbit K2=P3^3;sbit K3=P3^5;/*程序初始化*/ void init(void){ /*12MHz */ TMOD=0x01;TH1=(65536-50000)/256;/*0x3C*/ TL1=(65536-50000)%256;/*0xB0*//*計50000個數,用時50ms*/ IT0=1;/*外部中斷0為邊沿觸發方式*/ ET0=1;/*允許T0中斷*/ TR0=1;/*啟動計數器*/ EA=1;/*CPU開放總中斷*/ EX0=1;/*允許外部中斷0中斷,即允許響應端口P3^2(K4)中斷*/ EX1=1;/*允許外部中斷1中斷,即允許響應端口P3^3(K2)中斷*/ } /*延時ms毫秒*/ void delayms(uchar ms)

code 宿州學院本科生畢業設計

基于單片機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];/*南北方向數碼管顯示可通行 while(1)/*無條件循環*/ 時間的個位*/ delayms(10);/*延時*/

P2=weima[1],P0=duanma[(SN_G+Y)/10];/*南北方向數碼管顯示可通行 delayms(10);/*延時*/ 時間的十位*/ P2=weima[2],P0=duanma[(WE_G+Y)%10];/*東西方向數碼管顯示可通行時間的個位*/ delayms(10);/*延時*/

P2=weima[3],P0=duanma[(WE_G+Y)/10];/*東西方向數碼管顯示可通行時間的十位*/

/*設置南北方向通行時間*/ if(K0==0)/*P3^7=0*/ { delayms(10);/*延時*/ 17 宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

delayms(20);/*延時,把抖動的時間拋掉*/ if(K0==0)*/ { } SN_G++;/*南北方向綠燈時間+1*/ if(SN_G==100)SN_G=0;/*由于使用的是兩位數碼管,當南北方向綠燈時間加到100后清零*/ }

} /*設置東西方向通行時間*/ if(K1==0)/*P3^6=0*/ { { while(K0==0)/*當松開K0開關時,跳出空循環,執行后面的程序 delayms(20);/*延時,把抖動的時間拋掉*/ if(K1==0){ while(K1==0)/*當松開K1開關時,跳出空循環,執行后面的程序*/ { } WE_G++;/*東西方向綠燈時間+1*/ if(WE_G==100)WE_G=0;/*由于使用的是兩位數碼管,當東西方向綠燈時間加到100后清零*/ }

} /*返回*/ if(K3==0)/*P3^5=0*/ delayms(20);/*延時,把抖動的時間拋掉*/ if(K3==0){ { 18 宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

while(K3==0)/*當松開K3開關時,跳出空循環,執行后面的程

{ } count=0;/*清零*/ k=0;/*南北方向通車,東西方向不通車*/ SN=SN_G,WE=SN_G+Y;/*南北方向顯示時間為南北方向綠燈通行序*/ 時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮時間*/ light();/*調用交通燈函數*/

led();/*調用數碼管函數*/ EA=1;/*CPU開放總中斷*/

break;/*跳出*/ }

} } } /*中斷1處理程序*/ {

P1=0xF6,P0=duanma[0];/*東西南北方向均紅燈亮,P0口輸出0*/ TR0=!TR0;/*計數器停止工作*/ {/*數碼管掃描程序,*/ P2=weima[0];/*顯示南北方向個位*/ delayms(10);/*延時*/ delayms(10);/*延時*/ P2=weima[2];/*顯示東西方向個位*/ delayms(10);/*延時*/ P2=weima[3];/*顯示東西方向十位*/ delayms(10);/*延時*/ /*返回*/ EA=0;/*CPU禁止響應一切中斷*/ while(1)/*無條件循環*/

void int1(void)interrupt 2 P2=weima[1];/*顯示南北方向十位*/ if(K3==0)/*P3^5=0*/ { 19 宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

delayms(20);/*延時,把抖動的時間拋掉*/

if(K3==0){ while(K3==0)/*當松開K3開關時,跳出空循環,執行后面的程序*/

{ } TR0=!TR0;/*啟動計數器*/ EA=1;/*CPU開放總中斷*/

break;/*跳出*/

}

} } } /*鍵盤程序*/ void key(){ /*南北有車而東西無車*/ if(K0==0)/*K0=0*/ { delayms(20);/*延時,把抖動的時間拋掉*/ if(K0==0){ while(K0==0)/*當松開K0開關時,跳出循環,執行后面的程序*/ { light();/*調用交通燈函數*/ led();/*調用數碼管函數*/ } count=0;/*清零*/ k=0;/*南北方向通車,東西方向不通車*/ SN=SN_G,WE=SN_G+Y;/*南北方向顯示時間為南北方向綠燈通行時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮時間*/ light();/*調用交通燈函數*/ led();/*調用數碼管函數*/ } }

宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

/*南北無車而東西有車*/ if(K1==0)/*K1=0*/ { delayms(20);/*延時,把抖動的時間拋掉*/ if(K1==0){ while(K1==0)/*當松開K1開關時,跳出循環,執行后面的程序*/ { light();/*調用交通燈函數*/ led();/*調用數碼管函數*/ } count=0;/*清零*/ k=1;/*南北方向不通車,東西方向通車*/ SN=WE_G+Y,WE=WE_G;/*南北方向顯示時間為東西方向綠燈通行時間加黃燈閃亮時間,東西方向顯示時間為東西方向綠燈通行時間*/ light();/*調用交通燈函數*/

} /*定時函數*/ void time1(void)interrupt 1 {

TH0=0x3c;TL0=0xb0;/*計50000個數,用時50ms*/ count++;/*自增運算*/ if(count>=20)/*當count大于或等于20時,歷時1s,執行程序*/ { SN--;/*自減運算*/ WE--;/*自減運算*/ count=0;/*清零*/ if(SN==0||WE==0)/*當SN=0或者WE=0時,執行程序*/ { } led();/*調用數碼管函數*/ } k++;/*自增運算*/ if(k>3)/*當k>3時,執行程序*/ 21 宿州學院本科生畢業設計

基于單片機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;/*東西南北方向顯示時間均為黃燈閃亮時間*/ } } } /*交通燈函數*/ void light(){

P1=deng[k];/*交通燈對應著k的值變化*/ if(P1==deng[1]&&count==0)/*當南北方向亮黃燈且count=0時,執行程序*/

{ TH1=(65536-50000)/256;

} TL1=(65536-50000)%256;/*延時50ms*/

P1=0xDF;/*南北方向黃燈熄滅,東西方向亮紅燈*/ } else if(P1==deng[3]&&count==0)/*當東西方向亮黃燈且count=0時,執行程序*/ { TH1=(65536-300000)/256;

TL1=(65536-300000)%256;/*延時50ms*/ P1=0xFB;/*南北方向亮紅燈,東西方向黃燈熄滅*/ 22 宿州學院本科生畢業設計

基于單片機AT89C51的交通燈控制器的設計

} } /*數碼管函數*/ void led(){

} /*主函數*/

void main(void){

init();/*調用程序初始化函數*/ { key();/*調用鍵盤程序*/ light();/*調用交通燈函數*/ led();/*調用數碼管函數*/ } while(1)/*無條件循環*/ 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實現方法..........................................................................................................................................1 第二章

Verilog HDL程序設計...................................................................................................2

2.1整體設計...........................................................................................................................22.2 具體設計..........................................................................................................................3

第三章

仿真與硬件調試.........................................................................................................................7

3.1 波形仿真..........................................................................................................................7

3.2 硬件調試..........................................................................................................................9

第四章

設計總結.....................................................................................................................10 程序清單.....................................................................................................................................11 參考資料.....................................................................................................................................15

交通燈控制器設計

第一章

設計原理

1.1設計要求

設計一個交通控制器,用LED顯示燈表示交通狀態,并以7段數碼顯示器顯示當前狀態剩余秒數 主干道綠燈亮時,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變為紅燈的過程中,亮光的黃燈作為過渡,黃燈的時間為5s。能進行特殊狀態顯示,特殊狀態時東西、南北路口均顯示紅燈狀態。用LED燈顯示倒計時,并且能實現總體清零功能,計數器由初始狀態開始計數,對應狀態的顯示燈亮。能實現特殊狀態的功能顯示,1.2設計思路和原理

本次設計是針對十字路口,進行南北和東西直行情況下交通燈控制。設定東西方向為主干道方向,根據交通燈的亮的規則,在初始狀態下四個方向的都為紅燈亮啟,進入正常工作狀態后,當主干道上綠燈亮時,支干道上紅燈亮,持續35S后,主干道和支干道上的黃燈都亮啟,持續5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續25S,之后主干道和支干道上的黃燈都亮啟5s,一個循環完成。循環往復的直行這個過程。其過程如下圖所示:

0s主干道方向25s綠燈亮30s紅燈亮黃燈亮65s支干道方向0s紅燈亮35s綠燈亮黃燈亮60s65s

圖1.交通燈點亮時間控制說明

1.3實現方法

本次采用文本編輯法,即利用Verilog HDL語言描述交通控制器,通過狀態機計數法,實現設計所要求的交通燈控制及時間顯示。設計中用兩組紅黃綠LED模擬兩個方向上的交通燈,用4個7段數碼管分別顯示兩個方向上的交通燈剩余時間,控制時鐘由試驗箱上頻率信號提供。

第二章

Verilog HDL程序設計

2.1整體設計

根據上章設計原理,交通燈控制的關鍵是各個狀態之間的轉換和進行適當的時間延時,根據狀態機的設計規范,本次設計了三個狀態之間的循環轉化,其真值表及狀態轉化圖如下所示:

狀狀00狀狀00狀狀10狀狀11狀狀01狀狀01狀狀11狀狀10狀狀狀狀狀狀狀狀狀狀001狀狀狀狀狀010狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀001狀狀狀狀狀010

圖2.交通燈控制狀態轉化

說明:該狀態圖為交通燈在正常情況下的狀態轉化圖,進入控制后,狀態00時主干道綠燈及支干道紅燈亮起,進入狀態01后兩路黃燈亮起,狀態11時主干道紅燈及支干道綠燈亮起。進入10狀態兩路黃燈亮起。結束一個循環,從00狀態重新開始循環。

為實現控制與顯示的功能,需要設計交通燈點亮順序控制程序,倒數計時程序,七段數碼管顯示程序,數碼管顯示掃描程序,其系統結構圖如下所示:

holdrst狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀clk1KHz狀狀狀狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀

圖3.交通燈控制系統結構圖

其中rst為復位信號,clk為時鐘信號,hold為特殊情況控制信號,輸入hold時兩個方向紅燈無條件亮起。

2.2 具體設計

根據整體設計要求,編寫各個功能部分Verilog HDL程序,設置各輸入輸出變量說明如下 clk: 為計數時鐘; qclk:為掃描顯示時鐘;

en: 使能信號,為1 的話,則控制器開始工作; rst: 復位信號,為1的話,控制及技術回到初始狀態;

hoid:特殊情況控制信號,為1的話,則兩個方向無條件顯示為紅燈;

light1: 控制主干道方向四盞燈的亮滅;其中,light1[0]~light[2],分別控制主干道方向的 綠燈、黃燈和紅燈;

light2: 控制支干道方向四盞燈的亮滅;其中,light2[0] ~ light2[2],分別控制支干道方向的 綠燈、黃燈和紅燈;

num1: 用于主干道方向燈的時間顯示,8 位,可驅動兩個數碼管; num2: 用于支干道方向燈的時間顯示,8 位,可驅動兩個數碼管; counter:用于數碼管的譯碼輸出; st1,st2:數碼管掃描信號。輸入輸出及中間變量設置如下:

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.二極管點亮控制

該部分程序的作用是根據計數器的計數值控制發光二極管的亮、滅,以及輸出倒計時數值給七段數碼管的譯碼電路。此外,當檢測到特殊情況(hold=‘1’)發生時,無條件點亮紅燈的二極管,當檢測到復位信號,兩個方向計數與控制回復到00狀態。因為主、支干道兩個方向二極管點亮的順序與延遲時間不同,顧編寫兩個獨立的部分來控制,具體程序如下: 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 //使能有效開始控制計數

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.倒數計時

該部分程序完成二極管發光時延的計數,并將計數結果送到數碼管顯示電路,每切換到一個狀態,計數器的初值都被重置,以實現不同顏色二極管不同的時延要求。本次設計直接用邏輯運算完成2位十進制數的計數,未采用分位器的設計。因為主、支干道上計數器的結構完全相同,顧只列出一路的程序,其具體程序如下所示:

always @(posedge clk)begin else begin //倒數計時

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.數碼管的譯碼及掃描顯示

該段程序主要完成4個7段數碼管的譯碼顯示及掃描,使系統能正常顯示主、支干道兩個方向上的剩

余時間。譯碼的時鐘頻率要低,為Hz級。掃描的時鐘頻率要高,最低不得小于人眼分辨頻率50Hz,具體程序如下所示: always @(posedge qclk)begin //數碼管掃描

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 //數碼管譯碼顯示 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 波形仿真

在QuartursⅡ軟件下創建工程,新建編輯設計文件,將程序輸入,整體編譯后,新建波形仿真文件。設置仿真時間,時鐘周期,輸入輸出端口,進行波形仿真。具體仿真波形圖及說明如下所示: 仿真截止時間:100us; 時鐘:clk 1us,qclk 0.1us 1.正常工作時波形仿真圖

圖4.正常工作時波形仿真圖

圖形說明

波形仿真主要完成了控制與計數以及數碼管顯示的波形圖。en為低電品時,計數器置初值,高電平時開始正常控制與計數。控制發光二極管首次輸出為“light1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計數器num1和num2從“00110101”開始遞減計數,計數至“00000000”時,進入下一個狀態,控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計數器num1和num2從“00000101”開始計數遞減,計數至”00000000”時進入下一個狀態,light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮。Counter根據num1,num2變化隨時鐘上升沿輸出譯碼后的數據。由于屏幕顯示大小有限,未仿真出一個完整周期。

2.特殊情況仿真波形

圖5.特殊情況仿真波形

圖形說明

當hold輸入高電平時,在時鐘上升沿的控制下,light 1與light2被強制置位為”100”,表示兩路紅燈均亮起 3.復位情況仿真波形

圖6.復位情況仿真波形

圖形說明

當rst輸入高電平時,在時鐘上升沿控制下,計數與控制都回到00狀態,即light1=001,light2=100,計數器num1和num2從“00110101”開始遞減計數。3.2 硬件調試

完成時序仿真確認無誤后,進行實驗箱管腳設置,注意設置完成后一定要再進行一次全局仿真,使程序真正對應于硬件輸出輸出。具體連接說明如下所示

輸入變量:rst、clk、qclk、hold、en 其中en,hold,rst接”0-1”撥碼開關,以穩定的輸出可變化的電平。計數時鐘clk接實驗箱上1Hz時鐘,掃描顯示時鐘qclk接125Khz時鐘。

輸出變量:light1[2:0]、light2[2:0]、counter[6:0]、st1、st2 其中light1[0]、light2[0]分別接綠色的發光二極管;light1[1]、light2[1] 分別接黃色的發光二極管;light1[2]、light2[2]分別接紅色的發光二極管。counter[0]~counter[6],分別接七段數碼管的a~f,st1、st2分別接試驗箱上”4-16”譯碼器的低兩位。

完成接線后將程序燒寫到芯片上,開始功能調試。分辨改變使能信號,復位信號以及特殊情況信號,觀察數碼管以及發光二級管情況,實物照片如下所示:

圖7.硬件實物圖

第四章

設計總結

在設計中采用V erilog HDL語言設計交通燈控制系統, 借助其功能強大的語言結構, 簡明的代碼描述復雜控制邏輯設計, 與工藝無關特性, 在提高工作效率的同時達到求解目的, 并可以通過V erilog HDL 語言的綜合工具進行相應硬件電路生成, 具有傳統邏輯設計方法所無法比擬的優越性。

在設計過程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過但仿真出不了正確的波形,不是計數器無法正常計數,就是控制輸出無法進入到下一個狀態,每次出現問題就必須返回重新修改程序。實踐證明,在編寫一個較復雜的程序時,一開始一定要畫流程圖,弄清楚各個功能及實現它們的邏輯算法,做到心中有數后在開始下筆寫編寫程序。在編寫的時候要尤其要注意語言的規范,如本次設計中編寫的V erilog在Quartus7.0中可以正常生成時序圖,而在低版本的軟件中卻無法生成,原因就是語言使用不規范,在解決這個問題時我總結了一些經驗,首先程序要邏輯清晰,簡潔明了,避免不必要的嵌套與條用,其次要適當地給程序加上注解文字,提高可讀性,以方便之后的程序出錯時進行查找,最后充分利用仿真軟件提供的各項編譯工具與報錯消息,按圖索驥,有方向的完成程序調試。

完成仿真后進行,進行試驗箱上的硬件調試,該步驟主要是要求細心,按照引腳清單,逐一完成連線,本次設計用到兩個時鐘輸入,注意一定要選擇合適頻率的時鐘,以便達到期望的效果。注意觀察實物的現象,看是否滿足設計要求,不滿足時檢查是硬件問題還是程序問題,如果是程序問題,在修改完之后必須要重新編譯,重新燒入。不斷排查錯誤,直至達到滿意的效果。

通過這次課程設計,熟悉了簡單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 //設置計數初值 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 //使能有效開始控制計數

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 //倒數計時

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 //倒數計時

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 //數碼管掃描

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 //數碼管譯碼顯示 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] 夏宇聞.復雜數字電路與系統的V erilog HDL設計技術 [M ].北京: 北京航空航天大學出版社, 1998 [2] 郭梯云.移動通信[M ].西安: 西安電子科技大學出版社, 1995 [3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 數字移動通信系統[M ].駱健霞, 顧龍信, 徐云霄譯.北京: 電子工業出版社, 1996 [4] 張毅剛, 喬立巖.虛擬儀器軟件開發環境L abW indow s?CV I 610 編程指南[M ].北京: 機械工業出版社, 2002 [5] 劉國權.GSM 手機的測試[J ].中國無線電管理, 2003 [6] 俞定玖, 劉湘慧.GSM 數字蜂窩移動交換系統測試[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] 康華光.電子技術基礎(數字部分)[M ].北京: 高等教育出版社, 1988

下載交通燈控制器設計實驗報告word格式文檔
下載交通燈控制器設計實驗報告.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    數字系統課程設計交通燈控制器

    東南大學 《數字系統課程設計》 設計報告 項目名稱: 交通燈控制器 姓名: 學號:專業:實 驗 室: 電工電子實驗中心 組別: 無同組人員: 無 設計時間: 2016 年8 月 26 日 ——2016 年......

    FPGA交通燈實驗報告

    交通燈實驗報告 一, 實驗目的 實現兩路信號燈交替亮起,并利用兩組數碼管分別對兩路信號進行倒計時。 兩路信號時間分別為: V:綠燈(30S) H:紅燈(35S) 黃燈(5s) 綠燈(30S) 紅燈(35S) 黃燈......

    基于FPGA的(帶有緊急情況處理的)交通燈控制器的設計.

    學號成績 評語 《現代數字系統設計》課程論文 題目基于FPGA的(帶有緊急情況處理的交通燈控制器的設計 作者班級 院別信息與通信工程專業電子信息工程完成時間 2011年5月12日......

    單片機交通燈綜合實驗報告(大全5篇)

    河 北 工 業 大 學 實驗報告 學院: 專業:班級: 姓名:學號:實驗課程:單片機應用系統設計開發入門 指導教師: 實驗名稱: 交通信號燈控制實驗實驗時間:2019 年5月 23 日2019 年 5 月 23......

    北郵數字邏輯小學期交通燈控制器

    實驗一交通燈控制器 一、 實驗目的 a) 熟練掌握 VHDL語言和QuartusII軟件的使用。 b) 用VHDL進行較復雜邏輯電路的設計和調試。 c) 熟練掌握isp期間的下載方法。 d) 理解狀......

    單片機:交通燈控制系統設計范文大全

    交通燈控制系統設計 摘要:本系統由單片機系統、鍵盤、LED 顯示、交通燈演示系統組成。系統包括人行道、左轉、右轉、以及基本的交通燈的功能。系統除基本交通燈功能外,還具有......

    基于單片機的交通燈設計

    基于單片機的交通燈設計 設計程序: #include #define uchar unsigned char /**************************變量、控制位定義**************************/ uchar code table[10......

    交通燈設計心得體會5篇

    設計心得, 一個簡單的交通燈控制系統終于做完,,總的來說就只實現兩個功能,1 紅綠黃燈的交替點亮。2,顯示每種燈的倒計時,其實,就是一個的狀態機,四個狀態的變換,剛開始,。我按照書上的......

主站蜘蛛池模板: 久久久久久久久久久免费精品| 精品综合久久久久久97| 最新国产毛2卡3卡4卡| 久久亚洲精品无码aⅴ大香| 四虎影视在线影院在线观看免费视频| 精品无码一区二区三区| 国产乱了伦视频大全亚琴影院| 精品久久久无码人妻中文字幕| 久久久久国产精品麻豆ar影院| 色欲天天天无码视频| 丰满的熟妇岳中文字幕| 国产乱人伦无无码视频试看| 日韩精品无码人妻一区二区三区| 最近中文字幕视频完整版在线看| 中文字幕av无码免费久久| 人人妻人人妻人人片色av| 亚洲精品久久久久久| 青青狠狠噜天天噜日日噜| 大香网伊人久久综合网2018| 日韩一区二区三区射精-百度| 窝窝午夜理论片影院| 少妇做爰免费视看片| 国产日产欧产精品精品app| 国产av无码专区亚洲精品| 国产精品免费麻豆入口| 四虎国产精品免费久久久| 中文字幕无码精品亚洲资源网久久| 国产成人精品日本亚洲| 中文字幕亚洲情99在线| 久久精品第一国产久精国产宅男66| 欧美精品成人v高清视频| 亚洲欧美日韩在线码| 亚洲精品一区三区三区在线观看| 亚洲色大18成人网站www在线播放| 国产精品久久久久久久久久免费| 亚洲一卡2卡3卡4卡5卡乱码观看| 亚洲精品自偷自拍无码忘忧| 性色av蜜臀av色欲av| 成人禁片免费播放35分钟| 无码一区二区免费波多野播放搜索| 国语精品一区二区三区|