畢業(yè)設計報告單片機控制的交通燈控制系統(tǒng)設計_第1頁
已閱讀1頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  單片機控制的交通燈控制系統(tǒng)設計</p><p>  題 目 單片機控制的交通燈 </p><p>  控制系統(tǒng)設計 </p><p>  專 業(yè) 應用電子 </p><p>  班 級 0802

2、 </p><p>  學 號 k2008610236 </p><p>  姓 名 </p><p>  指導教師 </p><p>  2014

3、年 01 月 13 日 </p><p><b>  摘要</b></p><p>  本設計是單片機控制的交通燈控制系統(tǒng)設計。由單片機系統(tǒng)、LED顯示、交通燈演示系統(tǒng)、鍵盤電路及其控制電路組成。該系統(tǒng)除基本交通燈功能外,還具有倒計時、緊急情況處理、調(diào)整通行時間以及根據(jù)具體情況手動控制等功能。</p><p>  十字路口的交通燈在工作時應具有

4、如下特點:紅燈表示該條道路禁止通性;黃燈表示該條道路上未過停車線的車輛禁止通行,已過停車線的車輛繼續(xù)通性;綠燈亮表示該條道路允許通行。</p><p>  該系統(tǒng)使用12MHZ晶振與單片機AT89S52相連接,通過軟件編程的方法實現(xiàn)十字路口的交通燈控制,輸入裝置是鍵盤開關,用于控制交通燈的運行模式以及設置通行時間,顯示裝置是兩位的LED七段數(shù)碼管。該系統(tǒng)是由AT89S52單片機控制的,可以實現(xiàn)以下功能:</

5、p><p>  1. 南北方向(主干道)車道和東西方向(支干道)兩條交叉道路上的車輛交替運行,主干道每次通行時間都設為30秒、支干道每次通行間為20秒,時間可設置修改。</p><p>  2. 在綠燈轉(zhuǎn)為紅燈時,要求黃燈先亮5秒鐘,才能變換運行車道。</p><p>  3. 黃燈亮時,要求每秒閃亮一次。</p><p>  4. 東西方向、南

6、北方向車道除了有紅、黃、綠燈指示外,每一種燈亮的時間都用顯示器進行顯示(采用計時的方法)。</p><p>  5. 一道有車而另一道無車(實驗時用開關 K0 和 K1 控制),交通燈控制系統(tǒng)能立即讓有車道放行。</p><p>  6. 有緊急車輛要求通過時,系統(tǒng)要能禁止普通車輛通行,A、B道均為紅燈。</p><p>  關鍵字:AT89S52單片機,交通燈,L

7、ED顯示,鍵盤開關電路。</p><p><b>  目 錄</b></p><p>  1概述…………………………………………………………………………-3-</p><p>  1.1設計背景 ……………………………………………………………-3-</p><p>  1.2設計目的 …………………………………………

8、…………………-3-</p><p>  1.3設計要求 ……………………………………………………………-3-</p><p>  2 系統(tǒng)總體方案及硬件設計 ………………………………………………-4-</p><p>  2.1 設計原理……………………………………………………………-4-</p><p>  2.2 各功能模塊設計…………

9、…………………………………………-4-</p><p>  2.2.1單片機AT89S52介紹 …………………………………………-4-</p><p>  2.2.2總體方案 ………………………………………………………-5-</p><p>  2.2.3時鐘電路模塊 …………………………………………………-6-</p><p>  2.2.

10、4復位電路模塊 …………………………………………………-6-</p><p>  2.2.5交通燈演示模塊 ………………………………………………-7-</p><p>  2.2.6 LED顯示模塊 …………………………………………………-7-</p><p>  2.2.7鍵盤開關模塊 …………………………………………………-8-</p><p

11、>  3 軟件設計 …………………………………………………………………-10-</p><p>  3.1程序流程圖…………………………………………………………-10-</p><p>  3.2系統(tǒng)軟件設計………………………………………………………-11-</p><p>  3.2.1 LED的編程……………………………………………………-11-<

12、/p><p>  3.2.2交通燈模塊的編程設計………………………………………-12-</p><p>  3.2.3定時器程序……………………………………………………-12-</p><p>  3.2.4鍵盤程序………………………………………………………-13-</p><p>  3.2.4.1通行時間設置程序………………………………………

13、-13-</p><p>  3.2.4.2緊急情況處理程序………………………………………-14-</p><p>  3.2.4.3狀態(tài)調(diào)整程序……………………………………………-14-</p><p>  4 Proreus仿真 ……………………………………………………………-15-</p><p>  4.1正常工作狀態(tài)……………………

14、…………………………………-15-</p><p>  4.2時間調(diào)整……………………………………………………………-17-</p><p>  4.3緊急狀況……………………………………………………………-19-</p><p>  4.4狀態(tài)調(diào)整……………………………………………………………-20-</p><p>  5課程設計體會 …

15、…………………………………………………………-22-</p><p>  參考文獻……………………………………………………………………-23-</p><p>  附1:源程序代碼 …………………………………………………………-24-</p><p>  附2:系統(tǒng)原理圖 …………………………………………………………-32-</p><p>

16、<b>  1 概述</b></p><p><b>  1.1 設計背景</b></p><p>  人們越來越關注城市交通問題,而交通燈在安全行車過程中起十分重要的作用, 現(xiàn)在交通燈一般設在十字路口,在醒目位置用紅、綠、黃三種顏色的指示燈, 加上一個倒計時的顯示計時器來控制行車, 對于一般情況下的安全行車、車輛分流發(fā)揮著作用, 但根據(jù)實際行

17、車過程中出現(xiàn)的情況, 主要有如下幾個缺點: 1、車道讓車輪流放行時間相同且固定, 在十字路口, 經(jīng)常出現(xiàn)有些車道車輛較多, 放行時間應該長些;而有些車道車輛較少,放行時間應短些。2、 沒有考慮緊急車通過時, 兩車道應采取的措施, 譬如, 有消防車通過執(zhí)行緊急任務時, 兩車道的車都應停止, 讓緊急車輛通過。根據(jù)行車過程中出現(xiàn)的實際情況, 如何合理高效地利用交通燈指示交通情況,這是一個迫切需要解決的問題。</p><p&

18、gt;<b>  1.2 設計目的</b></p><p>  1. 進一步熟悉和掌握單片機的結(jié)構(gòu)及工作原理。</p><p>  2. 掌握單片機的接口技術及相關外圍芯片的外特性,控制方法。</p><p>  3. 通過課程設計,掌握以單片機核心的電路設計的基本方法和技術。</p><p>  4. 通過實際程序設

19、計和調(diào)試,逐步掌握模塊化程序設計方法和調(diào)試技術。</p><p>  5. 了解開發(fā)單片機應用系統(tǒng)的全過程,為今后從事相關事業(yè)打下基礎。</p><p><b>  1.3 設計要求</b></p><p>  1. 設計一個十字路口的交通燈控制電路,要求南北方向(主干道)車道和東西方向(支干道)車道兩條交叉道路上的車輛交替運行,主干道每次通

20、行時間都設為30秒、支干道每次通行時間為20秒,時間可設置修改。</p><p>  2. 在綠燈轉(zhuǎn)為紅燈時,要求黃燈先亮5秒鐘,才能變換運行車道;</p><p>  3. 黃燈亮時,要求每秒閃亮一次。</p><p>  4. 東西方向、南北方向車道除了有紅、黃、綠燈指示外,每一種燈亮的時間都用顯示器進行顯示(采用計時的方法)。</p><p

21、>  5. 一道有車而另一道無車(實驗時用開關 K0 和 K1 控制),交通燈控制系統(tǒng)能立即讓有車道放行。 </p><p>  6. 有緊急車輛要求通過時,系統(tǒng)要能禁止普通車輛通行,A、B道均為紅燈。</p><p>  2 系統(tǒng)總體方案及硬件設計</p><p><b>  2.1 設計原理</b></p><p&

22、gt;  本設計使用的是單片機作為核心的控制元件,使得電路的可靠性比較高,功能也比較強大,而且可以隨時更新系統(tǒng),根據(jù)道路情況適時調(diào)整交通燈的狀態(tài),全面有效地利用交通燈指示交通情況。</p><p>  該設計是以單片機AT89S52為核心完成的,在硬件電路中采用P1口點亮交通指示燈,采用P0口和P2口作為2位LED數(shù)碼管的驅(qū)動接口,可顯示各個方向的交通燈的持續(xù)時間,單片機外圍接有按鍵開關電路,可以響應外部中斷及鍵

23、盤程序,實現(xiàn)緊急情況處理、調(diào)整交通燈的點亮時間等功能。</p><p>  芯片選用AT89C51 單片機,電路由下列部分組成:時鐘電路、復位電路、鍵盤電路、交通燈演示電路、LED顯示電路。</p><p>  2.2 各功能模塊設計</p><p>  2.2.1 單片機AT89S52介紹</p><p>  AT89S52是一個低電壓,高

24、性能CMOS型 8位單片機,片內(nèi)含8KB的可反復擦寫的Flash只讀程序存儲器(ROM)和256 B的隨機存取數(shù)據(jù)存儲器(RAM)。 AT89S52是一個低功耗高性能單片機,40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,AT89S52可以按照常規(guī)方法進行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結(jié)合在一起,特別是可反復擦寫的Flash

25、存儲器可有效地降低開發(fā)成本。</p><p><b>  引腳使用說明:</b></p><p>  I/O端口的編程實際上就是根據(jù)應用電路的具體功能和要求對I/O寄存器進行編程。具體步驟如下:</p><p>  l. 根據(jù)實際電路的要求,選擇要使用哪些I/O端口。</p><p>  2. 初始化端口的數(shù)據(jù)輸出寄存器

26、,應避免端口作為輸出時的開始階段出現(xiàn)不確定狀態(tài),影響外圍電路正常工作。</p><p>  3. 根據(jù)外圍電路功能,確定PO端口的方向,初始化端口的數(shù)據(jù)方向寄存器。對于用作輸入的端口可以不考慮方向初始化,因為PO的復位缺省值為輸入。</p><p>  4. 用作輸入的PO管腳,需上拉電阻。</p><p>  5. 最后對I/O端口進行輸出(寫數(shù)據(jù)輸出寄存器)和輸

27、入(讀端口)編程,完成對外圍電路的相應功能。</p><p><b>  幾個特殊管腳:</b></p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。   XTAL2:來自反向振蕩器的輸出。</p><p>  RST: 復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平。<

28、;/p><p>  2.2.2 總體方案</p><p>  此交通燈系統(tǒng)位于一個十字路口,此路口為東南西北走向。南北方向為主干道,東西方向為支干道。各干道有一組紅、綠、黃三色的指示燈,指揮車輛和行人安全通行。紅燈亮禁止通行,綠燈亮允許通行,黃燈亮提示人們注意紅、綠燈的狀態(tài)即將切換。</p><p>  此交通燈系統(tǒng)工作過程分為4個狀態(tài)。狀態(tài)0南北方向綠燈亮,東西方向紅

29、燈亮。過25秒后轉(zhuǎn)為狀態(tài)1,南北方向綠燈滅,黃燈每秒閃亮一次,東西方向還是紅燈亮。歷時5秒鐘再轉(zhuǎn)為狀態(tài)2,南北方向紅燈亮,東西方向綠燈亮。過15秒后轉(zhuǎn)為狀態(tài)3,南北方向還是紅燈亮,東西方向綠燈滅,黃燈每秒閃亮一次。歷時5秒鐘又循環(huán)至狀態(tài)0。</p><p>  交通燈的狀態(tài)表如下:</p><p>  表01 交通燈的狀態(tài)表</p><p><b>  注

30、:</b></p><p>  1:SN:南北方向。WE:東西方向。</p><p>  2:狀態(tài):0:熄。1:亮。1/0:閃。</p><p>  2.2.3 時鐘電路模塊</p><p>  時鐘電路模塊給單片機提供特定的時鐘周期,以備單片機工作使用。單片機的機器周期有6MHz和12MHz的兩種。這里采用的是12MHZ的晶振,

31、以給單片機提供12MHz的機器周期。另外有兩個30P的電容,兩晶振引腳分別連到XTAL1和XTAL2振蕩脈沖輸入引腳。</p><p>  其電路圖如圖02所示: </p><p>  圖02 時鐘電路模塊</p><p>  2.2.4 復位電路模塊</p><p>  單片機系統(tǒng)的復位電路采用的是上電+按鈕復位電路形式,其中電阻R采用10

32、KΩ的阻值,電容采用電容值為10μF的電解電容。</p><p>  其具體連接電路如圖03所示:</p><p>  圖03 復位電路模塊</p><p>  2.2.5 交通燈演示模塊</p><p>  此交通燈演示模塊由單片機的P1口作信號輸出端來控制12個交通燈的亮滅,交通燈采用的是發(fā)光二極管。因為單片機的輸出電流非常小,為了使發(fā)光

33、二極管能夠發(fā)光或者更亮,二極管采用共陽極接法。即陽極通過470Ω電阻接+5V直流電源,陰極接單片機P1口。同時南北方向同色燈連同上拉電阻一起并聯(lián),東西方向也是一樣,以保證同一干道上的同色燈同時點亮或熄滅,并且流過二極管的電流不會因并聯(lián)而減半。</p><p>  其具體連接電路如圖04所示: </p><p>  圖04交通燈演示電路</p><p>  2.2.6

34、 LED顯示模塊</p><p>  由于同一干道上的兩個方向的紅燈,綠燈,黃燈點亮時間相同,所以南北方向只需一個數(shù)碼管顯示相應的時間即可,同理東西方向也只需一個。</p><p>  本次交通燈設計采用兩位一體的共陰極數(shù)碼管來顯示相應的時間。由單片機的P0口輸出字型碼,P2口的前四位P2.0~P2.3作位選端。 位選端接LED的共陰極,故低電位有效。因為單片機I/O口的驅(qū)動電流很小,一般

35、只有幾個毫安。為了增加驅(qū)動能力,每個LED上都加上一個上拉電阻,接入+5V電源,本次設計采用的是排阻。當P0口輸出低電平時,LED不導通,上拉電阻電流灌進單片機,而當P0口輸出高電平時,LED導通。而且上拉電阻的電流也通過LED,這自然就增加了LED的發(fā)光亮度。 </p><p>  其具體連接電路如圖05所示:</p><p>  圖05 LED顯示電路</p><

36、p>  2.2.7 鍵盤開關模塊</p><p>  此系統(tǒng)通過5個開關實現(xiàn)所有的要求,開關一端接地,另一端接單片機的P3口。K0接P3^7,當主干道有車而支干道無車時,按一下K0鍵,可以實現(xiàn)主干道通行。K1接P3^6,當支干道有車而主干道無車時,按一下K1鍵,可以實現(xiàn)支干道通行。K2接P3^3,利用中斷1的方式對緊急情況進行處理,即使東南西北四個方向都亮紅燈停車。K4接P3^2,利用中斷0的方式對各個干道

37、的通行時間進行設置。在相應中斷0期間,K0,K1起調(diào)整時間的作用。每按一下K0,主干道通行時間加一,每按一下K0,主干道通行時間加一。K3接P3^5,按一下K3,可以使系統(tǒng)退出中斷,回到主程序。</p><p>  其具體連接電路如06圖示: </p><p>  圖06 鍵盤開關電路</p><p><b>  3 軟件設計</b><

38、/p><p><b>  3.1 系統(tǒng)流程圖</b></p><p>  3.2 系統(tǒng)軟件設計</p><p>  本次單片機課程設計軟件部分利用C語言編程,采用模塊化程序設計。程序部分由主程序、定時器程序、T0/T1中斷服務程序、鍵盤掃描程序、交通燈點亮程序、LED數(shù)碼管掃描顯示程序和延時程序構(gòu)成。</p><p>  3

39、.2.1 LED的編程</p><p>  本次交通燈設計采用兩位一體的共陰極數(shù)碼管來顯示相應的時間。數(shù)碼管為七段數(shù)碼管,由8個發(fā)光二極管構(gòu)成,通過不同的組合可用來顯示數(shù)字0-9,字符A-F、H、L、P、R、U、Y、符號“-”及小數(shù)點“.”。本設計只需要顯示數(shù)字0-9,來表示相應的時間。</p><p>  共陰極數(shù)碼管的8個發(fā)光二極管的陰極連接在一起接位選端。兩個兩位一體的共陰極數(shù)碼管共

40、有4個位選端,分別接在P2^O-P2^3,低電平有效。數(shù)碼管各個陽極管腳接各段的驅(qū)動電路輸出端,既P0口。P0^0接a,P0^1接b,……P0^6接g,P0^7接dp,高電平有效。</p><p>  本設計采用逐位掃描的方式實現(xiàn)相應時間的動態(tài)顯示。先將P2^1置低電平,P2^0、P2^2、P2^3置高電平,來選中南北方向數(shù)碼管的個位,此時P0口的數(shù)據(jù)接傳送給它顯示。經(jīng)延時一段時間,將P2^1置低電位選中南北方

41、向數(shù)碼管的十位,此時P0口的數(shù)據(jù)接傳送給它顯示。再用同樣的方法依次驅(qū)動東西方向數(shù)碼管。通過不斷改變P0口、P2口的輸出,用循環(huán)掃描的方式,即可實現(xiàn)LED的動態(tài)顯示。</p><p>  LED動態(tài)顯示的流程圖如圖08:</p><p>  3.2.2交通燈模塊的編寫設計</p><p>  本次設計的交通燈演示模塊由單片機的P1口作信號輸出端來控制12個交通燈的亮滅

42、。P1^1-P1^6依次連接南北的紅燈、綠燈、黃燈,東西的紅燈、綠燈,黃燈。所以4種狀態(tài)依次為0x6A,0x66,0x5C,0x3C。當交通燈的剩余時間為零時,改變P1口的輸出,進而改變交通燈的點亮狀態(tài)。交通燈依次循環(huán)上面的4個狀態(tài),就可以實現(xiàn)指揮交通的作用。</p><p>  3.2.3 定時器程序</p><p>  本次設計用定時計數(shù)器T1,TMOD是定時計算器的工作方式控制寄存器

43、,通過對該寄存器的操作可以改變T1的工作方式。T1有4種工作方式,由TMOD寄存器中間的M1、M0這兩位來決定。本次設計的定時計數(shù)器工作在工作方式1,M1、M0設定為01。定時計算器采用加1計數(shù)的方式,當接收到一個驅(qū)動事件時計數(shù)器加1。工作方式1的內(nèi)部計數(shù)器寬度為16位,由TH1的8位和TL1的8位組成。當TL1溢出時將向TH1進位,當TH1溢出后會產(chǎn)生相應的溢出中斷。</p><p>  驅(qū)動事件之間的時間間隔

44、即為定時計數(shù)器的定時寬度。在定時的工作方式下,定時寬度是單片機的機械周期,也是外部時鐘頻率的1/12。本次設計的外部時鐘頻率為12MHz??芍?,接收106個驅(qū)動事件的時間為1s。</p><p>  定是1s的流程圖如圖09所示:</p><p>  3.2.4 鍵盤程序</p><p>  為了實現(xiàn)設置通行時間、緊急情況處理、有車放行等功能,本次設計中有鍵盤電路。

45、通行時間設置由外部中斷0實現(xiàn),緊急情況由外部中斷1處理,有車放行是用普通的鍵盤程序?qū)崿F(xiàn)的。</p><p>  按鍵實際是一種常用的按鈕,按鍵未按下時,鍵的兩個觸點處于斷開狀態(tài),按鍵按下時,兩個觸點閉合。按鍵是利用機械觸點來實現(xiàn)鍵的閉合和釋放,由于彈性作用的影響,機械觸點在閉合及斷開瞬間均有抖動過程,從而使鍵輸入也出現(xiàn)抖動。</p><p>  抖動時間一般為5—10ms。本次設計采用軟件

46、的辦法消抖。在第一次檢測到有鍵按下時不動作,延時10ms,再次檢測按鍵的狀態(tài),如果仍保持閉合狀態(tài),則確定真的有鍵按下。當按鍵釋放后,轉(zhuǎn)入按鍵的處理程序</p><p><b>  延時程序如下:</b></p><p><b>  /*延時t毫秒*/</b></p><p>  void delay(uchar t)<

47、;/p><p><b>  {</b></p><p>  uchar i; /*定義無符號字符常量*/</p><p>  for(t;t>0;t--) /*執(zhí)行t次循環(huán)*/</p><p><b>  {</b></p><p>  for(i=2000;i>

48、0;i--) /*由于時鐘脈沖是12MHz,執(zhí)行2000次循環(huán)的時間為1ms*/</p><p><b>  {</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b></p

49、><p>  3.2.4.1 通行時間設置程序</p><p>  本次設計通過外部中斷0設置各個干道的通行時間。</p><p>  外部中斷0的請求信號由P3^2引腳輸入,采用低電平有效的方式響應中斷,即IT0=1。響應中斷0期間,CPU禁止響應其他中斷,按鍵K0,K1起調(diào)整時間的作用。采用加1的方式,每按一下K0,主干道通行時間加1,每按一下K1,支干道通行時間加

50、1。通行時間可以直接在數(shù)碼管上顯示出來。按一下K3,可以使系統(tǒng)退出中斷,回到主程序斷點處,從下一個狀態(tài)開始執(zhí)行新設置的通行時間。CPU再開放總中斷。</p><p>  由于本次設計使用兩位一體的共陰極數(shù)碼管顯示時間,故設置各個干道的通行時間的范圍為0—100s。考慮道路通車的實際情況,時間太短無法通過交通路口,所以本設計中通行時間下限為6s(綠燈1s,黃燈5s)。在6—99s之間可以任意設置通行時間,更合理高效

51、的指揮交通。</p><p>  3.2.4.2 緊急情況處理程序</p><p>  本次設計通過外部中斷1實現(xiàn)對緊急情況的處理。</p><p>  與外部中斷0相仿。外部中斷1的請求信號有P3^3引腳輸入,采用低電平有效的方式相應中斷,即IT0=1。響應中斷1期間,CPU禁止響應其他中斷,東南西北四個方向均亮紅燈,各個干道都禁止通行。由于不確定要持續(xù)多久,不采

52、用倒計時的方式顯示時間,數(shù)碼管顯示00。緊急情況結(jié)束時,按一下K3,可以使系統(tǒng)退出中斷,回到主程序斷點處,CPU再開放總中斷。</p><p>  3.2.4.3 狀態(tài)調(diào)整程序</p><p>  在實際交通系統(tǒng)中,很有可能會不時的出現(xiàn)一道有車而另一道無車的情況,為了更合理高效的指揮交通,本次設計的交通燈控制系統(tǒng)能立即讓有車道放。由開關 K0 和 K1 控制。采用查詢的方式不斷掃描K0、K

53、1,看有沒有鍵按下。按一下K0鍵,可以實現(xiàn)主干道通行,按一下K1鍵,可以實現(xiàn)支干道通行。</p><p>  此時交通狀態(tài)的改變是因為另一路無車,所以不需要設置返回,直接按主程序循環(huán)指揮。也有可能較長時間出現(xiàn)一道有車另一道無車的情況,只需多次按K0或K1鍵即可。</p><p>  4 Proteus仿真</p><p>  4.1 正常工作狀態(tài)</p>

54、<p>  本次設計的交通燈控制系統(tǒng)共有四個工作狀態(tài),分別是狀態(tài)0、狀態(tài)1、狀態(tài)2和狀態(tài)3。</p><p>  開始時先執(zhí)行狀態(tài)0,南北方向綠燈亮,東西方向紅燈亮。歷時25秒。如圖10所示:</p><p><b>  圖10 狀態(tài)0</b></p><p>  25秒后轉(zhuǎn)為狀態(tài)1,南北方向綠燈滅,黃燈每秒閃亮一次,東西方向還是

55、紅燈亮。歷時5秒。如圖11所示:</p><p><b>  圖11 狀態(tài)1</b></p><p>  5秒后再轉(zhuǎn)狀態(tài)2,南北方向紅燈亮,東西方向綠燈亮。歷時15秒。如圖12所示:</p><p><b>  圖12 狀態(tài)2</b></p><p>  15秒后轉(zhuǎn)狀態(tài)3,南北方向還是紅燈亮,東

56、西方向綠燈滅,黃燈每秒閃亮一次。歷時5秒。如圖13所示:</p><p><b>  圖13 狀態(tài)3</b></p><p>  此狀態(tài)結(jié)束后再回到狀態(tài)0,如此循環(huán)進行。</p><p><b>  4.2 時間調(diào)整</b></p><p>  按一下開關K4,系統(tǒng)響應外部中斷0,進入通行時間調(diào)整

57、程序。各個干道的通行時間有數(shù)碼管顯示。如圖14所示:</p><p><b>  圖14 時間調(diào)整</b></p><p>  按鍵K0,K1起調(diào)整時間的作用,每按一下K0,主干道通行時間加1,每按一下K1,支干道通行時間加1。多次按鍵即可調(diào)整到合理的通行時間。如圖15所示:</p><p>  圖15 通行時間+1</p>

58、<p>  按一下K3,可以使系統(tǒng)退出中斷,回到主程序斷點處,從下一個狀態(tài)開始執(zhí)行新設置的通行時間。如圖16、17所示:</p><p>  圖16 主干道按新設置的時間執(zhí)行</p><p>  圖17 支干道按新設置的時間執(zhí)行</p><p><b>  4.3 緊急情況</b></p><p>  當出

59、現(xiàn)緊急情況時,按一下開關K2,系統(tǒng)響應外部中斷1,各個方向均亮紅燈禁止通行,數(shù)碼管均顯示0。按一下K3,可以使系統(tǒng)退出中斷,回到主程序斷點處。如圖18所示</p><p><b>  圖18 緊急情況</b></p><p><b>  4.4 狀態(tài)調(diào)整</b></p><p>  為了更合理高效的指揮交通,當南北方向有

60、車而東西方向無車時,按K0,系統(tǒng)會自動跳轉(zhuǎn)到狀態(tài)0,實現(xiàn)南北方向通行。如圖19所示:</p><p>  圖19 南北方向有車而東西方向無車時,南北放行</p><p>  當東西方向有車而南北方向無車時,按K1,系統(tǒng)會自動跳轉(zhuǎn)到狀態(tài)2,實現(xiàn)東西方向通行。如圖20所示:</p><p>  圖20 東西方向有車而南北方向無車時,東西放行</p>&

61、lt;p><b>  5 課程設計體會</b></p><p>  很榮幸有這次課程設計的機會,我可以把理論的學習與實踐有機的結(jié)合起來。</p><p>  在設計過程中,首先要分析課題,根據(jù)所學知識繪制出系統(tǒng)總體設計框圖。然后按照自己的設計思路,利用所給的元器件繪制出設計圖。在繪制設計圖連接各個元器件的時候,要盡量使布線合適,從而使所作設計圖清晰易看。繪制完設

62、計圖后,接下來就是要根據(jù)設計所要求的功能和已完成的設計圖編寫程序,在編程時,首先應該繪制出主程序流程圖,然后采用模塊化程序設計的方式,編寫實現(xiàn)各個功能的子程序,再將各個子程序與主程序連接起來。在設計程序時要不斷對程序進行修改,同時在設計程序的過程中要養(yǎng)成注釋程序的習慣,在對程序進行修改的時候,可以通過注釋很容易的看出各句程序的功能,清晰明朗。當程序設計出來之后,就可以通過仿真軟件對其進行編譯,生成仿真所需要的HEX文件。 將生成的文件加

63、載到系統(tǒng)圖的單片機上,就可以進行系統(tǒng)仿真。通過仿真,檢測所作設計是否能實現(xiàn)預期功能。</p><p>  本次課程設計使我對單片機的工作原理有了更深刻的認識,掌握了許多在以前學習中混淆不清的知識點。在翻閱相關書籍和查詢相關資料過程中學到了豐富的單片機知識,開闊了眼界,增廣了知識面。在編輯程序中,對C語言又有了新的認識和理解。實物焊接中不僅鍛煉了自己的動手能力,而且真正作到了理論聯(lián)系實際的重要性,收益匪淺。 <

64、;/p><p>  本次課程設計我參考的三本書。一本是余發(fā)山教授的《單片機原理及其應用技術》,一本是在圖書館借的王為青老師編寫的《單片機Keil Cx51應用開發(fā)技術》,還有一本就是賈宗璞老師的《C語言程序設計》。在此向編者表示誠摯的謝意。</p><p>  本次設計中,我曾多次向 老師請教各個模塊設計的細節(jié)問題,得到了老師的大力幫助,在此深表感謝!</p><

65、p><b>  參考文獻</b></p><p>  [1] 余發(fā)山,王福忠.單片機原理及應用技術 徐州:中國礦業(yè)大學出版社,2008 </p><p>  [2] 賈宗璞,許合利.C語言程序設計 徐州:中國礦業(yè)大學出版社,2007 </p><p>  [3] 王為青,程國剛.單片機Keil Cx51應用開發(fā)技術 北京:人民郵電出版

66、社,2007 </p><p><b>  附1 源程序代碼</b></p><p>  #include<AT89X52.H> /*對單片機的口進行了定義********/</p><p>  #define uchar unsigned char /*定義字符串類型為無符號型*/</p><p>

67、  uchar code a[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};/*段碼組合,P0口,高有效*/</p><p>  uchar code b[4]={0x0D,0x0E,0x07,0x0B}; /****P2口,低有效*/</p><p>  uchar code c[4]={0x6A,0x66,0x5C,0

68、x3C}; /****P1口.低有效*/</p><p>  char SN=25,WE=30; /*SN表示南北方向——主干道,WE表示東西方向——支干道*/</p><p>  char SN_G=25,WE_G=15,Y=5; /*SN_G表示南北方向的綠燈,WE_G表示東西方向的綠燈,Y表示黃燈*/</p><p>  uchar i

69、,k=0,count=0; /*定義無符號字符串變量*/</p><p>  void delay(uchar t);/*定義函數(shù)*/</p><p>  void light();/*定義函數(shù)*/</p><p>  void led(); /*定義函數(shù)*/</p><p>  void ledthrough();/*定義函數(shù)

70、*/</p><p>  void leddrive(); /*定義函數(shù)*/</p><p>  sbit K0=P3^7;/*開關K0接P3^7管腳*/</p><p>  sbit K1=P3^6;/*開關K1接P3^6管腳*/</p><p>  sbit K2=P3^3;/*開關K2接P3^3管腳*/</p>&

71、lt;p>  sbit K3=P3^5;/*開關K3接P3^5管腳*/</p><p>  sbit K4=P3^2;/*開關K4接P3^2管腳*/</p><p><b>  /*程序初始化*/</b></p><p>  void init(void)</p><p><b>  { <

72、/b></p><p>  /*12MHz */</p><p>  TMOD=0x01; /**計數(shù)器用模式1,為16位計數(shù)器*****/</p><p>  TH1=(65536-50000)/256; /*0x3C*/</p><p>  TL1=(65536-50000)%256; /*0xB0*//*計50000個數(shù),用時

73、50ms*/</p><p>  IT0=1;/*外部中斷為低電平觸發(fā)方式*/</p><p>  ET0=1;/*允許T0中斷*/</p><p>  TR0=1;/*啟動計數(shù)器*/</p><p>  EA=1;/*CPU開放總中斷*/</p><p>  EX0=1;/*允許外部中斷0中斷,即允許響應端口P3^2

74、(K4)中斷*/</p><p>  EX1=1;/*允許外部中斷1中斷,即允許響應端口P3^3(K2)中斷*/</p><p><b>  }</b></p><p>  /*中斷0處理程序*/</p><p>  void int0(void) interrupt 0</p><p><

75、b>  { </b></p><p>  EA=0;/*CPU禁止響應一切中斷*/</p><p>  P1=0x6C;/*東西南北方向均紅燈亮*/</p><p>  TR0=!TR0;/*計數(shù)器停止工作*/</p><p>  for(;;)/*無條件循環(huán)*/</p><p><b&g

76、t;  {</b></p><p>  ledthrough(); /*調(diào)用通行時間顯示函數(shù)*/</p><p>  /*設置南北方向通行時間*/</p><p>  if(K0==0) /*P3^7=0*/</p><p><b>  { </b></p><p>  del

77、ay(10);/*延時,把抖動的時間拋掉*/</p><p><b>  if(K0==0)</b></p><p><b>  {</b></p><p>  while(!K0)/*當松開K0開關時,跳出循環(huán),執(zhí)行后面的程序*/</p><p><b>  {</b><

78、;/p><p>  ledthrough(); /*調(diào)用通行時間顯示函數(shù)*/</p><p><b>  }</b></p><p>  SN_G++;/*南北方向綠燈時間+1*/</p><p>  if((SN_G+Y)==100)/*南北方向通行時間(綠燈加黃燈時間)為100s*/</p><p&

79、gt;  SN_G=1;/*由于使用的是兩位數(shù)碼管,當南北方向通行時間加到100后綠燈時間歸1*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*設置東西方向通行時間*/</p><p>  if(K1==0) /*P3^6=0*/<

80、;/p><p><b>  { </b></p><p>  delay(10);/*延時,把抖動的時間拋掉*/</p><p><b>  if(K1==0)</b></p><p><b>  {</b></p><p>  while(!K1)/*當

81、松開K1開關時,跳出循環(huán),執(zhí)行后面的程序*/</p><p><b>  {</b></p><p>  ledthrough(); /*調(diào)用通行時間顯示函數(shù)*/ </p><p><b>  }</b></p><p>  WE_G++;/*東西方向綠燈時間+

82、1*/</p><p>  if((WE_G+Y)==100)/*東西方向通行時間(綠燈加黃燈時間)為100s*/</p><p>  WE_G=1;/*由于使用的是兩位數(shù)碼管,當東西方向通行時間加到100后綠燈時間歸1*/</p><p><b>  }</b></p><p><b>  }</b&g

83、t;</p><p><b>  /*返回*/</b></p><p>  if(K3==0) /*P3^5=0*/ </p><p><b>  { </b></p><p>  delay(10);/*延時,把抖動的時間拋掉*/</p><p><b> 

84、 if(K3==0)</b></p><p><b>  {</b></p><p>  while(!K3)/*當松開K3開關時,跳出循環(huán),執(zhí)行后面的程序*/</p><p><b>  {</b></p><p>  ledthrough(); /*調(diào)用通行時間顯示函數(shù)*/ &

85、lt;/p><p><b>  }</b></p><p>  TR0=!TR0;/*啟動計數(shù)器*/</p><p>  EA=1; /*CPU開放總中斷*/</p><p>  break;/*跳出*/</p><p>  } </p><p&

86、gt;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*中斷1處理程序*/</p><p>  void int1(void) interrupt 2</p><p><

87、;b>  {</b></p><p>  P1=0x6C,P0=a[0];/*東西南北方向均紅燈亮,P0口輸出0*/</p><p>  EA=0;/*CPU禁止響應一切中斷*/</p><p>  TR0=!TR0;/*計數(shù)器停止工作*/</p><p>  for(;;)/*無條件循環(huán)*/</p><

88、;p><b>  {</b></p><p>  leddrive(); /*數(shù)碼管驅(qū)動程序*/</p><p><b>  /*返回*/ </b></p><p>  if(K3==0) /*P3^5=0*/</p><p><b>  { </b><

89、/p><p>  delay(10);/*延時,把抖動的時間拋掉*/</p><p><b>  if(K3==0)</b></p><p><b>  {</b></p><p>  while(!K3)/*當松開K3開關時,跳出循環(huán),執(zhí)行后面的程序*/</p><p><

90、;b>  {</b></p><p>  leddrive(); /*數(shù)碼管驅(qū)動程序*/</p><p><b>  }</b></p><p>  EA=1;/*CPU開放總中斷*/</p><p>  TR0=!TR0;/*啟動計數(shù)器*/</p><p>  break;

91、/*跳出*/</p><p>  } </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /*鍵盤程序*/<

92、/b></p><p>  void key()</p><p><b>  {</b></p><p>  /*南北有車而東西無車*/</p><p>  if(K0==0) /*K0=0*/</p><p><b>  { </b></p>&

93、lt;p>  delay(10);/*延時,把抖動的時間拋掉*/</p><p>  if(K0==0) </p><p><b>  { </b></p><p>  while(!K0)/*當松開K0開關時,跳出循環(huán),執(zhí)行后面的程序*/</p><p><b>  { </b>&l

94、t;/p><p>  light();/*調(diào)用交通燈函數(shù)*/</p><p>  led(); /*調(diào)用數(shù)碼管函數(shù)*/</p><p><b>  }</b></p><p>  count=0;/*清零*/</p><p>  k=0;/*南北方向通車,東西方向不通車*/</p>&l

95、t;p>  SN=SN_G,WE=SN_G+Y;/*南北方向顯示時間為南北方向綠燈通行時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮時間*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*南北無車而東西有車*/</p><p>

96、  if(K1==0) /*K1=0*/</p><p><b>  { </b></p><p>  delay(10);/*延時,把抖動的時間拋掉*/</p><p><b>  if(K1==0)</b></p><p><b>  {</b></p>

97、<p>  while(!K1)/*當松開K1開關時,跳出循環(huán),執(zhí)行后面的程序*/</p><p><b>  {</b></p><p>  light();/*調(diào)用交通燈函數(shù)*/</p><p>  led(); /*調(diào)用數(shù)碼管函數(shù)*/</p><p><b>  }</b><

98、/p><p>  count=0;/*清零*/</p><p>  k=2;/*南北方向不通車,東西方向通車*/</p><p>  SN=WE_G+Y,WE=WE_G;/*南北方向顯示時間為東西方向綠燈通行時間加黃燈閃亮時間,東西方向顯示時間為東西方向綠燈通行時間*/</p><p><b>  }</b></p&g

99、t;<p><b>  }</b></p><p><b>  }</b></p><p><b>  /*定時函數(shù)*/</b></p><p>  void time1(void) interrupt 1</p><p><b>  {</b&g

100、t;</p><p><b>  TH0=0x3c;</b></p><p>  TL0=0xb0;/*計50000個數(shù),用時50ms*/</p><p>  count++; /*自增運算*/</p><p>  if(count>=20)/*當count大于或等于20時,歷時1s,執(zhí)行程序*/</p&

101、gt;<p><b>  {</b></p><p>  SN--;/*自減運算*/</p><p>  WE--;/*自減運算*/</p><p>  count=0;/*清零*/</p><p>  if(SN==0||WE==0)/*當SN=0或者WE=0時,執(zhí)行程序*/</p><

102、;p><b>  {</b></p><p>  k++;/*自增運算*/</p><p>  if(k>3)/*當k>3時,執(zhí)行程序*/</p><p>  k=0;/*清零*/</p><p>  switch(k)/*switch語句*/</p><p><b>

103、;  { </b></p><p>  case 0:SN=SN_G,WE=SN_G+Y;break;/*南北方向顯示時間為南北方向綠燈通行時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮時間*/</p><p>  case 1:SN=Y,WE=Y;break; /*東西南北方向顯示時間均為黃燈閃亮時間*/</p><p>  

104、case 2:SN=WE_G+Y,WE=WE_G;break;/*南北方向顯示時間為東西方向綠燈通行時間加黃燈閃亮時間,東西方向顯示時間為東西方向綠燈通行時間*/</p><p>  case 3:SN=Y,WE=Y;break; /*東西南北方向顯示時間均為黃燈閃亮時間*/</p><p><b>  }</b></p><p>

105、;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /*延時t毫秒*/</b></p><p>  void delay(uchar t)</p><p&

106、gt;<b>  {</b></p><p>  uchar i; /*定義無符號字符常量*/</p><p>  for(t;t>0;t--) /*執(zhí)行t次循環(huán)*/</p><p><b>  {</b></p><p>  for(i=2000;i>0;i--) /*由于時鐘脈沖

107、是12MHz,執(zhí)行2000次循環(huán)的時間為1ms*/</p><p><b>  {</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p>

108、<b>  /*交通燈函數(shù)*/</b></p><p>  void light()</p><p><b>  { </b></p><p>  P1=c[k];/*交通燈對應著k的值變化*/</p><p>  if(P1==c[1]&&count==0)/*當南北方向亮黃

109、燈且count=0時,執(zhí)行程序*/</p><p><b>  {</b></p><p>  TH1=(65536-50000)/256; </p><p>  TL1=(65536-50000)%256;/*延時50ms*/ </p><p>  P1=0x6E;/*南北方向黃燈熄滅,東西方向亮紅燈*/<

110、;/p><p><b>  } </b></p><p><b>  else</b></p><p>  if(P1==c[3]&&count==0)/*當東西方向亮黃燈且count=0時,執(zhí)行程序*/</p><p><b>  {</b></p>

111、<p>  TH1=(65536-300000)/256; </p><p>  TL1=(65536-300000)%256;/*延時50ms*/</p><p>  P1=0x7C;/*南北方向亮紅燈,東西方向黃燈熄滅*/</p><p><b>  } </b></p><p><b> 

112、 }</b></p><p><b>  /*數(shù)碼管函數(shù)*/</b></p><p>  void led()</p><p><b>  {</b></p><p>  P2=b[0],P0=a[SN%10];/*顯示南北方向個位*/</p><p>  del

113、ay(5);/*延時*/</p><p>  P2=b[1],P0=a[SN/10];/*顯示南北方向十位*/</p><p>  delay(5);/*延時*/</p><p>  P2=b[2],P0=a[WE%10];/*顯示東西方向個位*/</p><p>  delay(5);/*延時*/</p><p> 

114、 P2=b[3],P0=a[WE/10];/*顯示東西方向十位*/</p><p>  delay(5); /*延時*/</p><p><b>  }</b></p><p>  /*通行時間顯示函數(shù)*/</p><p>  void ledthrough()</p><p><b>

115、  {</b></p><p>  P2=b[0],P0=a[(SN_G+Y)%10];/*南北方向數(shù)碼管顯示可通行時間的個位*/</p><p>  delay(5); /*延時*/</p><p>  P2=b[1],P0=a[(SN_G+Y)/10];/*南北方向數(shù)碼管顯示可通行時間的十位*/</p><p>  delay

116、(5); /*延時*/</p><p>  P2=b[2],P0=a[(WE_G+Y)%10];/*東西方向數(shù)碼管顯示可通行時間的個位*/</p><p>  delay(5); /*延時*/</p><p>  P2=b[3],P0=a[(WE_G+Y)/10];/*東西方向數(shù)碼管顯示可通行時間的十位*/</p><p>  delay(5

117、); /*延時*/</p><p><b>  }</b></p><p>  /*數(shù)碼管驅(qū)動函數(shù)*/</p><p>  void leddrive()</p><p><b>  {</b></p><p>  P2=b[0];/*顯示南北方向個位*/</p>

118、<p>  delay(5);/*延時*/</p><p>  P2=b[1];/*顯示南北方向十位*/</p><p>  delay(5);/*延時*/</p><p>  P2=b[2];/*顯示東西方向個位*/</p><p>  delay(5);/*延時*/</p><p>  P2=b[3]

119、;/*顯示東西方向十位*/</p><p>  delay(5);/*延時*/</p><p><b>  }</b></p><p><b>  /*主函數(shù)*/</b></p><p>  void main(void)</p><p><b>  {</b

120、></p><p>  init();/*調(diào)用程序初始化函數(shù)*/</p><p>  for(;;)/*無條件循環(huán)*/</p><p><b>  {</b></p><p>  key();/*調(diào)用鍵盤程序*/</p><p>  light();/*調(diào)用交通燈函數(shù)*/</p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論