課程名稱:微型計算機系統
設計題目:基于單片機的交通燈控制系統設計
系統要求:
可用紅、黃、綠三種顏色發光二極管和兩位LED數碼管模擬交通燈的變化規律:
硬件設計:
軟件設計:
1)主程序設計
2)各功能子程序設計
其他要求:
(1)報告書封面
(2)課程設計任務書
(3)系統設計方案的提出、分析
(4)系統中典型電路的分析
(5)系統軟件結構框圖
(6)系統電路原理圖
(7)源程序
(8)課設字數不少于3000字
成績 | |
評語: | |
基于單片機的交通燈控制系統設計
摘要:
當你路過一個十字路口時,你是否注意到各個方向車輛和信任有條不紊的通過十字路口。這樣井然有序的情景靠什么來實現呢?靠的是交通燈控制系統。在論文中我使用STC89C51作為主控單元。通過單片機芯片的P1口和P2口分別控制東西方向和南北方向紅黃綠燈的點亮。通過單片機芯片STC89C51的RXD和TXD控制數碼管的顯示時間。采用發光二極管來實現交通燈的點亮,由數碼管實現時間的顯示。該系統不僅僅具有交通等的基本功能還有倒計時,還可以通過按鍵在緊急事件中四個方向都設置為紅燈緊急模式。當然也可以通過按鍵來設置倒計時時間,使系統更加符合實際交通情況。
我設計的交通燈控制系統可以較好的模擬十字路口出現的交通狀況,使行人和車輛能有序的通行。
關鍵詞:交通控制系統 單片機 AT89C51 數碼管 按鍵 LED
內容
1系統方案論證
1.1設計方案
方案一:控制系統主要控制東西方向和南北方向交通狀況,系統以單片機芯片STC89C51為主控單元,通過控制三種顏色LED燈的亮滅來指導個車道通行,上電時復位系統使系統進入運行狀態。總體框圖如下:(見51hei附件)
1.2功能概述
在東西方向和南北方向的十字路口分別設立紅黃綠交通指示燈,用數碼管倒計時顯示。正常情況下兩個主干線上的紅黃綠燈進行交換。紅燈亮表示禁止通行,綠燈亮表示可以通行,每次綠燈變紅燈之前,黃燈亮五秒,方便那些未能及時通過十字路口的車輛能繼續通過。十字路口設立數碼管有倒計時功能,方便人們直關把握通過時間。本設計也考慮緊急情況,當按下緊急模式按鍵后,四個方向紅燈都會常亮。對于夜晚車輛比較少,本設計設計了夜晚模式,按下按鍵后四個方向黃燈會常亮。
2系統硬件設計
2.1交通信號燈控制系統的組成
2.1.1 ATC89C51芯片
選用的ATC89C51與同系列AT89C51在功能上有明顯的提高,最突出的是可以實現在線編程。用于系統的總控制。其主要功能列舉如下:
單片機引腳圖如下:

2.1.2交通燈控制系統構成
芯片ATC89C51一片,2段共陰極數碼管四個,紅黃綠發光二極管各四個,電阻若干,晶振一個,電容若干,按鍵若干。
交通燈控制系統結構框圖:(見51黑附件)
系統各部分工作原理:采用單片機的I/O口P0口通過上拉電阻和交通燈相連接,P3.0、P3.1口接到數碼管控制位上,控制數碼管的顯示,程序放在ATC89C51單片機的ROM中來設置初始時間,在十字路口的四組紅、黃、綠交通燈中,由單片機的P1.5—P1.7、P1.0—P1.2、P2.5—P2.7、P2.0—P2.2分別控制東西南北方向的三色燈。由于交通燈為發光二極管并且陽極通過限流電阻與電源正極相連,因此I/O口輸出電平時,與之相連的指示燈才會點亮,然后通過數碼管倒計時時間。I/O口輸出高電平時,相應指示燈會滅。由于ATC89C51本身集成了看門狗指令,當系統出現異常時看門狗會發出溢出中斷。通過專用的端口輸出,引起RESET復位信號復位系統。
2.2各單元電路模塊功能
2.2.1時鐘電路模塊
本時鐘電路由一個晶體振蕩器12MHz和兩個30pF的瓷片電容組成。時鐘電路用于產生單片機工作所需的時鐘信號,而是需所研究的是指令執行中各信號之
間的相互關系。單片機本身就是一個復雜的同步時序電路,為了保證同步工作方式的實現,電路應在唯一的時鐘信號控制下嚴格的工作。其電路圖所示:

2.2.2復位電路模塊
電容在上接高電平,電阻在下接低電平,中間為RST。這種復位電路為高電平復位。其工作原理是:通電時,電容兩端相當于是短路,于是RST引腳上為高電平,然后電源通過電容對電阻充電,RST端電壓慢慢下降,降到一定程度,即為低電平,單片機開始正常工作。其電路如下:

2.2.3信號燈輸出控制模塊
路口交通燈指示采用紅、黃、綠發光二極管進行提示。其電路如下:

2.2.4時間顯示電路模塊
本系統使用數碼管完成倒計時顯示功能。以東西方向為例,數碼管顯示的數值從綠燈的設置時間最大值往下減,每秒鐘減1,一直減到零。然后又從紅燈的設置時間最大值往下減,一直減到零。接下來又顯示綠燈時間,如此循環。系統共有4個兩位LED數碼管,分別放在模擬交通燈的上方。路口通行剩余時間采用紅色7段數碼管顯示,采用共陰極數碼管,如用單機IP0口加上拉電阻驅動,P3.0/P3.1口來控制數碼管的位。其顯示電路如下:

2.2.5按鍵輸入模塊
由于該系統具有夜間模式,緊急情況模式和交通燈倒計時時間設定功能,所有需要加上這些功能鍵,如下圖所示:

3系統軟件設計
3.2延時的設定
3.2.1 計數器初值計算
定時器工作時必須給計數器送初值,這個值是送到TH和TL中的。他是以加法記數的,并能從全1到全0自動產生溢出中斷請求。因此,可以把計數器記滿為零所需的計數值設定為C和計數初值設定為TC可得到如下計算公式:
TC=M-C
式中,M為計數器模值,該值與計數器工作方式有關。在方式0時M為
2^13;在方式1時M的值為2^16;在方式2和3中為2^8。
算法公式:T=(M-TC)T(計數)或TC=M-T/T(計數)
T(計數)是單片機時鐘周期T(clk)的12倍;TC為定時的初值
如果單片機的主脈沖頻率為T(clk)12MHz,經過12分頻
方式0 TMAX=2^13*1微妙=8.192毫秒
方式1 TMAX=2^16*1微妙=65.536毫秒
實現1秒鐘方法:
采用在主程序中設定一個初值為20的軟件計數器和使T1定時50毫秒。
這樣每當T1到50毫秒時CPU就響應他的溢出中斷請求,進入他的中斷服務子程序。在中斷服務子程序中,CPU先使軟件計數器減1,然后判斷他是否為零。為0表示1秒已到可以返回到輸出時間顯示程序。
定時器需定時50毫秒,故T1工作于方式1。
初值計算:TC=M-T/T(計數)=2^16-50ms/1us=15536=3CB0H
延時程序:
START:MOV TMOD,#10H ;令TO為定時器方式1
MOV TH0,#3CH ;裝入定時器初值
MOV TL0,#0B0H
SETB EA ;打開總中斷
SETB ET1 ;開T1中斷
SETB ER ;啟動T1計數器
CLR FLAG1
CLR FLAG2
CLR FLAG3
MOV R3,#20H ;軟件計數器賦初值
ORG 001BH
LJMP DSD
ORG 0300H
DSD:INC R3
MOV TH0,#3CH ;重裝定時器初值
MOV TL0,#B0H
CJNE R3,#20,FH
DEC R0
DEC R1
MOV R3,#00H
FH: RETI
程序的軟件延時:
單片機的工作頻率為12MHz。機器周期與主頻有關,機器周期是主頻的12倍,所以一個機器周期的時間為12*(1/12M)=1us。可以知道具體每條指令的周期數,這樣就可以通過指令的執行條數來確定1秒的時間。
具體的延時程序分析:
DELY: MOV R4,#80H ;延時一秒主程序
DE2: LCALL DELAY1
DJNE R4,DE2
RET
DELAY1: MOV R4,#00H ;延時125us子程序
D1: MOV R5,DL2
DJNE R4,D1
RET
DELAY1為一個雙重循環,循環次數為256*256=65536次,所以延時時間=65536*2=131072us約為125ms。
DELY R4設置為初值8,主延時程序循環8次,所以125ms*8=1s
用于四個數碼管的倒計時顯示,代碼如下:
sbit smg1=P3^0; //定義南北方向數碼管低位
sbit smg2=P3^1; //定義南北方向數碼管高位
sbit smg1=P3^2; //定義東西方向數碼管低位
sbit smg2=P3^3; //定義東西方向數碼管高位
void djsxs()
{
int b1=0,b2=0;
b1=djs/10; //將倒計時時間的高位賦予b1
b2=djs%10; //將倒計時時間的低位賦予b2
P0=table[b1];
smg1=0;
delayms(3);
smg1=1; //顯示b1
P0=table[b2];
smg2=0;
delayms(3);
smg2=1; //顯示b2
P0=table[b1];
smg3=0;
delayms(3);
smg3=1; //顯示b1
P0=table[b2];
smg4=0;
delayms(3);
smg4=1; //顯示b2



交通燈設計.rar
(9.99 MB, 下載次數: 112)
| 歡迎光臨 (http://m.raoushi.com/bbs/) | Powered by Discuz! X3.1 |