馬路上十字路口人來車往、有條不紊的秩序靠的是交通信號燈的自動指揮系統來實現的。交通信號燈控制方式很多,本文采用AT89C51為核心器件來設計交通燈模擬控制系統,應用單片機的定時器/計數器、中斷和動態顯示技術,實現了正常情況下東西與南北兩個方向輪流點亮紅、綠信號燈,每次持續時間60s,中間有2s的黃燈過渡。特殊情況時,可以撥動東西或南北方向的緊急開關,使該方向緊急切換為綠燈,以利于特種車輛通過。當車輛稀少時,還可以通過撥動開關,使東西、南北兩個方向的交通燈均置為閃爍黃燈,閃爍周期為2s。另外還設計了用LED數碼管動態顯示已點亮燈的剩余時間的功能。
系統設計方框圖如圖1所示。圖中紅綠燈由3種顏色的發光二極管代替,單片機P1口輸出的控制信號,驅動發光二極管亮滅。LED數碼管(共陰)由兩片具有譯碼與驅動雙重功能的芯片CD4511驅動,CD4511的輸入信號為來自P2口的4位BCD碼。緊急切換和車輛稀少時可采用查詢P0.0、P0.1和P0.2(連接撥動開關)是否為低電平的方法確定。
程序設計思路:使用單片機內部定時器1產生中斷,每50ms中斷一次。在中斷服務程序中,對中斷的次數進行計數,50ms 計數20次,就是1s。交通燈的控制信號由P2.7~P2.5和P2.3~P2.1口輸出,其中,P2.7低電平對應南、北紅燈,P2.6低電平對應南北綠燈,P2.5低電平對應南北黃燈,P2.3低電平對應東西紅燈,P2.2低電平對應東西綠燈,P2.1低電平對應東西黃燈。
為了顯示亮燈的剩余秒數,進行倒計時顯示,程序中安排了十進制轉換程序。剩余秒數的BCD碼由P1口輸出,通過2個CD4511驅動2個LED,實現動態顯示。
緊急切換撥動開關1和2分別接在P0.0、P0.1上,為東西、南北兩個方向的緊急切換撥動開關,某方向撥動開關按下(接地)時,該方向緊急切換為綠燈,以利于特種車輛通過。可以通過在主程序中查詢這兩個端口的狀態來決定是否進行緊急切換,查詢到為低電平時進行緊急切換處理。
撥動開關3用于當車輛稀少時按下,當查詢到P0.2為低電平時,設置東西南北兩個方向的交通燈均為黃燈閃爍(1s亮,1s滅)。
用單片機內部的定時器T1實現延時,首先對TMOD賦值,確定工作方式:TMOD的高4位是控制定時器/計數器T1的,當GATE=0時,通過“SETB TR1”指令即可啟動定時器/計數器工作;C/T=0時,T1被設置為定時工作方式。因此,可得到定時器T1,工作在方式1,作定時器使用,并且用軟件啟動運行的TMOD賦值為10H。其次預置定時器初值X,將初始值寫入TH1、TL1中。設單片機的晶振頻率為12MHz。定時器初值得計算公式為:(最大計數值M-初始值X)×機器周期=定時時間。當晶振頻率為12MHz時,機器周期則為1μs。在方式1中,定時器T1的最大計數值M為65536,現要求定時50ms,由以上公式可計算出定時器的初始值X。
(65536-X)×1μs=50ms=50000μs
所以,初始值X=65536-50000=15536D=3CB0H,在子程序DELAY_50MS中確定定時器的初值指令為:
MOVTH1,#3CH,MOVTL1,#0B0H
主程序流程如圖1-2所示。
(作者單位:江蘇省常州技師學院)