第一篇:基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2014屆本科生畢業(yè)設(shè)計
分類號:TP368.1
題目:基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
姓 名: 張建猛 學(xué) 號 : 2010080870 學(xué) 院: 機(jī)械與電子工程學(xué)院 專 業(yè): 自動化 指導(dǎo)教師職稱: 胡波 劉明
指導(dǎo)教師職稱: 助教(碩士)工程師
2014-05-11
摘 要
本文采用AT89C51單片機(jī)芯片為核心控制器件設(shè)計的交通燈控制器,該系統(tǒng)主要包括單片機(jī)最小系統(tǒng),按鍵,數(shù)碼管顯示,交通燈演示系統(tǒng)。系統(tǒng)主要具有有人行道,交通燈的基本功能,倒計時,緊急情況處理,根據(jù)具體情況手動控制等功能。通過AT89C51并接數(shù)碼管和發(fā)光二極管來實(shí)現(xiàn)交通燈的變化規(guī)律,P1口設(shè)置紅,綠燈點(diǎn)亮?xí)r間功能的實(shí)現(xiàn);紅綠燈循環(huán)點(diǎn)亮,倒計時剩余10秒時黃燈閃爍警示。本系統(tǒng)的研發(fā)周期短,可靠性高,實(shí)用性,操作簡單,維護(hù)方便,擴(kuò)展功能強(qiáng)大。本系統(tǒng)軟硬件相結(jié)合,通過Proteus軟件仿真,基本實(shí)現(xiàn)了交通信號燈的模擬。
關(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è)計...........................................................................................................2 1.1 方案分析.........................................................................................................2 1.2 方案確立.........................................................................................................3 2.系統(tǒng)的硬件設(shè)計.......................................................................................................3
2.1設(shè)計原理及方法..............................................................................................3 2.2 AT89C51單片機(jī)最小系統(tǒng)..............................................................................4 2.2.1 復(fù)位電路..............................................................................................4 2.2.2 時鐘電路..............................................................................................5 2.2.2 EA腳的功能及接法.............................................................................6 2.3其它硬件模塊介紹及連接..............................................................................7
2.3.1 倒計時顯示模塊.................................................................................7
2.3.2 交通燈顯示模塊................................................................................8
2.3.3 按鍵控制模塊......................................................................................9 2.3.4 電源模塊............................................................................................10 3.系統(tǒng)的軟件設(shè)計.....................................................................................................10
3.1系統(tǒng)相關(guān)參數(shù)計算........................................................................................10 3.1.1 T0的計數(shù)初值...................................................................................10 3.1.2 倒計時顯示的理論分析....................................................................10 3.1.2 交通燈狀態(tài)顯示的理論分析............................................................11 3.2系統(tǒng)主程序設(shè)計............................................................................................11 4.系統(tǒng)的 Proteus軟件仿真....................................................................................12 4.1 Proteus仿真圖............................................................................................12 4.2 Proteus仿真的結(jié)果分析............................................................................12 結(jié)束語.........................................................................................................................14 參考文獻(xiàn).....................................................................................................................14 致 謝.........................................................................................................................15 附錄:程序源代碼.....................................................................................................16
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
緒 論
隨著人口的迅速增長,道路資源的有限性和交通工具爆炸性的發(fā)展,城市交通正面臨著嚴(yán)峻考驗,因此造成日益嚴(yán)重的交通問題,每天的交通擁堵成了家常便飯但又不得不忍受。在這種情況下,與我國城市道路交通的實(shí)際情況相結(jié)合,開發(fā)出適合我們自身特點(diǎn)的智能信號燈控制系統(tǒng)已成為一個主要的任務(wù)。一個好的交通燈控制系統(tǒng),將給道路擁堵,違章行駛等方面給予技術(shù)創(chuàng)新。隨著電子技術(shù)的發(fā)展,采用單片機(jī)技術(shù),能夠智能管理交通燈,已成為目前廣泛使用的方法。
在人類的生活,工作環(huán)境中,交通扮演著極其重要的角色,人們的出行與交通時時刻刻打著交道。城市交通控制系統(tǒng)是基于城市交通信號控制技術(shù)為主導(dǎo)的發(fā)展,與汽車行業(yè)的發(fā)展并行。在其發(fā)展的不同階段,由于交通出現(xiàn)的各種矛盾,人們總是試圖把各個歷史階段的最新科技成果應(yīng)用到交通自動控制中,從而促進(jìn)交通自動控制技術(shù)不斷發(fā)展。
早在1850年,城市交叉路口處安全和擁堵問題引起人們的關(guān)注,全球第一個自動交通燈誕生,打開城市交通控制的序幕。在1868年,英國工程師娜奕特在倫敦西部威斯敏斯特街口安裝一個紅色和綠色煤氣照明燈,用來控制交叉路口的馬車通行,但一次煤氣爆炸事故致使交通信號燈消失了近半個世紀(jì)。1914年,美國克利夫蘭,紐約和芝加哥重新出現(xiàn)的交通信號燈,他們使用電動驅(qū)動,與現(xiàn)在意義的交通信號燈幾乎是一樣的。隨著時代的發(fā)展,各種運(yùn)輸方式和交通管制的需要,第一光名副其實(shí)的三色燈(紅,黃,綠)出生于1918年。它的周圍是三色圓形投影機(jī)被安裝在紐約市五號街一座高塔上,由于它的誕生,城市交通大大改善。
在近一個世紀(jì)的發(fā)展,道路交通信號控制系統(tǒng)經(jīng)歷了一個手動到自動,從固定到靈活配時,從無感應(yīng)控制到有感應(yīng)控制,從單點(diǎn)控制到干線控制,從區(qū)域控制到網(wǎng)絡(luò)控制的長期過程。
交通網(wǎng)絡(luò)是城市的動脈,是一個城市的生活經(jīng)濟(jì)水平,工業(yè)文明的象征。交通關(guān)系到人民對財產(chǎn),安全和時間相關(guān)的利益。憑借優(yōu)良科學(xué)的交通控制技術(shù)對資源物流和人們出行是非常有價值的,確保交通安全線的暢通,才能確保舒適的出行,物流按時到位,甚至是生命通道延伸。為了確保安全,高效的交通秩序,除了制定一系列的交通規(guī)則,而且還必須通過一定的技術(shù)手段來實(shí)現(xiàn)。隨著單片機(jī)和傳感器技術(shù)的迅速發(fā)展,自動檢測領(lǐng)域發(fā)生了翻天覆地的變化,交通自動檢測控制研究已經(jīng)取得了顯著的進(jìn)步,必將以其優(yōu)良的性能價格比,逐步取代傳統(tǒng)的交通控制措施。
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
1.整體方案設(shè)計
1.1 方案分析
交通燈一般設(shè)在城市道路的十字路口,可以分為東西方向(主干道)和南北方向(次干道),東西南北四個路口均設(shè)有有紅綠黃3種燈和1個二位數(shù)碼顯示管。在某一時刻規(guī)定只有一個方向可以通行,另一方向被禁行,狀態(tài)經(jīng)過一定的過渡時間,將通行方向和禁行方向相互對換。其具體狀態(tài)如下圖所示。(白色表示滅)。通過具體的路口交通燈狀態(tài)的演示分析我們可以把這四個狀態(tài)歸納如圖1:
圖1 交通燈狀態(tài)圖
·東西方向(主干道)紅燈滅,同時綠燈亮,南北方向(次干道)黃燈滅,同時紅燈亮,倒計時顯示60秒。在此種狀態(tài)下,東西方向(主干道)允許通行,南北方向(次干道)禁止通行。
·東西方向(主干道)綠燈滅,同時黃燈閃爍,南北方向(次干道)紅燈亮,倒計時顯示10秒。在此種狀態(tài)下,除了正在通行中的車輛外,其他所有的車輛都應(yīng)該等待狀態(tài)轉(zhuǎn)換。
·南北方向(次干道)紅燈滅,同時綠燈亮,東西方向(主干道)黃燈滅,同時紅燈亮,倒計時50秒。在此種狀態(tài)下,東西方向(主干道)禁止通行,南北向允許通行。
·南北方向(次干道)綠燈滅,同時黃燈閃爍,東西方向(主干道)紅燈亮,倒計時10秒。在此種狀態(tài)下,除了正在通行中的車輛外,其他所有車輛都應(yīng)該等待狀態(tài)轉(zhuǎn)換。
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
1.2 方案確立
本設(shè)計系統(tǒng)以AT89C51單片機(jī)為控制核心,連接成最小系統(tǒng),由倒計時顯示模塊、交通燈顯示模塊、按鍵開關(guān)控制模塊組成。軟件部分使用的是C 語言編程,由軟件設(shè)置交通燈的初始時間,東西方向(主干道)通行60秒,南北方向(支干道)通行50秒,數(shù)碼管采用動態(tài)顯示,P0口送字形碼,P2口送字位選通信號,通過單片機(jī)的P1口控制各種信號燈的點(diǎn)亮與熄滅,采用中斷方式實(shí)現(xiàn)各按鍵的功能。
2.系統(tǒng)的硬件設(shè)計
2.1 設(shè)計原理及方法
本設(shè)計采用模塊化的分層次設(shè)計方法,以單片機(jī)AT 89C 51為控制核心,連接成最小系統(tǒng),由倒計時顯示模塊、交通燈顯示模塊、按鍵開關(guān)控制模塊等組成。系統(tǒng)的總體框圖如下所示。
圖2 交通燈控制器框圖
本系統(tǒng)采用AT89C51單片機(jī)及外圍器件構(gòu)成最小控制系統(tǒng),12個發(fā)光二極管分成4組紅綠黃三色燈構(gòu)成信號燈指示模塊,4個數(shù)碼管東西南北方向各一個構(gòu)成倒計時顯示模塊,通過四個按鍵K0、K1、K2、K3模擬控制交通燈東西通行,南北通行,返回,緊急情況各個交通燈工作情況之間相互轉(zhuǎn)化。
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
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ù)兩個機(jī)器周期以上時復(fù)位有效。復(fù)位電平的持續(xù)時間必須大于單片機(jī)的兩個機(jī)器周期。具體數(shù)值可以由RC電路計算出時間常數(shù)。復(fù)位電路由手動復(fù)位和上電復(fù)位兩部分組成。
(1)上電復(fù)位電路要求接通電源后,通過外部電容充電來實(shí)現(xiàn)單片機(jī)自動復(fù)位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要能保持足夠的時間(2個機(jī)器周期),單片機(jī)就可以進(jìn)行復(fù)位操作。
(2)手動復(fù)位:手動復(fù)位就是在復(fù)位電容上并聯(lián)一個開關(guān),當(dāng)開關(guān)按下時電容被放電、RST也被拉到高電平,而且由于電容的充電,會保持一段時間的高電平來使單片機(jī)復(fù)位。單片機(jī)復(fù)位期間不產(chǎn)生ALE和PSEN信號,即ALE=1和PSEN=1。這表明單片機(jī)復(fù)位期間不會有任何取指操作。
圖3 單片機(jī)手動復(fù)位電路
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.2.2 時鐘電路
單片機(jī)系統(tǒng)里都有晶振,在單片機(jī)系統(tǒng)里晶振作用非常大,全稱叫晶體振蕩器,它結(jié)合單片機(jī)內(nèi)部電路產(chǎn)生單片機(jī)所需的時鐘頻率,單片機(jī)晶振提供的時鐘頻率越高,那么單片機(jī)運(yùn)行速度就越快,單片機(jī)的一切指令的執(zhí)行都是建立在單片機(jī)晶振提供的時鐘頻率。單片機(jī)晶振的作用是為系統(tǒng)提供基本的時鐘信號。單片機(jī)的時鐘電路由外接的一只晶振和兩只起振電容,以及單片機(jī)內(nèi)部的時鐘電路組成,晶振的頻率越高,單片機(jī)處理數(shù)據(jù)的速度越快,系統(tǒng)功耗也會相應(yīng)增加,穩(wěn)定性也會下降。
單片機(jī)的時鐘電路設(shè)計有兩種方式,一種是內(nèi)部時鐘方式,一種是外部時鐘方式。
在內(nèi)部時鐘方式下單片機(jī)內(nèi)部的高增益、反相放大器通過XTAL1、XTAL2外接作為反饋元件的外部晶體管振蕩器與電容組成的并聯(lián)諧振回路構(gòu)成一個穩(wěn)定的自激振蕩器,向內(nèi)部時鐘電路提供振蕩時鐘。振蕩器的頻率主要取決于晶體的振蕩頻率。外部時鐘方式是把外部已有的時鐘信號引入到單片機(jī)內(nèi)。此方式常用于多片單片機(jī)同時工作,以便于各單片機(jī)的同步。一般要求外部信號高電平的持續(xù)時間大于20μs,且為頻率低于12MHz的方波。本設(shè)計采用內(nèi)部時鐘方式,單片機(jī)系統(tǒng)常用的晶振頻率有6MHz、11.0592MHz、12MHz、本系統(tǒng)采用11.0592MHz晶振,電容選22pF或30pF均可。
圖4 單片機(jī)時鐘電路
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.2.2 EA腳的功能及接法
AT89C51 單片機(jī)的EA/VPP(31 腳)是內(nèi)部和外部程序存儲器的選擇管腳。當(dāng)EA 保持高電平時,單片機(jī)訪問內(nèi)部程序存儲器;當(dāng)EA 保持低電平時,則不管是否有內(nèi)部程序存儲器,只訪問外部存儲器。由于現(xiàn)在單片機(jī)內(nèi)部的flash容量都很大,因此基本都是從內(nèi)部的存儲器讀取程序,即不需要外接ROM來存儲程序,因此,EA腳必須接高電平。
圖5 單片機(jī)最小系統(tǒng)
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.3 其它硬件模塊介紹及連接 2.3.1 倒計時顯示模塊
系統(tǒng)要求南北和東西方向的信號燈時間不一樣,所以就利用單片機(jī)的P0口送出數(shù)據(jù)的段碼,位選信號用P2口送出,用動態(tài)掃描的方法顯示東西、南北的倒計時間。7段數(shù)碼管一般由8個發(fā)光二極管組成,其中由7個細(xì)長的發(fā)光二極管組成數(shù)字顯示,另外一個圓形的發(fā)光二極管顯示小數(shù)點(diǎn)。當(dāng)發(fā)光二極管導(dǎo)通時,相應(yīng)的一個點(diǎn)或一個筆畫發(fā)光。控制相應(yīng)的二極管導(dǎo)通,就能顯示出各種字符。本設(shè)計采用共陰數(shù)碼管,需要接上470歐上拉電阻以提供足夠大的電流來驅(qū)動數(shù)碼管,數(shù)碼管的每段的電流是約10毫安。
圖6 數(shù)碼管顯示模塊
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.3.2 交通燈顯示模塊
本系統(tǒng)利用單片機(jī)的P1口來驅(qū)動和控制各種信號燈的燃亮和燃亮?xí)r間,在實(shí)際中,交通燈的信號燈需要用高電壓控制,在這里我們只是模擬一下它的控制信號,所以我們就只用單片機(jī)的信號引腳直接來控制發(fā)光二極管。發(fā)光二極管是半導(dǎo)體二極管的一種,可以把電能轉(zhuǎn)化成光能,常簡寫為LED。發(fā)光二極管與普通二極管一樣是由一個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ù)合時釋放出的能量多少不同,釋放出的能量越多,則發(fā)出的光的波長越短。常用的是發(fā)紅光、綠光或黃光的二極管。發(fā)光二極管的反向擊穿電壓約5伏。它的正向伏安特性曲線
很陡,使用時必須串聯(lián)限流電阻以控制通過管子的電流。
圖7 交通燈模塊
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.3.3 按鍵控制模塊
本系統(tǒng)設(shè)置了有4個鍵:K0鍵,K1鍵,K2鍵,K3鍵。每個按鍵一端接地,另一端接上二極管。低電平有效,當(dāng)按鍵按下端口接地,單片機(jī)捕獲到低電平,從而得到相應(yīng)的輸入信息。本系統(tǒng)采用了二極管做開關(guān),是為了防止有一按鍵被按下3根線同時被低,中斷無效。二極管在正向電壓作用下電阻很小,處于導(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)分三種工作模式:南北通行模式、東西通行模式、返回模式、緊急情況模式,并且通過四個按鍵K0、K1、K2、K3實(shí)現(xiàn)之間的相互轉(zhuǎn)化。
圖8 按鍵控制模塊
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
2.3.4 電源模塊
單片機(jī)工作時需要的+5V電壓,所以在設(shè)計電源電路時,需要一個電子元件能提供+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è)計
3.1 系統(tǒng)相關(guān)參數(shù)計算 3.1.1 T0的計數(shù)初值
T0的計數(shù)初值:X=216-12*50*1000/12=15536=3CB0H 3.1.2 倒計時顯示的理論分析
倒計時顯示的理論分析:利用定時器中斷,設(shè)TH0=TH1=(65536-50000)/256,即每0.05秒中斷一次。每到第20次中斷即過了20*0.05秒=1秒時,使時間的計數(shù)值減1,便實(shí)現(xiàn)了倒計時的功能。
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
3.1.2 交通燈狀態(tài)顯示的理論分析
狀態(tài)燈顯示的理論分析:黃燈閃爍同樣可以利用定時器中斷。每到第10次中斷即過了10*0.05秒=0.5秒時,使黃燈標(biāo)志位反置,即可讓黃燈1秒閃爍一次。
3.2 系統(tǒng)主程序設(shè)計
本系統(tǒng)采用AT89C51單片機(jī)實(shí)現(xiàn)交通燈的控制,程序的編寫用C語言來完成。系統(tǒng)控制程序可以分為若干模塊:初始化程序,按鍵開關(guān)控制程序,交通燈轉(zhuǎn)換控制程序,LED數(shù)碼管顯示程序,按鍵消抖動程序,延時程序,中斷服務(wù)子程序等。系統(tǒng)相應(yīng)的程序流程如圖所示。
圖10 程序流程圖
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
4.系統(tǒng)的 Proteus軟件仿真
4.1 Proteus仿真圖
交通燈控制系統(tǒng)的仿真是通過 proteus 軟件實(shí)現(xiàn)的交通燈控制系統(tǒng)仿真效果,仿真如下圖9所示:
圖11 仿真圖
4.2 Proteus仿真的結(jié)果分析
Proteus仿真實(shí)現(xiàn)東西方向和南北方向的十字路口的車輛相互交替通過,東西方向(主干道)每次通行時間設(shè)置為60秒、南北方向(次干道)通行時間設(shè)置為50秒。同時可以實(shí)現(xiàn)紅燈、黃燈、綠燈各狀態(tài)之間的相互轉(zhuǎn)換,黃燈閃爍時間設(shè)置為10秒,數(shù)碼管可以準(zhǔn)確進(jìn)行倒計時顯示。按下東西放行鍵K0,東西方向(主干道)綠燈亮,南北方向(次干道)紅燈亮;按下南北放行鍵K1,南北方向(次干道)綠燈亮,東西方向(主干道)紅燈亮;無論在任何時候按下返回鍵K2,該控制系統(tǒng)都將返回到初始狀態(tài);若遇緊急情況,按下緊急情況按鍵K3,東西南北方向都亮紅燈,實(shí)現(xiàn)主干道和支干道全部禁止通行;模擬了控制交通燈東西方向(主干道)通行,南北方向(次干道)通行,返回,緊急情況各個交通燈工作情況之間相互轉(zhuǎn)化,實(shí)現(xiàn)了課程設(shè)計的要求。宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
結(jié)束語
通過這次畢業(yè)設(shè)計,使我受益匪淺。使我在軟硬件結(jié)合的綜合運(yùn)用能力上有了進(jìn)一步的提升,對課堂上所學(xué)的單片機(jī)知識有了進(jìn)一步的加深和鞏固,在C語言的掌握方面也向前邁了一大步,在老師和同學(xué)的幫助下,提高了個人分析解決實(shí)際問題的綜合能力以及協(xié)同合作的能力,同時還鍛煉了我查閱資料的能力、動手能力、發(fā)現(xiàn)問題、解決問題的能力。面對電腦搜索資料,一點(diǎn)點(diǎn),一塊塊的電路慢慢拼成完整的電路經(jīng)過一次次的反復(fù)修改終于設(shè)計出了屬于自己的程序和電路,雖然還有諸多不足之處,不過使自己真正的體會到了探索事物的奧秘的快樂,同時自己也更深入的了解到了單片機(jī)的巨大的潛力,雖然有的時候可能遇到了一些困難,但是我最終解決了,我也會感覺到成功給我?guī)淼南矏偅抑牢以趯I(yè)知識上的掌握還是遠(yuǎn)遠(yuǎn)不夠的,我還要更加努力的去學(xué)習(xí),提高自己了實(shí)踐能力。
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
參考文獻(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è)計與仿真實(shí)現(xiàn)[J].公路交通技術(shù).2010 [7] 劉日華,宋海.基于單片機(jī)的交通燈設(shè)計[J].科技致富向?qū)В?012 [9] 高文慶,呂英英. 基于AT89C51單片機(jī)的數(shù)字秒表設(shè)計[J]. 電腦知識與技術(shù).2012 [10] 譚浩強(qiáng)著,C程序設(shè)計 第三版[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ī)AT89C51的交通燈控制器的設(shè)計
致 謝
本畢業(yè)設(shè)計在胡波和劉明老師的親切關(guān)懷和悉心指導(dǎo)以及同學(xué)們的熱心幫助下完成的。感謝他們在此次畢業(yè)設(shè)計過程中給予我的悉心指導(dǎo)與各方面的幫助,他們給了我許多非常有益的建議和意見,使我在思路上得到了很大的啟發(fā),從中認(rèn)識到了自己存在的不足,并且學(xué)到了很多非常寶貴的知識。同時也要感謝系里其它同學(xué)和我的朋友在設(shè)計中給我提供的幫助和支持。總的來說,這次設(shè)計給了我一個很好的鍛煉機(jī)會,讓我學(xué)到了很多東西,讓我將自己所掌握的理論知識切實(shí)運(yùn)用于工作和生活實(shí)踐中,這不僅有利于加深對書本知識的理解和鞏固,而且在很大程度上提高了我們在理論知識的指導(dǎo)下觀察、分析和解決問題的能力。最后,再次向所有幫助過我的老師、同學(xué)表示衷心的感謝!謝謝你們!宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
附錄:程序源代碼
/*#include
code 宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
{ 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)/*無條件循環(huán)*/ 時間的個位*/ delayms(10);/*延時*/
P2=weima[1],P0=duanma[(SN_G+Y)/10];/*南北方向數(shù)碼管顯示可通行 delayms(10);/*延時*/ 時間的十位*/ P2=weima[2],P0=duanma[(WE_G+Y)%10];/*東西方向數(shù)碼管顯示可通行時間的個位*/ delayms(10);/*延時*/
P2=weima[3],P0=duanma[(WE_G+Y)/10];/*東西方向數(shù)碼管顯示可通行時間的十位*/
/*設(shè)置南北方向通行時間*/ if(K0==0)/*P3^7=0*/ { delayms(10);/*延時*/ 17 宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
delayms(20);/*延時,把抖動的時間拋掉*/ if(K0==0)*/ { } SN_G++;/*南北方向綠燈時間+1*/ if(SN_G==100)SN_G=0;/*由于使用的是兩位數(shù)碼管,當(dāng)南北方向綠燈時間加到100后清零*/ }
} /*設(shè)置東西方向通行時間*/ if(K1==0)/*P3^6=0*/ { { while(K0==0)/*當(dāng)松開K0開關(guān)時,跳出空循環(huán),執(zhí)行后面的程序 delayms(20);/*延時,把抖動的時間拋掉*/ if(K1==0){ while(K1==0)/*當(dāng)松開K1開關(guān)時,跳出空循環(huán),執(zhí)行后面的程序*/ { } WE_G++;/*東西方向綠燈時間+1*/ if(WE_G==100)WE_G=0;/*由于使用的是兩位數(shù)碼管,當(dāng)東西方向綠燈時間加到100后清零*/ }
} /*返回*/ if(K3==0)/*P3^5=0*/ delayms(20);/*延時,把抖動的時間拋掉*/ if(K3==0){ { 18 宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
while(K3==0)/*當(dāng)松開K3開關(guān)時,跳出空循環(huán),執(zhí)行后面的程
{ } count=0;/*清零*/ k=0;/*南北方向通車,東西方向不通車*/ SN=SN_G,WE=SN_G+Y;/*南北方向顯示時間為南北方向綠燈通行序*/ 時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮?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;/*計數(shù)器停止工作*/ {/*數(shù)碼管掃描程序,*/ P2=weima[0];/*顯示南北方向個位*/ delayms(10);/*延時*/ delayms(10);/*延時*/ P2=weima[2];/*顯示東西方向個位*/ delayms(10);/*延時*/ P2=weima[3];/*顯示東西方向十位*/ delayms(10);/*延時*/ /*返回*/ EA=0;/*CPU禁止響應(yīng)一切中斷*/ while(1)/*無條件循環(huán)*/
void int1(void)interrupt 2 P2=weima[1];/*顯示南北方向十位*/ if(K3==0)/*P3^5=0*/ { 19 宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
delayms(20);/*延時,把抖動的時間拋掉*/
if(K3==0){ while(K3==0)/*當(dāng)松開K3開關(guān)時,跳出空循環(huán),執(zhí)行后面的程序*/
{ } TR0=!TR0;/*啟動計數(shù)器*/ EA=1;/*CPU開放總中斷*/
break;/*跳出*/
}
} } } /*鍵盤程序*/ void key(){ /*南北有車而東西無車*/ if(K0==0)/*K0=0*/ { delayms(20);/*延時,把抖動的時間拋掉*/ if(K0==0){ while(K0==0)/*當(dāng)松開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;/*南北方向顯示時間為南北方向綠燈通行時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮?xí)r間*/ light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } }
宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
/*南北無車而東西有車*/ if(K1==0)/*K1=0*/ { delayms(20);/*延時,把抖動的時間拋掉*/ if(K1==0){ while(K1==0)/*當(dāng)松開K1開關(guān)時,跳出循環(huán),執(zhí)行后面的程序*/ { light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/ } count=0;/*清零*/ k=1;/*南北方向不通車,東西方向通車*/ SN=WE_G+Y,WE=WE_G;/*南北方向顯示時間為東西方向綠燈通行時間加黃燈閃亮?xí)r間,東西方向顯示時間為東西方向綠燈通行時間*/ light();/*調(diào)用交通燈函數(shù)*/
} /*定時函數(shù)*/ void time1(void)interrupt 1 {
TH0=0x3c;TL0=0xb0;/*計50000個數(shù),用時50ms*/ count++;/*自增運(yùn)算*/ if(count>=20)/*當(dāng)count大于或等于20時,歷時1s,執(zhí)行程序*/ { SN--;/*自減運(yùn)算*/ WE--;/*自減運(yùn)算*/ count=0;/*清零*/ if(SN==0||WE==0)/*當(dāng)SN=0或者WE=0時,執(zhí)行程序*/ { } led();/*調(diào)用數(shù)碼管函數(shù)*/ } k++;/*自增運(yùn)算*/ if(k>3)/*當(dāng)k>3時,執(zhí)行程序*/ 21 宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
k=0;/*清零*/ switch(k)/*switch 語句*/ { case 0:SN=SN_G,WE=SN_G+Y;break;/*南北方向顯示時間為南北方向綠燈通行時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮?xí)r間*/ case 1:SN=Y,WE=Y;break;/*東西南北方向顯示時間均為黃燈閃亮?xí)r間*/ case 2:SN=WE_G+Y,WE=WE_G;break;/*南北方向顯示時間為東西方向綠燈通行時間加黃燈閃亮?xí)r間,東西方向顯示時間為東西方向綠燈通行時間*/ case 3:SN=Y,WE=Y;break;/*東西南北方向顯示時間均為黃燈閃亮?xí)r間*/ } } } /*交通燈函數(shù)*/ void light(){
P1=deng[k];/*交通燈對應(yīng)著k的值變化*/ if(P1==deng[1]&&count==0)/*當(dāng)南北方向亮黃燈且count=0時,執(zhí)行程序*/
{ TH1=(65536-50000)/256;
} TL1=(65536-50000)%256;/*延時50ms*/
P1=0xDF;/*南北方向黃燈熄滅,東西方向亮紅燈*/ } else if(P1==deng[3]&&count==0)/*當(dāng)東西方向亮黃燈且count=0時,執(zhí)行程序*/ { TH1=(65536-300000)/256;
TL1=(65536-300000)%256;/*延時50ms*/ P1=0xFB;/*南北方向亮紅燈,東西方向黃燈熄滅*/ 22 宿州學(xué)院本科生畢業(yè)設(shè)計
基于單片機(jī)AT89C51的交通燈控制器的設(shè)計
} } /*數(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)/*無條件循環(huán)*/ P2=weima[0],P0=duanma[SN%10];/*顯示南北方向個位*/ P2=weima[1],P0=duanma[SN/10];/*顯示南北方向十位*/ delayms(10);/*延時*/ P2=weima[2],P0=duanma[WE%10];/*顯示東西方向個位*/ delayms(10);/*延時*/ P2=weima[3],P0=duanma[WE/10];/*顯示東西方向十位*/ delayms(10);/*延時*/ delayms(10);/*延時*/ } 23
第二篇:交通燈控制器設(shè)計實(shí)驗報告
設(shè)計性實(shí)驗項目名稱
交通燈控制器設(shè)計
實(shí)驗項目學(xué)時:3學(xué)時
實(shí)驗要求:■ 必修
□ 選修
一、實(shí)驗?zāi)康?/p>
1、學(xué)習(xí)與日常生活相關(guān)且較復(fù)雜數(shù)字系統(tǒng)設(shè)計;
2、進(jìn)一步熟悉EDA實(shí)驗裝置和QuartusⅡ軟件的使用方法;
3、學(xué)習(xí)二進(jìn)制碼到BCD碼的轉(zhuǎn)換;
4、學(xué)習(xí)有限狀態(tài)機(jī)的設(shè)計應(yīng)用。
二、實(shí)驗原理
交通燈的顯示有很多方式,如十字路口、丁字路口等,而對于同一個路口又 有很多不同的顯示要求,比如十字路口,車輛如果只要東西和南北方向通行就很 簡單,而如果車子可以左右轉(zhuǎn)彎的通行就比較復(fù)雜,本實(shí)驗僅針對最簡單的南北 和東西直行的情況。
要完成本實(shí)驗,首先必須了解交通路燈的燃滅規(guī)律。本實(shí)驗需要用到實(shí)驗箱上交通燈模塊中的發(fā)光二極管,即紅、黃、綠各三個。依人們的交通常規(guī),“紅燈停,綠燈行,黃燈提醒”。其交通燈的燃滅規(guī)律為:初始態(tài)是兩個路口的紅燈全亮之后,主干道的綠燈亮,鄉(xiāng)間道路的紅燈亮,主干道方向通車,延時一段時間后,鄉(xiāng)間公路來車,主干道綠燈滅,黃燈開始閃爍。閃爍若干次后,主干道紅燈亮,而同時鄉(xiāng)間公路的綠燈亮,延時一段時間后,鄉(xiāng)間公路的綠燈滅,黃燈開始閃爍。閃爍若干次后,再切換到主干道方向,重復(fù)上述過程。
三、設(shè)計要求
完成設(shè)計、仿真、調(diào)試、下載、硬件測試等環(huán)節(jié),在型EDA實(shí)驗裝置上實(shí)現(xiàn)一個由一條主干道和一條鄉(xiāng)間公路的匯合點(diǎn)形成的十字交叉路口的交通燈控制器功能,具體要求如下:
1、有MR(主紅)、MY(主黃)、MG(主綠)、CR(鄉(xiāng)紅)、CY(鄉(xiāng)黃)、CG(鄉(xiāng)綠)六盞交通燈需要控制;
2、交通燈由綠轉(zhuǎn)紅前有4秒亮黃燈的間隔時間,由紅轉(zhuǎn)綠沒有間隔時間;
3、鄉(xiāng)間公路右側(cè)各埋有一個串連傳感器,當(dāng)有車輛準(zhǔn)備通過鄉(xiāng)間公路時,發(fā)出請求信號S=1,其余時間S=0;
4、平時系統(tǒng)停留在主干道通行(MGCR)狀態(tài),一旦S信號有效,經(jīng)主道黃燈4秒(MYCR)狀態(tài)后轉(zhuǎn)入鄉(xiāng)間公路通行(MRCG)狀態(tài),但要保證主干道通行大于一分鐘后才能轉(zhuǎn)換;
5、一旦S信號消失,系統(tǒng)脫離MRCG狀態(tài),即經(jīng)鄉(xiāng)道黃燈4秒(MRCY)狀態(tài)進(jìn)入MGCR狀態(tài),即使S信號一直有效,MRCG狀態(tài)也不得長于20秒鐘;
6、控制對象除紅綠燈之外,還包括分別在主干道和鄉(xiāng)間公路各有一個兩位十進(jìn)制倒計時數(shù)碼管顯示。
四、主要儀器設(shè)備
1、微機(jī)
1臺
1套 1套
2、QuartusII集成開發(fā)軟件
3、EDA實(shí)驗裝置
五、實(shí)驗步驟
源程序:
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為計數(shù)頻率
if(sel<7)sel=sel+1;else sel=6;
end //sel為數(shù)碼管選擇
begin
case(sel)
7: a=count[3:0];//0數(shù)碼管為個位
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倒計時
s信號為1時
七、實(shí)驗心得
通過本次實(shí)驗,讓我進(jìn)一步掌握了軟件quartus的使用流程,一開始實(shí)驗時波形仿真是正確的,但在電路上實(shí)現(xiàn)時主干道亮黃燈時,鄉(xiāng)間道路亮的是綠燈,這顯然是不對的,后面發(fā)現(xiàn)是管腳鎖定時出現(xiàn)了問題,改回來之后就沒問題了。管腳鎖定時不能粗心,不然很容易出現(xiàn)問題。
曹軍
生醫(yī)121班
第三篇:單片機(jī):交通燈控制系統(tǒng)設(shè)計
交通燈控制系統(tǒng)設(shè)計
摘要:本系統(tǒng)由單片機(jī)系統(tǒng)、鍵盤、LED 顯示、交通燈演示系統(tǒng)組成。系統(tǒng)包括人行道、左轉(zhuǎn)、右轉(zhuǎn)、以及基本的交通燈的功能。系統(tǒng)除基本交通燈功能外,還具有倒計時、時間設(shè)置、緊急情況處理、分時段調(diào)整信號燈的點(diǎn)亮?xí)r間以及根據(jù)具體情況手動控制等功能。關(guān)鍵詞:AT89S51,交通規(guī)則
一、方案比較、設(shè)計與論證 1 電源提供方案
為使模塊穩(wěn)定工作,須有可靠電源。我們考慮了兩種電源方案
方案一:采用獨(dú)立的穩(wěn)壓電源。此方案的優(yōu)點(diǎn)是穩(wěn)定可靠,且有各種成熟電路可供選用;缺點(diǎn)是各模塊都采用獨(dú)立電源,會使系統(tǒng)復(fù)雜,且可能影響電路電平。方案二:采用單片機(jī)控制模塊提供電源。改方案的優(yōu)點(diǎn)是系統(tǒng)簡明扼要,節(jié)約成本;缺點(diǎn)是輸出功率不高。綜上所述,我們選擇第二種方案。2 顯示界面方案
該系統(tǒng)要求完成倒計時、狀態(tài)燈等功能。基于上述原因,我們考慮了三種方案: 方案一:完全采用數(shù)碼管顯示。這種方案只顯示有限的符號和數(shù)碼字苻,無法勝任題目要求。
方案二:完全采用點(diǎn)陣式LED 顯示。這種方案實(shí)現(xiàn)復(fù)雜,且須完成大量的軟件工作;但功能強(qiáng)大,可方便的顯示各種英文字符,漢字,圖形等。
方案三:采用數(shù)碼管與點(diǎn)陣LED 相結(jié)合的方法因為設(shè)計既要求倒計時數(shù)字輸出,又要求有狀態(tài)燈輸出等,為方便觀看并考慮到現(xiàn)實(shí)情況,用數(shù)碼管與LED燈分別顯示時間與提示信息。這種方案既滿足系統(tǒng)功能要求,又減少了系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。權(quán)衡利弊,第三種方案可互補(bǔ)一二方案的優(yōu)缺,我們決定采用方案三以實(shí)現(xiàn)系統(tǒng)的顯示功能。3 輸入方案:
題目要求系統(tǒng)能手動設(shè)燈亮?xí)r間、緊急情況處理,我們討論了兩種方案: 方案一:采用8155擴(kuò)展I/O 口及鍵盤,顯示等。該方案的優(yōu)點(diǎn)是:
使用靈活可編程,并且有RAM,及計數(shù)器。若用該方案,可提供較多I/O 口,但操作起來稍顯復(fù)雜。
方案二: 直接在IO口線上接上按鍵開關(guān)。因為設(shè)計時精簡和優(yōu)化了電路,所以剩余的口資源還比較多,我們使用四個按鍵,分別是K1、K2、K3、K4。由于該系統(tǒng)對于交通燈及數(shù)碼管的控制,只用單片機(jī)本身的I/O 口就可實(shí)現(xiàn),且本身的計數(shù)器及RAM已經(jīng)夠用,故選擇方案二。
二、理論分析與計算
1.交通燈顯示時序的理論分析與計算
對于一個交通路口來說,能在最短的時間內(nèi)達(dá)到最大的車流量,就算是達(dá)到了最佳的性能,我們稱在單位時間內(nèi)多能達(dá)到的最大車流為車流量,用公式:車流量= 車流 / 時間 來表示。
先設(shè)定一些標(biāo)號如圖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)達(dá)到較大的車流量,效率特別高。
依據(jù)上述的車輛行駛的狀態(tài)圖,可以列出各個路口燈的邏輯表,由于相向的燈的狀態(tài)圖
是一樣的,所以只需寫出相鄰路口的燈的邏輯表;根據(jù)圖2-3 可以看出,相鄰路口的燈它
們的狀態(tài)在相位上相差180°。因此最終只需寫出一組S1、S2、S3、S4的邏輯狀態(tài)表。
如表2-1 所示。
表中的“×”代表是紅燈亮(也代表邏輯上的0),“√”是代表綠燈亮(也代表邏輯上 的1),依上表,就可以向相應(yīng)的端口送邏輯值。2.交通燈顯示時間的理論分析與計算
東西和南北方向的放行時間的長短是依據(jù)路口的各個方向平時的車流量來設(shè)定,并且
S1、S2、S3、S4各個狀態(tài)保持的時間之有嚴(yán)格的對應(yīng)關(guān)系,其公式如下所示。T-S1+T-S2=T-S3 T-S2=T-S4 T-S1=T-S3 我們可以依據(jù)上述的標(biāo)準(zhǔn)來改變車輛的放行時間。按照一般的規(guī)則,一個十字路口可分
為主干道和次干道,主干道的放行時間大于次干道的放行時間,我們設(shè)定值時也應(yīng)以此為參 考。
三、電路圖及設(shè)計文件 1.燈控制電路設(shè)計
由于32個LED 來實(shí)現(xiàn)紅綠燈狀態(tài),若直接接在單片機(jī)的口線,路口倒計時的顯示就不
能實(shí)現(xiàn),所以本次設(shè)計中采用一種新型的電路如圖3-1 所示。
圖中74LS04的作用是倒相和驅(qū)動,它輸出的電流大約48mA,實(shí)際測試發(fā)現(xiàn)足以滿足要
求,而且發(fā)光管也能達(dá)到足夠的亮度。
觀察圖可以看出:兩組發(fā)光管(一組紅、一組綠)由于反相器的作用,其邏輯狀態(tài)恰恰 相反。
圖中和電阻串聯(lián)的二極管的作用是為了分壓,防止因上下兩組發(fā)光管分壓不同導(dǎo)致邏輯 的錯誤。
共四組和上述相同的電路分別代表東西南北四個方向的紅綠燈,使用兩片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)。
主程序中放了一個按鍵的判斷指令,當(dāng)有按鍵按下的時候,程序就自動的跳轉(zhuǎn)到按鍵子
程序處理。當(dāng)檢測到K2鍵按下的時候就自動返回到主程序。當(dāng)出現(xiàn)緊急的情況的時候,按下K3或者K4 就切換到緊急狀態(tài),當(dāng)緊急事件處理完畢 的時候,按下K2,就可以返回正常狀態(tài)。
五、測試、數(shù)據(jù)及結(jié)果分析 1.狀態(tài)燈顯示測試
當(dāng)電路連接完畢后,將寫好的測試程序刷寫到芯片內(nèi),K1 和K2分別給端口送高電平和
低電平,通電即可檢測。2.?dāng)?shù)碼管的測試
將串口的和電路板上的接口連接,將寫好的測試程序刷寫到芯片內(nèi),開電源即可測試。
3.整體電路測試
系統(tǒng)上電,刷寫好程序即可開始測試,觀測一個周期(共計S1~S4四個狀態(tài),默認(rèn)140 秒)燈的顯示狀態(tài)是否正常,同時觀察倒計的計數(shù)是否正常。
六、總結(jié)
由于使用的是單片機(jī)作為核心的控制元件,使得電路的可靠性比較高,功能也比較強(qiáng)大,而且可以隨時的更新系統(tǒng),進(jìn)行不同狀態(tài)的組合。
但是在我們設(shè)計和調(diào)試的過程中,也發(fā)現(xiàn)了一些問題,譬如紅燈和綠燈的切換還不夠迅
速,紅綠燈規(guī)則不效率還不是很高等等,這需要在實(shí)踐中進(jìn)一步完善。附錄 系統(tǒng)總體電路圖
1.滿足南北向紅綠燈亮,東西向紅燈亮,占25秒——南北向黃燈亮,東西向紅燈亮,占5秒——南北向紅燈亮,東西向綠燈亮,占25秒——南北向紅燈亮,東西向黃燈亮,占5秒。如此循環(huán),周而復(fù)始。2.十字路口要有數(shù)字顯示,提示行人把握時間:當(dāng)某方向綠燈亮?xí)r,置顯示器為24,然后以每秒減1計數(shù)方式工作,直到減為0,綠燈滅,黃燈亮。黃燈滅,紅燈亮?xí)r,再次置顯示器為29,并開始減計數(shù),直到為0,十字路口紅綠燈交換,完成一次工作循環(huán)。
3.可手動調(diào)整和自動調(diào)整,夜間為黃燈閃耀。下面是一個單片機(jī)交通燈程序 /*
****************************************************************************************** * *
* 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電阻
,十字路口嘛。蜂鳴器一個。
按鍵一個,按鍵復(fù)位
采用AT89s51型號的單片機(jī),由于交通十字路口的對稱性,所以一個引腳可以同時控制兩個燈,將發(fā)光二極管分別接到P1各個引腳,在其中加入一個時振蕩當(dāng)電路,來控制時間,在P3.0引腳接入蜂鳴器只黃燈亮的時候發(fā)出聲響,這里我們讓每次黃燈亮的時候發(fā)出六聲響,通過C程序的控制就可以實(shí)現(xiàn),每次循環(huán)是10秒。2、9cm*15cm萬用板 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ī)(型號:STC89C52、AT89C51/C52、AT89S51/S52,隨機(jī)選擇,如有特
殊要求請與店主討論)設(shè)計實(shí)現(xiàn)。(以上幾種單片機(jī)全部為51系列單片機(jī),除了名字不一樣外,功能及應(yīng)用完全一樣,互相
兼容)
2、兩個兩位一體數(shù)碼管顯示東西、南北方向時間。
3、四方向各有紅綠黃三顆燈。
4、七個按鍵操作,分別是:禁止通行、東西通行、南北通行、時間加、時間減、切換方向、確認(rèn)。
第四篇:基于單片機(jī)的交通燈設(shè)計
基于單片機(jī)的交通燈設(shè)計
設(shè)計程序:
#include
//共陽極
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;//初始化交通燈時間 uchar count;//計時中斷次數(shù) uchar i,j;//循環(huán)控制變量 char Timer;//子程序說明語句 void Process();void Display(uchar j);void Delay(uchar a);/**************************主程序**************************/ main(){ IP=0X02;//設(shè)置定時器中斷為高優(yōu)先級//成為中斷嵌套
TMOD=0x01;//定時器工作方式
TH0=0x3C;//定時器初始化
TL0=0xB0;IT0=1;//中斷觸發(fā)方式為下降沿觸發(fā)
EA=1;//CPU開中斷
ET0=1;//開定時中斷
TR0=1;//啟動定時
EX0=1;//啟動外部中斷0 while(1)
{
Process();
} } /*************************交通燈顯示子程序*************************/ void Display(uchar j)//j控制顯示table中連續(xù)位的起始點(diǎn) {
char h,l;
h=Timer/10;//EW通行時間十位
l=Timer%10;//EW通行時間個位
for(i=0;i<4;)//按位顯示通行狀況及時間 {
P0=table1[j];//通行狀況顯示
P3=tab[i];//位選顯示
i++;
//j++;
if(i%2)//兩位計時顯示
{
P2=table[l];
Delay(400);
}
else
{
P2=table[h];
Delay(400);
} } Delay(5);
//設(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);
}
} } /**************************延時子程序**************************/ void Delay(uchar a)//循環(huán)a次 { uchar x;x=a;while(x--){;} }
/************************TO計時中斷服務(wù)程序************************/ void timer0(void)interrupt 1 using 1//T0中斷 { TH0=0x3C;TL0=0xB0;//定時計數(shù)初值
count++;//中斷溢出一次count+1 if(count==20){
Timer--;
count=0;//中斷次計數(shù),count回,倒計時時間
} } /**************************亮燈控制**************************/ void Process(){ Timer=EW;//初始化方向通行時間
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è)計
目
錄
第一章
設(shè)計原理.......................................................................................................................................1
1.1設(shè)計要求..........................................................................................................................1
1.2設(shè)計思路和原理............................................................................................................................1 1.3實(shí)現(xiàn)方法..........................................................................................................................................1 第二章
Verilog 程序設(shè)計.........................................................................................................2
2.1整體設(shè)計...........................................................................................................................22.2 具體設(shè)計..........................................................................................................................3
第三章
仿真................................................................................................................................................7
3.1 波形仿真..........................................................................................................................7
第四章
設(shè)計總結(jié).......................................................................................................................9
4.1 總結(jié)...................................................................................................................................9
4.2參考資料............................................................................................................................9
程序清單.....................................................................................................................................10
0
交通燈控制器設(shè)計
第一章
設(shè)計原理
1.1設(shè)計要求
設(shè)計一個交通控制器,用LED顯示燈表示交通狀態(tài),并以7段數(shù)碼顯示器顯示當(dāng)前狀態(tài)剩余秒數(shù) 主干道綠燈亮?xí)r,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變?yōu)榧t燈的過程中,亮光的黃燈作為過渡,黃燈的時間為5s。能進(jìn)行特殊狀態(tài)顯示,特殊狀態(tài)時東西、南北路口均顯示紅燈狀態(tài)。用LED燈顯示倒計時,并且能實(shí)現(xiàn)總體清零功能,計數(shù)器由初始狀態(tài)開始計數(shù),對應(yīng)狀態(tài)的顯示燈亮。1.2設(shè)計思路和原理
本次設(shè)計是針對十字路口,進(jìn)行南北和東西直行情況下交通燈控制。設(shè)定東西方向為主干道方向,根據(jù)交通燈的亮的規(guī)則,在初始狀態(tài)下四個方向的都為紅燈亮啟,進(jìn)入正常工作狀態(tài)后,當(dāng)主干道上綠燈亮?xí)r,支干道上紅燈亮,持續(xù)35S后,主干道和支干道上的黃燈都亮啟,持續(xù)5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續(xù)25S,之后主干道和支干道上的黃燈都亮啟5s,一個循環(huán)完成。循環(huán)往復(fù)的直行這個過程。其過程如下圖所示:
0s主干道方向25s綠燈亮30s紅燈亮黃燈亮65s支干道方向0s紅燈亮35s綠燈亮黃燈亮60s65s
圖1.交通燈點(diǎn)亮?xí)r間控制說明
1.3實(shí)現(xiàn)方法
本次采用文本編輯法,即利用Verilog 語言描述交通控制器,通過狀態(tài)機(jī)計數(shù)法,實(shí)現(xiàn)設(shè)計所要求的交通燈控制及時間顯示。設(shè)計中用兩組紅黃綠LED模擬兩個方向上的交通燈,用4個7段數(shù)碼管分別顯示兩個方向上的交通燈剩余時間,控制時鐘由試驗箱上頻率信號提供。
第二章
Verilog 程序設(shè)計
2.1整體設(shè)計
根據(jù)上章設(shè)計原理,交通燈控制的關(guān)鍵是各個狀態(tài)之間的轉(zhuǎn)換和進(jìn)行適當(dāng)?shù)臅r間延時,根據(jù)狀態(tài)機(jī)的設(shè)計規(guī)范,本次設(shè)計了三個狀態(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)化
說明:該狀態(tài)圖為交通燈在正常情況下的狀態(tài)轉(zhuǎn)化圖,進(jìn)入控制后,狀態(tài)00時主干道綠燈及支干道紅燈亮起,進(jìn)入狀態(tài)01后兩路黃燈亮起,狀態(tài)11時主干道紅燈及支干道綠燈亮起。進(jìn)入10狀態(tài)兩路黃燈亮起。結(jié)束一個循環(huán),從00狀態(tài)重新開始循環(huán)。
為實(shí)現(xiàn)控制與顯示的功能,需要設(shè)計交通燈點(diǎn)亮順序控制程序,倒數(shù)計時程序,七段數(shù)碼管顯示程序,數(shù)碼管顯示掃描程序,其系統(tǒng)結(jié)構(gòu)圖如下所示:
holdrst狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀clk1KHz狀狀狀狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀 圖3.交通燈控制系統(tǒng)結(jié)構(gòu)圖
其中rst為復(fù)位信號,clk為時鐘信號,hold為特殊情況控制信號,輸入hold時兩個方向紅燈無條件亮起。
2.2 具體設(shè)計
根據(jù)整體設(shè)計要求,編寫各個功能部分Verilog 程序,設(shè)置各輸入輸出變量說明如下
clk: 為計數(shù)時鐘; qclk:為掃描顯示時鐘;
en: 使能信號,為1 的話,則控制器開始工作; rst: 復(fù)位信號,為1的話,控制及技術(shù)回到初始狀態(tài);
hoid:特殊情況控制信號,為1的話,則兩個方向無條件顯示為紅燈;
light1: 控制主干道方向四盞燈的亮滅;其中,light1[0]~light[2],分別控制主干道方向的 綠燈、黃燈和紅燈;
light2: 控制支干道方向四盞燈的亮滅;其中,light2[0] ~ light2[2],分別控制支干道方向的 綠燈、黃燈和紅燈;
num1: 用于主干道方向燈的時間顯示,8 位,可驅(qū)動兩個數(shù)碼管; num2: 用于支干道方向燈的時間顯示,8 位,可驅(qū)動兩個數(shù)碼管; counter:用于數(shù)碼管的譯碼輸出; st1,st2:數(shù)碼管掃描信號。輸入輸出及中間變量設(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ù)計數(shù)器的計數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計時數(shù)值給七段數(shù)碼管的譯碼電路。此外,當(dāng)檢測到特殊情況(hold=‘1’)發(fā)生時,無條件點(diǎn)亮紅燈的二極管,當(dāng)檢測到復(fù)位信號,兩個方向計數(shù)與控制回復(fù)到00狀態(tài)。因為主、支干道兩個方向二極管點(diǎn)亮的順序與延遲時間不同,顧編寫兩個獨(dú)立的部分來控制,具體程序如下:
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 //使能有效開始控制計數(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ù)計時
該部分程序完成二極管發(fā)光時延的計數(shù),并將計數(shù)結(jié)果送到數(shù)碼管顯示電路,每切換到一個狀態(tài),計數(shù)器的初值都被重置,以實(shí)現(xiàn)不同顏色二極管不同的時延要求。本次設(shè)計直接用邏輯運(yùn)算完成2位十進(jìn)制數(shù)的計數(shù),未采用分位器的設(shè)計。因為主、支干道上計數(shù)器的結(jié)構(gòu)完全相同,顧只列出一路的程序,其具體程序如下所示:
always @(posedge clk)begin else begin //倒數(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個7段數(shù)碼管的譯碼顯示及掃描,使系統(tǒng)能正常顯示主、支干道兩個方向上的剩余時間。譯碼的時鐘頻率要低,為Hz級。掃描的時鐘頻率要高,最低不得小于人眼分辨頻率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è)計文件,將程序輸入,整體編譯后,新建波形仿真文件。設(shè)置仿真時間,時鐘周期,輸入輸出端口,進(jìn)行波形仿真。具體仿真波形圖及說明如下所示: 仿真截止時間:100us; 時鐘:clk 1us,qclk 0.1us 1.正常工作時波形仿真圖
圖4.正常工作時波形仿真圖
圖形說明
波形仿真主要完成了控制與計數(shù)以及數(shù)碼管顯示的波形圖。en為低電品時,計數(shù)器置初值,高電平時開始正常控制與計數(shù)。控制發(fā)光二極管首次輸出為“l(fā)ight1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計數(shù)器num1和num2從“00110101”開始遞減計數(shù),計數(shù)至“00000000”時,進(jìn)入下一個狀態(tài),控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計數(shù)器num1和num2從“00000101”開始計數(shù)遞減,計數(shù)至”00000000”時進(jìn)入下一個狀態(tài),light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮。Counter根據(jù)num1,num2變化隨時鐘上升沿輸出譯碼后的數(shù)據(jù)。由于屏幕顯示大小有限,未仿真出一個完整周期。
2.特殊情況仿真波形
圖5.特殊情況仿真波形
圖形說明
當(dāng)hold輸入高電平時,在時鐘上升沿的控制下,light 1與light2被強(qiáng)制置位為”100”,表示兩路紅燈均亮起
3.復(fù)位情況仿真波形
圖6.復(fù)位情況仿真波形
圖形說明
當(dāng)rst輸入高電平時,在時鐘上升沿控制下,計數(shù)與控制都回到00狀態(tài),即light1=001,light2=100,計數(shù)器num1和num2從“00110101”開始遞減計數(shù)。
第四章 設(shè)計總結(jié)
4.1 總結(jié)
在設(shè)計中采用V erilog HDL語言設(shè)計交通燈控制系統(tǒng), 借助其功能強(qiáng)大的語言結(jié)構(gòu), 簡明的代碼描述復(fù)雜控制邏輯設(shè)計, 與工藝無關(guān)特性, 在提高工作效率的同時達(dá)到求解目的, 并可以通過V erilog HDL 語言的綜合工具進(jìn)行相應(yīng)硬件電路生成, 具有傳統(tǒng)邏輯設(shè)計方法所無法比擬的優(yōu)越性。
在設(shè)計過程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過但仿真出不了正確的波形,不是計數(shù)器無法正常計數(shù),就是控制輸出無法進(jìn)入到下一個狀態(tài),每次出現(xiàn)問題就必須返回重新修改程序。實(shí)踐證明,在編寫一個較復(fù)雜的程序時,一開始一定要畫流程圖,弄清楚各個功能及實(shí)現(xiàn)它們的邏輯算法,做到心中有數(shù)后在開始下筆寫編寫程序。在編寫的時候要尤其要注意語言的規(guī)范,如本次設(shè)計中編寫的V erilog在Quartus7.0中可以正常生成時序圖,而在低版本的軟件中卻無法生成,原因就是語言使用不規(guī)范,在解決這個問題時我總結(jié)了一些經(jīng)驗,首先程序要邏輯清晰,簡潔明了,避免不必要的嵌套與條用,其次要適當(dāng)?shù)亟o程序加上注解文字,提高可讀性,以方便之后的程序出錯時進(jìn)行查找,最后充分利用仿真軟件提供的各項編譯工具與報錯消息,按圖索驥,有方向的完成程序調(diào)試。
完成仿真后進(jìn)行,進(jìn)行試驗箱上的硬件調(diào)試,該步驟主要是要求細(xì)心,按照引腳清單,逐一完成連線,本次設(shè)計用到兩個時鐘輸入,注意一定要選擇合適頻率的時鐘,以便達(dá)到期望的效果。注意觀察實(shí)物的現(xiàn)象,看是否滿足設(shè)計要求,不滿足時檢查是硬件問題還是程序問題,如果是程序問題,在修改完之后必須要重新編譯,重新燒入。不斷排查錯誤,直至達(dá)到滿意的效果。
通過這次課程設(shè)計,熟悉了簡單EDA設(shè)計的整個流程,加深了對Verilog HDL硬件描述語言的理解,提高了動手能力,并且鍛煉了自己的耐心,收獲頗豐,我會把在本次課程設(shè)計中學(xué)到的東西應(yīng)用到今后的工作學(xué)習(xí)中。最后感謝同學(xué)及老師提供的幫助與指導(dǎo)。4.2參考資料
[1] 夏宇聞.復(fù)雜數(shù)字電路與系統(tǒng)的V erilog HDL設(shè)計技術(shù) [M ].北京: 北京航空航天大學(xué)出版社, 1998 [2] 郭梯云.移動通信[M ].西安: 西安電子科技大學(xué)出版社, 1995 [3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 數(shù)字移動通信系統(tǒng)[M ].駱健霞, 顧龍信, 徐云霄譯.北京: 電子工業(yè)出版社, 1996 [4] 張毅剛, 喬立巖.虛擬儀器軟件開發(fā)環(huán)境L abW indow s?CV I 610 編程指南[M ].北京: 機(jī)械工業(yè)出版社, 2002 [5] 劉國權(quán).GSM 手機(jī)的測試[J ].中國無線電管理, 2003 [6] 俞定玖, 劉湘慧.GSM 數(shù)字蜂窩移動交換系統(tǒng)測試[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è)置計數(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 //使能有效開始控制計數(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ù)計時
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ù)計時
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