交通燈控製係統設計
摘要:本係統由單片機係統、鍵盤、LED 顯示、交通燈演示係統組成。係統包括人行道、左轉、右轉、以及基本的交通燈的功能。係統除基本交通燈功能外,還具有倒計時、時間設置、緊急情況處理、分時段調整信號燈的點亮時間以及根據具體(ti) 情況手動控製等功能。
關(guan) 鍵詞:AT89S51,交通規則
一、 方案比較、設計與(yu) 論證
1 電源提供方案
為(wei) 使模塊穩定工作,須有可靠電源。我們(men) 考慮了兩(liang) 種電源方案
方案一:采用獨立的穩壓電源。此方案的優(you) 點是穩定可靠,且有各種成熟電路可供選用;缺點是各模塊都采用獨立電源,會(hui) 使係統複雜,且可能影響電路電平。
方案二:采用單片機控製模塊提供電源。改方案的優(you) 點是係統簡明扼要,節約成本;缺點是輸出功率不高。
綜上所述,我們(men) 選擇第二種方案。
2 顯示界麵方案
該係統要求完成倒計時、狀態燈等功能。基於(yu) 上述原因,我們(men) 考慮了三種方案:
方案一:完全采用數碼管顯示。這種方案隻顯示有限的符號和數碼字苻,無法勝任題目要求。
方案二:完全采用點陣式LED 顯示。這種方案實現複雜,且須完成大量的軟件工作;但功能強大,可方便的顯示各種英文字符,漢字,圖形等。
方案三:采用數碼管與(yu) 點陣LED 相結合的方法因為(wei) 設計既要求倒計時數字輸出,又要求有狀態燈輸出等,為(wei) 方便觀看並考慮到現實情況,用數碼管與(yu) LED燈分別顯示時間與(yu) 提示信息。這種方案既滿足係統功能要求,又減少了係統實現的複雜度。權衡利弊,第三種方案可互補一二方案的優(you) 缺,我們(men) 決(jue) 定采用方案三以實現係統的顯示功能。
3 輸入方案:
題目要求係統能手動設燈亮時間、緊急情況處理,我們(men) 討論了兩(liang) 種方案:
方案一:采用8155擴展I/O 口及鍵盤,顯示等。該方案的優(you) 點是:
使用靈活可編程,並且有RAM,及計數器。若用該方案,可提供較多I/O 口,但操作起來稍顯複雜。
方案二: 直接在IO口線上接上按鍵開關(guan) 。因為(wei) 設計時精簡和優(you) 化了電路,所以剩餘(yu) 的口資源還比較多,我們(men) 使用四個(ge) 按鍵,分別是K1、K2、K3、K4。
由於(yu) 該係統對於(yu) 交通燈及數碼管的控製,隻用單片機本身的I/O 口就可實現,且本身的計數器及RAM已經夠用,故選擇方案二。
二、理論分析與(yu) 計算
1.交通燈顯示時序的理論分析與(yu) 計算
對於(yu) 一個(ge) 交通路口來說,能在最短的時間內(nei) 達到最大的車流量,就算是達到了最佳的性能,我們(men) 稱在單位時間內(nei) 多能達到的最大車流為(wei) 車流量,用公式:車流量= 車流 / 時間 來表示。
先設定一些標號如圖2-1 所示。
說明:此圖為(wei) 直方圖,上邊為(wei) 北路口燈,右邊為(wei) 東(dong) 路口燈,下邊為(wei) 南路口燈,左邊為(wei) 西
路口燈。
圖2-2 所示為(wei) 一種紅綠燈規則的狀態圖,分別設定為(wei) S1、S2、S3、S4,交通燈以這四
的狀態為(wei) 一個(ge) 周期,循環執行(見圖2-3)。
請注意圖2-1b和圖2-1d,它們(men) 在一個(ge) 時間段中四個(ge) 方向都可以通車,這種狀態能在
一定的時間內(nei) 達到較大的車流量,效率特別高。
依據上述的車輛行駛的狀態圖,可以列出各個(ge) 路口燈的邏輯表,由於(yu) 相向的燈的狀態圖
是一樣的,所以隻需寫(xie) 出相鄰路口的燈的邏輯表;根據圖2-3 可以看出,相鄰路口的燈它
們(men) 的狀態在相位上相差180°。因此最終隻需寫(xie) 出一組S1、S2、S3、S4的邏輯狀態表。
如表2-1 所示。
表中的“×”代表是紅燈亮(也代表邏輯上的0),“√”是代表綠燈亮(也代表邏輯上
的1),依上表,就可以向相應的端口送邏輯值。
2.交通燈顯示時間的理論分析與(yu) 計算
東(dong) 西和南北方向的放行時間的長短是依據路口的各個(ge) 方向平時的車流量來設定,並且
S1、S2、S3、S4各個(ge) 狀態保持的時間之有嚴(yan) 格的對應關(guan) 係,其公式如下所示。
T-S1+T-S2=T-S3
T-S2=T-S4
T-S1=T-S3
我們(men) 可以依據上述的標準來改變車輛的放行時間。按照一般的規則,一個(ge) 十字路口可分
為(wei) 主幹道和次幹道,主幹道的放行時間大於(yu) 次幹道的放行時間,我們(men) 設定值時也應以此為(wei) 參
考。
三、電路圖及設計文件
1.燈控製電路設計
由於(yu) 32個(ge) LED 來實現紅綠燈狀態,若直接接在單片機的口線,路口倒計時的顯示就不
能實現,所以本次設計中采用一種新型的電路如圖3-1 所示
圖中74LS04的作用是倒相和驅動,它輸出的電流大約48mA,實際測試發現足以滿足要
求,而且發光管也能達到足夠的亮度。
觀察圖可以看出:兩(liang) 組發光管(一組紅、一組綠)由於(yu) 反相器的作用,其邏輯狀態恰恰
相反。
圖中和電阻串聯的二極管的作用是為(wei) 了分壓,防止因上下兩(liang) 組發光管分壓不同導致邏輯
的錯誤。
共四組和上述相同的電路分別代表東(dong) 西南北四個(ge) 方向的紅綠燈,使用兩(liang) 片74LS04 作為(wei)
驅動。
2.倒計時顯示電路設計
前麵已經分析過相向的燈的狀態和倒計時都是相同的,所以為(wei) 了節省,采用兩(liang) 組四個(ge) 數碼管
作為(wei) 倒計時的顯示;同時為(wei) 了節省口資源,采用串口顯示的方式驅動數碼管。見圖3-2 所
示。
四、程序設計思路與(yu) 流程圖
1.主程序流程圖
主程序中主要是一個(ge) 死循環,不停的循環四個(ge) 狀態,如圖4-1 所示。
2.按鍵子程序流程圖
它包含倒計時調整和緊急狀態兩(liang) 個(ge) 狀態。
主程序中放了一個(ge) 按鍵的判斷指令,當有按鍵按下的時候,程序就自動的跳轉到按鍵子
程序處理。當檢測到K2鍵按下的時候就自動返回到主程序。
當出現緊急的情況的時候,按下K3或者K4 就切換到緊急狀態,當緊急事件處理完畢
的時候,按下K2,就可以返回正常狀態。
五、測試、數據及結果分析
1.狀態燈顯示測試
當電路連接完畢後,將寫(xie) 好的測試程序刷寫(xie) 到芯片內(nei) ,K1 和K2分別給端口送高電平和
低電平,通電即可檢測。
2.數碼管的測試
將串口的和電路板上的接口連接,將寫(xie) 好的測試程序刷寫(xie) 到芯片內(nei) ,開電源即可測試。
3.整體(ti) 電路測試
係統上電,刷寫(xie) 好程序即可開始測試,觀測一個(ge) 周期(共計S1~S4四個(ge) 狀態,默認140
秒)燈的顯示狀態是否正常,同時觀察倒計的計數是否正常。
六、總結
由於(yu) 使用的是單片機作為(wei) 核心的控製元件,使得電路的可靠性比較高,功能也比較強大,
而且可以隨時的更新係統,進行不同狀態的組合。
但是在我們(men) 設計和調試的過程中,也發現了一些問題,譬如紅燈和綠燈的切換還不夠迅
速,紅綠燈規則不效率還不是很高等等,這需要在實踐中進一步完善。
參考文獻
[1] 李朝青.單片機原理及接口技術(修訂版).北京:北京航空航天大學出版社,1998
[2] 李廣弟.單片機基礎.北京:北京航空航天大學出版社,1992
[3] 何立民.單片機應用技術大全.北京:北京航空航天大學出版社, 1994
[4] 張毅剛. 單片機原理及接口技術.哈爾濱:哈爾濱工業(ye) 大學出版社,1990
[5] 譚浩強.單片機課程設計. 北京:清華大學出版社,1989
Abstract
This system is made up of single-chip microcomputer ,keyboard,lcd displaying module
and Traffic lights system.The system includes pavement,left truning,right truning,and the basic
traffic lights function.Excepting the basic traffic lights function,italso includes couting,time
installing,emergency disposaling,speech cluing,lcd information displaying,adjusting the lighting
time of lights based on different time and controlling with hand in accordance with circumstances
and so on.
附錄 係統總體(ti) 電路圖
1.滿足南北向紅綠燈亮,東(dong) 西向紅燈亮,占25秒——南北向黃燈亮,東(dong) 西向紅燈亮,占5秒——南北向紅燈亮,東(dong) 西向綠燈亮,占25秒——南北向紅燈亮,東(dong) 西向黃燈亮,占5秒。如此循環,周而複始。 2.十字路口要有數字顯示,提示行人把握時間:當某方向綠燈亮時,置顯示器為(wei) 24,然後以每秒減1計數方式工作,直到減為(wei) 0,綠燈滅,黃燈亮。黃燈滅,紅燈亮時,再次置顯示器為(wei) 29,並開始減計數,直到為(wei) 0,十字路口紅綠燈交換,完成一次工作循環。
3.可手動調整和自動調整,夜間為(wei) 黃燈閃耀。
下麵是一個(ge) 單片機交通燈程序
/*
******************************************************************************************
* *
* Keil C 89S51 交通信號控製程序 *
* (C) 版權所有 Dai_Weis@hotmail.com *
* *
******************************************************************************************
*/
#include "reg51.h"
#define UINT unsigned int
#define ULONG unsigned long
#define UCHAR unsigned char
/*
信號燈變量
南北方向綠燈
sbit n_bike_g = P1^0; //自行車
sbit n_right_g = P1^1; //右轉
sbit n_up_g = P1^2; //直行
sbit n_left_g = P1^3; //左轉 調頭
南北方向紅燈
sbit n_bike_r = P1^4; //自行車
sbit n_right_r = P1^5; //右轉
sbit n_up_r = P1^6; //直行
sbit n_left_r = P1^7; //左轉 調頭
南北方向黃燈
sbit n_bike_y = P3^0; //自行車
sbit n_right_y = P3^1; //右轉
sbit n_up_y = P3^2; //直行
sbit n_left_y = P3^3; //左轉 調頭
東(dong) 西方向綠燈
sbit e_bike_g = P2^0; //自行車
sbit e_right_g = P2^1; //右轉
sbit e_up_g = P2^2; //直行
東(dong) 西方向紅燈
sbit e_bike_r = P2^4; //自行車
sbit e_right_r = P2^5; //右轉
sbit e_up_r = P2^6; //直行
東(dong) 西方向黃燈
sbit e_bike_y = P3^4; //自行車
sbit e_right_y = P3^5; //右轉
sbit e_up_y = P3^6; //直行
*/
//延時
void delay(UINT t, UINT s)
{
while (t)
{
UINT i;
for (i = 0; i < s; i++)
{
}
t --;
}
}
//信號燈狀態
void time_x(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3)
{
P1 = P_P1;
P2 = P_P2;
P3 = P_P3;
delay(150, 65535);
}
void time_s(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3, UCHAR P_P11, UCHAR P_P22)
{
UINT i;
for (i = 0; i < 3; i ++)
{
P1 = P_P1;
P2 = P_P2;
delay(5, 65535);
P1 = P_P11;
P2 = P_P22;
delay(5, 65535);
}
P1 = P_P1;
P2 = P_P2;
P3 = P_P3;
delay(10, 65535);
}
//主程序
void main()
{
P1 = P2 = P3 = 0x0;
while (1)
{
time_x(0xA5, 0x38, 0x0);
time_s(0xA4, 0x38, 0x1, 0xA5, 0x38);
time_x(0x96, 0x52, 0x0);
time_s(0x92, 0x52, 0x4, 0x96, 0x52);
time_x(0x5A, 0x52, 0x0);
time_s(0x50, 0x50, 0x2A, 0x5A, 0x52);
time_x(0xF0, 0x25, 0x0);
time_s(0xF0, 0x24, 0x20, 0xF0, 0x25);
time_x(0xD2, 0x16, 0x0);
time_s(0xD0, 0x10, 0x62, 0xD2, 0x16);
}
}
給你一個(ge) 定時控製的信號係統,我隻做的簡單的測試,至於(yu) 延時我用的軟件,你自己想辦法。^_^
Dai_Weis 於(yu) 2005-5-4 13:43:23
重新給你說明
/*
***********************************************************************************
* *
* Keil C AT89S51 交通信號控製程序 *
* (C) 版權所有 Dai_Weis@hotmail.com *
* *
***********************************************************************************
開發說明:
固定時間信號變換,南北設置調頭、左傳(chuan) 、直行、右轉、自行車。
東(dong) 西設置左傳(chuan) 、直行、右轉、自行車。
時序狀態:
紅 綠 紅 綠
序號 左 前 右 自 左 前 右 自 前 右 自 前 右 自
1 1 0 1 0 0 1 0 1 1 1 1 0 0 0
2 1 0 0 1 0 1 1 0 1 0 1 0 1 0
3 0 1 0 1 1 0 1 0 1 0 1 0 1 0
4 1 1 1 1 0 0 0 0 0 1 0 1 0 1
5 1 1 0 1 0 0 1 0 0 0 1 1 1 0
*/
另外修正個(ge) 錯誤
while (1)
{
time_x(0xA5, 0x70, 0x0);
time_s(0xA4, 0x70, 0x1, 0xA5, 0x70);