第一章 控制要求
1.1 控制要求
(1)系統工作受開關控制,起動開關 ON 則系統工作;起動開關 OFF 則系統停止工作。
(2)控制對象有八個:
東西方向紅燈兩個 , 南北方向紅燈兩個,
東西方向黃燈兩個 , 南北方向黃燈兩個,
東西方向綠燈兩個 , 南北方向綠燈兩個,
東西方向左轉彎綠燈兩個,南北方向左轉彎綠燈兩個。
(3)另外東西方向、南北方向各設置顯示兩位十進制的7段顯示器,用來顯示倒數計數值。
1)高峰時段按時序圖二(見附圖)運行, 正常時段按時序圖三(見附圖)運行,晚上時段按提示警告方式運行,規律為: 東、南、西、北四個黃燈全部閃亮,其餘燈全部熄滅。
高峰時段、正常時段及晚上時段的時序分配按時序圖一運行(見附圖)。
可以只選擇高峰時段或正常時段進行設計,但最後評分值最高以良好評議;如果全部功能實現(需要設計一個24小時的時鐘作為時段劃分的基礎),最高評分值以優秀評議。
時序圖
第二章 系統方案設計
2.1交通燈運行狀態分析
根據控制要求,系統以下圖交通的運行狀態來設計系統方案。
狀態1南北直行;狀態2南北左轉; 狀態3東西直行;狀態4東西左轉。
共有四種狀態,分別設定為S1、S2、S3、S4,交通燈以這四種狀態為一個週期。循環執行如圖1.5所示:
2.2系統總體方案設計
本系統採用MCS-51系列單片機AT89C51為中心器件來設計交通燈控制器,實現了正常、高峰、晚間時通過單片機的P1口設置紅、綠、黃燈亮滅的功能。東西、南北兩位7段顯示器用來顯示倒數計數值。系統分三種工作時段:正常、高峰、晚間,並且通過時間段來控制"正常"、"高峰"、"晚間"相互轉化。
正常時段:南北段直行通行(綠燈)、東西段禁止(紅燈)40s,同時南北段和東西段方向的數碼管分別從40s和70s開始倒計時,至最後5s時南北段綠燈變成黃燈閃爍;此後南北段左轉(左轉綠燈亮)通行、東西段禁止(紅燈)20s,同時南北段和東西段方向的數碼管都從20s開始倒計時,至最後5s時南北段左轉燈變成黃燈閃爍;再後東西段直行通行(綠燈)、南北段禁止(紅燈)40s,同時東西段和南北段方向的數碼管分別從40s和70s開始倒計時,至最後5s時東西段綠燈變成黃燈閃爍;最後東西段左轉(左轉綠燈亮)通行、南北段禁止(紅燈)20s,同時東西段和南北段方向的數碼管都從20s開始倒計時,至最後5s時東西段左轉燈變成黃燈閃爍。
高峰時段:南北段、東西段的通行時間改為45s,左轉的時間改為15s,其它與正常時段相同。
晚間時段:禁止左轉和直行,東西南北四個方向黃燈閃亮。
第三章 系統電路設計
3.1控制芯片選擇
AT89C51是美國ATMEL公司生產的低電壓,高性能CMOS 8位單片機,有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內含2個外中斷口,3個可編程定時計數器,2個全雙工串行通信口,2個讀寫口線,器件採用ATMEL公司的高密度、非易失性存儲技術生產,與標準MCS-51指令系統及8051產品引腳兼容,片內置通用8位中央處理器(CPU)和Flash存儲單元,可以按照常規方法對其進行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結合在一起,特別是可反覆擦寫的Flash存儲器可有效地降低開發成本。
3.2狀態燈選擇
該系統設計紅、綠、黃狀態燈顯示的功能,用LED燈來代替實際的交通燈,由於有四種不同的運行狀態,一個十字路口需要16個LED燈,倒計時數碼管顯示選用兩位帶片選的7段數碼管,需要4個。數碼管顯示簡單,程序簡單,端口用的少。普通單色發光二極管具有體積小、工作電壓低、工作電流小、發光均勻穩定、響應速度快、壽命長等優點,可用各種直流、交流、等電源驅動點亮,它屬於電流控制型,使用時需串接合適的限流電阻。
3.3系統硬件原理圖設計
第四章 系統軟件設計
4.1 程序流程圖設計
系統通電後,初始化定時器,進行24小時定時,在7:00到8:15或16:30到17:00時,按高峰時段運行。在6:30到7:00或8:15到16;30或18:00到19:00時,按正常時段運行。其餘時段,按晚間時段運行。
本設計利用單片機的定時器T0中斷來設置24小時定時,設置TH1=0x3C,TL1=0xB0.即每0.05秒中斷一次。到第20次中斷即過了20*0.05秒=1秒時,計60S時,滿意1分鐘,計滿60分鐘,滿1小時,計滿24小時,又重新開始計時。用定時器T1中斷來設置數碼管倒計時,每滿1S時,使時間的計數值減1,便實現了倒計時的功能。
4.2 系統編程
4.2.1定時器的中斷設置
在單片機中,中斷技術主要用於實時控制。所謂實時控制,就是要求計算機能及時地響應被控對象提出的分析、計算和控制等請求,使被控對象保持在最佳工作狀態,以達到預定的控制效果。由於這些控制參量的請求都是隨機發出的,而且要求單片機必須做出快速響應並及時處理,對此,只有靠中斷技術才能實現。
本系統中的定時時鐘及倒計時的設置和相應中斷服務子程序如下:
/*24小時時鐘 */
void Timer0Cofig(){
TMOD=0x01; //T0定時器工作方式
TH0=0x3C; //設置初始值,定時50MS
TL0=0xB0;
ET0=1; //定時器開中斷
TR0=1; //啟動定時器0
EA=1; //CPU開中斷總允許
}
void T0int() interrupt 1{
TH0=0x3C; //設置初始值
TL0=0xB0;
second_counter++;
if(second_counter>=20){second++;second_counter=0;}
if(second>=60){minute++;second=0;}
if(minute>=60){hour++;minute=0;}
if(hour>=24){hour=0;}
}
/********倒數顯示定時器*********/
void Timer1Cofig()
{
TMOD=0x01; //T1定時器工作方式
TH1=0x3C; //定時器初值50ms中斷一次
TL1=0xB0;
ET1=1; //定時器開中斷
TR1=1; //啟動定時器1
EA=1; //CPU開中斷總允許
}
/*定時器中斷函數*/
void timer1() interrupt 3{
TH1=0x3C; //重新裝入初值
TL1=0xB0;
RGY_second++;
if(RGY_second==20){
RGY_second=0;
Time_EW--;//滿1秒,數碼管值減1
Time_SN--;
}
}
第五章 系統調試與仿真
5.1 proteus仿真結果
根據系統設計要求,進行keil調試和proteus系統仿真,不斷調試程序。發光二極管,數碼管都能按要求顯示,符合要求。proteus總體仿真圖如下。