找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4207|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的交通燈Proteus仿真程序 一個(gè)數(shù)碼管顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
  設(shè)計(jì)一個(gè)十字路口的交通燈控制電路,要求南北方向和東西方向兩個(gè)交叉路口的車輛交替運(yùn)行。
    2) 每次綠燈變紅燈時(shí),要求黃燈先亮5S,才能變換運(yùn)行車輛.
    3) 東西方向、南北方向車道除了有紅、黃、綠燈指示外,每一種燈亮的時(shí)間都用數(shù)碼管顯示器進(jìn)行顯示(采用LED倒計(jì)時(shí)的方法)

  附件有仿真電路,程序,框圖,參考文檔等等

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


制作出來(lái)的實(shí)物圖如下:


整個(gè)系統(tǒng)的構(gòu)成以STC89C52RC單片機(jī)為核心,由I/O口擴(kuò)展,LED數(shù)碼管顯示,還有復(fù)位電路、時(shí)鐘電路等組成。單片機(jī)作為整個(gè)硬件系統(tǒng)的核心,它既是協(xié)調(diào)整機(jī)工作的控制器,又是數(shù)據(jù)處理器。它由單片機(jī)、晶振電路、復(fù)位電路等組成。

行車方向指示采用LED發(fā)光二極管,可有紅、綠兩種顏色指示放行與禁止,黃燈作為紅綠轉(zhuǎn)換的提示,形象直觀。系統(tǒng)采用雙數(shù)碼管倒計(jì)時(shí)計(jì)數(shù)功能,最大顯示數(shù)字99。

3 系統(tǒng)硬件設(shè)計(jì)
3.1交通燈通行模式及行車方向指示

按交通燈控制規(guī)則,每個(gè)道口有紅、黃、綠三種指示燈,交道口模型如圖2.1所示:

圖3.1  交道口模型圖




2組LED數(shù)碼管按照設(shè)置的通行時(shí)間(各路口默認(rèn)的通行時(shí)間均為30s)進(jìn)行倒計(jì)時(shí),倒計(jì)時(shí)到5S時(shí),綠燈變成黃燈,并各自進(jìn)行紅、黃、綠燈顯示,共有兩種通行方式分別為:

圖3.2  通行方式一示意圖                       圖3.3  通行方式二示意圖


通行方式一:倒計(jì)時(shí)時(shí)間為30s(通行時(shí)間),紅綠燈狀態(tài)為:東西通行:綠,南北禁行:紅;如圖3.2所示。              

通行方式二:倒計(jì)時(shí)時(shí)間為30s(通行時(shí)間),紅綠燈狀態(tài)為:南北通行:綠;東西禁行:紅;如圖3.3所示。

通行默認(rèn)時(shí)間為30s,系統(tǒng)設(shè)置了任意更改功能,可以根據(jù)實(shí)際情況進(jìn)行調(diào)整,以提高車輛通過(guò)率,緩減交通壓力。在通行結(jié)束前5秒鐘,黃燈亮直至結(jié)束。本設(shè)計(jì)選用LED發(fā)光二極管的紅綠燈狀態(tài)用來(lái)指示交通指示信息。綠色表示通行,紅色則表示禁止通行,黃燈等待。你所有指示信息一目了然。


3.2各單元電路模塊功能3.2.1時(shí)鐘電路模塊

時(shí)鐘電路由一個(gè)晶體振蕩器12MHZ和兩個(gè)30pF的瓷片電容組成。時(shí)鐘電路用于產(chǎn)生單片機(jī)工作所需的時(shí)鐘信號(hào),而時(shí)序所研究的是指令執(zhí)行中各信號(hào)之間的相互關(guān)系。單片機(jī)本身就是一個(gè)復(fù)雜的同步時(shí)序電路,為了保證同步工作方式的實(shí)現(xiàn),電路應(yīng)在唯一的時(shí)鐘信號(hào)控制下嚴(yán)格地工作。其電路如圖3.4所示:


                    
圖3.4  時(shí)鐘電路模塊

3.2.2復(fù)位電路模塊

    電容在上接高電平,電阻在下接地,中間為RST。這種復(fù)位電路為高電平復(fù)位。其工作原理是:通電時(shí),電容兩端相當(dāng)于是短路,于是RST引腳上為高電平,然后電源通過(guò)電阻對(duì)電容充電,RST端電壓慢慢下降,降到一定程度,即為低電平,單片機(jī)開始正常工作。其電路如圖3.5所示:


圖3.5  復(fù)位電路模塊

3.2.3主控制系統(tǒng)模塊

主控制器采用STC89C52RC,STC89C52RC 單片機(jī)是宏晶科技推出的新一代高速/低功耗/超強(qiáng)抗干擾的單 片機(jī),指令代碼完全兼容傳統(tǒng) 8051 單片機(jī),12 時(shí)鐘/機(jī)器周期和 6 時(shí)鐘/機(jī)器周 期可以任意選擇。

其特點(diǎn)如下:

1. 增強(qiáng)型 8051 單片機(jī),6 時(shí)鐘/機(jī)器周期和 12 時(shí)鐘/機(jī)器周期可以任 意選擇,指令代碼完全兼容傳統(tǒng) 8051.

2. 工作電壓:5.5V~3.3V(5V 單片機(jī))/3.8V~2.0V(3V 單片機(jī))

3. 工作頻率范圍:0~40MHz,相當(dāng)于普通 8051 的 0~80MHz,實(shí)際工 作頻率可達(dá) 48MHz

4. 用戶應(yīng)用程序空間為 8K 字節(jié)

5. 片上集成 512 字節(jié) RAM

6. 通用 I/O 口 (32 個(gè)) 復(fù)位后為: , P1/P2/P3/P4 是準(zhǔn)雙向口/弱上拉, P0 口是漏極開路輸出,作為總線擴(kuò)展用時(shí),不用加上拉電阻,作為 I/O 口用時(shí),需加上拉電阻。

7. ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程) ,無(wú)需專用編程器,無(wú) 需專用仿真器,可通過(guò)串口(RxD/P3.0,TxD/P3.1)直接下載用戶程 序,數(shù)秒即可完成一片

8. 具有 EEPROM 功能

9. 具有看門狗功能

10. 共 3 個(gè) 16 位定時(shí)器/計(jì)數(shù)器。即定時(shí)器 T0、T1、T2

11. 外部中斷 4 路,下降沿中斷或低電平觸發(fā)電路,Power Down 模式可 由外部中斷低電平觸發(fā)中斷方式喚醒

12. 通用異步串行口(UART) ,還可用定時(shí)器軟件實(shí)現(xiàn)多個(gè) UART

13. 工作溫度范圍:-40~+85℃(工業(yè)級(jí))/0~75℃(商業(yè)級(jí))

14. DIP 封裝



圖3.6主控置系統(tǒng)模塊電路

3.2.4交通燈輸出控制模塊
    道口交通燈指示采用紅、黃、綠發(fā)光二極管進(jìn)行提示。其圖如圖3.7所示:

圖3.7LED顯示模塊電路

當(dāng)R=1000歐時(shí),按公式A=(5-1.8)/R計(jì)算,電路中的電流大小應(yīng)為A=3.2mA。由于每個(gè)路口的通行雙向指示處理相同,因此每個(gè)端口應(yīng)具有6.4mA的吸收電流能力。


3.2.5時(shí)間顯示電路模塊

考慮設(shè)計(jì)需要,我們?cè)诟鱾(gè)方向分別用二位數(shù)碼管用來(lái)顯示倒計(jì)時(shí)時(shí)間,構(gòu)成交通提示信息,形象逼真。本系統(tǒng)使用數(shù)碼管完成倒計(jì)時(shí)顯示功能。以方向東西為為例,數(shù)碼管顯示的數(shù)值從綠燈的設(shè)置時(shí)間最大值往下減,每秒鐘減1,一直減到0。然后又從紅燈的設(shè)置時(shí)間最大值往下減,一直減到0。接下來(lái)又顯示綠燈時(shí)間,如此循環(huán)。

系統(tǒng)共有1個(gè)二位的LED 數(shù)碼管,分別放置在模擬交通燈控制板上四組交通燈中間。四個(gè)方向上都應(yīng)該顯示同樣的內(nèi)容,所以我們可以把它們同樣對(duì)待,只用了一組數(shù)碼管來(lái)模擬。也就是說(shuō)各個(gè)方向的數(shù)碼管個(gè)位(把數(shù)碼管第二位定義為個(gè)位,第一位定義為十位)用一根信號(hào)線控制,十位用另一根信號(hào)線控制。

道口通行剩余時(shí)間采用紅色7段數(shù)碼管顯示,采用共陰數(shù)碼管,如用單片機(jī)P0口加上拉電阻驅(qū)動(dòng),P3.0/P3.1來(lái)控制數(shù)碼管的位。其顯示電路如圖3.8所示:



                        
圖3.8數(shù)碼管顯示模塊電路


3.2.6系統(tǒng)電源模塊電路
  由于該系統(tǒng)中 51 單片機(jī)及三極管工作電壓均為 5V 電壓,所以要保證系統(tǒng)穩(wěn)定可靠的工作,需要設(shè)計(jì)一個(gè)可以穩(wěn)定提供 5V 電壓的供電系統(tǒng)。本設(shè)計(jì)采用外置5V穩(wěn)壓開關(guān)電源作為系統(tǒng)的供電電源,系統(tǒng)電源輸入接口要加濾波電容以確保工作電壓穩(wěn)定。電源輸出接口加上LED 電源指示燈,用來(lái)判定電源是否正常工作。該系統(tǒng)電源電路設(shè)計(jì)如圖3.9所示:
圖3.9系統(tǒng)電源電路


  4 系統(tǒng)軟件設(shè)計(jì)

根據(jù)實(shí)際交通燈的變化情況和規(guī)律。假設(shè)一個(gè)十字路口為東南西北走向。初始狀態(tài)1東西綠燈通車,南北紅燈亮。過(guò)30s,轉(zhuǎn)狀態(tài)2,東西綠燈滅黃燈亮,南北紅燈滅黃燈亮,過(guò)5s,再轉(zhuǎn)狀態(tài)3,南北綠燈通車,東西紅燈亮。過(guò)30s,轉(zhuǎn)狀態(tài)4,南北綠燈滅黃燈亮,東西紅燈滅黃燈亮,過(guò)5s,又循環(huán)至狀態(tài)1。對(duì)于交通信號(hào)燈來(lái)說(shuō)東西南北共四組燈,由于同一道上的兩組的信號(hào)燈的顯示情況是相同的,因此,采用單片機(jī)內(nèi)部的I/O口來(lái)控制12個(gè)信號(hào)燈。通過(guò)編寫程序,實(shí)現(xiàn)對(duì)發(fā)光二極管的控制,來(lái)模擬交通信號(hào)燈的管理。

4.1 軟件總體流程圖

軟件總體設(shè)計(jì)及流程圖見(jiàn)圖3-1,主要完成各部分的軟件控制和協(xié)調(diào)。本系統(tǒng)主程序模塊主要完成的工作是對(duì)系統(tǒng)的初始化,發(fā)送顯示數(shù)據(jù),同時(shí)對(duì)按鍵進(jìn)行掃描,等待外部中斷,以及根據(jù)所需要的功能進(jìn)行相應(yīng)的操作。其流程圖如圖4.1

圖4.1正常情況下交通燈控制流程




5 系統(tǒng)調(diào)試分析及結(jié)果
因本設(shè)計(jì)本身要求有穩(wěn)定性高、免維護(hù)、抗干擾能力強(qiáng)等功能,系統(tǒng)調(diào)試除了驗(yàn)證數(shù)據(jù)處理的精度,確保判斷的準(zhǔn)確性外,同時(shí)必須確認(rèn)各項(xiàng)功能的正常運(yùn)行。
5.1  電路板實(shí)物的制作
5.1.1印制電路板PCB圖的繪制
由于本電路硬件設(shè)計(jì)中,用單片機(jī)的一個(gè)IO口控制各路交通燈的循環(huán)點(diǎn)亮。用同一芯片單片機(jī)的P0口來(lái)控制數(shù)碼管的顯示點(diǎn)亮。因此,在同一芯片中,所要接的線路比較多。在硬件的布局中,各位LED燈和數(shù)碼管的布局比較固定化,集中分布在所控制的兩個(gè)路口。因此,若采用雙面PCB板的話,這個(gè)電路的布線比較容易實(shí)現(xiàn)。但是,現(xiàn)實(shí)水平中做雙面板會(huì)出現(xiàn)一些焊點(diǎn)接觸不良而導(dǎo)致電路調(diào)試過(guò)程不易實(shí)現(xiàn)。因此,決定使用單面板布線。單片面板的布線需要犧牲本設(shè)計(jì)電路板一部分實(shí)際電路的美觀。印制電路板的設(shè)計(jì)是以電路原理圖為根據(jù),實(shí)現(xiàn)電路設(shè)計(jì)者所需要的功能。印刷電路板的設(shè)計(jì)主要指版圖設(shè)計(jì),需要考慮外部連接的布局、內(nèi)部電子元件的優(yōu)化布局、金屬連線和通孔的優(yōu)化布局、電磁保護(hù)、熱耗散等各種因素。優(yōu)秀的版圖設(shè)計(jì)可以節(jié)約生產(chǎn)成本,達(dá)到良好的電路性能和散熱性能。
5.1.2實(shí)物的制做
    準(zhǔn)備工作:采購(gòu)萬(wàn)能板若干張,實(shí)物電路所需的各種元器件;
還有其他的基本電子器件和制板工具。
①總制板工藝程序
1)先將所有元器件擺放到萬(wàn)能板上,確實(shí)各個(gè)原件的最有位置,原則是,既美觀,又容易焊接。
2)把擺好位置的元器件焊到板子上,最好用焊臺(tái)來(lái)完成。
3)根據(jù)原理圖,把所有的連線連接起來(lái),連接的導(dǎo)線,盡量用細(xì)一點(diǎn)的。  
②制板心得:我們?cè)谥瓢暹^(guò)程中,
1)首先是PROTEL設(shè)計(jì)的時(shí)候出現(xiàn)的錯(cuò)誤導(dǎo)致印制電路板制作錯(cuò)誤。
2)其次是由于設(shè)計(jì)的理論和實(shí)際有誤差導(dǎo)致無(wú)法實(shí)現(xiàn)目標(biāo)。
3)焊接過(guò)程中出現(xiàn)了一些問(wèn)題,比如焊跳線的時(shí)候,由于接線太多,而且是手工焊接,并且焊接設(shè)備不好,烙鐵頭高溫下容易老化氧化和溫度不可控制。因此導(dǎo)致焊盤脫落,原件燙傷等原因?qū)е聢?bào)廢了好幾塊板子。此外,有些焊盤太小并且有損壞跡象,所以焊接很不方便。但為了不出現(xiàn)虛焊,卻花了很長(zhǎng)時(shí)間去焊,有些焊點(diǎn)并不是很美觀。
4)焊接過(guò)程中,有時(shí)候焊錫會(huì)不小心將相鄰的兩根引線短路。所以,此次做板積累了一些經(jīng)驗(yàn),主要是,再次做板的時(shí)候一定要注意PCB的引線之間的距離不能設(shè)置太近。因?yàn)槭鞘止ぶ谱,精度和密度都必須有一個(gè)自由度和能力所及的范圍,并且考慮到手工制板的局限性和線路過(guò)細(xì)密導(dǎo)致的氧化和短路故障。擁有了這些寶貴的經(jīng)驗(yàn),相信今后制板,一定會(huì)完美保證電路的實(shí)現(xiàn)!

5.2 系統(tǒng)硬件調(diào)試
在設(shè)計(jì)過(guò)程中,實(shí)物交通燈控制系統(tǒng)的PCB電路板焊接工作量非常大,電路安裝完成后,首先進(jìn)行檢查,即確認(rèn)電路無(wú)虛焊,無(wú)短路,無(wú)斷路,集成元件安裝是否正確,之后進(jìn)行電路功能模塊的分級(jí)調(diào)試,根據(jù)電路功能逐級(jí)進(jìn)行:通行方式功能調(diào)試:包括對(duì)兩種通行方式控制調(diào)試,指示燈亮度和驅(qū)動(dòng)電路調(diào)試;倒計(jì)時(shí)功能調(diào)試:數(shù)碼管亮度調(diào)試;復(fù)位功能調(diào)試。
5.3 系統(tǒng)軟件調(diào)試
本系統(tǒng)的軟件系統(tǒng)很大,選用一般的單片機(jī)通信C語(yǔ)言程序進(jìn)行編寫和調(diào)試。除了語(yǔ)法差錯(cuò)外,當(dāng)確認(rèn)程序沒(méi)問(wèn)題時(shí),通過(guò)直接下載到單片機(jī)來(lái)調(diào)試。采取的是自下到上的調(diào)試方法,即單獨(dú)調(diào)試好每一個(gè)模塊,然后再連接成一個(gè)完整的系統(tǒng),最后完成一個(gè)完整的系統(tǒng)調(diào)試。
5.4 系統(tǒng)總體調(diào)試
系統(tǒng)做好后,進(jìn)行系統(tǒng)的完整調(diào)試。主要任務(wù)是檢驗(yàn)實(shí)現(xiàn)的功能及其效果并校正誤差。
測(cè)試一開始,我們就發(fā)現(xiàn)了系統(tǒng)出現(xiàn)了兩個(gè)問(wèn)題:一是有一部分交通燈亮度不夠,所發(fā)出來(lái)的光非常的微弱以致于幾乎感覺(jué)不到它的亮度;二是數(shù)碼管不工作,沒(méi)有時(shí)間顯示。這與設(shè)計(jì)的要求完全不符。為了找出這個(gè)問(wèn)題和解決方法,查找了電路的輸出各部分的輸出電平。發(fā)現(xiàn)了一個(gè)現(xiàn)象,我們采用的數(shù)碼管是共陰極數(shù)碼管。而控制數(shù)碼段顯示的P3.0和P3.1口輸出的是高電平。
經(jīng)多方查閱資料,解決第二個(gè)問(wèn)題可以有兩個(gè)解決方法。其一,將硬件電路作修改,將數(shù)碼管換成共陽(yáng)極的數(shù)碼管。這樣數(shù)碼管就可以正常進(jìn)行時(shí)間顯示了。其二,修改程序,讓控制數(shù)碼管段碼的P0輸出的是低電平。若采用修改硬件電路的方法的話,硬件電路就得作變動(dòng)。已經(jīng)布好的線也必須有相應(yīng)的變動(dòng),操作起來(lái)比較麻煩。所以,我們采用了第二種方法。修改了程序電路中的段碼代碼。再次調(diào)試,按照設(shè)計(jì)要求的指標(biāo),系統(tǒng)數(shù)碼管電路部分基本能按照預(yù)先設(shè)定的要求來(lái)進(jìn)行倒計(jì)時(shí)的顯示。亮度要求也基本符合預(yù)先設(shè)想。
接下來(lái)還有一個(gè)問(wèn)題有待解決,交通燈亮度不足,以致于部分交通燈只能勉強(qiáng)看得出來(lái)它在亮而已。這明顯不能滿足設(shè)計(jì)要求。經(jīng)多方檢測(cè),我們認(rèn)為這是由于LED燈驅(qū)動(dòng)能力不足引起的亮度弱問(wèn)題。若要修正這個(gè)問(wèn)題,那就得為L(zhǎng)ED燈增加驅(qū)動(dòng)電路以提高電路的驅(qū)動(dòng)能力。要實(shí)現(xiàn)這一步驟必須對(duì)硬件電路進(jìn)行一定的改動(dòng)。LED燈的驅(qū)動(dòng)電路可以用集成電路電路芯片來(lái)進(jìn)行驅(qū)動(dòng)。在初步方案中考慮要用集成電路來(lái)完成。但是由于客觀方面的原因,沒(méi)有制作實(shí)物的環(huán)境條件。因此,這部分改進(jìn)只作了一個(gè)設(shè)想,并沒(méi)有時(shí)間去付諸實(shí)施。但基本問(wèn)題和解決問(wèn)題的原理還是有一定的了解。



附錄B:總體電路原理圖、PCB、仿真圖及實(shí)物圖



單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>           //包含庫(kù)文件
  3. sbit smg1=P3^0;                   //定義南北方向數(shù)碼管低位
  4. sbit smg2=P3^1;                   //定義南北方向數(shù)碼管高位
  5. sbit N_green=P2^0;           //定義北向綠燈端口
  6. sbit N_red=P2^1;           //定義北向紅燈端口
  7. sbit N_yellow=P2^2;           //定義北向黃燈端口           

  8. sbit S_green=P2^7;           //定義南向綠燈端口
  9. sbit S_red=P2^6;           //定義南向紅燈端口
  10. sbit S_yellow=P2^5;           //定義南向黃燈端口

  11. sbit W_green=P1^0;           //定義西向綠燈端口
  12. sbit W_red=P1^1;           //定義西向紅燈端口
  13. sbit W_yellow=P1^2;           //定義西向黃燈端口   

  14. sbit E_green=P1^7;           //定義東向綠燈端口
  15. sbit E_red=P1^6;           //定義東向紅燈端口
  16. sbit E_yellow=P1^5;           //定義東向黃燈端口


  17. int js=0,djs=30;                       //初始倒計(jì)時(shí)時(shí)間
  18. int table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40};          //共陰極數(shù)碼管段值
  19. /************以下為函數(shù)聲明*************/
  20. void jtd();
  21. void jtda();
  22. void jtdb();
  23. void djsxs();
  24. void yj();
  25. void jj();
  26. void jtday();
  27. void jtdby();

  28. /*****************************************************/
  29. /*             函數(shù)名:delayms                                             */
  30. /*           功能:產(chǎn)生毫秒級(jí)延時(shí)                                         */
  31. /*****************************************************/
  32. void delayms(int x)
  33. {
  34. char i;
  35. while(x--)
  36. {
  37.   for(i=150;i>0;i--);
  38. }
  39. }
  40. /*****************************************************/
  41. /*             函數(shù)名:Timer0_init()                                  */
  42. /*             功能:定時(shí)器0初始化                                         */
  43. /*****************************************************/
  44. void Timer0_init()
  45. {
  46.       js=0;
  47.           TMOD=0x01;                  //定義定時(shí)器0工作模式        
  48.       TH0=0x4c;                        //賦初值高位
  49.           TL0=0x00;                        //賦初值低位
  50.       TR0=1;                        //啟動(dòng)定時(shí)器
  51.           ET0=1;                        //開中斷
  52.           EA=1;                                //開全局中斷
  53. }
  54. /*****************************************************/
  55. /*        函數(shù)名:timer0() interrupt 1 using 1             */
  56. /*             功能:定時(shí)器0中斷服務(wù)函數(shù)                     */
  57. /*****************************************************/
  58. void timer0() interrupt 1 using 1        
  59. {
  60.             TF0=0;
  61.                  TH0=0x4c;
  62.                 TL0=0x00;                  //重新賦高地位初值
  63.                 js++;
  64.                 if(js==22)
  65.                   { js=0;
  66.                     djs--;
  67.                    }
  68. }
  69. /*****************************************************/
  70. /*                 函數(shù)名:djsxs11()                     */
  71. /*                功能:數(shù)碼管動(dòng)態(tài)顯示                       */
  72. /*****************************************************/
  73. void  djsxs11()                 //此函數(shù)注視同djsxs22()
  74. {        int b1,b2;
  75.          b1=djs/10;                 //將倒計(jì)時(shí)時(shí)間的高位賦予b1
  76.         b2=djs%10;                 //將倒計(jì)時(shí)時(shí)間的低位賦予b2
  77.         P0=table[b1];
  78.     smg1=0;
  79.     delayms(3);
  80.     smg1=1;                         //顯示b1

  81.         P0=table[b2];
  82.         smg2=0;
  83.         delayms(3);
  84.         smg2=1;                        //顯示b2
  85. }


  86. /*****************************************************/
  87. /*                 函數(shù)名:qm()                             */
  88. /*        功能:使所有的交通信號(hào)燈全部熄滅           */
  89. /*****************************************************/
  90. void qm()
  91. {
  92. N_green=1;
  93. N_red=1;
  94. N_yellow=1;                  

  95. S_green=1;
  96. S_red=1;
  97. S_yellow=1;

  98. W_green=1;
  99. W_red=1;
  100. W_yellow=1;                  

  101. E_green=1;
  102. E_red=1;
  103. E_yellow=1;
  104. }
  105. /*****************************************************/
  106. /*                 函數(shù)名:jtdb()                         */
  107. /*       功能:交通燈東西方向綠燈亮,紅燈滅          */
  108. /*             交通燈南北方向紅燈亮,綠燈滅          */
  109. /*****************************************************/
  110. void jtdb()
  111. {
  112. qm();                                                                         //所有信號(hào)燈滅
  113. W_green=0;                                                                 //西向綠燈亮
  114. E_green=0;                                                                 //東向綠燈亮
  115. N_red=0;                                                                 //北向紅燈亮
  116. S_red=0;                                                                         //南向紅燈亮
  117. while(1)
  118. {
  119.         if(djs>5)                                                         //當(dāng)?shù)褂?jì)時(shí)時(shí)間大于5秒時(shí),執(zhí)行
  120.                 {
  121.              djsxs11();                                                          //數(shù)碼管時(shí)間顯示
  122.         }
  123.     if(djs<=5)                                                       //當(dāng)?shù)褂?jì)時(shí)時(shí)間小于5秒時(shí),執(zhí)行
  124.                 {
  125.                   jtdby();                                                          //調(diào)用函數(shù)
  126.                 }
  127. }
  128. }
  129. /*****************************************************/
  130. /*                 函數(shù)名:jtdby()                         */
  131. /*       功能:交通燈東西方向黃燈亮,紅燈滅          */
  132. /*             交通燈南北方向紅燈亮,綠燈滅          */
  133. /*****************************************************/
  134. void jtdby()
  135. {
  136. qm();                                                                          //所有信號(hào)燈全滅
  137. W_green=1;                                                                  //西向綠燈滅
  138. E_green=1;                                                                  //東向綠燈滅
  139. W_yellow=0;                                                                  //西向黃燈亮
  140. E_yellow=0;                                                                  //東向黃燈亮
  141. N_red=0;                                                                  //北向紅燈滅
  142. S_red=0;                                                                  //南向紅燈滅
  143. while(1)
  144. {
  145. djsxs11();                                                                  //數(shù)碼管時(shí)間顯示
  146. if(djs<0)                                                                   //當(dāng)?shù)褂?jì)時(shí)時(shí)間小于0秒時(shí),執(zhí)行
  147.   {
  148.     djs=30;
  149.         jtda();                                                                  //調(diào)用jtda()函數(shù)
  150.   }
  151. }
  152. }

  153. /*****************************************************/
  154. /*                 函數(shù)名:jtda()                         */
  155. /*       功能:交通燈南北方向綠燈亮,紅燈滅          */
  156. /*             交通燈東西方向紅燈亮,綠燈滅          */
  157. /*****************************************************/
  158. void jtda()
  159. {
  160. qm();                                                                          //所有信號(hào)燈滅
  161. N_green=0;                                                                  //北向綠燈亮
  162. S_green=0;                                                                  //南向綠燈亮
  163. W_red=0;                                                                  //西向紅燈亮
  164. E_red=0;                                                                  //東向紅燈亮
  165. while(1)
  166. {
  167. if(djs>5)                                                                  //當(dāng)?shù)褂?jì)時(shí)時(shí)間大于5秒時(shí),執(zhí)行
  168. {
  169.                 djsxs11();                                                  //數(shù)碼管時(shí)間顯示
  170. }
  171. if(djs<=5)                                                   //當(dāng)?shù)褂?jì)時(shí)時(shí)間小于5秒時(shí),執(zhí)行
  172. {
  173.         jtday();                                  //調(diào)用函數(shù)
  174. }
  175. }
  176. }

  177. /*****************************************************/
  178. /*                 函數(shù)名:jtday()                         */
  179. /*       功能:交通燈南北方向黃燈亮,紅燈滅          */
  180. /*             交通燈東西方向紅燈亮,綠燈滅          */
  181. /*****************************************************/
  182. void jtday()
  183. {
  184. qm();                                                                          //所有信號(hào)燈全滅
  185. N_green=1;                                                                  //北向綠燈滅
  186. ……………………

  187. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
仿真程序文檔下載:
基于51單片機(jī)的交通燈一個(gè)數(shù)碼管.zip (2.41 MB, 下載次數(shù): 60)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:262 發(fā)表于 2022-4-27 21:49 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表