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

圖2-1 89C52單片機引腳圖
STC89C52單片機引腳功能介紹:
(見附件)
P3口功能表:
表2P3口功能表
STC89C52內部結構圖:

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

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

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

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

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

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

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