第一篇:基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
2014屆本科生畢業(yè)設(shè)計(jì)
分類號(hào):TP368.1
題目:基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
姓 名: 張建猛 學(xué) 號(hào) : 2010080870 學(xué) 院: 機(jī)械與電子工程學(xué)院 專 業(yè): 自動(dòng)化 指導(dǎo)教師職稱: 胡波 劉明
指導(dǎo)教師職稱: 助教(碩士)工程師
2014-05-11
摘 要
本文采用AT89C51單片機(jī)芯片為核心控制器件設(shè)計(jì)的交通燈控制器,該系統(tǒng)主要包括單片機(jī)最小系統(tǒng),按鍵,數(shù)碼管顯示,交通燈演示系統(tǒng)。系統(tǒng)主要具有有人行道,交通燈的基本功能,倒計(jì)時(shí),緊急情況處理,根據(jù)具體情況手動(dòng)控制等功能。通過(guò)AT89C51并接數(shù)碼管和發(fā)光二極管來(lái)實(shí)現(xiàn)交通燈的變化規(guī)律,P1口設(shè)置紅,綠燈點(diǎn)亮?xí)r間功能的實(shí)現(xiàn);紅綠燈循環(huán)點(diǎn)亮,倒計(jì)時(shí)剩余10秒時(shí)黃燈閃爍警示。本系統(tǒng)的研發(fā)周期短,可靠性高,實(shí)用性,操作簡(jiǎn)單,維護(hù)方便,擴(kuò)展功能強(qiáng)大。本系統(tǒng)軟硬件相結(jié)合,通過(guò)Proteus軟件仿真,基本實(shí)現(xiàn)了交通信號(hào)燈的模擬。
關(guān)鍵詞:AT89C51;數(shù)碼管;交通燈控制器
ABSTRACT In this paper, AT89C51 chip as the core control device design traffic light controller, the system includes smallest single-chip system, keyboard, digital display, traffic lights demonstration system.System mainly has a sidewalk, the basic functions of traffic lights, countdown, emergency treatment, according to the specific circumstances of manual control and other functions.And connected via AT89C51 LED digital tube and realized traffic lights change, P1 port settings of red, green lighting time function is implemented;traffic light cycle light, countdown 10 seconds remaining yellow flashing warning.The system development cycle is short, high reliability, practicality, simple operation, easy maintenance, expansion and powerful.This system combines hardware and software, Through the Proteus Software Simulation,the basic realization of traffic lights simulation.Keywords: AT89C51;System;Digital pipe;Traffic light controller
目錄
緒
論...........................................................................................................................1 1.整體方案設(shè)計(jì)...........................................................................................................2 1.1 方案分析.........................................................................................................2 1.2 方案確立.........................................................................................................3 2.系統(tǒng)的硬件設(shè)計(jì).......................................................................................................3
2.1設(shè)計(jì)原理及方法..............................................................................................3 2.2 AT89C51單片機(jī)最小系統(tǒng)..............................................................................4 2.2.1 復(fù)位電路..............................................................................................4 2.2.2 時(shí)鐘電路..............................................................................................5 2.2.2 EA腳的功能及接法.............................................................................6 2.3其它硬件模塊介紹及連接..............................................................................7
2.3.1 倒計(jì)時(shí)顯示模塊.................................................................................7
2.3.2 交通燈顯示模塊................................................................................8
2.3.3 按鍵控制模塊......................................................................................9 2.3.4 電源模塊............................................................................................10 3.系統(tǒng)的軟件設(shè)計(jì).....................................................................................................10
3.1系統(tǒng)相關(guān)參數(shù)計(jì)算........................................................................................10 3.1.1 T0的計(jì)數(shù)初值...................................................................................10 3.1.2 倒計(jì)時(shí)顯示的理論分析....................................................................10 3.1.2 交通燈狀態(tài)顯示的理論分析............................................................11 3.2系統(tǒng)主程序設(shè)計(jì)............................................................................................11 4.系統(tǒng)的 Proteus軟件仿真....................................................................................12 4.1 Proteus仿真圖............................................................................................12 4.2 Proteus仿真的結(jié)果分析............................................................................12 結(jié)束語(yǔ).........................................................................................................................14 參考文獻(xiàn).....................................................................................................................14 致 謝.........................................................................................................................15 附錄:程序源代碼.....................................................................................................16
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
緒 論
隨著人口的迅速增長(zhǎng),道路資源的有限性和交通工具爆炸性的發(fā)展,城市交通正面臨著嚴(yán)峻考驗(yàn),因此造成日益嚴(yán)重的交通問(wèn)題,每天的交通擁堵成了家常便飯但又不得不忍受。在這種情況下,與我國(guó)城市道路交通的實(shí)際情況相結(jié)合,開發(fā)出適合我們自身特點(diǎn)的智能信號(hào)燈控制系統(tǒng)已成為一個(gè)主要的任務(wù)。一個(gè)好的交通燈控制系統(tǒng),將給道路擁堵,違章行駛等方面給予技術(shù)創(chuàng)新。隨著電子技術(shù)的發(fā)展,采用單片機(jī)技術(shù),能夠智能管理交通燈,已成為目前廣泛使用的方法。
在人類的生活,工作環(huán)境中,交通扮演著極其重要的角色,人們的出行與交通時(shí)時(shí)刻刻打著交道。城市交通控制系統(tǒng)是基于城市交通信號(hào)控制技術(shù)為主導(dǎo)的發(fā)展,與汽車行業(yè)的發(fā)展并行。在其發(fā)展的不同階段,由于交通出現(xiàn)的各種矛盾,人們總是試圖把各個(gè)歷史階段的最新科技成果應(yīng)用到交通自動(dòng)控制中,從而促進(jìn)交通自動(dòng)控制技術(shù)不斷發(fā)展。
早在1850年,城市交叉路口處安全和擁堵問(wèn)題引起人們的關(guān)注,全球第一個(gè)自動(dòng)交通燈誕生,打開城市交通控制的序幕。在1868年,英國(guó)工程師娜奕特在倫敦西部威斯敏斯特街口安裝一個(gè)紅色和綠色煤氣照明燈,用來(lái)控制交叉路口的馬車通行,但一次煤氣爆炸事故致使交通信號(hào)燈消失了近半個(gè)世紀(jì)。1914年,美國(guó)克利夫蘭,紐約和芝加哥重新出現(xiàn)的交通信號(hào)燈,他們使用電動(dòng)驅(qū)動(dòng),與現(xiàn)在意義的交通信號(hào)燈幾乎是一樣的。隨著時(shí)代的發(fā)展,各種運(yùn)輸方式和交通管制的需要,第一光名副其實(shí)的三色燈(紅,黃,綠)出生于1918年。它的周圍是三色圓形投影機(jī)被安裝在紐約市五號(hào)街一座高塔上,由于它的誕生,城市交通大大改善。
在近一個(gè)世紀(jì)的發(fā)展,道路交通信號(hào)控制系統(tǒng)經(jīng)歷了一個(gè)手動(dòng)到自動(dòng),從固定到靈活配時(shí),從無(wú)感應(yīng)控制到有感應(yīng)控制,從單點(diǎn)控制到干線控制,從區(qū)域控制到網(wǎng)絡(luò)控制的長(zhǎng)期過(guò)程。
交通網(wǎng)絡(luò)是城市的動(dòng)脈,是一個(gè)城市的生活經(jīng)濟(jì)水平,工業(yè)文明的象征。交通關(guān)系到人民對(duì)財(cái)產(chǎn),安全和時(shí)間相關(guān)的利益。憑借優(yōu)良科學(xué)的交通控制技術(shù)對(duì)資源物流和人們出行是非常有價(jià)值的,確保交通安全線的暢通,才能確保舒適的出行,物流按時(shí)到位,甚至是生命通道延伸。為了確保安全,高效的交通秩序,除了制定一系列的交通規(guī)則,而且還必須通過(guò)一定的技術(shù)手段來(lái)實(shí)現(xiàn)。隨著單片機(jī)和傳感器技術(shù)的迅速發(fā)展,自動(dòng)檢測(cè)領(lǐng)域發(fā)生了翻天覆地的變化,交通自動(dòng)檢測(cè)控制研究已經(jīng)取得了顯著的進(jìn)步,必將以其優(yōu)良的性能價(jià)格比,逐步取代傳統(tǒng)的交通控制措施。
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
1.整體方案設(shè)計(jì)
1.1 方案分析
交通燈一般設(shè)在城市道路的十字路口,可以分為東西方向(主干道)和南北方向(次干道),東西南北四個(gè)路口均設(shè)有有紅綠黃3種燈和1個(gè)二位數(shù)碼顯示管。在某一時(shí)刻規(guī)定只有一個(gè)方向可以通行,另一方向被禁行,狀態(tài)經(jīng)過(guò)一定的過(guò)渡時(shí)間,將通行方向和禁行方向相互對(duì)換。其具體狀態(tài)如下圖所示。(白色表示滅)。通過(guò)具體的路口交通燈狀態(tài)的演示分析我們可以把這四個(gè)狀態(tài)歸納如圖1:
圖1 交通燈狀態(tài)圖
·東西方向(主干道)紅燈滅,同時(shí)綠燈亮,南北方向(次干道)黃燈滅,同時(shí)紅燈亮,倒計(jì)時(shí)顯示60秒。在此種狀態(tài)下,東西方向(主干道)允許通行,南北方向(次干道)禁止通行。
·東西方向(主干道)綠燈滅,同時(shí)黃燈閃爍,南北方向(次干道)紅燈亮,倒計(jì)時(shí)顯示10秒。在此種狀態(tài)下,除了正在通行中的車輛外,其他所有的車輛都應(yīng)該等待狀態(tài)轉(zhuǎn)換。
·南北方向(次干道)紅燈滅,同時(shí)綠燈亮,東西方向(主干道)黃燈滅,同時(shí)紅燈亮,倒計(jì)時(shí)50秒。在此種狀態(tài)下,東西方向(主干道)禁止通行,南北向允許通行。
·南北方向(次干道)綠燈滅,同時(shí)黃燈閃爍,東西方向(主干道)紅燈亮,倒計(jì)時(shí)10秒。在此種狀態(tài)下,除了正在通行中的車輛外,其他所有車輛都應(yīng)該等待狀態(tài)轉(zhuǎn)換。
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
1.2 方案確立
本設(shè)計(jì)系統(tǒng)以AT89C51單片機(jī)為控制核心,連接成最小系統(tǒng),由倒計(jì)時(shí)顯示模塊、交通燈顯示模塊、按鍵開關(guān)控制模塊組成。軟件部分使用的是C 語(yǔ)言編程,由軟件設(shè)置交通燈的初始時(shí)間,東西方向(主干道)通行60秒,南北方向(支干道)通行50秒,數(shù)碼管采用動(dòng)態(tài)顯示,P0口送字形碼,P2口送字位選通信號(hào),通過(guò)單片機(jī)的P1口控制各種信號(hào)燈的點(diǎn)亮與熄滅,采用中斷方式實(shí)現(xiàn)各按鍵的功能。
2.系統(tǒng)的硬件設(shè)計(jì)
2.1 設(shè)計(jì)原理及方法
本設(shè)計(jì)采用模塊化的分層次設(shè)計(jì)方法,以單片機(jī)AT 89C 51為控制核心,連接成最小系統(tǒng),由倒計(jì)時(shí)顯示模塊、交通燈顯示模塊、按鍵開關(guān)控制模塊等組成。系統(tǒng)的總體框圖如下所示。
圖2 交通燈控制器框圖
本系統(tǒng)采用AT89C51單片機(jī)及外圍器件構(gòu)成最小控制系統(tǒng),12個(gè)發(fā)光二極管分成4組紅綠黃三色燈構(gòu)成信號(hào)燈指示模塊,4個(gè)數(shù)碼管東西南北方向各一個(gè)構(gòu)成倒計(jì)時(shí)顯示模塊,通過(guò)四個(gè)按鍵K0、K1、K2、K3模擬控制交通燈東西通行,南北通行,返回,緊急情況各個(gè)交通燈工作情況之間相互轉(zhuǎn)化。
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
2.2 AT89C51單片機(jī)最小系統(tǒng)
單片機(jī)最小系統(tǒng)一般有晶振、復(fù)位、電源、系統(tǒng)的輸入控制、輸出顯示,以及其他外圍模塊(如通信、數(shù)據(jù)采集等)等模塊組成。2.2.1 復(fù)位電路
單片機(jī)復(fù)位電路原理是在單片機(jī)的復(fù)位引腳RST上外接電阻和電容,實(shí)現(xiàn)上電復(fù)位。當(dāng)復(fù)位電平持續(xù)兩個(gè)機(jī)器周期以上時(shí)復(fù)位有效。復(fù)位電平的持續(xù)時(shí)間必須大于單片機(jī)的兩個(gè)機(jī)器周期。具體數(shù)值可以由RC電路計(jì)算出時(shí)間常數(shù)。復(fù)位電路由手動(dòng)復(fù)位和上電復(fù)位兩部分組成。
(1)上電復(fù)位電路要求接通電源后,通過(guò)外部電容充電來(lái)實(shí)現(xiàn)單片機(jī)自動(dòng)復(fù)位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要能保持足夠的時(shí)間(2個(gè)機(jī)器周期),單片機(jī)就可以進(jìn)行復(fù)位操作。
(2)手動(dòng)復(fù)位:手動(dòng)復(fù)位就是在復(fù)位電容上并聯(lián)一個(gè)開關(guān),當(dāng)開關(guān)按下時(shí)電容被放電、RST也被拉到高電平,而且由于電容的充電,會(huì)保持一段時(shí)間的高電平來(lái)使單片機(jī)復(fù)位。單片機(jī)復(fù)位期間不產(chǎn)生ALE和PSEN信號(hào),即ALE=1和PSEN=1。這表明單片機(jī)復(fù)位期間不會(huì)有任何取指操作。
圖3 單片機(jī)手動(dòng)復(fù)位電路
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
2.2.2 時(shí)鐘電路
單片機(jī)系統(tǒng)里都有晶振,在單片機(jī)系統(tǒng)里晶振作用非常大,全稱叫晶體振蕩器,它結(jié)合單片機(jī)內(nèi)部電路產(chǎn)生單片機(jī)所需的時(shí)鐘頻率,單片機(jī)晶振提供的時(shí)鐘頻率越高,那么單片機(jī)運(yùn)行速度就越快,單片機(jī)的一切指令的執(zhí)行都是建立在單片機(jī)晶振提供的時(shí)鐘頻率。單片機(jī)晶振的作用是為系統(tǒng)提供基本的時(shí)鐘信號(hào)。單片機(jī)的時(shí)鐘電路由外接的一只晶振和兩只起振電容,以及單片機(jī)內(nèi)部的時(shí)鐘電路組成,晶振的頻率越高,單片機(jī)處理數(shù)據(jù)的速度越快,系統(tǒng)功耗也會(huì)相應(yīng)增加,穩(wěn)定性也會(huì)下降。
單片機(jī)的時(shí)鐘電路設(shè)計(jì)有兩種方式,一種是內(nèi)部時(shí)鐘方式,一種是外部時(shí)鐘方式。
在內(nèi)部時(shí)鐘方式下單片機(jī)內(nèi)部的高增益、反相放大器通過(guò)XTAL1、XTAL2外接作為反饋元件的外部晶體管振蕩器與電容組成的并聯(lián)諧振回路構(gòu)成一個(gè)穩(wěn)定的自激振蕩器,向內(nèi)部時(shí)鐘電路提供振蕩時(shí)鐘。振蕩器的頻率主要取決于晶體的振蕩頻率。外部時(shí)鐘方式是把外部已有的時(shí)鐘信號(hào)引入到單片機(jī)內(nèi)。此方式常用于多片單片機(jī)同時(shí)工作,以便于各單片機(jī)的同步。一般要求外部信號(hào)高電平的持續(xù)時(shí)間大于20μs,且為頻率低于12MHz的方波。本設(shè)計(jì)采用內(nèi)部時(shí)鐘方式,單片機(jī)系統(tǒng)常用的晶振頻率有6MHz、11.0592MHz、12MHz、本系統(tǒng)采用11.0592MHz晶振,電容選22pF或30pF均可。
圖4 單片機(jī)時(shí)鐘電路
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
2.2.2 EA腳的功能及接法
AT89C51 單片機(jī)的EA/VPP(31 腳)是內(nèi)部和外部程序存儲(chǔ)器的選擇管腳。當(dāng)EA 保持高電平時(shí),單片機(jī)訪問(wèn)內(nèi)部程序存儲(chǔ)器;當(dāng)EA 保持低電平時(shí),則不管是否有內(nèi)部程序存儲(chǔ)器,只訪問(wèn)外部存儲(chǔ)器。由于現(xiàn)在單片機(jī)內(nèi)部的flash容量都很大,因此基本都是從內(nèi)部的存儲(chǔ)器讀取程序,即不需要外接ROM來(lái)存儲(chǔ)程序,因此,EA腳必須接高電平。
圖5 單片機(jī)最小系統(tǒng)
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
2.3 其它硬件模塊介紹及連接 2.3.1 倒計(jì)時(shí)顯示模塊
系統(tǒng)要求南北和東西方向的信號(hào)燈時(shí)間不一樣,所以就利用單片機(jī)的P0口送出數(shù)據(jù)的段碼,位選信號(hào)用P2口送出,用動(dòng)態(tài)掃描的方法顯示東西、南北的倒計(jì)時(shí)間。7段數(shù)碼管一般由8個(gè)發(fā)光二極管組成,其中由7個(gè)細(xì)長(zhǎng)的發(fā)光二極管組成數(shù)字顯示,另外一個(gè)圓形的發(fā)光二極管顯示小數(shù)點(diǎn)。當(dāng)發(fā)光二極管導(dǎo)通時(shí),相應(yīng)的一個(gè)點(diǎn)或一個(gè)筆畫發(fā)光??刂葡鄳?yīng)的二極管導(dǎo)通,就能顯示出各種字符。本設(shè)計(jì)采用共陰數(shù)碼管,需要接上470歐上拉電阻以提供足夠大的電流來(lái)驅(qū)動(dòng)數(shù)碼管,數(shù)碼管的每段的電流是約10毫安。
圖6 數(shù)碼管顯示模塊
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
2.3.2 交通燈顯示模塊
本系統(tǒng)利用單片機(jī)的P1口來(lái)驅(qū)動(dòng)和控制各種信號(hào)燈的燃亮和燃亮?xí)r間,在實(shí)際中,交通燈的信號(hào)燈需要用高電壓控制,在這里我們只是模擬一下它的控制信號(hào),所以我們就只用單片機(jī)的信號(hào)引腳直接來(lái)控制發(fā)光二極管。發(fā)光二極管是半導(dǎo)體二極管的一種,可以把電能轉(zhuǎn)化成光能,常簡(jiǎn)寫為L(zhǎng)ED。發(fā)光二極管與普通二極管一樣是由一個(gè)PN結(jié)組成,也具有單向?qū)щ娦?。?dāng)給發(fā)光二極管加上正向電壓后,從P區(qū)注入到N區(qū)的空穴和由N區(qū)注入到P區(qū)的電子,在PN結(jié)附近數(shù)微米內(nèi)分別與N區(qū)的電子和P區(qū)的空穴復(fù)合,產(chǎn)生自發(fā)輻射的熒光。不同的半導(dǎo)體材料中電子和空穴所處的能量狀態(tài)不同。當(dāng)電子和空穴復(fù)合時(shí)釋放出的能量多少不同,釋放出的能量越多,則發(fā)出的光的波長(zhǎng)越短。常用的是發(fā)紅光、綠光或黃光的二極管。發(fā)光二極管的反向擊穿電壓約5伏。它的正向伏安特性曲線
很陡,使用時(shí)必須串聯(lián)限流電阻以控制通過(guò)管子的電流。
圖7 交通燈模塊
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
2.3.3 按鍵控制模塊
本系統(tǒng)設(shè)置了有4個(gè)鍵:K0鍵,K1鍵,K2鍵,K3鍵。每個(gè)按鍵一端接地,另一端接上二極管。低電平有效,當(dāng)按鍵按下端口接地,單片機(jī)捕獲到低電平,從而得到相應(yīng)的輸入信息。本系統(tǒng)采用了二極管做開關(guān),是為了防止有一按鍵被按下3根線同時(shí)被低,中斷無(wú)效。二極管在正向電壓作用下電阻很小,處于導(dǎo)通狀態(tài),相當(dāng)于一只接通的開關(guān);在反向電壓作用下,電阻很大,處于截止?fàn)顟B(tài),如同一只斷開的開關(guān)。利用二極管的開關(guān)特性,可以組成各種邏輯電路。
程序開始運(yùn)行先東西段通行、南北段禁止60s,后南北段通行、東西段禁止50s,依此循環(huán)。系統(tǒng)分三種工作模式:南北通行模式、東西通行模式、返回模式、緊急情況模式,并且通過(guò)四個(gè)按鍵K0、K1、K2、K3實(shí)現(xiàn)之間的相互轉(zhuǎn)化。
圖8 按鍵控制模塊
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
2.3.4 電源模塊
單片機(jī)工作時(shí)需要的+5V電壓,所以在設(shè)計(jì)電源電路時(shí),需要一個(gè)電子元件能提供+5V電壓,由于78L05能夠提供5V電壓的三端穩(wěn)壓電源,78L05一腳為電源輸入端,二腳為公共接地端,三腳即為我們所需要的+5V電壓輸出端.本系統(tǒng)采用典型的78L05提供電壓的電路,即在78L05的1腳和公共接地端(即2腳)之間接入0.3μF的電容,在公共接地端和三腳+5V電壓輸出端之間接入0.1μF的電容.圖9 電源模塊
3.系統(tǒng)的軟件設(shè)計(jì)
3.1 系統(tǒng)相關(guān)參數(shù)計(jì)算 3.1.1 T0的計(jì)數(shù)初值
T0的計(jì)數(shù)初值:X=216-12*50*1000/12=15536=3CB0H 3.1.2 倒計(jì)時(shí)顯示的理論分析
倒計(jì)時(shí)顯示的理論分析:利用定時(shí)器中斷,設(shè)TH0=TH1=(65536-50000)/256,即每0.05秒中斷一次。每到第20次中斷即過(guò)了20*0.05秒=1秒時(shí),使時(shí)間的計(jì)數(shù)值減1,便實(shí)現(xiàn)了倒計(jì)時(shí)的功能。
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
3.1.2 交通燈狀態(tài)顯示的理論分析
狀態(tài)燈顯示的理論分析:黃燈閃爍同樣可以利用定時(shí)器中斷。每到第10次中斷即過(guò)了10*0.05秒=0.5秒時(shí),使黃燈標(biāo)志位反置,即可讓黃燈1秒閃爍一次。
3.2 系統(tǒng)主程序設(shè)計(jì)
本系統(tǒng)采用AT89C51單片機(jī)實(shí)現(xiàn)交通燈的控制,程序的編寫用C語(yǔ)言來(lái)完成。系統(tǒng)控制程序可以分為若干模塊:初始化程序,按鍵開關(guān)控制程序,交通燈轉(zhuǎn)換控制程序,LED數(shù)碼管顯示程序,按鍵消抖動(dòng)程序,延時(shí)程序,中斷服務(wù)子程序等。系統(tǒng)相應(yīng)的程序流程如圖所示。
圖10 程序流程圖
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
4.系統(tǒng)的 Proteus軟件仿真
4.1 Proteus仿真圖
交通燈控制系統(tǒng)的仿真是通過(guò) proteus 軟件實(shí)現(xiàn)的交通燈控制系統(tǒng)仿真效果,仿真如下圖9所示:
圖11 仿真圖
4.2 Proteus仿真的結(jié)果分析
Proteus仿真實(shí)現(xiàn)東西方向和南北方向的十字路口的車輛相互交替通過(guò),東西方向(主干道)每次通行時(shí)間設(shè)置為60秒、南北方向(次干道)通行時(shí)間設(shè)置為50秒。同時(shí)可以實(shí)現(xiàn)紅燈、黃燈、綠燈各狀態(tài)之間的相互轉(zhuǎn)換,黃燈閃爍時(shí)間設(shè)置為10秒,數(shù)碼管可以準(zhǔn)確進(jìn)行倒計(jì)時(shí)顯示。按下東西放行鍵K0,東西方向(主干道)綠燈亮,南北方向(次干道)紅燈亮;按下南北放行鍵K1,南北方向(次干道)綠燈亮,東西方向(主干道)紅燈亮;無(wú)論在任何時(shí)候按下返回鍵K2,該控制系統(tǒng)都將返回到初始狀態(tài);若遇緊急情況,按下緊急情況按鍵K3,東西南北方向都亮紅燈,實(shí)現(xiàn)主干道和支干道全部禁止通行;模擬了控制交通燈東西方向(主干道)通行,南北方向(次干道)通行,返回,緊急情況各個(gè)交通燈工作情況之間相互轉(zhuǎn)化,實(shí)現(xiàn)了課程設(shè)計(jì)的要求。宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
結(jié)束語(yǔ)
通過(guò)這次畢業(yè)設(shè)計(jì),使我受益匪淺。使我在軟硬件結(jié)合的綜合運(yùn)用能力上有了進(jìn)一步的提升,對(duì)課堂上所學(xué)的單片機(jī)知識(shí)有了進(jìn)一步的加深和鞏固,在C語(yǔ)言的掌握方面也向前邁了一大步,在老師和同學(xué)的幫助下,提高了個(gè)人分析解決實(shí)際問(wèn)題的綜合能力以及協(xié)同合作的能力,同時(shí)還鍛煉了我查閱資料的能力、動(dòng)手能力、發(fā)現(xiàn)問(wèn)題、解決問(wèn)題的能力。面對(duì)電腦搜索資料,一點(diǎn)點(diǎn),一塊塊的電路慢慢拼成完整的電路經(jīng)過(guò)一次次的反復(fù)修改終于設(shè)計(jì)出了屬于自己的程序和電路,雖然還有諸多不足之處,不過(guò)使自己真正的體會(huì)到了探索事物的奧秘的快樂,同時(shí)自己也更深入的了解到了單片機(jī)的巨大的潛力,雖然有的時(shí)候可能遇到了一些困難,但是我最終解決了,我也會(huì)感覺到成功給我?guī)?lái)的喜悅,我知道我在專業(yè)知識(shí)上的掌握還是遠(yuǎn)遠(yuǎn)不夠的,我還要更加努力的去學(xué)習(xí),提高自己了實(shí)踐能力。
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
參考文獻(xiàn)
[1] 楊素行.模擬電子技術(shù)[M].北京:高等教育出版社.2006 [2] 余孟嘗.?dāng)?shù)字電子技術(shù)[M].北京:高等教育出版社. 2006 [3] 邱關(guān)源,羅先覺.電路[M].北京:高等教育出版社.2011 [4] 張毅剛.單片機(jī)原理及應(yīng)用[M].北京:高等教育出版社.2011 [5] 凌志浩.AT89C52單片機(jī)原理與接口技術(shù)[M].北京:高等教育出版社.2011 [6] 郭循釗,鄺帆.基于單片機(jī)的多功能交通燈控制系統(tǒng)設(shè)計(jì)與仿真實(shí)現(xiàn)[J].公路交通技術(shù).2010 [7] 劉日華,宋海.基于單片機(jī)的交通燈設(shè)計(jì)[J].科技致富向?qū)В?012 [9] 高文慶,呂英英. 基于AT89C51單片機(jī)的數(shù)字秒表設(shè)計(jì)[J]. 電腦知識(shí)與技術(shù).2012 [10] 譚浩強(qiáng)著,C程序設(shè)計(jì) 第三版[M].清華大學(xué)出版社.2006 [11] 彭虎,周佩玲. 微機(jī)原理與接口技術(shù)[M].電子工業(yè)出版社.2011 [12] GUO Haili.Design of Traffic Light Control System Based on Proteus and Single-chip Computer.Journal of Hengshui University[J].2012 [13] Tang Jing-nan, Qin Shen .Development and Examples of 51 Microcontroller's C Language [M].Posts & Telecom Press.2008
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
致 謝
本畢業(yè)設(shè)計(jì)在胡波和劉明老師的親切關(guān)懷和悉心指導(dǎo)以及同學(xué)們的熱心幫助下完成的。感謝他們?cè)诖舜萎厴I(yè)設(shè)計(jì)過(guò)程中給予我的悉心指導(dǎo)與各方面的幫助,他們給了我許多非常有益的建議和意見,使我在思路上得到了很大的啟發(fā),從中認(rèn)識(shí)到了自己存在的不足,并且學(xué)到了很多非常寶貴的知識(shí)。同時(shí)也要感謝系里其它同學(xué)和我的朋友在設(shè)計(jì)中給我提供的幫助和支持??偟膩?lái)說(shuō),這次設(shè)計(jì)給了我一個(gè)很好的鍛煉機(jī)會(huì),讓我學(xué)到了很多東西,讓我將自己所掌握的理論知識(shí)切實(shí)運(yùn)用于工作和生活實(shí)踐中,這不僅有利于加深對(duì)書本知識(shí)的理解和鞏固,而且在很大程度上提高了我們?cè)诶碚撝R(shí)的指導(dǎo)下觀察、分析和解決問(wèn)題的能力。最后,再次向所有幫助過(guò)我的老師、同學(xué)表示衷心的感謝!謝謝你們!宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
附錄:程序源代碼
/*#include
code 宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
{ uchar i;
while(ms--){ {} for(i=0;i<200;i++)}
} /*中斷0處理程序*/ void int0(void)interrupt 0 { EA=0;/*CPU禁止響應(yīng)一切中斷*/ P1=0xF6,P0=duanma[0];/*東西南北方向均紅燈亮,P0口輸出0*/
{ P2=weima[0],P0=duanma[(SN_G+Y)%10];/*南北方向數(shù)碼管顯示可通行 while(1)/*無(wú)條件循環(huán)*/ 時(shí)間的個(gè)位*/ delayms(10);/*延時(shí)*/
P2=weima[1],P0=duanma[(SN_G+Y)/10];/*南北方向數(shù)碼管顯示可通行 delayms(10);/*延時(shí)*/ 時(shí)間的十位*/ P2=weima[2],P0=duanma[(WE_G+Y)%10];/*東西方向數(shù)碼管顯示可通行時(shí)間的個(gè)位*/ delayms(10);/*延時(shí)*/
P2=weima[3],P0=duanma[(WE_G+Y)/10];/*東西方向數(shù)碼管顯示可通行時(shí)間的十位*/
/*設(shè)置南北方向通行時(shí)間*/ if(K0==0)/*P3^7=0*/ { delayms(10);/*延時(shí)*/ 17 宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
delayms(20);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/ if(K0==0)*/ { } SN_G++;/*南北方向綠燈時(shí)間+1*/ if(SN_G==100)SN_G=0;/*由于使用的是兩位數(shù)碼管,當(dāng)南北方向綠燈時(shí)間加到100后清零*/ }
} /*設(shè)置東西方向通行時(shí)間*/ if(K1==0)/*P3^6=0*/ { { while(K0==0)/*當(dāng)松開K0開關(guān)時(shí),跳出空循環(huán),執(zhí)行后面的程序 delayms(20);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/ if(K1==0){ while(K1==0)/*當(dāng)松開K1開關(guān)時(shí),跳出空循環(huán),執(zhí)行后面的程序*/ { } WE_G++;/*東西方向綠燈時(shí)間+1*/ if(WE_G==100)WE_G=0;/*由于使用的是兩位數(shù)碼管,當(dāng)東西方向綠燈時(shí)間加到100后清零*/ }
} /*返回*/ if(K3==0)/*P3^5=0*/ delayms(20);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/ if(K3==0){ { 18 宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
while(K3==0)/*當(dāng)松開K3開關(guān)時(shí),跳出空循環(huán),執(zhí)行后面的程
{ } count=0;/*清零*/ k=0;/*南北方向通車,東西方向不通車*/ SN=SN_G,WE=SN_G+Y;/*南北方向顯示時(shí)間為南北方向綠燈通行序*/ 時(shí)間,東西方向顯示時(shí)間為南北方向綠燈通行時(shí)間加黃燈閃亮?xí)r間*/ light();/*調(diào)用交通燈函數(shù)*/
led();/*調(diào)用數(shù)碼管函數(shù)*/ EA=1;/*CPU開放總中斷*/
break;/*跳出*/ }
} } } /*中斷1處理程序*/ {
P1=0xF6,P0=duanma[0];/*東西南北方向均紅燈亮,P0口輸出0*/ TR0=!TR0;/*計(jì)數(shù)器停止工作*/ {/*數(shù)碼管掃描程序,*/ P2=weima[0];/*顯示南北方向個(gè)位*/ delayms(10);/*延時(shí)*/ delayms(10);/*延時(shí)*/ P2=weima[2];/*顯示東西方向個(gè)位*/ delayms(10);/*延時(shí)*/ P2=weima[3];/*顯示東西方向十位*/ delayms(10);/*延時(shí)*/ /*返回*/ EA=0;/*CPU禁止響應(yīng)一切中斷*/ while(1)/*無(wú)條件循環(huán)*/
void int1(void)interrupt 2 P2=weima[1];/*顯示南北方向十位*/ if(K3==0)/*P3^5=0*/ { 19 宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
delayms(20);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
if(K3==0){ while(K3==0)/*當(dāng)松開K3開關(guān)時(shí),跳出空循環(huán),執(zhí)行后面的程序*/
{ } TR0=!TR0;/*啟動(dòng)計(jì)數(shù)器*/ EA=1;/*CPU開放總中斷*/
break;/*跳出*/
}
} } } /*鍵盤程序*/ void key(){ /*南北有車而東西無(wú)車*/ if(K0==0)/*K0=0*/ { delayms(20);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/ if(K0==0){ while(K0==0)/*當(dāng)松開K0開關(guān)時(shí),跳出循環(huán),執(zhí)行后面的程序*/ { light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } count=0;/*清零*/ k=0;/*南北方向通車,東西方向不通車*/ SN=SN_G,WE=SN_G+Y;/*南北方向顯示時(shí)間為南北方向綠燈通行時(shí)間,東西方向顯示時(shí)間為南北方向綠燈通行時(shí)間加黃燈閃亮?xí)r間*/ light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } }
宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
/*南北無(wú)車而東西有車*/ if(K1==0)/*K1=0*/ { delayms(20);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/ if(K1==0){ while(K1==0)/*當(dāng)松開K1開關(guān)時(shí),跳出循環(huán),執(zhí)行后面的程序*/ { light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } count=0;/*清零*/ k=1;/*南北方向不通車,東西方向通車*/ SN=WE_G+Y,WE=WE_G;/*南北方向顯示時(shí)間為東西方向綠燈通行時(shí)間加黃燈閃亮?xí)r間,東西方向顯示時(shí)間為東西方向綠燈通行時(shí)間*/ light();/*調(diào)用交通燈函數(shù)*/
} /*定時(shí)函數(shù)*/ void time1(void)interrupt 1 {
TH0=0x3c;TL0=0xb0;/*計(jì)50000個(gè)數(shù),用時(shí)50ms*/ count++;/*自增運(yùn)算*/ if(count>=20)/*當(dāng)count大于或等于20時(shí),歷時(shí)1s,執(zhí)行程序*/ { SN--;/*自減運(yùn)算*/ WE--;/*自減運(yùn)算*/ count=0;/*清零*/ if(SN==0||WE==0)/*當(dāng)SN=0或者WE=0時(shí),執(zhí)行程序*/ { } led();/*調(diào)用數(shù)碼管函數(shù)*/ } k++;/*自增運(yùn)算*/ if(k>3)/*當(dāng)k>3時(shí),執(zhí)行程序*/ 21 宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
k=0;/*清零*/ switch(k)/*switch 語(yǔ)句*/ { case 0:SN=SN_G,WE=SN_G+Y;break;/*南北方向顯示時(shí)間為南北方向綠燈通行時(shí)間,東西方向顯示時(shí)間為南北方向綠燈通行時(shí)間加黃燈閃亮?xí)r間*/ case 1:SN=Y,WE=Y;break;/*東西南北方向顯示時(shí)間均為黃燈閃亮?xí)r間*/ case 2:SN=WE_G+Y,WE=WE_G;break;/*南北方向顯示時(shí)間為東西方向綠燈通行時(shí)間加黃燈閃亮?xí)r間,東西方向顯示時(shí)間為東西方向綠燈通行時(shí)間*/ case 3:SN=Y,WE=Y;break;/*東西南北方向顯示時(shí)間均為黃燈閃亮?xí)r間*/ } } } /*交通燈函數(shù)*/ void light(){
P1=deng[k];/*交通燈對(duì)應(yīng)著k的值變化*/ if(P1==deng[1]&&count==0)/*當(dāng)南北方向亮黃燈且count=0時(shí),執(zhí)行程序*/
{ TH1=(65536-50000)/256;
} TL1=(65536-50000)%256;/*延時(shí)50ms*/
P1=0xDF;/*南北方向黃燈熄滅,東西方向亮紅燈*/ } else if(P1==deng[3]&&count==0)/*當(dāng)東西方向亮黃燈且count=0時(shí),執(zhí)行程序*/ { TH1=(65536-300000)/256;
TL1=(65536-300000)%256;/*延時(shí)50ms*/ P1=0xFB;/*南北方向亮紅燈,東西方向黃燈熄滅*/ 22 宿州學(xué)院本科生畢業(yè)設(shè)計(jì)
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計(jì)
} } /*數(shù)碼管函數(shù)*/ void led(){
} /*主函數(shù)*/
void main(void){
init();/*調(diào)用程序初始化函數(shù)*/ { key();/*調(diào)用鍵盤程序*/ light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } while(1)/*無(wú)條件循環(huán)*/ P2=weima[0],P0=duanma[SN%10];/*顯示南北方向個(gè)位*/ P2=weima[1],P0=duanma[SN/10];/*顯示南北方向十位*/ delayms(10);/*延時(shí)*/ P2=weima[2],P0=duanma[WE%10];/*顯示東西方向個(gè)位*/ delayms(10);/*延時(shí)*/ P2=weima[3],P0=duanma[WE/10];/*顯示東西方向十位*/ delayms(10);/*延時(shí)*/ delayms(10);/*延時(shí)*/ } 23
第二篇:交通燈控制器設(shè)計(jì)實(shí)驗(yàn)報(bào)告
設(shè)計(jì)性實(shí)驗(yàn)項(xiàng)目名稱
交通燈控制器設(shè)計(jì)
實(shí)驗(yàn)項(xiàng)目學(xué)時(shí):3學(xué)時(shí)
實(shí)驗(yàn)要求:■ 必修
□ 選修
一、實(shí)驗(yàn)?zāi)康?/p>
1、學(xué)習(xí)與日常生活相關(guān)且較復(fù)雜數(shù)字系統(tǒng)設(shè)計(jì);
2、進(jìn)一步熟悉EDA實(shí)驗(yàn)裝置和QuartusⅡ軟件的使用方法;
3、學(xué)習(xí)二進(jìn)制碼到BCD碼的轉(zhuǎn)換;
4、學(xué)習(xí)有限狀態(tài)機(jī)的設(shè)計(jì)應(yīng)用。
二、實(shí)驗(yàn)原理
交通燈的顯示有很多方式,如十字路口、丁字路口等,而對(duì)于同一個(gè)路口又 有很多不同的顯示要求,比如十字路口,車輛如果只要東西和南北方向通行就很 簡(jiǎn)單,而如果車子可以左右轉(zhuǎn)彎的通行就比較復(fù)雜,本實(shí)驗(yàn)僅針對(duì)最簡(jiǎn)單的南北 和東西直行的情況。
要完成本實(shí)驗(yàn),首先必須了解交通路燈的燃滅規(guī)律。本實(shí)驗(yàn)需要用到實(shí)驗(yàn)箱上交通燈模塊中的發(fā)光二極管,即紅、黃、綠各三個(gè)。依人們的交通常規(guī),“紅燈停,綠燈行,黃燈提醒”。其交通燈的燃滅規(guī)律為:初始態(tài)是兩個(gè)路口的紅燈全亮之后,主干道的綠燈亮,鄉(xiāng)間道路的紅燈亮,主干道方向通車,延時(shí)一段時(shí)間后,鄉(xiāng)間公路來(lái)車,主干道綠燈滅,黃燈開始閃爍。閃爍若干次后,主干道紅燈亮,而同時(shí)鄉(xiāng)間公路的綠燈亮,延時(shí)一段時(shí)間后,鄉(xiāng)間公路的綠燈滅,黃燈開始閃爍。閃爍若干次后,再切換到主干道方向,重復(fù)上述過(guò)程。
三、設(shè)計(jì)要求
完成設(shè)計(jì)、仿真、調(diào)試、下載、硬件測(cè)試等環(huán)節(jié),在型EDA實(shí)驗(yàn)裝置上實(shí)現(xiàn)一個(gè)由一條主干道和一條鄉(xiāng)間公路的匯合點(diǎn)形成的十字交叉路口的交通燈控制器功能,具體要求如下:
1、有MR(主紅)、MY(主黃)、MG(主綠)、CR(鄉(xiāng)紅)、CY(鄉(xiāng)黃)、CG(鄉(xiāng)綠)六盞交通燈需要控制;
2、交通燈由綠轉(zhuǎn)紅前有4秒亮黃燈的間隔時(shí)間,由紅轉(zhuǎn)綠沒有間隔時(shí)間;
3、鄉(xiāng)間公路右側(cè)各埋有一個(gè)串連傳感器,當(dāng)有車輛準(zhǔn)備通過(guò)鄉(xiāng)間公路時(shí),發(fā)出請(qǐng)求信號(hào)S=1,其余時(shí)間S=0;
4、平時(shí)系統(tǒng)停留在主干道通行(MGCR)狀態(tài),一旦S信號(hào)有效,經(jīng)主道黃燈4秒(MYCR)狀態(tài)后轉(zhuǎn)入鄉(xiāng)間公路通行(MRCG)狀態(tài),但要保證主干道通行大于一分鐘后才能轉(zhuǎn)換;
5、一旦S信號(hào)消失,系統(tǒng)脫離MRCG狀態(tài),即經(jīng)鄉(xiāng)道黃燈4秒(MRCY)狀態(tài)進(jìn)入MGCR狀態(tài),即使S信號(hào)一直有效,MRCG狀態(tài)也不得長(zhǎng)于20秒鐘;
6、控制對(duì)象除紅綠燈之外,還包括分別在主干道和鄉(xiāng)間公路各有一個(gè)兩位十進(jìn)制倒計(jì)時(shí)數(shù)碼管顯示。
四、主要儀器設(shè)備
1、微機(jī)
1臺(tái)
1套 1套
2、QuartusII集成開發(fā)軟件
3、EDA實(shí)驗(yàn)裝置
五、實(shí)驗(yàn)步驟
源程序:
0module traffic1(clk,s,rst,light,sel,SG);input clk,s,rst;output[5:0] light;
output [2:0]sel;output [7:0]SG;reg [5:0] light;reg clk1;reg [3:0] sc;
reg [7:0] count;reg [7:0] cnt,SG;reg [2:0] sel;reg [3:0]a;parameter s0=0,s1=1,s2=2,s3=3,s4=4;initial
begin
count<=8'b01100000;
light<=6'b001100;
sc=s0;
end
always @(posedge clk)begin
begin cnt=cnt+1;
if(cnt==100)begin clk1=1'b1;cnt=0;end
else clk1=1'b0;//100分頻,CLK為數(shù)碼管掃描頻率,CLK1為計(jì)數(shù)頻率
if(sel<7)sel=sel+1;else sel=6;
end //sel為數(shù)碼管選擇
begin
case(sel)
7: a=count[3:0];//0數(shù)碼管為個(gè)位
6: a=count[7:4];//1數(shù)碼管為十位
default: a=0;
endcase
case(a)
0:SG<=8'b00111111;1:SG<=8'b00000110;
2:SG<=8'b01011011;3:SG<=8'b01001111;
4:SG<=8'b01100110;5:SG<=8'b01101101;
6:SG<=8'b01111101;7:SG<=8'b00000111;
8:SG<=8'b01111111;9:SG<=8'b01101111;//8段譯碼值
default: SG=8'b11111111;
endcase
end end
always @(posedge clk1 or negedge rst)
begin
if(!rst)begin count = 0;sc=s3;end // count set nothing but else 0
else if(count == 0)
begin
case(sc)
s0: begin if(s)begin sc=s1;count = 8'b00000100;light=6'b010100;end else begin sc=s4;count = 8'b01100000;end end
s1: begin count = 8'b00100000;sc=s2;light=6'b100001;end
s2: begin count = 8'b00000100;sc=s3;light=6'b100010;end
s3: begin count = 8'b01100000;sc=s0;light=6'b001100;end
s4: begin if(s)begin sc=s1;count = 8'b00000100;light=6'b010100;end else begin sc = s4;count = 8'b01100000;light<=6'b001100;end end
default begin sc=s0;count =8'h60;end
endcase
end
else
if((sc==s2)&(s==0))begin sc=s3;count = 8'b00000100;light=6'b100010;end
else
if((sc==s4)&(s==1))begin sc=s1;count = 8'b00000100;light=6'b010100;end
else if(count[3:0] == 4'b0000)
begin count = count-7;end
else
begin count = count-1;end
end endmodule
管腳鎖定
六、波形仿真
主干道60s倒計(jì)時(shí)
s信號(hào)為1時(shí)
七、實(shí)驗(yàn)心得
通過(guò)本次實(shí)驗(yàn),讓我進(jìn)一步掌握了軟件quartus的使用流程,一開始實(shí)驗(yàn)時(shí)波形仿真是正確的,但在電路上實(shí)現(xiàn)時(shí)主干道亮黃燈時(shí),鄉(xiāng)間道路亮的是綠燈,這顯然是不對(duì)的,后面發(fā)現(xiàn)是管腳鎖定時(shí)出現(xiàn)了問(wèn)題,改回來(lái)之后就沒問(wèn)題了。管腳鎖定時(shí)不能粗心,不然很容易出現(xiàn)問(wèn)題。
曹軍
生醫(yī)121班
第三篇:?jiǎn)纹瑱C(jī):交通燈控制系統(tǒng)設(shè)計(jì)
交通燈控制系統(tǒng)設(shè)計(jì)
摘要:本系統(tǒng)由單片機(jī)系統(tǒng)、鍵盤、LED 顯示、交通燈演示系統(tǒng)組成。系統(tǒng)包括人行道、左轉(zhuǎn)、右轉(zhuǎn)、以及基本的交通燈的功能。系統(tǒng)除基本交通燈功能外,還具有倒計(jì)時(shí)、時(shí)間設(shè)置、緊急情況處理、分時(shí)段調(diào)整信號(hào)燈的點(diǎn)亮?xí)r間以及根據(jù)具體情況手動(dòng)控制等功能。關(guān)鍵詞:AT89S51,交通規(guī)則
一、方案比較、設(shè)計(jì)與論證 1 電源提供方案
為使模塊穩(wěn)定工作,須有可靠電源。我們考慮了兩種電源方案
方案一:采用獨(dú)立的穩(wěn)壓電源。此方案的優(yōu)點(diǎn)是穩(wěn)定可靠,且有各種成熟電路可供選用;缺點(diǎn)是各模塊都采用獨(dú)立電源,會(huì)使系統(tǒng)復(fù)雜,且可能影響電路電平。方案二:采用單片機(jī)控制模塊提供電源。改方案的優(yōu)點(diǎn)是系統(tǒng)簡(jiǎn)明扼要,節(jié)約成本;缺點(diǎn)是輸出功率不高。綜上所述,我們選擇第二種方案。2 顯示界面方案
該系統(tǒng)要求完成倒計(jì)時(shí)、狀態(tài)燈等功能?;谏鲜鲈颍覀兛紤]了三種方案: 方案一:完全采用數(shù)碼管顯示。這種方案只顯示有限的符號(hào)和數(shù)碼字苻,無(wú)法勝任題目要求。
方案二:完全采用點(diǎn)陣式LED 顯示。這種方案實(shí)現(xiàn)復(fù)雜,且須完成大量的軟件工作;但功能強(qiáng)大,可方便的顯示各種英文字符,漢字,圖形等。
方案三:采用數(shù)碼管與點(diǎn)陣LED 相結(jié)合的方法因?yàn)樵O(shè)計(jì)既要求倒計(jì)時(shí)數(shù)字輸出,又要求有狀態(tài)燈輸出等,為方便觀看并考慮到現(xiàn)實(shí)情況,用數(shù)碼管與LED燈分別顯示時(shí)間與提示信息。這種方案既滿足系統(tǒng)功能要求,又減少了系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。權(quán)衡利弊,第三種方案可互補(bǔ)一二方案的優(yōu)缺,我們決定采用方案三以實(shí)現(xiàn)系統(tǒng)的顯示功能。3 輸入方案:
題目要求系統(tǒng)能手動(dòng)設(shè)燈亮?xí)r間、緊急情況處理,我們討論了兩種方案: 方案一:采用8155擴(kuò)展I/O 口及鍵盤,顯示等。該方案的優(yōu)點(diǎn)是:
使用靈活可編程,并且有RAM,及計(jì)數(shù)器。若用該方案,可提供較多I/O 口,但操作起來(lái)稍顯復(fù)雜。
方案二: 直接在IO口線上接上按鍵開關(guān)。因?yàn)樵O(shè)計(jì)時(shí)精簡(jiǎn)和優(yōu)化了電路,所以剩余的口資源還比較多,我們使用四個(gè)按鍵,分別是K1、K2、K3、K4。由于該系統(tǒng)對(duì)于交通燈及數(shù)碼管的控制,只用單片機(jī)本身的I/O 口就可實(shí)現(xiàn),且本身的計(jì)數(shù)器及RAM已經(jīng)夠用,故選擇方案二。
二、理論分析與計(jì)算
1.交通燈顯示時(shí)序的理論分析與計(jì)算
對(duì)于一個(gè)交通路口來(lái)說(shuō),能在最短的時(shí)間內(nèi)達(dá)到最大的車流量,就算是達(dá)到了最佳的性能,我們稱在單位時(shí)間內(nèi)多能達(dá)到的最大車流為車流量,用公式:車流量= 車流 / 時(shí)間 來(lái)表示。
先設(shè)定一些標(biāo)號(hào)如圖2-1 所示。
說(shuō)明:此圖為直方圖,上邊為北路口燈,右邊為東路口燈,下邊為南路口燈,左邊為西 路口燈。
圖2-2 所示為一種紅綠燈規(guī)則的狀態(tài)圖,分別設(shè)定為S1、S2、S3、S4,交通燈以這四 的狀態(tài)為一個(gè)周期,循環(huán)執(zhí)行(見圖2-3)。
請(qǐng)注意圖2-1b和圖2-1d,它們?cè)谝粋€(gè)時(shí)間段中四個(gè)方向都可以通車,這種狀態(tài)能在
一定的時(shí)間內(nèi)達(dá)到較大的車流量,效率特別高。
依據(jù)上述的車輛行駛的狀態(tài)圖,可以列出各個(gè)路口燈的邏輯表,由于相向的燈的狀態(tài)圖
是一樣的,所以只需寫出相鄰路口的燈的邏輯表;根據(jù)圖2-3 可以看出,相鄰路口的燈它
們的狀態(tài)在相位上相差180°。因此最終只需寫出一組S1、S2、S3、S4的邏輯狀態(tài)表。
如表2-1 所示。
表中的“×”代表是紅燈亮(也代表邏輯上的0),“√”是代表綠燈亮(也代表邏輯上 的1),依上表,就可以向相應(yīng)的端口送邏輯值。2.交通燈顯示時(shí)間的理論分析與計(jì)算
東西和南北方向的放行時(shí)間的長(zhǎng)短是依據(jù)路口的各個(gè)方向平時(shí)的車流量來(lái)設(shè)定,并且
S1、S2、S3、S4各個(gè)狀態(tài)保持的時(shí)間之有嚴(yán)格的對(duì)應(yīng)關(guān)系,其公式如下所示。T-S1+T-S2=T-S3 T-S2=T-S4 T-S1=T-S3 我們可以依據(jù)上述的標(biāo)準(zhǔn)來(lái)改變車輛的放行時(shí)間。按照一般的規(guī)則,一個(gè)十字路口可分
為主干道和次干道,主干道的放行時(shí)間大于次干道的放行時(shí)間,我們?cè)O(shè)定值時(shí)也應(yīng)以此為參 考。
三、電路圖及設(shè)計(jì)文件 1.燈控制電路設(shè)計(jì)
由于32個(gè)LED 來(lái)實(shí)現(xiàn)紅綠燈狀態(tài),若直接接在單片機(jī)的口線,路口倒計(jì)時(shí)的顯示就不
能實(shí)現(xiàn),所以本次設(shè)計(jì)中采用一種新型的電路如圖3-1 所示。
圖中74LS04的作用是倒相和驅(qū)動(dòng),它輸出的電流大約48mA,實(shí)際測(cè)試發(fā)現(xiàn)足以滿足要
求,而且發(fā)光管也能達(dá)到足夠的亮度。
觀察圖可以看出:兩組發(fā)光管(一組紅、一組綠)由于反相器的作用,其邏輯狀態(tài)恰恰 相反。
圖中和電阻串聯(lián)的二極管的作用是為了分壓,防止因上下兩組發(fā)光管分壓不同導(dǎo)致邏輯 的錯(cuò)誤。
共四組和上述相同的電路分別代表東西南北四個(gè)方向的紅綠燈,使用兩片74LS04 作為 驅(qū)動(dòng)。
2.倒計(jì)時(shí)顯示電路設(shè)計(jì)
前面已經(jīng)分析過(guò)相向的燈的狀態(tài)和倒計(jì)時(shí)都是相同的,所以為了節(jié)省,采用兩組四個(gè)數(shù)碼管
作為倒計(jì)時(shí)的顯示;同時(shí)為了節(jié)省口資源,采用串口顯示的方式驅(qū)動(dòng)數(shù)碼管。見圖3-2 所 示。
四、程序設(shè)計(jì)思路與流程圖 1.主程序流程圖
主程序中主要是一個(gè)死循環(huán),不停的循環(huán)四個(gè)狀態(tài),如圖4-1 所示。
2.按鍵子程序流程圖
它包含倒計(jì)時(shí)調(diào)整和緊急狀態(tài)兩個(gè)狀態(tài)。
主程序中放了一個(gè)按鍵的判斷指令,當(dāng)有按鍵按下的時(shí)候,程序就自動(dòng)的跳轉(zhuǎn)到按鍵子
程序處理。當(dāng)檢測(cè)到K2鍵按下的時(shí)候就自動(dòng)返回到主程序。當(dāng)出現(xiàn)緊急的情況的時(shí)候,按下K3或者K4 就切換到緊急狀態(tài),當(dāng)緊急事件處理完畢 的時(shí)候,按下K2,就可以返回正常狀態(tài)。
五、測(cè)試、數(shù)據(jù)及結(jié)果分析 1.狀態(tài)燈顯示測(cè)試
當(dāng)電路連接完畢后,將寫好的測(cè)試程序刷寫到芯片內(nèi),K1 和K2分別給端口送高電平和
低電平,通電即可檢測(cè)。2.?dāng)?shù)碼管的測(cè)試
將串口的和電路板上的接口連接,將寫好的測(cè)試程序刷寫到芯片內(nèi),開電源即可測(cè)試。
3.整體電路測(cè)試
系統(tǒng)上電,刷寫好程序即可開始測(cè)試,觀測(cè)一個(gè)周期(共計(jì)S1~S4四個(gè)狀態(tài),默認(rèn)140 秒)燈的顯示狀態(tài)是否正常,同時(shí)觀察倒計(jì)的計(jì)數(shù)是否正常。
六、總結(jié)
由于使用的是單片機(jī)作為核心的控制元件,使得電路的可靠性比較高,功能也比較強(qiáng)大,而且可以隨時(shí)的更新系統(tǒng),進(jìn)行不同狀態(tài)的組合。
但是在我們?cè)O(shè)計(jì)和調(diào)試的過(guò)程中,也發(fā)現(xiàn)了一些問(wèn)題,譬如紅燈和綠燈的切換還不夠迅
速,紅綠燈規(guī)則不效率還不是很高等等,這需要在實(shí)踐中進(jìn)一步完善。附錄 系統(tǒng)總體電路圖
1.滿足南北向紅綠燈亮,東西向紅燈亮,占25秒——南北向黃燈亮,東西向紅燈亮,占5秒——南北向紅燈亮,東西向綠燈亮,占25秒——南北向紅燈亮,東西向黃燈亮,占5秒。如此循環(huán),周而復(fù)始。2.十字路口要有數(shù)字顯示,提示行人把握時(shí)間:當(dāng)某方向綠燈亮?xí)r,置顯示器為24,然后以每秒減1計(jì)數(shù)方式工作,直到減為0,綠燈滅,黃燈亮。黃燈滅,紅燈亮?xí)r,再次置顯示器為29,并開始減計(jì)數(shù),直到為0,十字路口紅綠燈交換,完成一次工作循環(huán)。
3.可手動(dòng)調(diào)整和自動(dòng)調(diào)整,夜間為黃燈閃耀。下面是一個(gè)單片機(jī)交通燈程序 /*
****************************************************************************************** * *
* Keil C 89S51 交通信號(hào)控制程序 * *(C)版權(quán)所有 Dai_Weis@hotmail.com * * *
****************************************************************************************** */
#include “reg51.h” #define UINT unsigned int #define ULONG unsigned long #define UCHAR unsigned char /*
信號(hào)燈變量
南北方向綠燈
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;//直行
*/ //延時(shí)
void delay(UINT t, UINT s){ while(t){ UINT i;
for(i = 0;i < s;i++){ } t--;} }
//信號(hào)燈狀態(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);} }
給你一個(gè)定時(shí)控制的信號(hào)系統(tǒng),我只做的簡(jiǎn)單的測(cè)試,至于延時(shí)我用的軟件,你自己想辦法。^_^
Dai_Weis 于 2005-5-4 13:43:23 重新給你說(shuō)明
/*
*********************************************************************************** * *
* Keil C AT89S51 交通信號(hào)控制程序 * *(C)版權(quán)所有 Dai_Weis@hotmail.com * * *
*********************************************************************************** 開發(fā)說(shuō)明:
固定時(shí)間信號(hào)變換,南北設(shè)置調(diào)頭、左傳、直行、右轉(zhuǎn)、自行車。
東西設(shè)置左傳、直行、右轉(zhuǎn)、自行車。
時(shí)序狀態(tài):
紅 綠 紅 綠
序號(hào) 左 前 右 自 左 前 右 自 前 右 自 前 右 自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 */
另外修正個(gè)錯(cuò)誤
while(1){
time_x(0xA5, 0x70, 0x0);time_s(0xA4, 0x70, 0x1, 0xA5, 0x70);
材料: 1、89S51 11.0592M 晶振
1K電阻、10UF電容
12個(gè)燈,紅、黃、綠各四個(gè),12個(gè)1K電阻
,十字路口嘛。蜂鳴器一個(gè)。
按鍵一個(gè),按鍵復(fù)位
采用AT89s51型號(hào)的單片機(jī),由于交通十字路口的對(duì)稱性,所以一個(gè)引腳可以同時(shí)控制兩個(gè)燈,將發(fā)光二極管分別接到P1各個(gè)引腳,在其中加入一個(gè)時(shí)振蕩當(dāng)電路,來(lái)控制時(shí)間,在P3.0引腳接入蜂鳴器只黃燈亮的時(shí)候發(fā)出聲響,這里我們讓每次黃燈亮的時(shí)候發(fā)出六聲響,通過(guò)C程序的控制就可以實(shí)現(xiàn),每次循環(huán)是10秒。2、9cm*15cm萬(wàn)用板 1片 單片機(jī)及IC座 1套 12M晶振 1只 22P電容 2只 10uF電容 1只 10K電阻 1只 1K排阻 1只 兩位一體數(shù)碼管 2只 DC座 1只 自鎖開關(guān) 1只
發(fā)光二極管紅綠黃
各4只 按鍵 7只 USB電源線 1條 導(dǎo)線
若干
1、基于51系列單片機(jī)(型號(hào):STC89C52、AT89C51/C52、AT89S51/S52,隨機(jī)選擇,如有特
殊要求請(qǐng)與店主討論)設(shè)計(jì)實(shí)現(xiàn)。(以上幾種單片機(jī)全部為51系列單片機(jī),除了名字不一樣外,功能及應(yīng)用完全一樣,互相
兼容)
2、兩個(gè)兩位一體數(shù)碼管顯示東西、南北方向時(shí)間。
3、四方向各有紅綠黃三顆燈。
4、七個(gè)按鍵操作,分別是:禁止通行、東西通行、南北通行、時(shí)間加、時(shí)間減、切換方向、確認(rèn)。
第四篇:基于單片機(jī)的交通燈設(shè)計(jì)
基于單片機(jī)的交通燈設(shè)計(jì)
設(shè)計(jì)程序:
#include
//共陽(yáng)極
uchar
code table1[5]={0xf3,0xf5,0xde,0xee,0xf6};/*各種狀態(tài)下紅綠燈段選碼, 狀態(tài)1:A綠燈,B紅燈;狀態(tài)2:A黃燈亮,B紅燈;狀態(tài)3:A紅燈,B綠燈;狀態(tài)4:A紅燈,B黃燈亮;狀態(tài)5:A紅燈,B紅燈;*/ uchar
code tab[4]={0x1E,0x2D,0x4E,0x8D};//數(shù)碼管顯示位選碼 sbit key1=P1^0;//放行A sbit key2=P1^1;//放行B sbit key3=P1^2;//禁止通行
uchar EW=40,SN=30,K1_T=15,K2_T=15,K3_T=20;//初始化交通燈時(shí)間 uchar count;//計(jì)時(shí)中斷次數(shù) uchar i,j;//循環(huán)控制變量 char Timer;//子程序說(shuō)明語(yǔ)句 void Process();void Display(uchar j);void Delay(uchar a);/**************************主程序**************************/ main(){ IP=0X02;//設(shè)置定時(shí)器中斷為高優(yōu)先級(jí)//成為中斷嵌套
TMOD=0x01;//定時(shí)器工作方式
TH0=0x3C;//定時(shí)器初始化
TL0=0xB0;IT0=1;//中斷觸發(fā)方式為下降沿觸發(fā)
EA=1;//CPU開中斷
ET0=1;//開定時(shí)中斷
TR0=1;//啟動(dòng)定時(shí)
EX0=1;//啟動(dòng)外部中斷0 while(1)
{
Process();
} } /*************************交通燈顯示子程序*************************/ void Display(uchar j)//j控制顯示table中連續(xù)位的起始點(diǎn) {
char h,l;
h=Timer/10;//EW通行時(shí)間十位
l=Timer%10;//EW通行時(shí)間個(gè)位
for(i=0;i<4;)//按位顯示通行狀況及時(shí)間 {
P0=table1[j];//通行狀況顯示
P3=tab[i];//位選顯示
i++;
//j++;
if(i%2)//兩位計(jì)時(shí)顯示
{
P2=table[l];
Delay(400);
}
else
{
P2=table[h];
Delay(400);
} } Delay(5);
//設(shè)置掃描時(shí)間
} /*********鍵控*******/ void Keyboard()interrupt 0 using 0 {
if(key1==0)
{ Timer=K1_T;
while(Timer>0)
{
j=0;
Display(0);
//顯示一次
}
if(key2==0)
{
Timer=K2_T;
while(Timer>0)
{
j=2;
Display(j);
}
if(key3==0)
{
Timer=K3_T;
while(Timer>0)
{
j=4;
Display(j);
}
} } /**************************延時(shí)子程序**************************/ void Delay(uchar a)//循環(huán)a次 { uchar x;x=a;while(x--){;} }
/************************TO計(jì)時(shí)中斷服務(wù)程序************************/ void timer0(void)interrupt 1 using 1//T0中斷 { TH0=0x3C;TL0=0xB0;//定時(shí)計(jì)數(shù)初值
count++;//中斷溢出一次count+1 if(count==20){
Timer--;
count=0;//中斷次計(jì)數(shù),count回,倒計(jì)時(shí)時(shí)間
} } /**************************亮燈控制**************************/ void Process(){ Timer=EW;//初始化方向通行時(shí)間
while(Timer>3)//狀態(tài):A綠燈,B紅燈;{
j=0;
Display(j);//調(diào)用顯示函數(shù)
} while(Timer>0)//狀態(tài):A黃燈亮,B紅燈;{
j=1;
Display(j);
} Timer=SN;while(Timer>3)//狀態(tài):A紅燈,B綠燈;{
j=2;
Display(j);} while(Timer>0)//狀態(tài):A紅燈,B黃燈亮;{
j=3;
Display(j);
}
}
電路圖如下:
第五篇:基于Verilog_HDL的交通燈控制器設(shè)計(jì)
目
錄
第一章
設(shè)計(jì)原理.......................................................................................................................................1
1.1設(shè)計(jì)要求..........................................................................................................................1
1.2設(shè)計(jì)思路和原理............................................................................................................................1 1.3實(shí)現(xiàn)方法..........................................................................................................................................1 第二章
Verilog 程序設(shè)計(jì).........................................................................................................2
2.1整體設(shè)計(jì)...........................................................................................................................22.2 具體設(shè)計(jì)..........................................................................................................................3
第三章
仿真................................................................................................................................................7
3.1 波形仿真..........................................................................................................................7
第四章
設(shè)計(jì)總結(jié).......................................................................................................................9
4.1 總結(jié)...................................................................................................................................9
4.2參考資料............................................................................................................................9
程序清單.....................................................................................................................................10
0
交通燈控制器設(shè)計(jì)
第一章
設(shè)計(jì)原理
1.1設(shè)計(jì)要求
設(shè)計(jì)一個(gè)交通控制器,用LED顯示燈表示交通狀態(tài),并以7段數(shù)碼顯示器顯示當(dāng)前狀態(tài)剩余秒數(shù) 主干道綠燈亮?xí)r,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變?yōu)榧t燈的過(guò)程中,亮光的黃燈作為過(guò)渡,黃燈的時(shí)間為5s。能進(jìn)行特殊狀態(tài)顯示,特殊狀態(tài)時(shí)東西、南北路口均顯示紅燈狀態(tài)。用LED燈顯示倒計(jì)時(shí),并且能實(shí)現(xiàn)總體清零功能,計(jì)數(shù)器由初始狀態(tài)開始計(jì)數(shù),對(duì)應(yīng)狀態(tài)的顯示燈亮。1.2設(shè)計(jì)思路和原理
本次設(shè)計(jì)是針對(duì)十字路口,進(jìn)行南北和東西直行情況下交通燈控制。設(shè)定東西方向?yàn)橹鞲傻婪较颍鶕?jù)交通燈的亮的規(guī)則,在初始狀態(tài)下四個(gè)方向的都為紅燈亮啟,進(jìn)入正常工作狀態(tài)后,當(dāng)主干道上綠燈亮?xí)r,支干道上紅燈亮,持續(xù)35S后,主干道和支干道上的黃燈都亮啟,持續(xù)5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續(xù)25S,之后主干道和支干道上的黃燈都亮啟5s,一個(gè)循環(huán)完成。循環(huán)往復(fù)的直行這個(gè)過(guò)程。其過(guò)程如下圖所示:
0s主干道方向25s綠燈亮30s紅燈亮黃燈亮65s支干道方向0s紅燈亮35s綠燈亮黃燈亮60s65s
圖1.交通燈點(diǎn)亮?xí)r間控制說(shuō)明
1.3實(shí)現(xiàn)方法
本次采用文本編輯法,即利用Verilog 語(yǔ)言描述交通控制器,通過(guò)狀態(tài)機(jī)計(jì)數(shù)法,實(shí)現(xiàn)設(shè)計(jì)所要求的交通燈控制及時(shí)間顯示。設(shè)計(jì)中用兩組紅黃綠LED模擬兩個(gè)方向上的交通燈,用4個(gè)7段數(shù)碼管分別顯示兩個(gè)方向上的交通燈剩余時(shí)間,控制時(shí)鐘由試驗(yàn)箱上頻率信號(hào)提供。
第二章
Verilog 程序設(shè)計(jì)
2.1整體設(shè)計(jì)
根據(jù)上章設(shè)計(jì)原理,交通燈控制的關(guān)鍵是各個(gè)狀態(tài)之間的轉(zhuǎn)換和進(jìn)行適當(dāng)?shù)臅r(shí)間延時(shí),根據(jù)狀態(tài)機(jī)的設(shè)計(jì)規(guī)范,本次設(shè)計(jì)了三個(gè)狀態(tài)之間的循環(huán)轉(zhuǎn)化,其真值表及狀態(tài)轉(zhuǎn)化圖如下所示:
狀狀00狀狀00狀狀10狀狀11狀狀01狀狀01狀狀11狀狀10狀狀狀狀狀狀狀狀狀狀001狀狀狀狀狀010狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀001狀狀狀狀狀010
圖2.交通燈控制狀態(tài)轉(zhuǎn)化
說(shuō)明:該狀態(tài)圖為交通燈在正常情況下的狀態(tài)轉(zhuǎn)化圖,進(jìn)入控制后,狀態(tài)00時(shí)主干道綠燈及支干道紅燈亮起,進(jìn)入狀態(tài)01后兩路黃燈亮起,狀態(tài)11時(shí)主干道紅燈及支干道綠燈亮起。進(jìn)入10狀態(tài)兩路黃燈亮起。結(jié)束一個(gè)循環(huán),從00狀態(tài)重新開始循環(huán)。
為實(shí)現(xiàn)控制與顯示的功能,需要設(shè)計(jì)交通燈點(diǎn)亮順序控制程序,倒數(shù)計(jì)時(shí)程序,七段數(shù)碼管顯示程序,數(shù)碼管顯示掃描程序,其系統(tǒng)結(jié)構(gòu)圖如下所示:
holdrst狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀clk1KHz狀狀狀狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀 圖3.交通燈控制系統(tǒng)結(jié)構(gòu)圖
其中rst為復(fù)位信號(hào),clk為時(shí)鐘信號(hào),hold為特殊情況控制信號(hào),輸入hold時(shí)兩個(gè)方向紅燈無(wú)條件亮起。
2.2 具體設(shè)計(jì)
根據(jù)整體設(shè)計(jì)要求,編寫各個(gè)功能部分Verilog 程序,設(shè)置各輸入輸出變量說(shuō)明如下
clk: 為計(jì)數(shù)時(shí)鐘; qclk:為掃描顯示時(shí)鐘;
en: 使能信號(hào),為1 的話,則控制器開始工作; rst: 復(fù)位信號(hào),為1的話,控制及技術(shù)回到初始狀態(tài);
hoid:特殊情況控制信號(hào),為1的話,則兩個(gè)方向無(wú)條件顯示為紅燈;
light1: 控制主干道方向四盞燈的亮滅;其中,light1[0]~light[2],分別控制主干道方向的 綠燈、黃燈和紅燈;
light2: 控制支干道方向四盞燈的亮滅;其中,light2[0] ~ light2[2],分別控制支干道方向的 綠燈、黃燈和紅燈;
num1: 用于主干道方向燈的時(shí)間顯示,8 位,可驅(qū)動(dòng)兩個(gè)數(shù)碼管; num2: 用于支干道方向燈的時(shí)間顯示,8 位,可驅(qū)動(dòng)兩個(gè)數(shù)碼管; counter:用于數(shù)碼管的譯碼輸出; st1,st2:數(shù)碼管掃描信號(hào)。輸入輸出及中間變量設(shè)置如下:
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;
1.二極管點(diǎn)亮控制
該部分程序的作用是根據(jù)計(jì)數(shù)器的計(jì)數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計(jì)時(shí)數(shù)值給七段數(shù)碼管的譯碼電路。此外,當(dāng)檢測(cè)到特殊情況(hold=‘1’)發(fā)生時(shí),無(wú)條件點(diǎn)亮紅燈的二極管,當(dāng)檢測(cè)到復(fù)位信號(hào),兩個(gè)方向計(jì)數(shù)與控制回復(fù)到00狀態(tài)。因?yàn)橹?、支干道兩個(gè)方向二極管點(diǎn)亮的順序與延遲時(shí)間不同,顧編寫兩個(gè)獨(dú)立的部分來(lái)控制,具體程序如下:
1)主干道方向 always @(posedge clk)begin if(rst)//復(fù)位與特殊情況控制
begin light1<=3'b001;num1<=green1;end else if(hold)begin light1<=3'b100;num1<=green1;end else if(en)
begin //使能有效開始控制計(jì)數(shù)
if(!tim1)//
begin //主干道交通燈點(diǎn)亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
End
2)支干道方向
always @(posedge clk)begin
if(rst)//復(fù)位與特殊情況控制
begin
light2<=3'b100;
num2<=red2;
end
else if(hold)
begin
light2<=3'b100;
num2<=red2;
end
else if(en)
begin
if(!tim2)
begin
tim2<=1;
case(state1)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
End
2.倒數(shù)計(jì)時(shí)
該部分程序完成二極管發(fā)光時(shí)延的計(jì)數(shù),并將計(jì)數(shù)結(jié)果送到數(shù)碼管顯示電路,每切換到一個(gè)狀態(tài),計(jì)數(shù)器的初值都被重置,以實(shí)現(xiàn)不同顏色二極管不同的時(shí)延要求。本次設(shè)計(jì)直接用邏輯運(yùn)算完成2位十進(jìn)制數(shù)的計(jì)數(shù),未采用分位器的設(shè)計(jì)。因?yàn)橹?、支干道上?jì)數(shù)器的結(jié)構(gòu)完全相同,顧只列出一路的程序,其具體程序如下所示:
always @(posedge clk)begin else begin //倒數(shù)計(jì)時(shí)
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1)tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end
end
3.數(shù)碼管的譯碼及掃描顯示
該段程序主要完成4個(gè)7段數(shù)碼管的譯碼顯示及掃描,使系統(tǒng)能正常顯示主、支干道兩個(gè)方向上的剩余時(shí)間。譯碼的時(shí)鐘頻率要低,為Hz級(jí)。掃描的時(shí)鐘頻率要高,最低不得小于人眼分辨頻率50Hz,具體程序如下所示:
always @(posedge qclk)begin //數(shù)碼管掃描
if(rst1)
begin
st1=0;
st2=0;
end else
begin
case({st2,st1})
2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end
2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end
2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end
2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end
endcase
end end always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule 總體程序見程序清單所示 6
第三章
仿真 3.1 波形仿真
在QuartursⅡ軟件下創(chuàng)建工程,新建編輯設(shè)計(jì)文件,將程序輸入,整體編譯后,新建波形仿真文件。設(shè)置仿真時(shí)間,時(shí)鐘周期,輸入輸出端口,進(jìn)行波形仿真。具體仿真波形圖及說(shuō)明如下所示: 仿真截止時(shí)間:100us; 時(shí)鐘:clk 1us,qclk 0.1us 1.正常工作時(shí)波形仿真圖
圖4.正常工作時(shí)波形仿真圖
圖形說(shuō)明
波形仿真主要完成了控制與計(jì)數(shù)以及數(shù)碼管顯示的波形圖。en為低電品時(shí),計(jì)數(shù)器置初值,高電平時(shí)開始正??刂婆c計(jì)數(shù)??刂瓢l(fā)光二極管首次輸出為“l(fā)ight1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計(jì)數(shù)器num1和num2從“00110101”開始遞減計(jì)數(shù),計(jì)數(shù)至“00000000”時(shí),進(jìn)入下一個(gè)狀態(tài),控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計(jì)數(shù)器num1和num2從“00000101”開始計(jì)數(shù)遞減,計(jì)數(shù)至”00000000”時(shí)進(jìn)入下一個(gè)狀態(tài),light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮。Counter根據(jù)num1,num2變化隨時(shí)鐘上升沿輸出譯碼后的數(shù)據(jù)。由于屏幕顯示大小有限,未仿真出一個(gè)完整周期。
2.特殊情況仿真波形
圖5.特殊情況仿真波形
圖形說(shuō)明
當(dāng)hold輸入高電平時(shí),在時(shí)鐘上升沿的控制下,light 1與light2被強(qiáng)制置位為”100”,表示兩路紅燈均亮起
3.復(fù)位情況仿真波形
圖6.復(fù)位情況仿真波形
圖形說(shuō)明
當(dāng)rst輸入高電平時(shí),在時(shí)鐘上升沿控制下,計(jì)數(shù)與控制都回到00狀態(tài),即light1=001,light2=100,計(jì)數(shù)器num1和num2從“00110101”開始遞減計(jì)數(shù)。
第四章 設(shè)計(jì)總結(jié)
4.1 總結(jié)
在設(shè)計(jì)中采用V erilog HDL語(yǔ)言設(shè)計(jì)交通燈控制系統(tǒng), 借助其功能強(qiáng)大的語(yǔ)言結(jié)構(gòu), 簡(jiǎn)明的代碼描述復(fù)雜控制邏輯設(shè)計(jì), 與工藝無(wú)關(guān)特性, 在提高工作效率的同時(shí)達(dá)到求解目的, 并可以通過(guò)V erilog HDL 語(yǔ)言的綜合工具進(jìn)行相應(yīng)硬件電路生成, 具有傳統(tǒng)邏輯設(shè)計(jì)方法所無(wú)法比擬的優(yōu)越性。
在設(shè)計(jì)過(guò)程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過(guò)但仿真出不了正確的波形,不是計(jì)數(shù)器無(wú)法正常計(jì)數(shù),就是控制輸出無(wú)法進(jìn)入到下一個(gè)狀態(tài),每次出現(xiàn)問(wèn)題就必須返回重新修改程序。實(shí)踐證明,在編寫一個(gè)較復(fù)雜的程序時(shí),一開始一定要畫流程圖,弄清楚各個(gè)功能及實(shí)現(xiàn)它們的邏輯算法,做到心中有數(shù)后在開始下筆寫編寫程序。在編寫的時(shí)候要尤其要注意語(yǔ)言的規(guī)范,如本次設(shè)計(jì)中編寫的V erilog在Quartus7.0中可以正常生成時(shí)序圖,而在低版本的軟件中卻無(wú)法生成,原因就是語(yǔ)言使用不規(guī)范,在解決這個(gè)問(wèn)題時(shí)我總結(jié)了一些經(jīng)驗(yàn),首先程序要邏輯清晰,簡(jiǎn)潔明了,避免不必要的嵌套與條用,其次要適當(dāng)?shù)亟o程序加上注解文字,提高可讀性,以方便之后的程序出錯(cuò)時(shí)進(jìn)行查找,最后充分利用仿真軟件提供的各項(xiàng)編譯工具與報(bào)錯(cuò)消息,按圖索驥,有方向的完成程序調(diào)試。
完成仿真后進(jìn)行,進(jìn)行試驗(yàn)箱上的硬件調(diào)試,該步驟主要是要求細(xì)心,按照引腳清單,逐一完成連線,本次設(shè)計(jì)用到兩個(gè)時(shí)鐘輸入,注意一定要選擇合適頻率的時(shí)鐘,以便達(dá)到期望的效果。注意觀察實(shí)物的現(xiàn)象,看是否滿足設(shè)計(jì)要求,不滿足時(shí)檢查是硬件問(wèn)題還是程序問(wèn)題,如果是程序問(wèn)題,在修改完之后必須要重新編譯,重新燒入。不斷排查錯(cuò)誤,直至達(dá)到滿意的效果。
通過(guò)這次課程設(shè)計(jì),熟悉了簡(jiǎn)單EDA設(shè)計(jì)的整個(gè)流程,加深了對(duì)Verilog HDL硬件描述語(yǔ)言的理解,提高了動(dòng)手能力,并且鍛煉了自己的耐心,收獲頗豐,我會(huì)把在本次課程設(shè)計(jì)中學(xué)到的東西應(yīng)用到今后的工作學(xué)習(xí)中。最后感謝同學(xué)及老師提供的幫助與指導(dǎo)。4.2參考資料
[1] 夏宇聞.復(fù)雜數(shù)字電路與系統(tǒng)的V erilog HDL設(shè)計(jì)技術(shù) [M ].北京: 北京航空航天大學(xué)出版社, 1998 [2] 郭梯云.移動(dòng)通信[M ].西安: 西安電子科技大學(xué)出版社, 1995 [3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 數(shù)字移動(dòng)通信系統(tǒng)[M ].駱健霞, 顧龍信, 徐云霄譯.北京: 電子工業(yè)出版社, 1996 [4] 張毅剛, 喬立巖.虛擬儀器軟件開發(fā)環(huán)境L abW indow s?CV I 610 編程指南[M ].北京: 機(jī)械工業(yè)出版社, 2002 [5] 劉國(guó)權(quán).GSM 手機(jī)的測(cè)試[J ].中國(guó)無(wú)線電管理, 2003 [6] 俞定玖, 劉湘慧.GSM 數(shù)字蜂窩移動(dòng)交換系統(tǒng)測(cè)試[J ].電信科學(xué), 2000 [7] 張明.V erilog HDL 實(shí)用教程[M ].成都: 電子科技大學(xué)出版社, 1999 [8] Hyde D C.Bucknell Handbook on V erilog HDL 1Computer Science Department, Bucknell U niversity L ew is burg, 1995 [9] 康華光.電子技術(shù)基礎(chǔ)(數(shù)字部分)[M ].北京: 高等教育出版社, 1988
程序清單
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;
always @(en)if(!en)begin //設(shè)置計(jì)數(shù)初值 green1<=8'b00110101;red1<=8'b00100101;yellow1<=8'b00000101;green2<=8'b00100101;red2<=8'b00110101;yellow2<=8'b00000101;end
always @(posedge clk)begin if(rst)//復(fù)位與特殊情況控制
begin
light1<=3'b001;num1<=green1;
end else if(hold)
begin
light1<=3'b100;
num1<=green1;
end else if(en)
begin //使能有效開始控制計(jì)數(shù)
if(!tim1)//開始控制
begin //主干道交通燈點(diǎn)亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
end
else
begin //倒數(shù)計(jì)時(shí)
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1)tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end
end
always @(posedge clk)begin
if(rst)//復(fù)位與特殊情況控制
begin
light2<=3'b100;
num2<=red2;
end
else if(hold)
begin
light2<=3'b100;
num2<=red2;
end
else if(en)
begin
if(!tim2)
begin
tim2<=1;
case(state1)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
end
else
begin //倒數(shù)計(jì)時(shí)
if(num2>0)
if(num2[3:0]==0)
begin
num2[3:0]<=4'b1001;
num2[7:4]<=num2[7:4]-1;
end
else num2[3:0]<=num2[3:0]-1;
if(num2==1)tim2<=0;
end
end
else
begin
tim2<=0;
state2<=2'b00;
light2<=3'b010;
end
end
always @(posedge qclk)begin //數(shù)碼管掃描
if(rst1)
begin
st1=0;
st2=0;
end else
begin
case({st2,st1})
2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end
2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end
2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end
2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end
endcase
end end
always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule