欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      單片機控制的交通燈控制系統(tǒng)設(shè)計[5篇范文]

      時間:2019-05-14 03:36:55下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《單片機控制的交通燈控制系統(tǒng)設(shè)計》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《單片機控制的交通燈控制系統(tǒng)設(shè)計》。

      第一篇:單片機控制的交通燈控制系統(tǒng)設(shè)計

      摘要

      本設(shè)計是單片機控制的交通燈控制系統(tǒng)設(shè)計。由單片機系統(tǒng)、LED顯示、交通燈演示系統(tǒng)、鍵盤電路及其控制電路組成。該系統(tǒng)除基本交通燈功能外,還具有倒計時、緊急情況處理、調(diào)整通行時間以及根

      據(jù)具體情況手動控制等功能。

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

      1.南北方向(主干道)車道和東西方向(支干道)兩條交叉道路上的車輛交替運行,主干道每次通行時間都設(shè)為30秒、支干道每次通行間為20秒,時間可設(shè)置修改。

      2.在綠燈轉(zhuǎn)為紅燈時,要求黃燈先亮5秒鐘,才能變換運行車道。

      3.黃燈亮時,要求每秒閃亮一次。

      4.東西方向、南北方向車道除了有紅、黃、綠燈指示外,每一種燈亮的時間都用顯示器進行顯示(采

      用計時的方法)。

      5.一道有車而另一道無車(實驗時用開關(guān) K0 和 K1 控制),交通燈控制系統(tǒng)能立即讓有車道放行。

      6.有緊急車輛要求通過時,系統(tǒng)要能禁止普通車輛通行,A、B道均為紅燈。

      關(guān)鍵字:AT89S52單片機,交通燈,LED顯示,鍵盤開關(guān)電路。

      目 錄

      1概述…………………………………………………………………………-3-1.1設(shè)計背景 ……………………………………………………………-3-1.2設(shè)計目的 ……………………………………………………………-3-1.3設(shè)計要求 ……………………………………………………………-3-2 系統(tǒng)總體方案及硬件設(shè)計 ………………………………………………-4-2.1 設(shè)計原理……………………………………………………………-4-2.2 各功能模塊設(shè)計……………………………………………………-4-2.2.1單片機AT89S52介紹 …………………………………………-4-2.2.2總體方案 ………………………………………………………-5-2.2.3時鐘電路模塊 …………………………………………………-6-2.2.4復位電路模塊 …………………………………………………-6-2.2.5交通燈演示模塊 ………………………………………………-7-2.2.6 LED顯示模塊 …………………………………………………-7-2.2.7鍵盤開關(guān)模塊 …………………………………………………-8-3 軟件設(shè)計 …………………………………………………………………-10-3.1程序流程圖 …………………………………………………………-10-3.2系統(tǒng)軟件設(shè)計………………………………………………………-11-3.2.1 LED的編程……………………………………………………-11-3.2.2交通燈模塊的編程設(shè)計………………………………………-12-3.2.3定時器程序……………………………………………………-12-3.2.4鍵盤程序………………………………………………………-13-3.2.4.1通行時間設(shè)置程序………………………………………-13-3.2.4.2緊急情況處理程序………………………………………-14-3.2.4.3狀態(tài)調(diào)整程序……………………………………………-14-4 Proreus仿真 ……………………………………………………………-15-4.1正常工作狀態(tài)………………………………………………………-15-4.2時間調(diào)整……………………………………………………………-17-4.3緊急狀況……………………………………………………………-19-4.4狀態(tài)調(diào)整……………………………………………………………-20-5課程設(shè)計體會 ……………………………………………………………-22-參考文獻……………………………………………………………………-23-附1:源程序代碼 …………………………………………………………-24-附2:系統(tǒng)原理圖 …………………………………………………………-32-概述 1.1 設(shè)計背景

      人們越來越關(guān)注城市交通問題,而交通燈在安全行車過程中起十分重要的作用, 現(xiàn)在交通燈一般設(shè)在十字路口,在醒目位置用紅、綠、黃三種顏色的指示燈, 加上一個倒計時的顯示計時器來控制行車, 對于一般情況下的安全行車、車輛分流發(fā)揮著作用, 但根據(jù)實際行車過程中出現(xiàn)的情況, 主要有如下幾個缺點:

      1、車道讓車輪流放行時間相同且固定, 在十字路口, 經(jīng)常出現(xiàn)有些車道車輛較多, 放行時間應該長些;而有些車道車輛較少,放行時間應短些。

      2、沒有考慮緊急車通過時, 兩車道應采取的措施, 譬如, 有消防車通過執(zhí)行緊急任務(wù)時, 兩車道的車都應停止, 讓緊急車輛通過。根據(jù)行車過程中出現(xiàn)的實際情況, 如何合理高效地利用交通燈指示交通情況,這是一個迫切需要解決的問題。

      1.2 設(shè)計目的

      1.進一步熟悉和掌握單片機的結(jié)構(gòu)及工作原理。

      2.掌握單片機的接口技術(shù)及相關(guān)外圍芯片的外特性,控制方法。3.通過課程設(shè)計,掌握以單片機核心的電路設(shè)計的基本方法和技術(shù)。4.通過實際程序設(shè)計和調(diào)試,逐步掌握模塊化程序設(shè)計方法和調(diào)試技術(shù)。5.了解開發(fā)單片機應用系統(tǒng)的全過程,為今后從事相關(guān)事業(yè)打下基礎(chǔ)。

      1.3 設(shè)計要求

      1.設(shè)計一個十字路口的交通燈控制電路,要求南北方向(主干道)車道和東西方向(支干道)車道兩條交叉道路上的車輛交替運行,主干道每次通行時間都設(shè)為30秒、支干道每次通行時間為20秒,時間

      可設(shè)置修改。

      2.在綠燈轉(zhuǎn)為紅燈時,要求黃燈先亮5秒鐘,才能變換運行車道;

      3.黃燈亮時,要求每秒閃亮一次。

      4.東西方向、南北方向車道除了有紅、黃、綠燈指示外,每一種燈亮的時間都用顯示器進行顯示(采

      用計時的方法)。

      5.一道有車而另一道無車(實驗時用開關(guān) K0 和 K1 控制),交通燈控制系統(tǒng)能立即讓有車道放行。

      6.有緊急車輛要求通過時,系統(tǒng)要能禁止普通車輛通行,A、B道均為紅燈。系統(tǒng)總體方案及硬件設(shè)計

      2.1 設(shè)計原理

      本設(shè)計使用的是單片機作為核心的控制元件,使得電路的可靠性比較高,功能也比較強大,而且可以隨時更新系統(tǒng),根據(jù)道路情況適時調(diào)整交通燈的狀態(tài),全面有效地利用交通燈指示交通情況。該設(shè)計是以單片機AT89S52為核心完成的,在硬件電路中采用P1口點亮交通指示燈,采用P0口和P2口作為2位LED數(shù)碼管的驅(qū)動接口,可顯示各個方向的交通燈的持續(xù)時間,單片機外圍接有按鍵開關(guān)電路,可以響應外部中斷及鍵盤程序,實現(xiàn)緊急情況處理、調(diào)整交通燈的點亮時間等功能。芯片選用AT89C51 單片機,電路由下列部分組成:時鐘電路、復位電路、鍵盤電路、交通燈演示電

      路、LED顯示電路。

      2.2 各功能模塊設(shè)計 2.2.1 單片機AT89S52介紹

      AT89S52是一個低電壓,高性能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存儲器可有效地降低開發(fā)成本。

      引腳使用說明:

      I/O端口的編程實際上就是根據(jù)應用電路的具體功能和要求對I/O寄存器進行編程。具體步驟如下:

      l.根據(jù)實際電路的要求,選擇要使用哪些I/O端口。

      2.初始化端口的數(shù)據(jù)輸出寄存器,應避免端口作為輸出時的開始階段出現(xiàn)不確定狀態(tài),影響外圍電

      路正常工作。

      3.根據(jù)外圍電路功能,確定PO端口的方向,初始化端口的數(shù)據(jù)方向寄存器。對于用作輸入的端口可以不考慮方向初始化,因為PO的復位缺省值為輸入。

      4.用作輸入的PO管腳,需上拉電阻。

      5.最后對I/O端口進行輸出(寫數(shù)據(jù)輸出寄存器)和輸入(讀端口)編程,完成對外圍電路的相應功能。

      幾個特殊管腳:

      XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。

      XTAL2:來自反向振蕩器的輸出。

      RST: 復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平。

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

      此交通燈系統(tǒng)工作過程分為4個狀態(tài)。狀態(tài)0南北方向綠燈亮,東西方向紅燈亮。過25秒后轉(zhuǎn)為狀態(tài)1,南北方向綠燈滅,黃燈每秒閃亮一次,東西方向還是紅燈亮。歷時5秒鐘再轉(zhuǎn)為狀態(tài)2,南北方向紅燈亮,東西方向綠燈亮。過15秒后轉(zhuǎn)為狀態(tài)3,南北方向還是紅燈亮,東西方向綠燈滅,黃燈每秒閃亮

      一次。歷時5秒鐘又循環(huán)至狀態(tài)0。

      交通燈的狀態(tài)表如下:

      狀態(tài)(時間)主干道—SN 紅—R 0 1 2 3 0 0 1 1

      綠—G 1 0 0 0

      黃—Y 0 1/0 0 0

      表01 交通燈的狀態(tài)表

      注:

      1:SN:南北方向。WE:東西方向。2:狀態(tài):0:熄。1:亮。1/0:閃。

      2.2.3 時鐘電路模塊

      時鐘電路模塊給單片機提供特定的時鐘周期,以備單片機工作使用。單片機的機器周期有6MHz和12MHz的兩種。這里采用的是12MHZ的晶振,以給單片機提供12MHz的機器周期。另外有兩個30P的電容,兩晶振引腳分別連到XTAL1和XTAL2振蕩脈沖輸入引腳。

      其電路圖如圖02所示:

      支干道—WE 紅—R 1 1 0 0

      綠—G 0 0 1 0

      黃—Y 0 0 0 1/0

      圖02 時鐘電路模塊

      2.2.4 復位電路模塊

      單片機系統(tǒng)的復位電路采用的是上電+按鈕復位電路形式,其中電阻R采用10KΩ的阻值,電容采用

      電容值為10μF的電解電容。其具體連接電路如圖03所示:

      圖03 復位電路模塊 2.2.5 交通燈演示模塊

      此交通燈演示模塊由單片機的P1口作信號輸出端來控制12個交通燈的亮滅,交通燈采用的是發(fā)光二極管。因為單片機的輸出電流非常小,為了使發(fā)光二極管能夠發(fā)光或者更亮,二極管采用共陽極接法。即陽極通過470Ω電阻接+5V直流電源,陰極接單片機P1口。同時南北方向同色燈連同上拉電阻一起并聯(lián),東西方向也是一樣,以保證同一干道上的同色燈同時點亮或熄滅,并且流過二極管的電流不會因并聯(lián)

      而減半。

      其具體連接電路如圖04所示:

      圖04交通燈演示電路 2.2.6 LED顯示模塊 由于同一干道上的兩個方向的紅燈,綠燈,黃燈點亮時間相同,所以南北方向只需一個數(shù)碼管顯示

      相應的時間即可,同理東西方向也只需一個。

      本次交通燈設(shè)計采用兩位一體的共陰極數(shù)碼管來顯示相應的時間。由單片機的P0口輸出字型碼,P2口的前四位P2.0~P2.3作位選端。位選端接LED的共陰極,故低電位有效。因為單片機I/O口的驅(qū)動電流很小,一般只有幾個毫安。為了增加驅(qū)動能力,每個LED上都加上一個上拉電阻,接入+5V電源,本次設(shè)計采用的是排阻。當P0口輸出低電平時,LED不導通,上拉電阻電流灌進單片機,而當P0口輸出高電平時,LED導通。而且上拉電阻的電流也通過LED,這自然就增加了LED的發(fā)光亮度。

      其具體連接電路如圖05所示:

      圖05 LED顯示電路 2.2.7 鍵盤開關(guān)模塊

      此系統(tǒng)通過5個開關(guān)實現(xiàn)所有的要求,開關(guān)一端接地,另一端接單片機的P3口。K0接P3^7,當主干道有車而支干道無車時,按一下K0鍵,可以實現(xiàn)主干道通行。K1接P3^6,當支干道有車而主干道無車時,按一下K1鍵,可以實現(xiàn)支干道通行。K2接P3^3,利用中斷1的方式對緊急情況進行處理,即使東南西北四個方向都亮紅燈停車。K4接P3^2,利用中斷0的方式對各個干道的通行時間進行設(shè)置。在相應中斷0期間,K0,K1起調(diào)整時間的作用。每按一下K0,主干道通行時間加一,每按一下K0,主干道通行時間加一。K3接P3^5,按一下K3,可以使系統(tǒng)退出中斷,回到主程序。

      其具體連接電路如06圖示:

      圖06 鍵盤開關(guān)電路 軟件設(shè)計 3.1 系統(tǒng)流程圖

      (注:判斷框SN=0,WE=0處的Y,N位置標反了,讀者自己改正。)

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

      3.2.1 LED的編程

      本次交通燈設(shè)計采用兩位一體的共陰極數(shù)碼管來顯示相應的時間。數(shù)碼管為七段數(shù)碼管,由8個發(fā)光二極管構(gòu)成,通過不同的組合可用來顯示數(shù)字0-9,字符A-F、H、L、P、R、U、Y、符號“-”及小數(shù)點“.”。

      本設(shè)計只需要顯示數(shù)字0-9,來表示相應的時間。

      共陰極數(shù)碼管的8個發(fā)光二極管的陰極連接在一起接位選端。兩個兩位一體的共陰極數(shù)碼管共有4個位選端,分別接在 P2^O-P2^3,低電平有效。數(shù)碼管各個陽極管腳接各段的驅(qū)動電路輸出端,既P0口。P0^0接a,P0^1接b,……P0^6接g,P0^7接dp,高電平有效。

      本設(shè)計采用逐位掃描的方式實現(xiàn)相應時間的動態(tài)顯示。先將P2^1置低電平,P2^0、P2^

      2、P2^3置高電平,來選中南北方向數(shù)碼管的個位,此時P0口的數(shù)據(jù)接傳送給它顯示。經(jīng)延時一段時間,將P2^1置低電位選中南北方向數(shù)碼管的十位,此時P0口的數(shù)據(jù)接傳送給它顯示。再用同樣的方法依次驅(qū)動東西方向數(shù)碼管。通過不斷改變P0口、P2口的輸出,用循環(huán)掃描的方式,即可實現(xiàn)LED的動態(tài)顯示。

      LED動態(tài)顯示的流程圖如圖08:

      3.2.2交通燈模塊的編寫設(shè)計

      本次設(shè)計的交通燈演示模塊由單片機的P1口作信號輸出端來控制12個交通燈的亮滅。P1^1-P1^6依次連接南北的紅燈、綠燈、黃燈,東西的紅燈、綠燈,黃燈。所以4種狀態(tài)依次為0x6A,0x66,0x5C,0x3C。當交通燈的剩余時間為零時,改變P1口的輸出,進而改變交通燈的點亮狀態(tài)。交通燈依次循環(huán)上面的4個狀態(tài),就可以實現(xiàn)指揮交通的作用。

      3.2.3 定時器程序

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

      驅(qū)動事件之間的時間間隔即為定時計數(shù)器的定時寬度。在定時的工作方式下,定時寬度是單片機的機械周期,也是外部時鐘頻率的1/12。本次設(shè)計的外部時鐘頻率為12MHz。可知,接收106個驅(qū)動事件的時間為1s。

      定是1s的流程圖如圖09所示:

      3.2.4 鍵盤程序

      為了實現(xiàn)設(shè)置通行時間、緊急情況處理、有車放行等功能,本次設(shè)計中有鍵盤電路。通行時間設(shè)置由外部中斷0實現(xiàn),緊急情況由外部中斷1處理,有車放行是用普通的鍵盤程序?qū)崿F(xiàn)的。按鍵實際是一種常用的按鈕,按鍵未按下時,鍵的兩個觸點處于斷開狀態(tài),按鍵按下時,兩個觸點閉合。按鍵是利用機械觸點來實現(xiàn)鍵的閉合和釋放,由于彈性作用的影響,機械觸點在閉合及斷開瞬間均

      有抖動過程,從而使鍵輸入也出現(xiàn)抖動。

      抖動時間一般為5—10ms。本次設(shè)計采用軟件的辦法消抖。在第一次檢測到有鍵按下時不動作,延時10ms,再次檢測按鍵的狀態(tài),如果仍保持閉合狀態(tài),則確定真的有鍵按下。當按鍵釋放后,轉(zhuǎn)入按鍵的處理程序 延時程序如下: /*延時t毫秒*/ void delay(uchar t)

      {

      uchar i;/*定義無符號字符常量*/ for(t;t>0;t--)/*執(zhí)行t次循環(huán)*/

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

      { } } }

      3.2.4.1 通行時間設(shè)置程序

      本次設(shè)計通過外部中斷0設(shè)置各個干道的通行時間。

      外部中斷0的請求信號由P3^2引腳輸入,采用低電平有效的方式響應中斷,即IT0=1。響應中斷0期間,CPU禁止響應其他中斷,按鍵K0,K1起調(diào)整時間的作用。采用加1的方式,每按一下K0,主干道通行時間加1,每按一下K1,支干道通行時間加1。通行時間可以直接在數(shù)碼管上顯示出來。按一下K3,可以使系統(tǒng)退出中斷,回到主程序斷點處,從下一個狀態(tài)開始執(zhí)行新設(shè)置的通行時間。CPU再開放總中斷。

      由于本次設(shè)計使用兩位一體的共陰極數(shù)碼管顯示時間,故設(shè)置各個干道的通行時間的范圍為0—100s??紤]道路通車的實際情況,時間太短無法通過交通路口,所以本設(shè)計中通行時間下限為6s(綠燈1s,黃燈5s)。在6—99s之間可以任意設(shè)置通行時間,更合理高效的指揮交通。

      3.2.4.2 緊急情況處理程序

      本次設(shè)計通過外部中斷1實現(xiàn)對緊急情況的處理。

      與外部中斷0相仿。外部中斷1的請求信號有P3^3引腳輸入,采用低電平有效的方式相應中斷,即IT0=1。響應中斷1期間,CPU禁止響應其他中斷,東南西北四個方向均亮紅燈,各個干道都禁止通行。由于不確定要持續(xù)多久,不采用倒計時的方式顯示時間,數(shù)碼管顯示00。緊急情況結(jié)束時,按一下K3,可以使系統(tǒng)退出中斷,回到主程序斷點處,CPU再開放總中斷。

      3.2.4.3 狀態(tài)調(diào)整程序

      在實際交通系統(tǒng)中,很有可能會不時的出現(xiàn)一道有車而另一道無車的情況,為了更合理高效的指揮交通,本次設(shè)計的交通燈控制系統(tǒng)能立即讓有車道放。由開關(guān) K0 和 K1 控制。采用查詢的方式不斷掃描K0、K1,看有沒有鍵按下。按一下K0鍵,可以實現(xiàn)主干道通行,按一下K1鍵,可以實現(xiàn)支干道通行。

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

      本次設(shè)計的交通燈控制系統(tǒng)共有四個工作狀態(tài),分別是狀態(tài)0、狀態(tài)

      1、狀態(tài)2和狀態(tài)3。開始時先執(zhí)行狀態(tài)0,南北方向綠燈亮,東西方向紅燈亮。歷時25秒。如圖10所示:

      圖10 狀態(tài)0 25秒后轉(zhuǎn)為狀態(tài)1,南北方向綠燈滅,黃燈每秒閃亮一次,東西方向還是紅燈亮。歷時5秒。如圖

      11所示:

      圖11 狀態(tài)1 5秒后再轉(zhuǎn)狀態(tài)2,南北方向紅燈亮,東西方向綠燈亮。歷時15秒。如圖12所示:

      圖12 狀態(tài)2 15秒后轉(zhuǎn)狀態(tài)3,南北方向還是紅燈亮,東西方向綠燈滅,黃燈每秒閃亮一次。歷時5秒。如圖1

      3所示:

      圖13 狀態(tài)3

      此狀態(tài)結(jié)束后再回到狀態(tài)0,如此循環(huán)進行。

      4.2 時間調(diào)整

      按一下開關(guān)K4,系統(tǒng)響應外部中斷0,進入通行時間調(diào)整程序。各個干道的通行時間有數(shù)碼管顯

      示。如圖14所示:

      圖14 時間調(diào)整

      按鍵K0,K1起調(diào)整時間的作用,每按一下K0,主干道通行時間加1,每按一下K1,支干道通行時間加1。多次按鍵即可調(diào)整到合理的通行時間。如圖15所示:

      圖15 通行時間+1 按一下K3,可以使系統(tǒng)退出中斷,回到主程序斷點處,從下一個狀態(tài)開始執(zhí)行新設(shè)置的通行時間。

      如圖16、17所示:

      圖16 主干道按新設(shè)置的時間執(zhí)行

      圖17 支干道按新設(shè)置的時間執(zhí)行

      4.3 緊急情況

      當出現(xiàn)緊急情況時,按一下開關(guān)K2,系統(tǒng)響應外部中斷1,各個方向均亮紅燈禁止通行,數(shù)碼管均顯示0。按一下K3,可以使系統(tǒng)退出中斷,回到主程序斷點處。如圖18所示

      圖18 緊急情況 4.4 狀態(tài)調(diào)整

      為了更合理高效的指揮交通,當南北方向有車而東西方向無車時,按K0,系統(tǒng)會自動跳轉(zhuǎn)到狀態(tài)0,實現(xiàn)南北方向通行。如圖19所示:

      圖19 南北方向有車而東西方向無車時,南北放行

      當東西方向有車而南北方向無車時,按K1,系統(tǒng)會自動跳轉(zhuǎn)到狀態(tài)2,實現(xiàn)東西方向通行。如圖20

      所示:

      圖20 東西方向有車而南北方向無車時,東西放行 課程設(shè)計體會

      很榮幸有這次課程設(shè)計的機會,我可以把理論的學習與實踐有機的結(jié)合起來。

      在設(shè)計過程中,首先要分析課題,根據(jù)所學知識繪制出系統(tǒng)總體設(shè)計框圖。然后按照自己的設(shè)計思路,利用所給的元器件繪制出設(shè)計圖。在繪制設(shè)計圖連接各個元器件的時候,要盡量使布線合適,從而使所作設(shè)計圖清晰易看。繪制完設(shè)計圖后,接下來就是要根據(jù)設(shè)計所要求的功能和已完成的設(shè)計圖編寫程序,在編程時,首先應該繪制出主程序流程圖,然后采用模塊化程序設(shè)計的方式,編寫實現(xiàn)各個功能的子程序,再將各個子程序與主程序連接起來。在設(shè)計程序時要不斷對程序進行修改,同時在設(shè)計程序的過程中要養(yǎng)成注釋程序的習慣,在對程序進行修改的時候,可以通過注釋很容易的看出各句程序的功能,清晰明朗。當程序設(shè)計出來之后,就可以通過仿真軟件對其進行編譯,生成仿真所需要的HEX文件。將生成的文件加載到系統(tǒng)圖的單片機上,就可以進行系統(tǒng)仿真。通過仿真,檢測所作設(shè)計是否能實現(xiàn)預期功能。本次課程設(shè)計使我對單片機的工作原理有了更深刻的認識,掌握了許多在以前學習中混淆不清的知識點。在翻閱相關(guān)書籍和查詢相關(guān)資料過程中學到了豐富的單片機知識,開闊了眼界,增廣了知識面。在編輯程序中,對C語言又有了新的認識和理解。實物焊接中不僅鍛煉了自己的動手能力,而且真正作到了

      理論聯(lián)系實際的重要性,收益匪淺。

      本次課程設(shè)計我參考的三本書。一本是余發(fā)山教授的《單片機原理及其應用技術(shù)》,一本是在圖書館借的王為青老師編寫的《單片機Keil Cx51應用開發(fā)技術(shù)》,還有一本就是賈宗璞老師的《C語言程序

      設(shè)計》。在此向編者表示誠摯的謝意。

      本次設(shè)計中,我曾多次在課堂上向譚興國老師請教各個模塊設(shè)計的細節(jié)問題,得到了譚老師的大力

      幫助,在此深表感謝!

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

      附1 源程序代碼

      #include /*對單片機的口進行了定義********/ #define uchar unsigned char /*定義字符串類型為無符號型*/ uchar code a[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};/*段碼組合,P0口,高

      有效*/ uchar code b[4]={0x0D,0x0E,0x07,0x0B};/****P2口,低有效*/ uchar code c[4]={0x6A,0x66,0x5C,0x3C};/****P1口.低有效*/ char SN=25,WE=30;/*SN表示南北方向——主干道,WE表示東西方向——支干道*/ char SN_G=25,WE_G=15,Y=5;/*SN_G表示南北方向的綠燈,WE_G表示東西方向的綠燈,Y表

      示黃燈*/

      uchar i,k=0,count=0;/*定義無符號字符串變量*/

      void delay(uchar t);/*定義函數(shù)*/

      void light();/*定義函數(shù)*/ void led();/*定義函數(shù)*/ void ledthrough();/*定義函數(shù)*/ void leddrive();/*定義函數(shù)*/ sbit K0=P3^7;/*開關(guān)K0接P3^7管腳*/ sbit K1=P3^6;/*開關(guān)K1接P3^6管腳*/ sbit K2=P3^3;/*開關(guān)K2接P3^3管腳*/ sbit K3=P3^5;/*開關(guān)K3接P3^5管腳*/ sbit K4=P3^2;/*開關(guān)K4接P3^2管腳*/

      /*程序初始化*/ void init(void)

      { /*12MHz */ TMOD=0x01;/**計數(shù)器用模式1,為16位計數(shù)器*****/

      TH1=(65536-50000)/256;/*0x3C*/ TL1=(65536-50000)%256;/*0xB0*//*計50000個數(shù),用時50ms*/

      IT0=1;/*外部中斷為低電平觸發(fā)方式*/

      ET0=1;/*允許T0中斷*/ TR0=1;/*啟動計數(shù)器*/ EA=1;/*CPU開放總中斷*/ EX0=1;/*允許外部中斷0中斷,即允許響應端口P3^2(K4)中斷*/ EX1=1;/*允許外部中斷1中斷,即允許響應端口P3^3(K2)中斷*/

      }

      /*中斷0處理程序*/ void int0(void)interrupt 0

      {

      EA=0;/*CPU禁止響應一切中斷*/ P1=0x6C;/*東西南北方向均紅燈亮*/

      TR0=!TR0;/*計數(shù)器停止工作*/

      for(;;)/*無條件循環(huán)*/

      {

      ledthrough();/*調(diào)用通行時間顯示函數(shù)*/

      /*設(shè)置南北方向通行時間*/ if(K0==0)/*P3^7=0*/

      {

      delay(10);/*延時,把抖動的時間拋掉*/

      if(K0==0)

      { while(!K0)/*當松開K0開關(guān)時,跳出循環(huán),執(zhí)行后面的程序*/

      {

      ledthrough();/*調(diào)用通行時間顯示函數(shù)*/

      }

      SN_G++;/*南北方向綠燈時間+1*/ if((SN_G+Y)==100)/*南北方向通行時間(綠燈加黃燈時間)為100s*/ SN_G=1;/*由于使用的是兩位數(shù)碼管,當南北方向通行時間加到100后綠燈時間歸1*/

      }

      }

      /*設(shè)置東西方向通行時間*/ if(K1==0)/*P3^6=0*/

      {

      delay(10);/*延時,把抖動的時間拋掉*/

      if(K1==0)

      { while(!K1)/*當松開K1開關(guān)時,跳出循環(huán),執(zhí)行后面的程序*/

      { ledthrough();/*調(diào)用通行時間顯示函數(shù)*/

      }

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

      } } /*返回*/

      if(K3==0)/*P3^5=0*/

      {

      delay(10);/*延時,把抖動的時間拋掉*/

      if(K3==0)

      { while(!K3)/*當松開K3開關(guān)時,跳出循環(huán),執(zhí)行后面的程序*/

      {

      ledthrough();/*調(diào)用通行時間顯示函數(shù)*/

      }

      TR0=!TR0;/*啟動計數(shù)器*/ EA=1;/*CPU開放總中斷*/

      break;/*跳出*/

      }

      } } }

      /*中斷1處理程序*/ void int1(void)interrupt 2

      { P1=0x6C,P0=a[0];/*東西南北方向均紅燈亮,P0口輸出0*/

      EA=0;/*CPU禁止響應一切中斷*/ TR0=!TR0;/*計數(shù)器停止工作*/

      for(;;)/*無條件循環(huán)*/

      {

      leddrive();/*數(shù)碼管驅(qū)動程序*/

      /*返回*/

      if(K3==0)/*P3^5=0*/

      {

      delay(10);/*延時,把抖動的時間拋掉*/

      if(K3==0)

      { while(!K3)/*當松開K3開關(guān)時,跳出循環(huán),執(zhí)行后面的程序*/

      {

      leddrive();/*數(shù)碼管驅(qū)動程序*/

      }

      EA=1;/*CPU開放總中斷*/ TR0=!TR0;/*啟動計數(shù)器*/ break;/*跳出*/ }

      } }

      } /*鍵盤程序*/ void key()

      {

      /*南北有車而東西無車*/ if(K0==0)/*K0=0*/

      {

      delay(10);/*延時,把抖動的時間拋掉*/

      if(K0==0)

      { while(!K0)/*當松開K0開關(guān)時,跳出循環(huán),執(zhí)行后面的程序*/

      {

      light();/*調(diào)用交通燈函數(shù)*/

      led();/*調(diào)用數(shù)碼管函數(shù)*/

      } count=0;/*清零*/

      k=0;/*南北方向通車,東西方向不通車*/ SN=SN_G,WE=SN_G+Y;/*南北方向顯示時間為南北方向綠燈通行時間,東西方向顯示時間為

      南北方向綠燈通行時間加黃燈閃亮時間*/

      } }

      /*南北無車而東西有車*/ if(K1==0)/*K1=0*/

      {

      delay(10);/*延時,把抖動的時間拋掉*/

      if(K1==0)

      { while(!K1)/*當松開K1開關(guān)時,跳出循環(huán),執(zhí)行后面的程序*/

      {

      light();/*調(diào)用交通燈函數(shù)*/

      led();/*調(diào)用數(shù)碼管函數(shù)*/

      } count=0;/*清零*/

      k=2;/*南北方向不通車,東西方向通車*/ SN=WE_G+Y,WE=WE_G;/*南北方向顯示時間為東西方向綠燈通行時間加黃燈閃亮時間,東

      西方向顯示時間為東西方向綠燈通行時間*/

      } } } /*定時函數(shù)*/

      void time1(void)interrupt 1

      { TH0=0x3c;

      TL0=0xb0;/*計50000個數(shù),用時50ms*/

      count++;/*自增運算*/

      if(count>=20)/*當count大于或等于20時,歷時1s,執(zhí)行程序*/

      {

      SN--;/*自減運算*/ WE--;/*自減運算*/ count=0;/*清零*/ if(SN==0||WE==0)/*當SN=0或者WE=0時,執(zhí)行程序*/

      {

      k++;/*自增運算*/ if(k>3)/*當k>3時,執(zhí)行程序*/

      k=0;/*清零*/ switch(k)/*switch 語句*/

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

      } } } } /*延時t毫秒*/ void delay(uchar t)

      {

      uchar i;/*定義無符號字符常量*/ for(t;t>0;t--)/*執(zhí)行t次循環(huán)*/

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

      { } } } /*交通燈函數(shù)*/ void light()

      {

      P1=c[k];/*交通燈對應著k的值變化*/ if(P1==c[1]&&count==0)/*當南北方向亮黃燈且count=0時,執(zhí)行程序*/

      {

      TH1=(65536-50000)/256;

      TL1=(65536-50000)%256;/*延時50ms*/ P1=0x6E;/*南北方向黃燈熄滅,東西方向亮紅燈*/

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

      {

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

      } } /*數(shù)碼管函數(shù)*/ void led()

      {

      P2=b[0],P0=a[SN%10];/*顯示南北方向個位*/

      delay(5);/*延時*/

      P2=b[1],P0=a[SN/10];/*顯示南北方向十位*/

      delay(5);/*延時*/

      P2=b[2],P0=a[WE%10];/*顯示東西方向個位*/

      delay(5);/*延時*/

      P2=b[3],P0=a[WE/10];/*顯示東西方向十位*/

      delay(5);/*延時*/

      }

      /*通行時間顯示函數(shù)*/ void ledthrough()

      { P2=b[0],P0=a[(SN_G+Y)%10];/*南北方向數(shù)碼管顯示可通行時間的個位*/

      delay(5);/*延時*/

      P2=b[1],P0=a[(SN_G+Y)/10];/*南北方向數(shù)碼管顯示可通行時間的十位*/

      delay(5);/*延時*/

      P2=b[2],P0=a[(WE_G+Y)%10];/*東西方向數(shù)碼管顯示可通行時間的個位*/

      delay(5);/*延時*/

      P2=b[3],P0=a[(WE_G+Y)/10];/*東西方向數(shù)碼管顯示可通行時間的十位*/

      delay(5);/*延時*/

      }

      /*數(shù)碼管驅(qū)動函數(shù)*/ void leddrive()

      {

      P2=b[0];/*顯示南北方向個位*/

      delay(5);/*延時*/

      P2=b[1];/*顯示南北方向十位*/

      delay(5);/*延時*/ P2=b[2];/*顯示東西方向個位*/

      delay(5);/*延時*/ P2=b[3];/*顯示東西方向十位*/

      delay(5);/*延時*/

      } /*主函數(shù)*/ void main(void)

      {

      init();/*調(diào)用程序初始化函數(shù)*/

      for(;;)/*無條件循環(huán)*/

      {

      key();/*調(diào)用鍵盤程序*/ light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/

      } }

      附2 系統(tǒng)原理圖

      第二篇:基于單片機的交通燈控制系統(tǒng)設(shè)計

      P10P11P12P13設(shè)置鍵加鍵減鍵模式鍵P00P01P02P03P04P05P06U18765P134P123P112P101P1.7P1.6P1.5P1.4P1.3P1.2P1.1/T2EXP1.0/T2P3.7/RDP3.6/WRP3.5/T1P3.4/T0P3.3/INT1P3.2/INT0P3.1/TXDP3.0/RXDP2.7/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9P2.0/A8P0.7/AD7P0.6/AD6P0.5/AD5P0.4/AD4P0.3/AD3P0.2/AD2P0.1/AD1P0.0/AD0******23222***373839P37P36P35P34P22P23P24D7D4P27P26P25P24P23P22P21P20P07P06P05P04P03P02P01P0098765432110KP27LED-REDD92H1HD1D6P25LED-YELLOWD11P26LED-YELLOWLED-GREENLED-REDC31uF313029EAALEPSEND12P26R0100RP1P25LED-GREENLED-GREENC120PF9RSTD5P00P01P02P03P04P05P06LED-YELLOWD3P27LED-REDX1C220PF12M19LED-REDLED-GREENLED-YELLOWP24P23P22XTAL1AT89C51Q1PNPQ2PNPQ3PNPQ4PNPP34P35657U2SCKSDAWP24C02CA0A1A2123R151R1HR251R2HR351R3HR451R4HP36P37P21P00P01P02P03P04P05P0651R51R51R51R2H1HR19R20R21P20R223H4HXTAL2P00P01P02P03P04P05P0618D2D10D83H4H

      #include

      //調(diào)用單片機頭文件

      #define uchar unsigned char

      //宏定義“uchar”代替“unsigned char”。#define uint unsigned int

      //宏定義“uint”用來定義無符號整型數(shù)。

      //數(shù)碼管段選定義 0

      7

      uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, //

      A B C

      D

      E

      F 不顯示

      0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};//斷碼

      uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};uchar smg_i = 4;

      //顯示數(shù)碼管的個位數(shù)

      //數(shù)碼管位選定義

      sbit smg_we1 = P2^0;

      //數(shù)碼管位選定義 sbit smg_we2 = P2^1;sbit smg_we3 = P3^6;sbit smg_we4 = P3^7;

      char dx_s = 0;//東西

      南北 倒計時變量 sbit dx_red

      = P2^4;

      //東西紅燈 sbit dx_green = P2^3;//東西綠燈 sbit dx_yellow = P2^2;//東西黃燈

      sbit nb_red

      = P2^7;//南北紅燈 sbit nb_green = P2^6;//南北綠燈 sbit nb_yellow = P2^5;//南北黃燈

      sbit scl=P3^4;//寫24C02時鐘

      sbit sda=P3^5;//寫24C02數(shù)據(jù)

      uchar flag_jtd_mode;//交通燈的模式 根據(jù)時間

      bit flag_1s = 0;bit flag_500ms;bit flag_dx_nb;uchar flag_5m_value;uchar i;//東西南北模式

      uchar flag_alarm;//模式

      uchar dx_time = 30,nb_time = 20;

      //東西、南北的時間 uchar flag_jdgz;

      //交通管制

      //---延時函數(shù)---// void delay(){;;}

      void start()//起始信號 { sda=1;delay();scl=1;delay();sda=0;delay();}

      void stop()//停止信號 { sda=0;delay();scl=1;delay();sda=1;delay();}

      void respons()//應答信號 { uchar i;scl=1;delay();while((sda==1)&&(i<250))i++;scl=0;delay();}

      void init()//初始狀態(tài),24C02的數(shù)據(jù)和時鐘線都拉高 { sda=1;delay();scl=1;delay();}

      void writebyte(uchar date)//寫24C02 { uchar i,temp;temp=date;for(i=0;i<8;i++){

      temp=temp<<1;

      scl=0;

      delay();

      sda=CY;

      delay();

      scl=1;

      delay();} scl=0;delay();sda=1;delay();} uchar readbyte()//讀24C02 { uchar i,k;scl=0;delay();sda=1;delay();

      for(i=0;i<8;i++){

      scl=1;

      delay();

      k=(k<<1)|sda;

      scl=0;

      delay();} return k;}

      void writeadd(uchar address,uchar date)//寫24C02 {

      start();//起始信號

      writebyte(0xa0);//寫入器件地址寫 respons();

      writebyte(address);//寫入存儲單元地址 respons();

      writebyte(date);//寫入數(shù)據(jù) respons();

      stop();//停止信號 }

      uchar readadd(uchar address)//讀24C02 { uchar date;

      start();//起始信號

      writebyte(0xa0);//寫入器件地址寫

      respons();

      writebyte(address);//寫入讀單元地址

      respons();

      }

      start();//起始信號

      writebyte(0xa1);//讀命令 respons();date=readbyte();//讀數(shù)據(jù) stop();//停止信號 return date;/***********************數(shù)碼位選函數(shù)*****************************/ void smg_we_switch(uchar i){ switch(i){

      case 0: smg_we1 = 0;smg_we2 = 1;smg_we3 = 1;smg_we4 = 1;break;

      case 1: smg_we1 = 1;smg_we2 = 0;smg_we3 = 1;smg_we4 = 1;break;

      case 2: smg_we1 = 1;smg_we2 = 1;smg_we3 = 0;smg_we4 = 1;break;

      case 3: smg_we1 = 1;smg_we2 = 1;smg_we3 = 1;smg_we4 = 0;break;} }

      /******************************************************************** * 名稱 : delay_1ms()* 功能 : 延時1ms函數(shù) * 輸入 : q * 輸出 : 無

      ***********************************************************************/ void delay_1ms(uint q){ uint i,j;for(i=0;i

      for(j=0;j<110;j++);}

      /******************************************************************** * 名稱 : display()* 功能 : 數(shù)碼管顯示 * 輸入 : 無 * 輸出 : 無 ***********************************************************************/ void display(){ uchar i;for(i=0;i

      P0 = 0xff;

      //消隱

      smg_we_switch(i);

      //位選

      P0 = dis_smg[i];

      //段選

      delay_1ms(3);} }

      /*********************定時器0、定時器1初始化******************/ void time0_init()

      { EA = 1;

      //開總中斷

      TMOD = 0X11;//定時器0、定時器1工作方式1 ET0 = 1;

      //開定時器0中斷

      TR0 = 1;

      //允許定時器0定時

      }

      /*********************交通燈處理函數(shù)*********************************/ void jiaotongdeng_dis(){

      char dx,nb;

      if(flag_dx_nb == 0){ dx=dx_s;nb=dx_s-5;if(nb<=0)nb=dx_s;}

      if(flag_dx_nb == 1){ dx=dx_s-5;nb=dx_s;if(dx<=0)dx=dx_s;}

      if(flag_1s == 1){ dx_s--;flag_1s = 0;

      if(dx_s == 0){

      if(flag_dx_nb == 1)

      dx_s = nb_time;

      //南北時間

      else

      dx_s = dx_time;

      //東西時間

      flag_dx_nb = ~flag_dx_nb;

      }

      }

      dis_smg[0] = smg_du[dx % 10];dis_smg[1] = smg_du[dx / 10];dis_smg[2] = smg_du[nb % 10];dis_smg[3] = smg_du[nb / 10];

      /***********************南北時間*********************************/

      if(flag_dx_nb == 0)

      {

      if(dx_s > 5)

      {

      dx_red

      = 1;//滅

      dx_green = 0;//亮

      dx_yellow = 1;//滅

      nb_red

      = 0;//亮

      nb_green = 1;//滅

      nb_yellow = 1;//滅

      flag_5m_value = 0;

      }else if(dx_s <= 5)

      //當小于5秒時

      黃燈要閃了

      {

      dx_red

      = 1;

      //滅

      }

      } dx_green = 1;

      //滅 nb_red

      = 0;

      //亮 nb_green = 1;

      //滅 nb_yellow = 1;

      //滅 if(flag_500ms == 0){ dx_yellow = 0;//亮

      } else { } dx_yellow = 1;//滅

      /***********************東西時間*********************************/

      if(flag_dx_nb == 1)

      {

      if(dx_s > 5)

      {

      dx_red

      = 0;

      //亮

      dx_green = 1;

      //滅

      dx_yellow = 1;

      //滅

      nb_red

      = 1;

      //滅

      nb_green = 0;

      //亮

      nb_yellow = 1;

      //滅

      flag_5m_value = 0;

      }else if(dx_s <= 5)

      //當小于5秒時

      黃燈要閃了

      {

      dx_red

      = 0;

      //滅

      dx_green = 1;

      //滅

      dx_yellow = 1;

      //滅

      nb_red

      = 1;

      //滅

      nb_green = 1;

      //滅

      if(flag_500ms == 0)

      //黃燈閃爍

      {

      }

      }

      } nb_yellow = 0;//亮 } else { nb_yellow = 1;//滅 }

      /********************獨立按鍵程序*****************/ uchar key_can;//按鍵值

      void key()//獨立按鍵程序 { static uchar key_new;key_can = 20;

      //按鍵值還原

      P1 |= 0x1f;

      if((P1 & 0x1f)!= 0x1f)//按鍵按下 { delay_1ms(1);

      //按鍵消抖動

      if(((P1 & 0x1f)!= 0x1f)&&(key_new == 1))

      {

      key_new = 0;switch(P1 & 0x1f){

      //確認是按鍵按下

      case 0x1e: key_can = 1;break;//得到按鍵值

      case 0x1d: key_can = 2;break;//得到按鍵值

      case 0x1b: key_can = 3;break;//得到按鍵值

      case 0x17: key_can = 4;break;//得到按鍵值

      }

      }

      } else

      key_new = 1;}

      uchar menu_1,flag_s;

      /********************設(shè)置函數(shù)*****************/ void key_with(){ if(key_can == 4)

      //交通管制按鍵

      {

      flag_jdgz ++;

      if(flag_jdgz > 5)

      flag_jdgz = 0;

      if(flag_jdgz == 1)// 全部亮紅燈

      {

      dx_red

      = 0;//亮

      dx_green = 1;//滅

      dx_yellow = 1;//滅

      } nb_red

      = 0;//亮

      nb_green = 1;//滅 nb_yellow = 1;//滅

      if(flag_jdgz == 2)// 東西紅燈

      南北綠燈

      {

      dx_red

      = 0;//亮

      dx_green = 1;//滅

      dx_yellow = 1;//滅

      nb_red

      = 1;//滅

      nb_green = 0;//亮

      nb_yellow = 1;//滅

      } if(flag_jdgz == 3)// 南北紅燈 {

      dx_red

      = 1;//滅

      dx_green = 0;//亮

      dx_yellow = 1;//滅

      nb_red

      = 0;//亮

      nb_green = 1;//滅

      nb_yellow = 1;//滅

      } if(flag_jdgz == 4)// 南北綠燈 {

      dx_red

      = 1;//滅

      dx_green = 0;//亮

      dx_yellow = 1;//滅

      nb_red

      = 1;//滅

      nb_green = 0;//亮

      nb_yellow = 1;//滅

      } if(flag_jdgz == 5)// 南北黃燈 {

      dx_red

      = 1;//滅

      dx_green = 1;//滅

      dx_yellow = 0;//亮

      nb_red

      = 1;//滅

      nb_green = 1;//滅

      nb_yellow = 0;//亮

      } } if(key_can == 1)

      //設(shè)置鍵 { menu_1 ++;

      東西綠燈 東西綠燈

      東西黃燈

      if(menu_1 >= 3){

      menu_1 = 0;} } if(menu_1 == 1)

      //設(shè)置東西的時間 { if(key_can == 2){

      dx_time ++;//加1

      if(dx_time > 99)

      dx_time = 99;} if(key_can == 3){

      dx_time--;//減1

      if(dx_time <= 10)

      dx_time = 10;} dis_smg[0] = smg_du[10];//顯示為A dis_smg[1] = smg_du[10];//顯示為A dis_smg[2] = smg_du[dx_time % 10];dis_smg[3] = smg_du[dx_time / 10];

      writeadd(4,dx_time);//保存數(shù)據(jù)

      } if(menu_1 == 2)

      //設(shè)置南北的時間 { if(key_can == 2){

      nb_time ++;//加1

      if(nb_time > 99)

      nb_time = 99;} if(key_can == 3){

      nb_time--;//減1

      //顯示東西設(shè)置的時候

      if(nb_time <= 10)

      nb_time = 10;} dis_smg[0] = smg_du[11];//顯示為B dis_smg[1] = smg_du[11];//顯示為B dis_smg[2] = smg_du[nb_time % 10];dis_smg[3] = smg_du[nb_time / 10];

      //顯示東西設(shè)置的時候

      writeadd(2,nb_time);//保存數(shù)據(jù)

      } }

      /******************************************************************** * 名稱 : main()* 功能 : 實現(xiàn)燈的閃爍 * 輸入 : 無 * 輸出 : 無

      ***********************************************************************/ void main(){ time0_init();

      init();//24C02初始化

      nb_time=readadd(2);//讀取地址2處一個字節(jié)給

      dx_time=readadd(4);//讀取地址4處一個字節(jié)給

      if(nb_time>99)nb_time=20;

      if(dx_time>99)dx_time=30;

      dx_s = nb_time;

      //東西時間

      while(1){

      key();

      if(key_can < 20)

      key_with();

      if((menu_1 == 0)&&(flag_jdgz == 0))

      } }

      jiaotongdeng_dis();display();/*********************定時器0中斷服務(wù)程序************************/ void time0_int()interrupt 1

      {

      } static uchar value;

      //定時10ms中斷一次 TH0 = 0x3c;TL0 = 0xb0;

      //50ms value ++;flag_5m_value++;if(flag_5m_value % 10 == 0)flag_500ms = ~flag_500ms;if(value >= 20){ value = 0;flag_1s = 1;}

      第三篇:基于單片機的交通燈控制系統(tǒng)設(shè)計

      基于單片機的交通燈控制系統(tǒng)設(shè)計

      摘要:十字路口車輛穿梭,行人熙攘,車行車道,人行人道,有條不紊。那么靠什么來實現(xiàn)這井然秩序呢?靠的就是交通信號燈的自動指揮系統(tǒng)。交通信號燈控制方式很多。本系統(tǒng)采用MSC-51系列單片機ATSC51和可編程并行I/O接口芯片8255A為中心器件來設(shè)計交通燈控制囂,實現(xiàn)了能根據(jù)實際車流量通過8051芯片的P1口設(shè)置紅、綠燈燃亮時間的功能;紅綠燈循環(huán)點亮。倒計時剩5秒時黃燈閃爍警示;車輛闖紅燈報警;綠燈時間可檢測車流量并可通過雙位數(shù)碼管顯示。本系統(tǒng)實用性強、操作簡單、擴展功能強。

      關(guān)鍵詞:單片機;交通燈

      單片機技術(shù)的發(fā)展對社會進步產(chǎn)生了巨大的影響。今天,單片機及其應用技術(shù)的發(fā)展速度、深度及其廣度,在國防、科學研究、政治經(jīng)濟、教育文化等方面幾乎無所不及。將之用于交通燈控制系統(tǒng)設(shè)計,對于疏導交通流量、提高道路通行能力,減少交通事故有明顯效果。

      1、單片機涵義

      一臺能夠工作的計算機要有這樣幾個部份構(gòu)成:CPU(進行運算、控制)、RAM(數(shù)據(jù)存儲)、ROM(程序存儲)、輸入,輸出設(shè)備(例如:串行口、并行輸出口等)。在個人計算機上這些部份被分成若干塊芯片,安裝一個稱之為主板的印刷線路板上。而在單片機中,這些部份,全部被做到一塊集成電路芯片中了,所以就際=缸單片(單芯片)機,單片機即微控制器(Microniroller μC)有一些單片機中除了上述部份外,還集成了其它部份如AID,DIA,定時計數(shù)器,RTC,各種串行接口等。

      2、MSC-51芯片簡介

      2.1 MSC-51結(jié)構(gòu)

      8051是MCS-51系列單片機的典型產(chǎn)品,8051單片機包含中央處理器、程序存儲器(ROM)、數(shù)據(jù)存儲器(RAM)、定時,計數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線。

      2.2 8255芯片簡介

      8255可編程并行接口芯片有三個輸入輸出端口,即A口、B口和c口,對應于引腳PAT—PA0、PB7-PB0和PC7-PC0。其內(nèi)部還有一個控制寄存器,即控制口。通常A口、B口作為輸入輸出的數(shù)據(jù)端口。c口作為控制或狀態(tài)信息的端口,它在方式字的控制下,可以分成4位的端口,每個端口包含一個4位鎖存器。它們分別與端口A/B配合使用,可以用作控制信號輸出或作為狀態(tài)信號輸入。

      8255有兩種控制命令字;一個是方式選擇控制字;另一個是c口按位置位/復位控制字。

      2.3 74LS373簡介

      SN74LS373。SN74LS374常用的8d鎖存器。常用作地址鎖存和I/0輸出,可以用74he373代換,74H373是高速CMOS器件,功能與74LS373相同,兩者可以互換。74LS373內(nèi)有8個相同的D型(三態(tài)同相)鎖存器,由兩個控制端(11腳c或EN;1腳OUT、CONT、OE)控制。當OE接地時,若G為高電平,741Ls373接收由PPU輸出的地址信號;如果G為低電平,則將地址信號鎖存。

      3、系統(tǒng)硬件

      3.1 交通管理的方案論證 東西、南北兩干道交于一個十字路口,各干道有一組紅、黃、綠三色的指示燈,指揮車輛和行人安全通行。紅燈亮禁止通行。綠燈亮允許通行。黃燈亮提示人們注意紅、綠燈的狀態(tài)即將切換,且黃燈燃亮時間為東西、南北兩千道的公共停車時問。設(shè)東西道比南北道的車流量。

      3.2 系統(tǒng)硬件設(shè)計

      選用設(shè)備8031單片機一片選用設(shè)備:8031彈片機一片,8255并行通用接口芯片一片,74LS07兩片,MAX692‘看門狗’一片,共陰極的七段數(shù)碼管兩個雙向晶閘管若干,7805三端穩(wěn)壓電源一個,紅、黃、綠交通燈各兩個。開關(guān)鍵盤、連線若干。

      4、控制器的軟件設(shè)計

      4.1 每秒鐘的設(shè)定

      延時方法可以有兩種:一種是利用NCS-51內(nèi)部定時器才生溢出中斷來確定1秒的時間,另一種是采用軟延時的方法。

      4.2 計數(shù)器硬件延時

      4.2.1 初值計算

      定時器工作時必須給計數(shù)器送計數(shù)器初值,這個值是送到TH和TL中的。他是以加法記數(shù)的,并能從全1到全0時自動產(chǎn)生溢出中斷請求。因此,我們可以把計數(shù)器記滿為零所需的計數(shù)值設(shè)定為c和計數(shù)初值設(shè)定為TC。

      4.2.2 1秒的方法

      我們采用在主程序中設(shè)定一個初值為20的軟件計數(shù)器和使TO定時5O毫秒,這樣每當TO到50毫秒時cPu就響應它的溢出中斷請求,進入他的中斷服務(wù)子程序。在中斷服務(wù)子程序中,cPu先使軟件計數(shù)器減1,然后判斷它是否為零。為零表示1秒已到可以返回到輸出時間顯示程序。

      4.3 計數(shù)器軟件延時

      MCS-51的工作頻率為2-12MHZ,我們選用的8031單片機的工作頻率為6MHZ。機器周期與主頻有關(guān),機器周期是主頻的12倍,所以一個機器周期的時間為12*(1/6M)=2us。我們可以知道具體每條指令的周期數(shù),這樣我們就可以通過指令的執(zhí)行條數(shù)來確定1秒的時間。

      4.4 時間及信號燈的顯示

      4.4.1 8051并行口的擴展

      8051雖然有4個8位I/0端口,但真正能提供借用的只有Pl口。因為P2和P0口通常用于傳送外部傳送地址和數(shù)據(jù),P3口也有它的第二功能。因此,8031通常需要擴展。由于我們用外部輸入設(shè)定紅綠燈倒計時初值、數(shù)碼管的輸出顯示、紅綠黃信號燈的顯示都要用到一個I/0端口,顯然8031的端口是不夠,需要擴展。

      擴展的方法有兩種:(1)借用外部RAM地址來擴展I/0端口;(2)采用I/0接口新片來擴充。我們用8255并行接口信片來擴展I/0端口。

      4.4.2 8255與8051的連接

      用8051的PO口的pO.7連接8255的片選信號,我們用8031的地址采用全譯碼方式,當pO.7:0時片選有效,其他無效,pO.1用于選擇8255端口。

      5、結(jié) 論

      本系統(tǒng)就是充分利用了8051和8255芯片的I/O引腳。系統(tǒng)統(tǒng)采用MSC-51系列單片機Intel8051和可編程并行I/0接口芯片8255A為中心器件來設(shè)計交通燈控制器,實現(xiàn)了能根據(jù)實際車流量通過8031芯片的Pl口設(shè)置紅、綠燈燃亮時間的功能;紅綠燈循環(huán)點亮,倒計時剩5秒時黃燈閃爍警示(交通燈信號通過PA口輸出,顯示時間直接通過8255的PC口輸出至雙位數(shù)碼管);車輛闖紅燈報警;綠燈時間可檢測車流量并可通過雙位數(shù)碼管顯示。

      參考文獻:

      [1]張毅剛,新編MCS-51單片機應用系統(tǒng)設(shè)計[M]哈爾濱:哈爾濱工業(yè)大學出版社,2006

      [2]王義軍,單片機原理及應用習題與實驗指導書[M],北京:中國電力出版社,2006

      [3]陳明熒8051單片機課程設(shè)計實訓教材[M],北京:清華大學出版社。2004

      第四篇:單片機:交通燈控制系統(tǒng)設(shè)計

      交通燈控制系統(tǒng)設(shè)計

      摘要:本系統(tǒng)由單片機系統(tǒng)、鍵盤、LED 顯示、交通燈演示系統(tǒng)組成。系統(tǒng)包括人行道、左轉(zhuǎn)、右轉(zhuǎn)、以及基本的交通燈的功能。系統(tǒng)除基本交通燈功能外,還具有倒計時、時間設(shè)置、緊急情況處理、分時段調(diào)整信號燈的點亮時間以及根據(jù)具體情況手動控制等功能。關(guān)鍵詞:AT89S51,交通規(guī)則

      一、方案比較、設(shè)計與論證 1 電源提供方案

      為使模塊穩(wěn)定工作,須有可靠電源。我們考慮了兩種電源方案

      方案一:采用獨立的穩(wěn)壓電源。此方案的優(yōu)點是穩(wěn)定可靠,且有各種成熟電路可供選用;缺點是各模塊都采用獨立電源,會使系統(tǒng)復雜,且可能影響電路電平。方案二:采用單片機控制模塊提供電源。改方案的優(yōu)點是系統(tǒng)簡明扼要,節(jié)約成本;缺點是輸出功率不高。綜上所述,我們選擇第二種方案。2 顯示界面方案

      該系統(tǒng)要求完成倒計時、狀態(tài)燈等功能。基于上述原因,我們考慮了三種方案: 方案一:完全采用數(shù)碼管顯示。這種方案只顯示有限的符號和數(shù)碼字苻,無法勝任題目要求。

      方案二:完全采用點陣式LED 顯示。這種方案實現(xiàn)復雜,且須完成大量的軟件工作;但功能強大,可方便的顯示各種英文字符,漢字,圖形等。

      方案三:采用數(shù)碼管與點陣LED 相結(jié)合的方法因為設(shè)計既要求倒計時數(shù)字輸出,又要求有狀態(tài)燈輸出等,為方便觀看并考慮到現(xiàn)實情況,用數(shù)碼管與LED燈分別顯示時間與提示信息。這種方案既滿足系統(tǒng)功能要求,又減少了系統(tǒng)實現(xiàn)的復雜度。權(quán)衡利弊,第三種方案可互補一二方案的優(yōu)缺,我們決定采用方案三以實現(xiàn)系統(tǒng)的顯示功能。3 輸入方案:

      題目要求系統(tǒng)能手動設(shè)燈亮時間、緊急情況處理,我們討論了兩種方案: 方案一:采用8155擴展I/O 口及鍵盤,顯示等。該方案的優(yōu)點是:

      使用靈活可編程,并且有RAM,及計數(shù)器。若用該方案,可提供較多I/O 口,但操作起來稍顯復雜。

      方案二: 直接在IO口線上接上按鍵開關(guān)。因為設(shè)計時精簡和優(yōu)化了電路,所以剩余的口資源還比較多,我們使用四個按鍵,分別是K1、K2、K3、K4。由于該系統(tǒng)對于交通燈及數(shù)碼管的控制,只用單片機本身的I/O 口就可實現(xiàn),且本身的計數(shù)器及RAM已經(jīng)夠用,故選擇方案二。

      二、理論分析與計算

      1.交通燈顯示時序的理論分析與計算

      對于一個交通路口來說,能在最短的時間內(nèi)達到最大的車流量,就算是達到了最佳的性能,我們稱在單位時間內(nèi)多能達到的最大車流為車流量,用公式:車流量= 車流 / 時間 來表示。

      先設(shè)定一些標號如圖2-1 所示。

      說明:此圖為直方圖,上邊為北路口燈,右邊為東路口燈,下邊為南路口燈,左邊為西 路口燈。

      圖2-2 所示為一種紅綠燈規(guī)則的狀態(tài)圖,分別設(shè)定為S1、S2、S3、S4,交通燈以這四 的狀態(tài)為一個周期,循環(huán)執(zhí)行(見圖2-3)。

      請注意圖2-1b和圖2-1d,它們在一個時間段中四個方向都可以通車,這種狀態(tài)能在

      一定的時間內(nèi)達到較大的車流量,效率特別高。

      依據(jù)上述的車輛行駛的狀態(tài)圖,可以列出各個路口燈的邏輯表,由于相向的燈的狀態(tài)圖

      是一樣的,所以只需寫出相鄰路口的燈的邏輯表;根據(jù)圖2-3 可以看出,相鄰路口的燈它

      們的狀態(tài)在相位上相差180°。因此最終只需寫出一組S1、S2、S3、S4的邏輯狀態(tài)表。

      如表2-1 所示。

      表中的“×”代表是紅燈亮(也代表邏輯上的0),“√”是代表綠燈亮(也代表邏輯上 的1),依上表,就可以向相應的端口送邏輯值。2.交通燈顯示時間的理論分析與計算

      東西和南北方向的放行時間的長短是依據(jù)路口的各個方向平時的車流量來設(shè)定,并且

      S1、S2、S3、S4各個狀態(tài)保持的時間之有嚴格的對應關(guān)系,其公式如下所示。T-S1+T-S2=T-S3 T-S2=T-S4 T-S1=T-S3 我們可以依據(jù)上述的標準來改變車輛的放行時間。按照一般的規(guī)則,一個十字路口可分

      為主干道和次干道,主干道的放行時間大于次干道的放行時間,我們設(shè)定值時也應以此為參 考。

      三、電路圖及設(shè)計文件 1.燈控制電路設(shè)計

      由于32個LED 來實現(xiàn)紅綠燈狀態(tài),若直接接在單片機的口線,路口倒計時的顯示就不

      能實現(xiàn),所以本次設(shè)計中采用一種新型的電路如圖3-1 所示。

      圖中74LS04的作用是倒相和驅(qū)動,它輸出的電流大約48mA,實際測試發(fā)現(xiàn)足以滿足要

      求,而且發(fā)光管也能達到足夠的亮度。

      觀察圖可以看出:兩組發(fā)光管(一組紅、一組綠)由于反相器的作用,其邏輯狀態(tài)恰恰 相反。

      圖中和電阻串聯(lián)的二極管的作用是為了分壓,防止因上下兩組發(fā)光管分壓不同導致邏輯 的錯誤。

      共四組和上述相同的電路分別代表東西南北四個方向的紅綠燈,使用兩片74LS04 作為 驅(qū)動。

      2.倒計時顯示電路設(shè)計

      前面已經(jīng)分析過相向的燈的狀態(tài)和倒計時都是相同的,所以為了節(jié)省,采用兩組四個數(shù)碼管

      作為倒計時的顯示;同時為了節(jié)省口資源,采用串口顯示的方式驅(qū)動數(shù)碼管。見圖3-2 所 示。

      四、程序設(shè)計思路與流程圖 1.主程序流程圖

      主程序中主要是一個死循環(huán),不停的循環(huán)四個狀態(tài),如圖4-1 所示。

      2.按鍵子程序流程圖

      它包含倒計時調(diào)整和緊急狀態(tài)兩個狀態(tài)。

      主程序中放了一個按鍵的判斷指令,當有按鍵按下的時候,程序就自動的跳轉(zhuǎn)到按鍵子

      程序處理。當檢測到K2鍵按下的時候就自動返回到主程序。當出現(xiàn)緊急的情況的時候,按下K3或者K4 就切換到緊急狀態(tài),當緊急事件處理完畢 的時候,按下K2,就可以返回正常狀態(tài)。

      五、測試、數(shù)據(jù)及結(jié)果分析 1.狀態(tài)燈顯示測試

      當電路連接完畢后,將寫好的測試程序刷寫到芯片內(nèi),K1 和K2分別給端口送高電平和

      低電平,通電即可檢測。2.數(shù)碼管的測試

      將串口的和電路板上的接口連接,將寫好的測試程序刷寫到芯片內(nèi),開電源即可測試。

      3.整體電路測試

      系統(tǒng)上電,刷寫好程序即可開始測試,觀測一個周期(共計S1~S4四個狀態(tài),默認140 秒)燈的顯示狀態(tài)是否正常,同時觀察倒計的計數(shù)是否正常。

      六、總結(jié)

      由于使用的是單片機作為核心的控制元件,使得電路的可靠性比較高,功能也比較強大,而且可以隨時的更新系統(tǒng),進行不同狀態(tài)的組合。

      但是在我們設(shè)計和調(diào)試的過程中,也發(fā)現(xiàn)了一些問題,譬如紅燈和綠燈的切換還不夠迅

      速,紅綠燈規(guī)則不效率還不是很高等等,這需要在實踐中進一步完善。附錄 系統(tǒng)總體電路圖

      1.滿足南北向紅綠燈亮,東西向紅燈亮,占25秒——南北向黃燈亮,東西向紅燈亮,占5秒——南北向紅燈亮,東西向綠燈亮,占25秒——南北向紅燈亮,東西向黃燈亮,占5秒。如此循環(huán),周而復始。2.十字路口要有數(shù)字顯示,提示行人把握時間:當某方向綠燈亮時,置顯示器為24,然后以每秒減1計數(shù)方式工作,直到減為0,綠燈滅,黃燈亮。黃燈滅,紅燈亮時,再次置顯示器為29,并開始減計數(shù),直到為0,十字路口紅綠燈交換,完成一次工作循環(huán)。

      3.可手動調(diào)整和自動調(diào)整,夜間為黃燈閃耀。下面是一個單片機交通燈程序 /*

      ****************************************************************************************** * *

      * Keil C 89S51 交通信號控制程序 * *(C)版權(quán)所有 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;//右轉(zhuǎn)

      sbit n_up_g = P1^2;//直行

      sbit n_left_g = P1^3;//左轉(zhuǎn) 調(diào)頭

      南北方向紅燈

      sbit n_bike_r = P1^4;//自行車

      sbit n_right_r = P1^5;//右轉(zhuǎn)

      sbit n_up_r = P1^6;//直行

      sbit n_left_r = P1^7;//左轉(zhuǎn) 調(diào)頭 南北方向黃燈

      sbit n_bike_y = P3^0;//自行車

      sbit n_right_y = P3^1;//右轉(zhuǎn)

      sbit n_up_y = P3^2;//直行

      sbit n_left_y = P3^3;//左轉(zhuǎn) 調(diào)頭

      東西方向綠燈

      sbit e_bike_g = P2^0;//自行車

      sbit e_right_g = P2^1;//右轉(zhuǎn)

      sbit e_up_g = P2^2;//直行

      東西方向紅燈

      sbit e_bike_r = P2^4;//自行車

      sbit e_right_r = P2^5;//右轉(zhuǎn)

      sbit e_up_r = P2^6;//直行

      東西方向黃燈

      sbit e_bike_y = P3^4;//自行車

      sbit e_right_y = P3^5;//右轉(zhuǎn)

      sbit e_up_y = P3^6;//直行

      */ //延時

      void delay(UINT t, UINT s){ while(t){ UINT i;

      for(i = 0;i < s;i++){ } t--;} }

      //信號燈狀態(tài)

      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);} }

      給你一個定時控制的信號系統(tǒng),我只做的簡單的測試,至于延時我用的軟件,你自己想辦法。^_^

      Dai_Weis 于 2005-5-4 13:43:23 重新給你說明

      /*

      *********************************************************************************** * *

      * Keil C AT89S51 交通信號控制程序 * *(C)版權(quán)所有 Dai_Weis@hotmail.com * * *

      *********************************************************************************** 開發(fā)說明:

      固定時間信號變換,南北設(shè)置調(diào)頭、左傳、直行、右轉(zhuǎn)、自行車。

      東西設(shè)置左傳、直行、右轉(zhuǎn)、自行車。

      時序狀態(tài):

      紅 綠 紅 綠

      序號 左 前 右 自 左 前 右 自 前 右 自 前 右 自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 */

      另外修正個錯誤

      while(1){

      time_x(0xA5, 0x70, 0x0);time_s(0xA4, 0x70, 0x1, 0xA5, 0x70);

      材料: 1、89S51 11.0592M 晶振

      1K電阻、10UF電容

      12個燈,紅、黃、綠各四個,12個1K電阻

      ,十字路口嘛。蜂鳴器一個。

      按鍵一個,按鍵復位

      采用AT89s51型號的單片機,由于交通十字路口的對稱性,所以一個引腳可以同時控制兩個燈,將發(fā)光二極管分別接到P1各個引腳,在其中加入一個時振蕩當電路,來控制時間,在P3.0引腳接入蜂鳴器只黃燈亮的時候發(fā)出聲響,這里我們讓每次黃燈亮的時候發(fā)出六聲響,通過C程序的控制就可以實現(xiàn),每次循環(huán)是10秒。2、9cm*15cm萬用板 1片 單片機及IC座 1套 12M晶振 1只 22P電容 2只 10uF電容 1只 10K電阻 1只 1K排阻 1只 兩位一體數(shù)碼管 2只 DC座 1只 自鎖開關(guān) 1只

      發(fā)光二極管紅綠黃

      各4只 按鍵 7只 USB電源線 1條 導線

      若干

      1、基于51系列單片機(型號:STC89C52、AT89C51/C52、AT89S51/S52,隨機選擇,如有特

      殊要求請與店主討論)設(shè)計實現(xiàn)。(以上幾種單片機全部為51系列單片機,除了名字不一樣外,功能及應用完全一樣,互相

      兼容)

      2、兩個兩位一體數(shù)碼管顯示東西、南北方向時間。

      3、四方向各有紅綠黃三顆燈。

      4、七個按鍵操作,分別是:禁止通行、東西通行、南北通行、時間加、時間減、切換方向、確認。

      第五篇:基于單片機的交通燈控制系統(tǒng)

      單片機原理及系統(tǒng)課程設(shè)計報告

      基于單片機的交通燈控制系統(tǒng) 引言

      單片機是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計時器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個小而完善的微型計算機系統(tǒng),在工業(yè)控制領(lǐng)域具有廣泛的應用。本文設(shè)計了基于單片機的交通燈控制系統(tǒng)以AT89C51單片機為核心芯片,通過控制三色LED燈的亮滅來控制各車道的通行。設(shè)計方案及原理

      本系統(tǒng)由AT89C51單片機、紅、黃、綠LED交通信號燈、共陰極數(shù)碼管、緊急通車開關(guān)等模塊組成該電路具有設(shè)計簡單,顯示亮度高,能耗小,可靠性高燈特點。其總體設(shè)計框圖如圖1所示。

      復位電路七段數(shù)碼管倒計時顯示電路AT89C51晶振電路A、B車道LED顯示電路按鍵電路

      圖1 系統(tǒng)總體設(shè)計方框圖

      2.1 系統(tǒng)設(shè)計

      交通燈控制系統(tǒng)主要控制A,B兩車道的交通,以AT89C51單片機為核心芯片,通過控制三色LED燈的亮滅來控制各車道的通行;另外通過3個按鍵來模擬各車道有無車輛的情況和有緊急車輛的情況。根據(jù)設(shè)計要求,制定總體設(shè)計思想如下:

      (1)用AT89C51單片機控制交通燈電路,晶振采用12MHz。(2)用發(fā)光二極管模擬交通信號燈,用按鍵開關(guān)模擬車輛檢測信號。

      (3)有緊急車輛通過時,按下K3開關(guān)使A、B車道均為紅燈,禁行20s。此時,

      下載單片機控制的交通燈控制系統(tǒng)設(shè)計[5篇范文]word格式文檔
      下載單片機控制的交通燈控制系統(tǒng)設(shè)計[5篇范文].doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔相關(guān)法律責任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        基于C51單片機的交通燈控制系統(tǒng)

        基于C51單片機的交通燈控制系統(tǒng) 1、實驗方案論證: 進行十字路口的交通信號燈控制電路設(shè)計,畫出電路原理圖及實驗電路圖,進行軟件編程、以及使用說明文檔的建立等一整套工作任務(wù)......

        基于單片機的交通燈控制系統(tǒng)設(shè)計與實現(xiàn)

        基于單片機的交通燈控制系統(tǒng)設(shè)計與實現(xiàn) 目的:本文以AT89S51 單片機為核心器件,設(shè)計了多功能交通燈控制系統(tǒng)。 軟件仿真和硬件實現(xiàn)的結(jié)果表明該系統(tǒng)具有紅綠燈顯示功能、時間......

        基于AT89S51單片機多功能交通燈控制系統(tǒng)設(shè)計下載

        交通燈控制系統(tǒng)設(shè)計 摘要:本系統(tǒng)由單片機系統(tǒng)、鍵盤、LED 顯示、交通燈演示系統(tǒng)組成。系統(tǒng)包括人行道、左轉(zhuǎn)、右轉(zhuǎn)、以及基本的交通燈的功能。系統(tǒng)除基本交通燈功能外,還具有......

        基于單片機控制的交通燈設(shè)計系統(tǒng)

        基于單片機控制的交通燈設(shè)計系統(tǒng) 班級: 姓名: 學號: 第一章 概述 1. 設(shè)計內(nèi)容 本系統(tǒng)需要采用AT89C51單片機AT89C5中心器件來設(shè)計交通燈控制器,實現(xiàn)以下功能: 1.1初始東西綠......

        單片機控制交通燈的案例

        單片機控制交通燈 AT89C51單片機及由Keil 軟件編寫單片機程序,并且通過Proteus仿真測試,設(shè)計一個交通燈系統(tǒng),實現(xiàn)簡單的交通燈的管理功能。在交通燈系統(tǒng)的管理中,用發(fā)光二極管模......

        基于單片機的交通燈控制系統(tǒng)設(shè)計畢業(yè)論文[精選5篇]

        畢 業(yè) 論 文 題 目 基于單片機的交通燈控制系統(tǒng)設(shè)計 姓 名 **** 學 號 所在系 專業(yè)年級 指導教師 職 稱 二O一四 年 五 月 三十一日 151 series microcontroller ATSC51......

        基于單片機的交通燈設(shè)計

        基于單片機的交通燈設(shè)計 設(shè)計程序: #include #define uchar unsigned char /**************************變量、控制位定義**************************/ uchar code table[10......

        交通燈單片機課程設(shè)計

        《單片機原理與接口技術(shù)課程設(shè)計報告》 課題:以交通燈為主的多功能任務(wù)設(shè)計 班級 學號 學生姓名指導教師 淮陰工學院 電子與電氣工程學院 2015-6 1 目錄 一、 課程設(shè)計目......