交通信號燈模擬控制系統(tǒng)設(shè)計
設(shè)計要求:用51單片機設(shè)計一個交通信號燈模擬控制系統(tǒng),晶振采用12MHz。
具體要求如下:
(1)正常情況下,A、B道(A、B道交叉組成十字路口,A是主道,B是支道)輪流放行,A道綠燈1min(其中10s用于黃燈),B道綠燈放行30s(其中5s用于黃燈)。
(2)一道有車而另一道無車時,使有車車道放行(用兩個按鍵開關(guān)控制)。
(3)有緊急車輛通過時,A、B道均為紅燈(用按鍵開關(guān)控制)。
(4)要求由數(shù)碼管顯示紅綠燈倒計時時間。
表1:元器件列表
STC89C52RC是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有 8K字節(jié)系統(tǒng)可編程Flash存儲器。STC89C52使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改進使得芯片具有傳統(tǒng)51單片機不具備的功能。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。
STC89C52RC是STC89系列單片機中應(yīng)用較為廣泛的一種型號,內(nèi)部的8KB存儲器用于存放可編程控制器監(jiān)控程序。
STC89C52RC單片機的40條引腳按功能來分,可以分為3部分,電源及時鐘引腳、控制引腳和輸入/輸出引腳。

圖2-1 89C52單片機引腳圖
STC89C52單片機引腳功能介紹:
(見附件)
P3口功能表:
表2P3口功能表
STC89C52內(nèi)部結(jié)構(gòu)圖:

圖2-2 STC89C52內(nèi)部結(jié)構(gòu)圖
復(fù)位電路的作用
在復(fù)位過程中,控制CPU的復(fù)位狀態(tài):這段時間內(nèi)讓CPU保持復(fù)位狀態(tài),而不是一上電或剛復(fù)位完畢就工作,防止CPU發(fā)出錯誤的指令、執(zhí)行錯誤操作,也可以提高電磁兼容性能。
基本的復(fù)位方式
單片機在啟動時都需要復(fù)位,以使CPU及系統(tǒng)各部件處于確定的初始狀態(tài),并從初態(tài)開始工作。89系列單片機的復(fù)位信號是從RST引腳輸入到芯片內(nèi)的施密特觸發(fā)器中的。當系統(tǒng)處于正常工作狀態(tài)時,且振蕩器穩(wěn)定后,如果RST引腳上有一個高電平并維持2個機器周期(24個振蕩周期)以上,則CPU就可以響應(yīng)并將系統(tǒng)復(fù)位。本系統(tǒng)中單片機系統(tǒng)的復(fù)位方式為手動按鈕復(fù)位。
手動按鈕復(fù)位
手動按鈕復(fù)位需要人為在復(fù)位輸入端RST上加入高電平(圖1)。一般采用的辦法是在RST端和正電源Vcc之間接一個按鈕。當人為按下按鈕時,則Vcc的+5V電平就會直接加到RST端。手動按鈕復(fù)位的電路如圖所示。由于人的動作再快也會使按鈕保持接通達數(shù)十毫秒,所以,完全能夠滿足復(fù)位的時間要求。

圖2-3 復(fù)位電路圖
在MCS - 51單片機片內(nèi)有一個高增益的反相放大器,反相放大器的輸入端為XTAL1,輸出端為XTAL2,由該放大器構(gòu)成的振蕩電路和時鐘電路一起構(gòu)成了單片機的時鐘方式。
在內(nèi)部方式時鐘電路中,必須在XTAL1和XTAL2引腳兩端跨接石英晶體振蕩器和兩個微調(diào)電容構(gòu)成振蕩電路,通常C1和C2一般取30pF,晶振的頻率取值在1.2MHz~12MHz之間。對于外接時鐘電路,要求XTAL1接地,XTAL2腳接外部時鐘,對于外部時鐘信號并無特殊要求,只要保證一定的脈沖寬度,時鐘頻率低于12MHz即可。本系統(tǒng)采用的是12MHz石英晶振。
晶體振蕩器的振蕩信號從XTAL2端送入內(nèi)部時鐘電路,它將該振蕩信號二分頻,產(chǎn)生一個兩相時鐘信號P1和P2供單片機使用。時鐘信號的周期稱為狀態(tài)時間S,它是振蕩周期的2倍,P1信號在每個狀態(tài)的前半周期有效,在每個狀態(tài)的后半周期P2信號有效。CPU就是以兩相時鐘P1和P2為基本節(jié)拍協(xié)調(diào)單片機各部分有效工作的。

圖2-4 時鐘電路圖
LED燈顯示電路:
LED燈電路由6個LED燈(2個紅LED燈,兩個黃LED燈,兩個綠LED燈)與6個阻值為470歐姆的電阻組成,LED的正極與Vcc+相連,LED的負極分別與電阻串聯(lián)再連接到STC89C52芯片的P1端口(P0.0—P0.5)。

2-5 LED燈顯示電路圖
數(shù)碼管顯示電路:
數(shù)碼管普遍地用于直觀地顯示數(shù)字系統(tǒng)的運行狀態(tài)和工作數(shù)據(jù),點亮數(shù)碼管的方法有靜態(tài)和動態(tài)兩種,本系統(tǒng)中采用的是動態(tài)數(shù)碼管顯示。動態(tài)顯示的特點是將所有位數(shù)碼管的段選線并聯(lián)在一起,由位選線控制是哪一位數(shù)碼管有效.這樣一來,就沒有必要每一位數(shù)碼管配上一個鎖存器,從而大大地簡化了硬件電路。選亮數(shù)碼管采用動態(tài)掃描顯示,所謂動態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用數(shù)碼管的余輝和人眼視覺暫留作用,使人的感覺好像各位數(shù)碼管同時都在顯示。動態(tài)顯示的亮度比靜態(tài)顯示要差一些,所以在選擇限流電阻時應(yīng)略小于靜態(tài)顯示電路中的。

2-6 數(shù)碼管引腳圖
本系統(tǒng)中采用的數(shù)碼是二位八段共陽數(shù)碼管,數(shù)碼管a~f引腳與分別于阻值為470歐姆的上拉電阻串聯(lián),再連接到P0端口(P0.0—P0.6),其中dp引腳不作連線(不需要用到dp)。兩個位選引腳1,引腳2分別與集電極相連,P2端口(P2.0—P2.3)串聯(lián)一個阻值為1k的電阻再連接到8550三極管基極端,4個8550三極管的發(fā)射端接在電源Vcc上,組成兩個方向的二位數(shù)碼管顯示電路。

2-7 數(shù)碼管顯示電路圖
為了實現(xiàn)此功能,本系統(tǒng)利用到了51單片機中的P3.1端口。利用一個手動按鈕開關(guān)接至單片機的P3.1端口,同時在軟件設(shè)計時將其設(shè)定為每次都進行按鍵掃描,當其按下時,四方全為紅燈,數(shù)碼管只亮一根橫線,當緊急情況過了之后,再次按下該按鍵回到原來的位置繼續(xù)執(zhí)行未完成的程序。
為了實現(xiàn)此功能,本系統(tǒng)再利用一個手動按鈕接至單片機中的P3.2端口。當其按下時,如果是東西方向道路是紅燈,而南北方向道路是綠燈,則將其置為東西是綠燈,南北是紅燈;如果是東西方向道路是綠燈,而南北方向道路是紅燈,則將其置為東西是紅燈,南北是綠燈。兩種情況都是執(zhí)行完后,回到正常狀態(tài)繼續(xù)執(zhí)行。

2-8 交通燈總電路圖
總體接線說明:
- 交通信號燈指示電路部分,STC89C52芯片的P1.0~P1.5接6個470Ω的限流電阻,然后在依次分別接到南北方向的綠、黃、紅色的LED指示燈,東西方向的綠、黃、紅色的LED指示燈(共陽級接法);
- STC89C52芯片的RST接復(fù)位電路;
- 按鍵電路部分,STC89C52芯片的P3.0(RXD)、P3.1(TXD)、P3.2、P3.3分別接4個微動開關(guān);
- STC89C52芯片的XTAL2、XTAL1、VSS0接晶振電路;
- STC89C52芯片的P2.0~P2.3接4個1KΩ的電阻,然后分別接到4個三極管的基極,發(fā)射極接Vcc,均接地,4個集電極分別依次接到南北方向數(shù)碼管顯示D1和東西方向的數(shù)碼管顯示的D2;
- STC89C52芯片的
(引腳31)和復(fù)位電路的VCC相連; - 倒計時顯示部分,STC89C52芯片的P0.0~P0.6接7個470Ω的電阻,然后均接到VCC電源端,同時STC89C52芯片的P0.0~P0.6分別依次直接接到所有數(shù)碼顯示器的a、b、c、d、e、f、g,DP置空;
- STC89C52芯片的Vcc接電源正極,GND接地。