第一篇:基于FPGA的交通燈控制電路的設(shè)計
編號:
EDA技術(shù)
實(shí)訓(xùn)(論文)說明書
題 目: 交通燈控制電路的設(shè)計 院(系): 信息與通信學(xué)院 專 業(yè): 電子信息工程 學(xué)生姓名: 學(xué) 號: 指導(dǎo)教師:
2013年月日
桂林電子科技大學(xué)實(shí)訓(xùn)說明書用紙
摘要
EDA工具對于電子設(shè)計人員來說極其重要,它可以在電子設(shè)計的各個階段、層次進(jìn)行計算機(jī)模擬驗(yàn)證,確保設(shè)計的準(zhǔn)確性,可縮短設(shè)計周期,降低設(shè)計成本。交通燈可以實(shí)現(xiàn)十字路口紅綠燈的自動控制?;贔PGA的交通燈設(shè)計系統(tǒng)具有可靠性強(qiáng)、實(shí)時快速擦寫、運(yùn)算速度高、故障率低、電路簡單,且體積小的特點(diǎn)。本設(shè)計采用的是Altera公司CycloneII系列的EP2C5T144芯片作為核心最小系統(tǒng),它可以方便嵌入到實(shí)際的交通燈應(yīng)用系統(tǒng)中,可以完成簡單的邏輯控制、數(shù)據(jù)采集、信號處理、數(shù)學(xué)計算等功能;使用QuartusII軟件作為開發(fā)平臺;采用自頂向下的設(shè)計思路對系統(tǒng)進(jìn)行模塊化設(shè)計和綜合,并通過波形仿真和硬件實(shí)現(xiàn)兩種方式實(shí)現(xiàn)并驗(yàn)證交通燈的功能。關(guān)鍵詞:交通燈、EDA、FPGA
桂林電子科技大學(xué)實(shí)訓(xùn)說明書用紙
Abstract EDA tools for electronic design personnel is very important, it can be in the electronic design of each stage, levels of computer simulation verification, to ensure the accuracy of the design, can shorten the design cycle, reduce design cost.The traffic light can realize intersection traffic light automatic control.Based on the FPGA of traffic light design system has the reliability, real-time fast operation speed is high, integration.it, low failure rate, circuit is simple, and the characteristics of small volume.This design USES is Altera company CycloneII series of EP2C5T144 chip as the core minimum system, it can be convenient to the actual traffic lights embedded application system, can complete the simple logic control, data acquisition, signal processing, mathematical calculations, etc;Use QuartusII software as a development platform, Using the top-down design idea of system modular design and comprehensive, and through the waveform simulation and hardware realization two ways to realize and verify the function of the traffic lights.Key words: traffic lights;EDA;FPGA
桂林電子科技大學(xué)實(shí)訓(xùn)說明書用紙
引言
“EDA技術(shù)”是一門實(shí)踐性和實(shí)用性都很強(qiáng)的課程,學(xué)習(xí)的目的在于應(yīng)用。本設(shè)計實(shí)訓(xùn)是配合“EDA技術(shù)”課堂教學(xué)的一個重要的實(shí)踐教學(xué)環(huán)節(jié),在本課程設(shè)計指導(dǎo)書中列舉了一些常用的小型設(shè)計系統(tǒng),旨在起到鞏固課堂和書本上所學(xué)知識,加強(qiáng)綜合能力,提高系統(tǒng)設(shè)計水平,啟發(fā)創(chuàng)新思想的效果。
1設(shè)計任務(wù)與要求
1.1本綜合設(shè)計實(shí)訓(xùn)任務(wù)的內(nèi)容和要求
① 用EDA實(shí)訓(xùn)儀上的4只八段數(shù)碼管分別顯示道路東西和南北通行和禁止的倒計時時間。
② 能設(shè)置道路東西和南北兩側(cè)通行和禁止的倒計時時間,最大設(shè)置時間為99秒,最小設(shè)置時間為1秒。
③ 交通燈用紅、綠、黃三種發(fā)光二極管(LED)顯示控制的結(jié)果。④ 紅、綠、黃燈顯示的次序應(yīng)符合實(shí)際交通道路控制的要求。系統(tǒng)概述及設(shè)計原理
2.1 系統(tǒng)的主要功能
交通燈控制電路是用于城市交通疏導(dǎo)的管理系統(tǒng),它是現(xiàn)代城市交通監(jiān)控指揮系統(tǒng)中最重要的組成部分。交通信號燈指揮著人和各種車輛的安全運(yùn)行,實(shí)現(xiàn)紅、黃、綠燈的自動指揮是城鄉(xiāng)交通管理現(xiàn)代化的重要課題。在城鄉(xiāng)街道的十字交叉路口,為了保證交通秩序和行人安全,一般在每條道路上各有一組紅、黃、綠交通信號燈。交通燈控制電路自動控制十字路口兩組紅、黃、綠交通燈的狀態(tài)轉(zhuǎn)換,指揮各種車輛和行人安全通行,實(shí)現(xiàn)十字路口城鄉(xiāng)交通管理自動化。設(shè)計一個十字路口交通控制器,方向分為東南西北四個方向。東西方向的紅綠燈狀態(tài)一樣,南北方向的紅綠燈狀態(tài)一樣。每個方向上,有四盞燈,分別是左轉(zhuǎn)燈、紅燈、綠燈和黃燈。左拐燈亮表示左轉(zhuǎn)車輛可以通行;紅燈亮表示左轉(zhuǎn)和直行車輛禁行;綠燈亮表示直行車輛和右轉(zhuǎn)的車輛可以通行;黃燈亮表示左轉(zhuǎn)和直行的車輛即將禁行。
本論文簡要介紹了FPGA器件的特點(diǎn)和設(shè)計意義,以QuartusII軟件為開發(fā)平臺,通過VHDL硬件描述語言以及原理圖的輸入方式來設(shè)計交通燈。交通燈控制器用于自動控制十字路口交通燈和計時器。
系統(tǒng)的主要功能模塊方框圖如圖2-1所示
桂林電子科技大學(xué)實(shí)訓(xùn)說明書用紙
圖2-1 系統(tǒng)主要功能模塊
2.2交通燈的設(shè)計原理
交通燈控制電路的原理框圖如圖1.3所示。其中,clkgen是分頻器,將EDA實(shí)訓(xùn)儀主板提供的20MHz的主頻經(jīng)20000000分頻后,得到電路所需的1Hz(秒)時鐘。Cnt10de(兩個)是十進(jìn)制減法計數(shù)器,產(chǎn)生道路東西和南北通行和禁止的倒計時時間。Contr是控制電路,控制整個系統(tǒng)的工作??刂破鹘邮盏褂嫊r的結(jié)果,當(dāng)?shù)褂嫊r歸0時,改變電路的控制模式,輸出倒計時的初始時間和交通燈亮滅控制信號。
圖2-2 交通燈控制電路的原理圖 系統(tǒng)各個模塊的的設(shè)計與仿真
3.1 分頻器模塊的設(shè)計
由于采用的FPGA芯片的時鐘頻率是50MHz,需要將其分頻為1Hz。該模塊即是實(shí)現(xiàn)50M的分頻,將頻率變?yōu)?Hz的脈沖波,從而得到周期為1s的脈沖波。如果要真正的實(shí)現(xiàn)分頻50M,在仿真結(jié)果圖中是很難觀察的,甚至是沒有辦法驗(yàn)證的,故在仿真過程中,將分頻的倍數(shù)變小,變?yōu)?0分頻,這樣從圖中可容易的得到并驗(yàn)證對時鐘輸入信號的20分頻,如圖3-1所示,Reset是復(fù)位信號,CLK_50MHz是輸入時鐘頻率,CLK_1Hz是
桂林電子科技大學(xué)實(shí)訓(xùn)說明書用紙
輸出時鐘頻率,從圖中可以看出,輸出頻率CLK_1Hz確實(shí)是輸入時鐘頻率CLK_50MHz的20分頻。
圖3-1 分頻器仿真圖
3.2 狀態(tài)控制模塊的設(shè)計
狀態(tài)控制模塊根據(jù)輸入CLK_1Hz的脈沖信號輸出不同的STATUS值,下游的模塊依據(jù)STATUS的值來確定紅綠燈的狀態(tài);于此同時對倒計時信號賦初值。在狀態(tài)控制模塊仿真圖中,輸入信號CLK是一個頻率為1Hz的時鐘脈沖信號,RESET是復(fù)位信號;輸出信號STATUS是狀態(tài)轉(zhuǎn)換信號,控制著下游交通信號燈顯示模塊的顯示情況;LOAD_EW、LOAD_SN是東西、南北方向倒計時開始控制信號,DJS_EW、DJS_SN是東西、南北方向倒計時間信號。其仿真結(jié)果圖如圖3-2所示,由圖可得,STATUS共有000(S1)、001(S2)、010(S3)、011(S4)、100(S5)、101(S6)共6個狀態(tài),80s為紅燈和左轉(zhuǎn)燈的倒計時間,45s為綠燈的倒計時間,5s是黃燈的倒計時間,和狀態(tài)轉(zhuǎn)換表的狀態(tài)一致。
圖3-2 狀態(tài)控制模塊仿真圖
3.3 交通燈信號燈顯示模塊的設(shè)計
交通信號燈顯示模塊根據(jù)輸入的STATUS信號,輸出對應(yīng)的紅綠黃燈信號,并直接驅(qū)動交通信號燈的亮滅。在交通燈信號燈顯示模塊程序仿真結(jié)果圖中,STATUS為輸入信號,而它依賴于狀態(tài)控制模塊產(chǎn)生的信號STATUS信號,一種六種狀態(tài),依次為000(S1)、001(S2)、010(S3)、011(S4)、100(S5)、101(S6);EW_LRGY(8位)是東西方向上交通信號燈的狀態(tài),SN_LRGY(8位)是南北方向上交通信號燈的狀態(tài),依次為左轉(zhuǎn)、紅、綠、黃,對應(yīng)著EW_LRGY、SN_LRGY的前四位,‘1’表示點(diǎn)亮,‘0’表示熄滅,后四位均為0,表示四個燈的陰極接負(fù)極。例如,在STATUS為001時,對應(yīng)的是東西方向紅燈亮,南北方向綠燈亮,仿真結(jié)果符合預(yù)期,完全正確。其仿真圖如3-3所示:
圖3-3 信號燈顯示模塊仿真圖
桂林電子科技大學(xué)實(shí)訓(xùn)說明書用紙
3.4東西方向倒計時模塊設(shè)計
東西方向倒計時模塊用來接收狀態(tài)控制模塊的輸出并作為初值,每檢測到一個CLK脈沖信號,就進(jìn)行減一動作,最后把減一結(jié)果輸出。在該模塊仿真圖中,CLK為1Hz的輸入信號,LOAD_EW為計數(shù)器的裝載信號,當(dāng)其為高電平時,將輸入信號DJS_EW_IN的值裝載到計數(shù)器中,并開始進(jìn)行減一操作,每遇一個CLK脈沖,進(jìn)行一次減一操作,并將結(jié)果輸出,由于輸入的時鐘頻率是1Hz,所以顯示的時間間隔是1s,與現(xiàn)實(shí)生活中的時間保持一致。其仿真結(jié)果如圖3-4所示,由圖可得,該模塊首先將80秒的倒計時信號裝載進(jìn)去,并進(jìn)行減一操作。
圖3-4 東西方向倒計時仿真圖
3.5 南北方向倒計時模塊設(shè)計
南北方向倒計時模塊用來接收狀態(tài)控制模塊的輸出并作為初值,每檢測到一個CLK脈沖信號,就進(jìn)行減一動作,最后把減一結(jié)果輸出。在該模塊仿真圖中,CLK為1Hz的輸入信號,LOAD_SN為計數(shù)器的裝載信號,當(dāng)其為高電平時,將輸入信號DJS_SN_IN的值裝載到計數(shù)器中,并開始進(jìn)行減一操作,每遇一個CLK脈沖,進(jìn)行一次減一操作,并將結(jié)果輸出,由于輸入的時鐘頻率是1Hz,所以顯示的時間間隔是1s,與現(xiàn)實(shí)生活中的時間保持一致。其仿真結(jié)果如圖3-5所示,由圖可得,該模塊將45秒的倒計時信號裝載進(jìn)去,并進(jìn)行減一操作。
圖3-5南北方向倒計時仿真圖
3.6 譯碼模塊設(shè)計
譯碼模塊程序用來將輸入的兩位倒計時數(shù)值,分解成兩個整形數(shù)值,以此供后面的譯碼顯示模塊譯碼顯示。在譯碼程序TO_8421_BCD模塊仿真圖中,DJS_EW_OUT,DJS_SN_OUT為上一倒計時模塊的輸出信號,其范圍在0~80,所有倒計時的范圍都包含其內(nèi);DJS_EW_OUT_SW,DJS_EW_OUT_GW,DJS_SN_OUT_SW,DJS_SN_OUT_GW為輸出信號,其范圍為0~9,代表了各個方向的倒計時的十位和個位,且數(shù)碼管所有顯示數(shù)字的范圍均在其內(nèi)。例如圖中DJS_EW_OUT的值不斷變化,相應(yīng)的依次將其分解為十位(DJS_EW_OUT_SW)和個位(DJS_EW_OUT_GW),并依次遞減,仿真結(jié)果符合預(yù)期,完全正確。仿真結(jié)果如圖3-6所示:
桂林電子科技大學(xué)實(shí)訓(xùn)說明書用紙
圖3-6 譯碼仿真結(jié)果圖
3.7 譯碼顯示模塊設(shè)計
譯碼顯示模塊將上一模塊譯碼模塊輸出的四個一位數(shù)譯碼成相對應(yīng)的七位數(shù)碼管段碼,完成倒計時的譯碼和顯示。在譯碼顯示模塊仿真圖中,DJS_ EW_OUT_ SW,DJS_EW_OUT_GW,DJS_SN_OUT_SW,DJS_SN_OUT_GW是四位的輸入信號,也是上一模塊TO_8421_BCD的輸出信號,它們的范圍為數(shù)字0~9,DJS_EW_ OUT_SW1,DJS_ EW_ OUT_GW1,DJS_SN_OUT_SW1,DJS_SN_OUT_GW1對應(yīng)的是相應(yīng)的七位數(shù)碼管顯示段碼的值。圖中輸出信號的值隨著輸入信號的變化而相應(yīng)的變化,例如DJS_EW_OUT_SW為7,DJS_EW_OUT_GW為5時,DJS_EW_OUT_SW1為00000111(a、b、c、d、e、f、g依次對應(yīng)著1110000,最高位的0表示是數(shù)碼管的類型是共陰的),表示數(shù)碼管顯示7,DJS_EW_OUT_GW1為01101101,表示數(shù)碼管顯示5。仿真完全正確,符合預(yù)期。其仿真結(jié)果如圖3-7所示:
圖3-7 譯碼顯示模塊仿真圖
3.8 頂層文件模塊設(shè)計
頂層設(shè)計采用VHDL語言描述方式實(shí)現(xiàn),并在工程文件仿真過后通過工具菜單自動生成原理圖文件,從而是設(shè)計原理更加清晰明朗。
在頂層設(shè)計VHDL描述中,共包含7個元件,分別是:
1、分頻器模塊,2、狀態(tài)控制模塊,3、交通信號燈顯示模塊,4、東西方向倒計時模塊設(shè)計,5、南北方向倒計時模塊設(shè)計,6、譯碼模塊設(shè)計,7、譯碼顯示模塊設(shè)計。這7個模塊經(jīng)過程序設(shè)計、編譯仿真,結(jié)果均能夠達(dá)到設(shè)計要求。最后在頂層設(shè)計中,通過元件例化語句將這7個模塊連接起來,生成頂層文件。在頂層設(shè)計中,RESET是復(fù)位信號,輸入的時鐘頻率CLK是50MHz,經(jīng)過分頻50M的分頻器后,變?yōu)轭l率為1Hz的時鐘信號,周期為1s,用此時鐘信號來控制整個系統(tǒng)的步調(diào),與現(xiàn)實(shí)生活中交通燈的步調(diào)保持一致。EW_LRGY、SN_LRGY分別為東西和南北方向上交通信號燈的狀態(tài),EW_DJS_DISPLAY、SN_DJS_DISPLAY為東西
桂林電子科技大學(xué)實(shí)訓(xùn)說明書用紙
和南北方向紅綠燈倒計時間。另外,所有的數(shù)碼管和二極管均為共陰極顯示。例如,在EW_LRGY為01000000(即東西方向紅燈亮)、SN_LRGY為10000000(即南北方向左轉(zhuǎn)燈亮)時,EW_DJS_DISPLAY的前八位表示倒計時的十位,后八位表示倒計時的個位;圖中EW_DJS_DISPLAY的前八位都是00000111表示7,后八位01111101表示6,后八位01101101表示5,后八位01100110表示4;SN_DJS_DISPLAY的前八位是01001111表示3,后八位01011011表示2,后八位00000110表示1,后八位00111111表示0,以上表明紅綠燈和倒計時時間顯示符合預(yù)期。仿真結(jié)果如圖3-8所示:
圖3-8 頂層文件波形仿真圖 實(shí)訓(xùn)心得體會
本次EDA技術(shù)實(shí)訓(xùn)的交通燈采用的是Altera公司CycloneII系列的EP2C5T144芯片作為核心最小系統(tǒng),它可以方便嵌入到實(shí)際的交通燈應(yīng)用系統(tǒng)中,可以完成簡單的邏輯控制、數(shù)據(jù)采集、信號處理、數(shù)學(xué)計算等功能;使用QuartusII軟件作為開發(fā)平臺;采用自頂向下的設(shè)計思路對系統(tǒng)進(jìn)行模塊化設(shè)計和綜合,并通過波形仿真和硬件實(shí)現(xiàn)兩種方式實(shí)現(xiàn)并驗(yàn)證交通燈的功能。為期兩周的實(shí)訓(xùn),我利用網(wǎng)絡(luò)和圖書館的有效資源,搜集并下載了大量的關(guān)于用FPGA做交通燈設(shè)計的資料;然后精心閱讀,在老師的指導(dǎo)督促下,并和周圍同學(xué)進(jìn)行有效學(xué)習(xí)和溝通,最終確定了自己的設(shè)計方案;最后按照既定的設(shè)計方案,通過努力有步驟的實(shí)現(xiàn)了交通燈的設(shè)計。
通過此次實(shí)訓(xùn)設(shè)計,讓我加深了FPGA的理解,更加熟練了VHDL語言,同時,我深深體會到了通過FPGA設(shè)計數(shù)字電路的方便、簡潔的特點(diǎn),這讓我相信未來數(shù)字電路的應(yīng)用必將更加廣泛。另外,我還體會到:從事開發(fā)設(shè)計工作,一定要保持個勤奮、踏實(shí)、嚴(yán)謹(jǐn)?shù)墓ぷ鲬B(tài)度,這樣才能更好的完成工作。最后,我覺得在交通燈控制系統(tǒng)設(shè)計中還可以增加一些實(shí)用功能,如:
1、針對弱視或色盲人群進(jìn)行聲音提示;
2、在遇到突發(fā)狀況時,可以將紅綠燈改為緊急模式控制;
3、當(dāng)有119、120等特種車輛通過時,系統(tǒng)可轉(zhuǎn)為特種車放行,其他車輛禁行。
但是這次實(shí)訓(xùn)我也發(fā)現(xiàn)自己的很多不足之處。在設(shè)計過程中我發(fā)現(xiàn)自己考慮問題很不全面,自己的專業(yè)知識掌握的很不牢靠,所掌握的編程語句還不夠,很多程序都看不懂,我希望自己的這些不足之處能在今后的工作和學(xué)習(xí)中得到改善。而且,通過這次實(shí)訓(xùn),我懂得了學(xué)習(xí)的重要性,學(xué)會了堅持和努力,這將為以后的學(xué)習(xí)做出了最好的榜樣!
桂林電子科技大學(xué)實(shí)訓(xùn)說明書用紙
還有光有知識是不行的,還得有能力、有技術(shù),單干也是不行的,要適當(dāng)尋求合作,那樣才能更好實(shí)現(xiàn)我們的價值。在實(shí)訓(xùn)中及社會上,我們都要懂得虛心地向別人學(xué)習(xí),即使你覺得自己很厲害,但總有一些東西你是不懂的,所以不懂要多向別人請教,這樣才能更好地提高自己的水平和能力,全面發(fā)展自己。
桂林電子科技大學(xué)實(shí)訓(xùn)說明書用紙
謝 辭
在這短短的兩周EDA實(shí)訓(xùn)中,在這期間同學(xué)們都在努力學(xué)習(xí),認(rèn)真做自己各自的實(shí)訓(xùn)。在此我要特別感謝各位指導(dǎo)老師們對我的指導(dǎo),還有各位同學(xué)對我的幫助,尤其感謝老師在百忙之中抽出時間為我們講解設(shè)計原理,同時,還要感謝和我一起努力的各位同學(xué),在他們對我的幫助很我自己的努力下,我才能順利地完成這次實(shí)訓(xùn)。
這次實(shí)訓(xùn)我受匪頗多,但這多是得益于老師無微不至的關(guān)心和細(xì)心的教導(dǎo)。在實(shí)訓(xùn)中,讓我學(xué)到了不少知識,給了我一次復(fù)習(xí)學(xué)過的知識的機(jī)會,鞏固了基礎(chǔ)知識。也多虧同學(xué)們的無私的幫助和支持,在我無助的時候還是他們伸出他們的友愛之手,幫我渡過難關(guān),在此我也真心的多謝他們默默的幫助。最后再次對老師們說聲:謝謝!
桂林電子科技大學(xué)實(shí)訓(xùn)說明書用紙
參考文獻(xiàn)
[1] 潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程(第三版).北京:科學(xué)出版社,2010.1 [2] 劉江海,涂傳威,陳瑋.EDA技術(shù)課程設(shè)計.武漢:華中科技大學(xué)出版社,2009.5 [3] 夏路易.基于EDA的電子技術(shù)課程設(shè)計.北京:電子工業(yè)出版社,2009.1 [4] 王金明,周順.數(shù)字系統(tǒng)設(shè)計與VHDL.北京:電子工業(yè)出版社,2010.5 [5] 鄒彥,莊嚴(yán),鄒寧.EDA技術(shù)與數(shù)字系統(tǒng)設(shè)計.北京:電子工業(yè)出版社,2007.4 [6] 林明權(quán),馬維旻.VHDL數(shù)字控制系統(tǒng)設(shè)計范例.北京:電子工業(yè)出版社,2003.1
第二篇:基于FPGA的交通燈控制電路設(shè)計
基于FPGA的交通燈控制電路設(shè)計
關(guān)鍵字: 交通信號機(jī) FPGA 脈沖發(fā)生器
目前交通燈廣泛應(yīng)用于道路交通建設(shè)中。本文設(shè)計一個十字路口交通燈控制電路,要求東西、南北兩條干道的紅、綠、黃交通燈按要求循環(huán)變化,并以倒計時方式指示干道通行或禁止的維持時間。在QuartusⅡ軟件環(huán)境中設(shè)計、仿真,并在FPGA實(shí)驗(yàn)板上實(shí)現(xiàn)所設(shè)計電路的功能。
系統(tǒng)概述
1.1 設(shè)計思想
基于FPGA的交通燈系統(tǒng)控制設(shè)計包括4大模塊,分別為脈沖發(fā)生、狀態(tài)定時、交通燈閃爍的控制、閃爍時間的控制,基本原理如圖1所示。
1.2 總體工作情況
交通燈控制要求如表1所示。
該設(shè)計的交通燈控制分為6個狀態(tài)。由于各狀態(tài)持續(xù)時間不同,所以電路的核心控制部分是狀態(tài)機(jī)和定時器,狀態(tài)機(jī)在定時器觸發(fā)下周期性循環(huán),狀態(tài)碼控制6個燈以一定的規(guī)律變化。變化情況如圖2所示。
系統(tǒng)脈沖由FPGA開發(fā)板晶振經(jīng)過分頻電路實(shí)現(xiàn)。狀態(tài)定時由74190可逆十進(jìn)制計數(shù)器和T’觸發(fā)器實(shí)現(xiàn),只要置數(shù)合理,翻轉(zhuǎn)信號到位,就可以使電路在東西(I)、南北(J)兩個控制狀態(tài)間翻轉(zhuǎn)。紅、黃、綠燈的閃爍由7485數(shù)字比較器和組合邏輯控制,其中7485數(shù)字比較器用于比較計數(shù)器當(dāng)前持續(xù)狀態(tài)和所需要的狀態(tài)全部時間,并做出相應(yīng)的變化。組合邏輯控制由AHDL文件編寫真值表實(shí)現(xiàn)。時間顯示由AHDL文件編寫真值表實(shí)現(xiàn),輸入正確的邏輯,七段譯碼電路即能得到正確的時間顯示。
1.3 各功能的組成
整個電路可以分為4大部分,包括脈沖發(fā)生、狀態(tài)定時、時間顯示和數(shù)字比較一組合邏輯控制。
1.3.1 脈沖發(fā)生
脈沖發(fā)生器為整個系統(tǒng)提供驅(qū)動,將輸入端分配給FPGA實(shí)驗(yàn)板的PIN55引腳,則會由實(shí)驗(yàn)板上產(chǎn)生頻率為10 MHz的輸入脈沖,用7片7490,每一級都構(gòu)成10分頻電路,使頻率從10 MHz降低為1Hz。
1.3.2 狀態(tài)定時
狀態(tài)定時可由預(yù)置BCD碼初值的74190級聯(lián)實(shí)現(xiàn),構(gòu)成減計數(shù)器。級聯(lián)原則是:低位計數(shù)器從全0狀態(tài)變?yōu)樽畲蟠a值狀態(tài)時可使高位計數(shù)器減1。級聯(lián)方式分為異步和同步兩種,本文采取的是異步級聯(lián)方式,即低位計數(shù)器溢出信號控制高位計數(shù)器的記數(shù)脈沖輸入端。可根據(jù)計數(shù)器的時鐘觸發(fā)方式,在低位計數(shù)器狀態(tài)碼從全“0”變?yōu)樽畲蟠a值的瞬間,為高位計數(shù)器提供有效的計數(shù)脈沖邊沿。具體做法是將低片位的溢出信號RCON端口接到高片位的計數(shù)脈沖CLK,實(shí)現(xiàn)兩位BCD碼的置數(shù)、翻轉(zhuǎn)和借位,使系統(tǒng)表示的數(shù)字能在22~16之間循環(huán)。
74190功能說明:
(1)GN為計數(shù)器使能控制端,低電平有效。當(dāng)GN為高電平時,禁止計數(shù)。
(2)DNUP為計數(shù)方式控制,接高電平為減計數(shù),接低電平為加計數(shù)。
(3)LDN為異步預(yù)置數(shù)控制。當(dāng)LDN為低電平時,計數(shù)器狀態(tài)QD,QC,QB,QA分別等于D,C,B,A。
(4)計數(shù)器位序由高至低順序?yàn)镼D,QC,QB,QA。QD為最高位MSB,QA為最低位LSB。
(5)計數(shù)脈沖CLK上升沿有效。
(6)當(dāng)計數(shù)器輸出QDQCQBQA為十進(jìn)制加計數(shù)的最大狀態(tài)碼“1001”或?yàn)闇p計數(shù)的最小狀態(tài)碼全“0”時,極值狀態(tài)碼指示MAX/MIN輸出為高電平。
(7)當(dāng)極值狀態(tài)碼指示MAX/MIN為高電平且CLK為低電平時,溢出信號RCON為低電平,即RCON與計數(shù)脈沖同步。
系統(tǒng)記數(shù)脈沖為1 Hz時,如表2所示,當(dāng)I狀態(tài)(東西控制狀態(tài))的定時時間為22 s,計數(shù)器應(yīng)該先預(yù)置22的BCD碼;同理,J狀態(tài)(南北控制狀態(tài))之前應(yīng)該預(yù)置16的BCD碼。
狀態(tài)計時電路由兩片74190級聯(lián)而成,構(gòu)成22和16自翻轉(zhuǎn)的電路。其要解決的核心問題包括置數(shù),翻轉(zhuǎn)和借位。根據(jù)74190芯片的特點(diǎn),可分析其實(shí)現(xiàn)原理如圖4所示,通過溢出信號RCON的上升沿實(shí)現(xiàn)借位,使得數(shù)字能夠從20到19,個位向十位借位,順利過渡。
置數(shù)和翻轉(zhuǎn)之間有先后關(guān)系,即須先置數(shù)后翻轉(zhuǎn)。如表3所示,分析兩個BCD碼各位特點(diǎn),可知兩者D7D6D3D0位均為1,D1位均為0,而D5D4D2位不同,如圖5,D5D4D2位由狀態(tài)電平S來控制,當(dāng)為I狀態(tài)時,計數(shù)器的預(yù)置的數(shù)為D5=0,D4=D2=1,而為J狀態(tài)時,計數(shù)器的預(yù)置的數(shù)為D5=1,D4=D2=0,根據(jù)74190的功能,將2片74190的MAX/MIN引出,通過與非門,分別連在高位和低位的LDN置數(shù)端,通過分析可知,當(dāng)計數(shù)器從01減到00時候,高低位的MAX/MIN均為高電平,經(jīng)過與非門以后為低電平,74190被置數(shù),其置數(shù)值由狀態(tài)S來決定,S是由LDN端信號經(jīng)過一個T’觸發(fā)器決定的,即LDN信號每置數(shù)一次,S翻轉(zhuǎn)1次,從而區(qū)分16和22狀態(tài)。按這個結(jié)構(gòu),可分別置數(shù)16和22,使其實(shí)現(xiàn)自翻轉(zhuǎn)。
圖5為狀態(tài)定時模塊的實(shí)際連接圖。
1.3.3 時間顯示
時間顯示要用到7段顯示譯碼電路,由于是兩位BCD碼,故用二選一數(shù)據(jù)選擇器。選擇端S接一個頻率很高的方波(如1 kHz);數(shù)據(jù)比較器的輸出和1 Hz脈沖作為AHDL模塊的輸入,即可正確顯示時間。
為正確顯示時間,用AHDL文件自編譯碼真值表如下:
1.3.4 數(shù)字比較一組合邏輯控制
該模塊將狀態(tài)定時模塊輸出的時間與時間節(jié)點(diǎn)進(jìn)行比較,從而確定電路處于22 s或者16 s的具體的某個狀態(tài)。由表1可知,東西(I)或南北(J)的控制狀態(tài)都有3個階段的控制邏輯,分別對應(yīng)3個時間段:1~3 s,4~6 s和大于6 s,因此,采用數(shù)字比較器進(jìn)行比較,確定定時值小于4 s或大于6 s,方法如圖7所示,采用4片7485數(shù)字比較器,兩兩級聯(lián),其中一個由狀態(tài)定時模塊的輸出與4即二進(jìn)制0100比較;另一個由狀態(tài)定時模塊的輸出與6即二進(jìn)制0110比較。
編寫組合邏輯真值表,將狀態(tài)信號S,兩個數(shù)字比較器的輸出Y1,Y2和1 Hz脈沖作為輸入,各個燈的狀態(tài)作為輸出。從而根據(jù)邏輯關(guān)系得出對應(yīng)時間電路的狀態(tài),控制紅、黃、綠燈處于不同的狀態(tài)。S判斷電路處于22 s狀態(tài)還是16 s狀態(tài),Y1,Y2區(qū)分東西、南北六個階段狀態(tài),1 Hz脈沖實(shí)現(xiàn)綠燈閃爍。電路的組構(gòu)與調(diào)試
來用QuartusⅡ軟件設(shè)計各個模塊,并進(jìn)行仿真。確認(rèn)結(jié)果后,下載至FPGA實(shí)驗(yàn)板中,進(jìn)行相應(yīng)的硬件調(diào)試,調(diào)試結(jié)果與仿真結(jié)果相一致。圖8為仿真波形,系統(tǒng)上電需要調(diào)整的過程,因此電路正常工作前重復(fù)了22s的狀態(tài)。
第三篇:基于51單片機(jī)的交通燈控制電路設(shè)計
交通燈
一、功能要求
要求甲車道和乙車道兩條交叉道路上的車輛交替運(yùn)行,每次通行時間都設(shè)為25秒,黃燈先亮5秒鐘,才能變換運(yùn)行車道;黃燈亮?xí)r,要求每秒鐘閃亮一次。
二、電路圖
說明:1)每一位數(shù)碼管位選要分開,對應(yīng)IO口參照程序中紅色部分 2)圖示數(shù)碼管為共陽,沒加驅(qū)動數(shù)碼管顯示較暗,建議加驅(qū)動
三、程序
//TrafficLight.c #include“reg52.h”
//IO口定義 sbit red_1 =P2^0;//南北方向 sbit red_2 =P2^3;//東西方向 sbit yellow_1 =P2^1;sbit yellow_2 =P2^4;sbit green_1 =P2^2;sbit green_2 =P2^5;sbit com1_1 =P3^6;//十位 南北方向 數(shù)碼管位選 sbit com1_2 =P3^7;//個位 南北方向 sbit com2_1 =P3^4;//十位 東西方向 sbit com2_2 =P3^5;//個位 東西方向
//全局變量 char time=30;//倒計時
unsigned char num1=0,num2=0;//輔助計時 unsigned char flag1=0,flag2=0;//黃燈閃標(biāo)志位 unsigned char shi1,shi2,ge1,ge2;//數(shù)碼管十位個位
const unsigned char ledNum[] =
{// 0 1
A
b
c
d
E
F
不顯示-o(18)H(19)h(20)C(21)0(22)n(23)0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8e,0xFF,0xbf,0xa3,0x89,0x8b,0xc6,0xc0,0xab };//共陽數(shù)碼管
//中斷優(yōu)先級別T0>T1,數(shù)碼管顯示中斷間隔2ms,計時時間間隔50ms //計時要求比較精確,間隔長,不應(yīng)該被打斷,故中斷優(yōu)先級要高,使用T0 //數(shù)碼管中斷可以被打斷,打斷時間較短,不會影響顯示,使用T1 //在交通燈中,計時和數(shù)碼管顯示一直進(jìn)行,故定時器開啟后不用停止 void InitInter(void){ TMOD=0x11;//設(shè)置定時器工作方式為16位計時器
TH0=(65535-45872)/256;//11.0592M晶振,50ms TL0=(65535-45872)%256;TH1=(65535-1835)/256;//11.0592M晶振,2ms TL1=(65535-1835)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;}
void Display(void){ static unsigned char i=1;
switch(i){ case 1:
com2_2=0;
P0=ledNum[shi1];
com1_1=1;
break;case 2:
com1_1=0;
P0=ledNum[ge1];
com1_2=1;
break;case 3:
com1_2=0;
P0=ledNum[shi2];
com2_1=1;
break;case 4:
com2_1=0;
P0=ledNum[ge2];
com2_2=1;
break;
default:;}
i++;if(i>4)i=1;}
//紅燈可以直接變成綠燈,但綠燈必須先變成黃燈再變紅燈 void main(void){ bit i=0;InitInter();
while(1){
red_1=0;//0為亮
red_2=1;
green_2=0;
time=30;
while(time>5)
{
shi1=time/10;
ge1=time%10;
shi2=(time-5)/10;
ge2=(time-5)%10;
}
green_2=1;
yellow_2=0;
flag2=1;
num2=0;
while(time>0)
{
shi1=time/10;
ge1=time%10;
shi2=time/10;
ge2=time%10;
}
flag2=0;
yellow_2=1;
red_2=0;
red_1=1;
green_1=0;
time=30;
while(time>5)
{
shi2=time/10;
ge2=time%10;
shi1=(time-5)/10;
ge1=(time-5)%10;
}
green_1=1;
yellow_1=0;
flag1=1;
num2=0;
while(time>0)
{
shi2=time/10;
ge2=time%10;
shi1=time/10;
ge1=time%10;
}
flag1=0;
yellow_1=1;
//red_1=0;
//green_2=0;} } void Timer_0(void)interrupt 1//計時 { TH0=(65535-45872)/256;TL0=(65535-45872)%256;num1++;if(num1>=20){
num1=0;
time--;
//if(time<0)time=30;
//處理time,顯示方式
} if(flag1||flag2){
num2++;
if(num2>=10)
{
num2=0;
if(flag1)yellow_1=~yellow_1;
if(flag2)yellow_2=~yellow_2;
} } }
void Timer_1(void)interrupt 3 { TH1=(65535-1835)/256;//11.0592M晶振,2ms TL1=(65535-1835)%256;
Display();}
第四篇:課程設(shè)計任務(wù)書-24交通燈控制電路設(shè)計
課程設(shè)計任務(wù)書
題目:交通燈控制電路設(shè)計
時間: 年 月 日—— 年 月 日
設(shè)計的說明:
本設(shè)計需要用到實(shí)驗(yàn)箱上交通燈模塊中的發(fā)光二極管,即紅、黃、綠各三個。依人們的交通常規(guī),“紅燈停,綠燈行,黃燈提醒”。交通燈顯示用實(shí)驗(yàn)箱的交通燈模塊和七段碼管中的任意兩個來顯示。系統(tǒng)時鐘選擇時鐘模塊的1KHz時鐘,黃燈閃爍時鐘要求為2Hz,七段碼管的時間顯示為1Hz 脈沖,即每1s 中遞減一次,在顯示時間小于3 秒的時候,通車方向的黃燈以2Hz 的頻率閃爍。系統(tǒng)中用S1 按鍵進(jìn)行復(fù)位。
設(shè)計的任務(wù)和要求:
1、在十字路口的兩個方向上各設(shè)一組紅、綠、黃燈;初始狀態(tài)是兩個路口的紅燈全亮之后,東西路口的綠燈亮,南北路口的紅燈亮,東西方向通車,延時一段時間后,東西路口綠燈滅,黃燈開始閃爍。閃爍若干次后,東西路口紅燈亮,而同時南北路口的綠燈亮,南北方向開始通車,延時一段時間后,南北路口的綠燈滅,黃燈開始閃爍。閃爍若干次后,再切換到東西路口方向,重復(fù)上述過程。
2、設(shè)置數(shù)碼管顯示允許通行或者禁止通行的時間,東西路和南北路的通車時間均設(shè)定為20s。數(shù)碼管的時間總是顯示為19、18、17……2、1、0、19、18……。在顯示時間小于3 秒的時候,通車方向的黃燈閃爍。
3、當(dāng)各條路中任意一條上出現(xiàn)特殊情況,如消防車、救護(hù)車或其他需要優(yōu)先放行的車輛時,各方向上均是紅燈亮。倒計時停止,且顯示數(shù)字在閃爍。當(dāng)特殊運(yùn)行狀態(tài)結(jié)束后,控制器恢復(fù)原來狀態(tài),繼續(xù)正常運(yùn)行。
4、要求對整體電路進(jìn)行仿真,提供仿真波形圖,并分析結(jié)果
5、硬件測試結(jié)果用照片的形式記錄下來。
提高部分:編寫能手動控制交通燈通行時間的交通燈控制器。
指導(dǎo)教師:
學(xué)生:
日期:
第五篇:交通燈控制邏輯電路設(shè)計與總結(jié)報告
交通燈控制邏輯電路設(shè)計與總結(jié)報告
一、設(shè)計任務(wù)
用CPLD設(shè)計路口交通燈控制器
二、設(shè)計要求
1、滿足一下時序要求:南北方向紅燈亮,東西方向綠燈亮;南北方向綠燈亮,東西方向紅燈亮;
2、每一方向的紅(綠)黃燈總共維持30秒;
3、十字路口要有時間顯示,具體為:當(dāng)某一方向綠燈亮?xí)r,置顯示器為30秒,然后以每秒減一技術(shù)方式工作,直至減到數(shù)為4秒時,紅綠燈熄滅,黃燈開始間隙閃耀4秒,減到0時,紅綠燈交換,一次工作循環(huán)結(jié)束,進(jìn)入下一步另一方向的工作循環(huán);
4、紅綠燈均采用發(fā)光二極管;
5、設(shè)計由晶振電路產(chǎn)生1Hz標(biāo)準(zhǔn)秒信號的單元電路(實(shí)際秒脈沖由開發(fā)箱提供);
6、要求對整體電路進(jìn)行仿真,觀察并記錄下仿真波形;
7、選作部分:
a、手動調(diào)整和自動控制,夜間為黃燈閃耀;
b、白天黃燈亮?xí)r,以2Hz的速度閃爍點(diǎn)亮四秒; c、紅綠燈循環(huán)點(diǎn)亮?xí)r間可以自由修改。
三、設(shè)計設(shè)備
含有Quartus軟件的電腦一臺,可下載的試驗(yàn)臺;
四、設(shè)計方法
使用VHDL語言進(jìn)行程序的設(shè)計運(yùn)行和仿真,以及波形的運(yùn)行仿真,最后進(jìn)行下載仿真;
五、方案論證
方案1:把整個流程分成幾個進(jìn)程來做;
方案2:每個進(jìn)程都使用if和case語句實(shí)現(xiàn)功能的實(shí)現(xiàn); 方案3:使用狀態(tài)機(jī)來實(shí)現(xiàn)狀態(tài)間的轉(zhuǎn)換;
方案論證:
1、要實(shí)現(xiàn)整個流程,需要做的輸出內(nèi)容類型不同,如果放在一個進(jìn)程里面就比較容易混淆,產(chǎn)生混亂。而采用分成幾個進(jìn)程來做的方式就明確了每個模塊的內(nèi)容和分工,使其調(diào)理清晰,一目了然;
2、if語句是條件語句,是VHDL語言中常用的基本語句。該流程中的變量比較繁多,而使用case語句分情況列出來,簡潔明了。
3、狀態(tài)機(jī)的使用格式簡潔,使用簡單方便,特別是在進(jìn)行狀態(tài)的轉(zhuǎn)換時候。并行的狀態(tài)轉(zhuǎn)換不易出錯,可將狀態(tài)轉(zhuǎn)換、賦值、計數(shù)等多個功能封裝在某一個狀態(tài)中,并且更加便于為系統(tǒng)添加新的狀態(tài)功能。
方案選定:
通過以上分析,確定用以上方案為本次設(shè)計的方案。
六、工作原理
先對所給時鐘脈沖進(jìn)行分頻到標(biāo)準(zhǔn)時鐘脈沖;設(shè)計兩個時鐘控制倒計時,倒計時的時間可自由修改,由輸入決定;設(shè)計另一個時鐘,用以控制白天與夜間模式的轉(zhuǎn)換;在白天時,根據(jù)倒計時的數(shù)字進(jìn)行紅綠燈的狀態(tài)轉(zhuǎn)換;夜間時,紅綠燈狀態(tài)改為夜間模式:黃燈閃爍。
七、程序設(shè)計
------交通燈控制系統(tǒng)所使用的庫和包
-------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
-------------------------------交通燈控制系統(tǒng)的實(shí)體
-------------------------entity jt is
port(clk,reset:in std_logic;
------------------時鐘脈沖clk由系統(tǒng)直接提供,需要進(jìn)行分
頻;reset是啟動鍵,當(dāng)reset為1是,系統(tǒng)啟動
t0:integer range 0 to30;
------------------紅綠燈循環(huán)點(diǎn)亮的時間,根據(jù)輸入的不同
系統(tǒng)運(yùn)行的不同
r1,y1,g1,r2,y2,g2:out std_logic;
------------------r1為東西方向紅燈,y1為東西方
向黃燈,g1為東西方向綠燈;r2為南北方向紅燈,y2為南北方向黃燈,g2為南北方向綠燈
ec0,ec1,nc0,nc1:out std_logic_vector(3 downto 0));
------------------ec0,ec1分別為東西方向的倒計時間的個位和十位;
nc0,nc1分別為南北方向的倒計時間的個位和十位
end jt;-------------------------------交通燈控制系統(tǒng)的結(jié)構(gòu)體(5個進(jìn)程)
-------------------------architecture one of jt is
type state_type is(s0,s1,s2,s3);
------------------定義狀態(tài)的類型
signal state:state_type;
------------------使用狀態(tài)機(jī)
signal k:std_logic;
------------------分頻后的1Hz的標(biāo)準(zhǔn)時鐘脈沖
signal c1,c2:integer range 0 to 30;
------------------定義東西、南北方向的兩個
倒計時的計數(shù)
signal t1:integer range 0 to 3600;
signal t2:integer range 0 to 24;------------------定義一個時鐘,用以控制白天與夜間模式 Begin------該進(jìn)程用以分頻
-------------------------q0:process(clk)
variable tt:std_logic_vector(9 downto 0);
------------------中間變量
begin
if clk'event and clk='1' then
if tt=“1111101000” then
----------------------把所給1kHz分頻成1Hz的脈沖
k,10000分頻,仿真值用“ 0000000100”八分頻
tt:=(others=>'0');
k<='1';
else
tt:=tt+1;k<='0';
end if;
end if;end process q0;-------------------------
------該進(jìn)程用以設(shè)計時鐘
-------------------------q1:process(k,reset)
begin
if reset='1' then
------------------啟動開關(guān)為1時,系統(tǒng)開始運(yùn)行
t1<=0;t2<=0;
------------------從0點(diǎn)開始 elsif k='1' and k'event then if t1=3599 then
------------------一個t1循環(huán)是一個秒,仿真值用“35” if t2=23 then
-------------------一個t1循環(huán)是一個小時,一天24小時 t2<=0;
else t2<=t2+1;end if;t1<=0;else t1<=t1+1;end if;end if;end process q1;-------------------------------該進(jìn)程用以控制白天黑天模式和紅綠燈狀態(tài)轉(zhuǎn)換
-------------------------q2:process(k,reset,t2)
begin
if t2>=5 and t2<=22 then
-------------------白天模式5:00到22:00之間
if reset='1' then
-------------------啟動開關(guān)為1時,系統(tǒng)開始運(yùn)
行,進(jìn)行狀態(tài)轉(zhuǎn)換
r1<='0';y1<='0';g1<='1';-------------------東西方向綠燈亮 r2<='1';y2<='0';g2<='0';-------------------南北方向紅燈亮 state<=s0;-------------------紅綠燈處于初始狀態(tài)s0 c1<=t0;
c2<=t0;-------------------倒計時從自由輸入值開始遞減 elsif k='1' and k'event then
case state is
when s0=>-------------------當(dāng)處于第1狀態(tài)時,討論
if c1=5 then
--------------由于進(jìn)程內(nèi)部的并列進(jìn)
行,當(dāng)?shù)褂嫊r第4秒時,進(jìn)入到第2狀態(tài)s1
state<=s1;
c1<=c1-1;
c2<=c2-1;
--------------倒計時遞減
elsif c2=0 then
------------倒計時減到0時,再從
初始值開始
c1<=t0;
c2<=t0;
else
----------------否則繼續(xù)保持第1狀態(tài)s0
state<=s0;
c1<=c1-1;
c2<=c2-1;
end if;
when s1=>-------------------當(dāng)處于第2狀態(tài)時,討論
if c1=1 then--------------由于進(jìn)程內(nèi)部的并列進(jìn)行,當(dāng)
倒計時第t0秒時,進(jìn)入到第3狀態(tài)s2
state<=s2;
c1<=c1-1;
c2<=c2-1;
else----------------否則繼續(xù)保持第2狀態(tài)
state<=s1;
c1<=c1-1;
c2<=c2-1;
end if;
when s2=>-------------------當(dāng)處于第3狀態(tài)時,討論
if c2=5 then--------------由于進(jìn)程內(nèi)部的并列進(jìn)行,當(dāng)?shù)褂嫊r第4秒時,進(jìn)入到第4狀態(tài)s3
state<=s3;
c1<=c1-1;
c2<=c2-1;
elsif c1=0 then
------------倒計時減到0時,再從初
始值開始
c1<=t0;
c2<=t0;
else
----------------否則繼續(xù)保持第3狀態(tài)
state<=s2;
c1<=c1-1;
c2<=c2-1;
end if;
when s3=>-------------------當(dāng)處于第4狀態(tài)時,討論 if c2=1 then--------------由于進(jìn)程內(nèi)部的并列進(jìn)行,當(dāng)?shù)?/p>
計時第t0秒時,進(jìn)入到第1狀態(tài)s0
state<=s0;
c1<=c1-1;
c2<=c2-1;
else----------------否則繼續(xù)保持第4狀態(tài)
state<=s3;
c1<=c1-1;
c2<=c2-1;
end if;
when others=> state<=s0;
end case;if state=s0 then
r1<='0';y1<='0';g1<='1';
r2<='1';y2<='0';g2<='0';elsif state=s1 then
r1<='0';g1<='0';
r2<='1';y2<='0';g2<='0';
if c1=4 or c1=2 then y1<='1';
else y1<='0';
end if;elsif state=s2 then
r1<='1';y1<='0';g1<='0';
r2<='0';y2<='0';g2<='1';elsif state=s3 then
r1<='1';y1<='0';g1<='0';
r2<='0';g2<='0';
if c2=4 or c2=2 then y2<='1';
else y2<='0';
end if;end if;
--各個狀態(tài)的紅綠燈變量的賦值,‘1’亮‘0’熄 end if;else-------------------夜間模式22:00到次日5:00之間
c2<=0;c1<=0;r1<='0';r2<='0';g1<='0';g2<='0';y1<=k;y2<=k----------------紅綠燈的狀態(tài):脈沖k賦給黃燈變量,黃燈閃爍
end if;end process q2;-------------------------------該進(jìn)程用于東西方向倒計時的譯碼顯示
-------------------------q3:process(c1)
begin case c1 is when 0=>ec0<=“0000”;ec1<=“0000”;when 1=>ec0<=“0001”;ec1<=“0000”;when 2=>ec0<=“0010”;ec1<=“0000”;when 3=>ec0<=“0011”;ec1<=“0000”;when 4=>ec0<=“0100”;ec1<=“0000”;when 5=>ec0<=“0101”;ec1<=“0000”;when 6=>ec0<=“0110”;ec1<=“0000”;when 7=>ec0<=“1000”;ec1<=“0000”;when 9=>ec0<=“1001”;ec1<=“0000”;when 10=>ec0<=“0000”;ec1<=“0001”;when 11=>ec0<=“0001”;ec1<=“0001”;when 12=>ec0<=“0010”;ec1<=“0001”;when 13=>ec0<=“0011”;ec1<=“0001”;when 14=>ec0<=“0100”;ec1<=“0001”;when 15=>ec0<=“0101”;ec1<=“0001”;when 16=>ec0<=“0110”;ec1<=“0001”;when 17=>ec0<=“0111”;ec1<=“0001”;when 18=>ec0<=“1000”;ec1<=“0001”;when 19=>ec0<=“1001”;ec1<=“0001”;when 20=>ec0<=“0000”;ec1<=“0010”;when 21=>ec0<=“0001”;ec1<=“0010”;when 22=>ec0<=“0010”;ec1<=“0010”;when 23=>ec0<=“0011”;ec1<=“0010”;when 24=>ec0<=“0100”;ec1<=“0010”;when 25=>ec0<=“0101”;ec1<=“0010”;when 26=>ec0<=“0110”;ec1<=“0010”;when 27=>ec0<=“0111”;ec1<=“0010”;when 28=>ec0<=“1000”;ec1<=“0010”;when 29=>ec0<=“1001”;ec1<=“0010”;when 30=>ec0<=“0000”;ec1<=“0011”;----------------------------當(dāng)在設(shè)定范圍內(nèi)時,分別為個位十位譯碼并顯示
when others=>ec0<=“0000”;ec1<=“0000”;
-------------------------否則,LED燈顯示0
end case;
end process q3;-------------------------------該進(jìn)程用于南北方向倒計時的譯碼顯示
-------------------------q4:process(c2)
begin
case c2 is when 0=>nc0<=“0000”;nc1<=“0000”;when 1=>nc0<=“0001”;nc1<=“0000”;when 2=>nc0<=“0010”;nc1<=“0000”;when 3=>nc0<=“0011”;nc1<=“0000”;when 4=>nc0<=“0100”;nc1<=“0000”;when 5=>nc0<=“0101”;nc1<=“0000”;when 6=>nc0<=“0110”;nc1<=“0000”;when 7=>nc0<=“0111”;nc1<=“0000”;when 8=>nc0<=“1000”;nc1<=“0000”;when 9=>nc0<=“1001”;nc1<=“0000”;when 10=>nc0<=“0000”;nc1<=“0001”;when 11=>nc0<=“0001”;nc1<=“0001”;when 12=>nc0<=“0010”;nc1<=“0001”;when 13=>nc0<=“0011”;nc1<=“0001”;when 14=>nc0<=“0100”;nc1<=“0001”;when 15=>nc0<=“0101”;nc1<=“0001”;when 16=>nc0<=“0110”;nc1<=“0001”;when 17=>nc0<=“0111”;nc1<=“0001”;when 18=>nc0<=“1000”;nc1<=“0001”;when 19=>nc0<=“1001”;nc1<=“0001”;when 20=>nc0<=“0000”;nc1<=“0010”;when 21=>nc0<=“0001”;nc1<=“0010”;when 22=>nc0<=“0010”;nc1<=“0010”;when 23=>nc0<=“0011”;nc1<=“0010”;when 24=>nc0<=“0100”;nc1<=“0010”;when 25=>nc0<=“0101”;nc1<=“0010”;when 26=>nc0<=“0110”;nc1<=“0010”;when 27=>nc0<=“0111”;nc1<=“0010”;when 28=>nc0<=“1000”;nc1<=“0010”;when 29=>nc0<=“1001”;nc1<=“0010”;when 30=>nc0<=“0000”;nc1<=“0011”;---------------------------當(dāng)在設(shè)定范圍內(nèi)時,分別為個位十位譯碼并顯示
when others=>nc0<=“0000”;nc1<=“0000”;
end process q4;-------------------------end architecture one;
----所有進(jìn)程結(jié)束-------------------------
八、仿真結(jié)果
1、clk為輸入脈沖;開始令reset為’1’,啟動系統(tǒng),系統(tǒng)正常工作后值為’0; t0為紅綠燈循環(huán)時間,可自由修改,如果輸入值為’0010000’,則為16秒倒計時。如下圖:系統(tǒng)從0點(diǎn)開始運(yùn)行,處于夜間模式時,倒計時都為“00”,兩個方向都為黃燈閃爍,紅綠燈都熄滅。
---------------------------否則,LED燈顯示0
end case;2、5:00之后,進(jìn)入到白天模式:從第1狀態(tài)(東西方向綠燈亮、南北方向紅燈)開始,倒計時從16秒開始遞減。倒計時第4秒后進(jìn)入第2 狀態(tài)(東西方向黃燈閃爍,南北方向紅燈亮)。
3、倒計時第0秒后進(jìn)入第3 狀態(tài)(東西方向紅燈亮,南北方向綠燈亮),倒計時再從16秒開始遞減;倒計時第4秒后進(jìn)入第4 狀態(tài)(東西方向紅燈亮,南北方向黃燈閃爍);倒計時第0秒后進(jìn)入第1 狀態(tài)(東西方向綠燈亮,南北方向紅燈亮),倒計時再從16秒開始遞減
。如此循環(huán)。
4、當(dāng)計時器到22:00時,再次進(jìn)入夜間模式:東西南北方向黃燈閃爍;到次日5:00時又回到白天模式。如此循環(huán)。
九、討論與改進(jìn)
特點(diǎn):
1、在整個設(shè)計過程中,分進(jìn)程實(shí)現(xiàn)整個功能,簡單明了;
2、狀態(tài)機(jī)的功能和優(yōu)點(diǎn)得到了較為完整的體現(xiàn);
3、分夜間和白天模式不同,系統(tǒng)自動調(diào)節(jié);
4、黃燈以閃爍的形式亮;系統(tǒng)運(yùn)行后紅綠燈循環(huán)點(diǎn)亮的時間也可自由修改。不足:
1、整個系統(tǒng)啟動后從夜間0點(diǎn)開始運(yùn)行,而不能隨意調(diào)為哪個時間的交通燈狀態(tài),只能從程序中改,不能手動調(diào)節(jié);
2、整個功能還是比較簡單,未能分左右轉(zhuǎn)和直行的情況;
3、緊急情況處理時也無特殊處理的設(shè)置。
改進(jìn):
1、在進(jìn)程中可增加一個輸入量,用以控制系統(tǒng)的時鐘時間,方便調(diào)節(jié)模式和交通燈狀態(tài);
2、在進(jìn)程中可加入幾個紅綠燈狀態(tài)來分別控制東西方向和南北方向的左轉(zhuǎn)、右轉(zhuǎn)和直行的紅綠燈狀態(tài);
3、在原有程序的基礎(chǔ)上,可通過增加一個輸入量來控制一種特殊狀態(tài),用以控制特殊情況的處理,視該特殊情況而定。
二○一○年九月三日