久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7784|回復: 1
收起左側

基于單片機的交通燈控制系統課程設計說明書(word格式可編輯文檔下載)

[復制鏈接]
ID:313885 發表于 2018-4-22 18:06 | 顯示全部樓層 |閱讀模式

課程設計說明書

課程名稱:      《單片機技術》     

設計題目:基于單片機的交通燈控制系統

學    院:  電子信息與電氣工程學院

學生姓名:*      

學    號:140208*      

專業班級:14級通信工程1班   

指導教師:段*         


設計題目
基于單片機的交通燈控制系統
學生姓名
栗子娟
所在學院
電子信息與電器工程學院
專業、年級、班
14級通信1班

設計要求:

1.以單片機為核心控制器設計一個能實現來顯示路口通行與禁行的交通燈系統

2.時鐘電路11.0592MHz的晶體振蕩器和33pf的電容來實現,且晶振電路要靠近單片機

  • 要有復位電路隨時可以手動復位恢復交通燈系統的初始狀態
  • 隨時手動實現東西方向與南北方向的通行與禁行,且東西,南北方向的禁行與通行時間可靈活調整
  • 要有電源模塊

學生應完成的工作:設計出一個紅黃綠指示燈能相互轉換,且能實現手動根據實際情況隨時手動,實現東西與南北方向的禁行與通行,且東西、南北方向的禁行與通行時間可靈活調整的交通燈系統。


工作計劃:

4月3號—4號完成原理圖的設計;

4 月5號—6號進行PCB設計;

4 月6號—7號制作PCB板;

4 月10號—11號電路板安裝與調試;

4月14號提交課程設計報告。



指導教師(簽名):                學生(簽名): 手寫


基于單片機的交通燈控制系統

摘 要:

本次課題是以單片機為核心控制器來設計一個能實現交通燈紅、黃、綠三個狀態相互轉換,及用倒計時來顯示路口通行與禁行的交通燈系統。該設計以現實生活中的交通十字路口為模型,利用單片機的最小系統來實現基本的電路功能,通過I/O端口的輸入和輸出實現對數碼管和LED燈的控制。本次設計的交通燈不僅可以實現指示燈三個狀態的轉換和倒計時的顯示,而且可以根據實際情況隨時手動,實現東西與南北方向的禁行與通行,且東西、南北方向的禁行與通行時間可靈活調整。




目錄

1.設計背景

1.1開發背景

1.2發展前景

2.設計方案

2.1方案一

2.2方案二

2.3方案三

3. 方案實施

3.1設計內容

3.2 方案執行

3.3制版與調試

4. 結果與結論

5.收獲與致謝

6. 參考文獻

7. 附件

7.1附錄1

7.2附錄2

7.3 附錄3




1.設計背景1.1開發背景

隨著我國國民經濟的迅速發展和人口的快速增加,人們對各種交通車輛的需求更是越來越大,交通工具的迅猛發展以及道路資源的局限性,給城市交通帶來巨大的壓力,交通擁堵問題已成為影響現代城市可持續發展的重要因素。城市交通控制系統是用于城市交通數據監測、交通信號燈控制與交通疏導的計算機綜合管理系統,它是現代城市交通監控系統中最重要的組成部分。如何采用合適的控制方法,最大限度利用好耗費巨資修建的城市道路,緩解城市道路壓力,越來越成為交通運輸管理和城市規劃部門亟待解決的主要問題。

傳統的解決途徑主要有兩個:一是加大交通基礎設施建設的投入,但資金、土地等稀缺資源的有限性又是不可回避的問題,道路基礎設施是不可能無限擴展的;另一個就是限制交通流量,主要是通過法律和行政的手段實現。但是很顯然,傳統的方法滿足不了日益增長的交通出行,因此人們就希望通過增加技術含量的方法提高現有道路的利用率,提高道路交通的安全程度和道路使用的舒適性,所以對交通燈的智能化需求越來越迫切。

1.2發展前景

         智能交通系統是將先進的信息技術、數據通訊傳輸技術、電子傳感技術、電子控制技術及計算機處理技術等有效的集成運用于整個地面交通管理系統而建立的一種在大范圍內、全方位發揮作用的實時、準確、高效的綜合交通運輸管理系統。對城市交通流進行智能控制,可以使道路暢通,提高交通效率。合理進行交通控制可以對交通流進行有效的引導和調度,使交通保持在一個平穩的運行狀態,從而避免或緩和交通擁擠狀況,大大提高交通運輸的運行效率,還可以減少交通事故,增加交通安全,降低污染程度,節省能源消耗。

        交通系統作為一個時變的、具有隨機性的復雜系統,越來越多研究控制理論的學者投身到交通控制的研究中,在交通信號控制領域提出了一些新方法、新思路。如靜態多段配時控制、準動態多段配時控制、最優控制、大系統遞階控制、模糊控制、神經網絡控制,網絡路由控制等。利用模糊控制智能控制技術進行交叉口信號燈控制能取得比定時控制與感應控制更好的效果,因此模糊交通控制已經成為了交通信號控制的主流方向之一

2.設計方案2.1方案一

采用標準AT89C52單片機作為控制器;通行倒計時顯示采用兩位數碼管;通行與禁行指示燈采用紅、黃、綠發光二極管;按以上系統構架設計,單片機端口資源剛好滿足要求。該系統具有電路簡單、設計方便、顯示亮度高、耗電較少以及可靠性高等特點。整體電路組成框圖如圖1所示。

圖2 采用16×16點陣LED發光管設計的交通燈控制系統(見51hei附件)

2.2方案二

采用AT89C52單片機作為控制器,通行倒計時顯示采用16×16點陣LED發光管,通行與禁行指示燈也采用16×16點陣雙色LED發光管。該系統設計框架如圖2所示。列驅動采用74LS595以實現串行端口擴展,行驅動采用4/16譯碼器74LS154動態掃描,譯碼器74LS154生成16條行選通信號線,通過驅動器驅動對應的行線。每條行線上需要較大的驅動電流,應選用大功率三極管作為驅動管。這種設計方案圖案顯示逼真,單片機占用端口資源少;缺點是需要大量的硬件,電路復雜,耗電量大。因此在模型制作中較少采用此方案。

2.3方案三

采用AT89S51單片機作為控制器,通行倒計時及通行與禁行指示采用單塊LCD液晶點陣顯示器。這種設計方案占用單片機的端口最少,硬件也少,耗電也最小,顯示圖案也很精美,但亮度太暗,晚上還得開背光燈,所以也較少采用。

綜上所述,方案一具有綜合設計優點,因此交通燈控制系統模型采用方案一設計。

3. 方案實施3.1設計內容

此次設計的交通燈系統可分為三個模塊:電源模塊,單片機的最小系統模塊以及顯示模塊。

1.電源模塊

電源模塊是用來給單片機的工作提供電源的,此次設計的電源模塊需要為單片機工作提供+5V的固定穩壓直流電壓,主要是用三端穩壓器7805來實現的。

該模塊包括三部分電路:整流電路,濾波電路,穩壓電路。整流電路的目的是將不能直接給單片機提供工作電源的交流電轉化成能為單片機提供電源的直流電。本電路中選用的是橋式整流,是通過KBP206G–BP整流橋來實現的。濾波電路是用來對整流電路輸出的電壓進行處理,整流電路輸出的直流電壓中脈動成分比較大,所以需要經過濾波電路的處理。本電路中選用的是電容濾波,是通過電容并聯來實現的。穩壓電路是指在輸入電壓、負載、環境溫度、電路參數等發生變化時仍能保持輸出電壓恒定。為了保證單片機能長時間持續穩定的工作,就需要有相對穩定的可用電源。本次設計中選用固定三端穩壓器7805來實現穩壓電路的工作。設計完成的電源模塊原理圖及仿真圖如

圖3.電源模塊仿真圖

2.單片機的最小系統模塊

最小系統模塊包括三部分:單片機,復位電路,晶振電路。

晶振電路的作用是為系統提供基本的時鐘信號。它結合單片機內部的電路,產生單片機所必須的時鐘頻率,單片機的一切指令的執行都是建立在這個基礎上的,晶振的提供的時鐘頻率越高,單片機的運行速度也就越快。在該設計中,我們選用的是11.0592MHz的晶振振蕩器,且采用的是內部震蕩的典型電路。

復位電路的第一功能是上電復位,它是一種用來使電路恢復到起始狀態的電路設備,可以確保單片機系統中電路穩定可靠工作。它的優勢在于一是在給電路通電時馬上進行復位操作,二是在必要時可以由手動操作,三是根據程序或者電路運行的需要自動地進行。在本次設計中,我們選用的是手動按鈕復位,復位電路用電阻和電容組合就可以實現了。

本次設計用到的單片機型號為AT89S51,是一個低功耗,高性能CMOS8位單片機,片內含4kB的可反復擦寫1000次的Flash只讀程序存儲器。它有32個外部雙向輸入/輸出(I/O)口,5個中斷優先級2層中斷嵌套中斷,2個16位可編程定時計數器,2個全雙工串行通信口,看門狗(WDT)電路,片內時鐘振蕩器。AT89S51設計和配置了振蕩頻率可為0Hz并可通過軟件設置省電模式。空閑模式下,CPU暫停工作,而RAM定時計數器,串行口,外中斷系統可繼續工作,掉電模式凍結振蕩器而保存RAM的數據,停止芯片其它功能直至外中斷激活或硬件復位。

      

       圖4.復位電路                           圖5.引腳圖

AT89S51單片機有40個引腳下邊簡單介紹一下這40個引腳的功能。

①電源引腳2個

VCC:供電電壓

GND:接地

②時鐘引腳2個

XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。用片內振蕩器時,該腳接外部石英晶體和微調電容。外接時鐘源時,該腳接外部時鐘振蕩器的信號。

XTAL2:來自反向振蕩器的輸出。當使用片內振蕩器,該腳連接外部石英晶體和微調電容。當使用外部時鐘源時,本腳懸空。

③控制引腳(4個并行I/O口引腳P0、P1、P2、P3,RST,ALE/PROG,PSEN,EA/VPP)

P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。

P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,作輸入,P1口被外部下拉為低電平時,將輸出電流。在FLASH編程和校驗時,P1口作為第八位地址接收。

P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,作為輸入。并因此作為輸入時,將輸出電流。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容,在FLASH編程和校驗時接收高八位地址信號和控制信號。

P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流。

I/O口作為輸入口時有兩種工作方式:讀端口,讀引腳。

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

ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。

PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。

EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。

以上就是對AT89S51單片機引腳的介紹。

3.顯示模塊

通過I/O端口的輸入和輸出實現對數碼管和LED燈的控制。

3.2 方案執行

       基于以上方案原理及設計,我們用Altium Designer軟件設計了原理圖并生成了PCB圖,用Proteus軟件進行了仿真。

    Altium Designer軟件實現了原理圖設計、電路仿真、PCB繪制編輯、拓撲邏輯自動布線、信號完整性分析和設計輸出等技術的完美融合,可以為設計者提供全新的設計解決方案。因此,在本次設計中我們也選擇用該軟件來進行原理圖的設計。原理圖如圖7所示,PCB圖如圖8所示

   Proteus軟件可完成從原理圖布圖、PCB設計、代碼調試到單片機與外圍電路的協同仿真,真正實現了從概念到產品的完整設計,是目前世界上唯一將電路仿真軟件、PCB設計軟件和虛擬模型仿真軟件三合一的設計平臺。Proteus軟件可以支持主流單片機系統的仿真圍芯片,還可以提供軟件調試功能,具有全速、單步、設置斷點等調試功能,同時可以觀察各變量以及寄存器等的當前狀態,并支持第三方編譯和調試環境,因此,我們選用Proteus軟件來實現本次設計的仿真。仿真圖如圖9  

    在完成原理圖設計,轉成PCB圖,完成仿真之后,需要進行程序的寫入。寫程序用的是C語言,程序見附錄,程序結構框架如圖6所示

圖6.程序結構框圖

3.3制版與調試

   以電子線路為基礎的各種電子產品在安裝完成后一般都要進行調試,才能正常地進行工作。在調試過程中常常會出現各種電路故障,經過檢測、排查,才能準確地排除故障。調試主要是包括調整和測試兩個部分。

調整主要是對電路參數的調整。一般是對電路中可調元器件,例如電容、電感等部分進行調整,使電路功能達到預期的效果。測試主要是對電路的各項技術指標和功能進行測試和檢查,并與設計要求的性能指標相比較,以確定電路是否能實現預期的功能。

調試和調測試是相互依賴、互相補充的,統稱為調試。由于在實際工作中,二者是一項工作的兩個方面。經測試、調整、再測試、再調整,直到實現電路要求的設計指標為止。能夠采用適當的方法查找、判斷和確定故障的具體部位及其原因,是故障檢測的關鍵。

    在應用中,我們檢測電子線路故障經常采用觀察法。觀察法又分為靜態觀察法和動態觀察法。所謂靜態觀察法就是在電子線路通電前通過目視檢查找出某些故障。主要檢查焊點是否虛焊、導線接頭是否接好、接插件是否松脫、管腳是否插錯方向或折彎等。當靜態觀察沒有發現異常時,可進一步采用動態觀察法。

動態觀察法又稱通電觀察法,即給電路通電后,通過觀察電路內有無打火,冒煙現象,或是聞到電路內有無燒焦、燒糊的異味;手觸摸一些器件有無發燙。發現異常立刻斷開電源。由通電觀察,可以確定故障原因,但大部分情況下并不能確認故障的確切位置。

4. 結果與結論

    預期的結果是該交通燈不僅可以實現指示燈三個狀態的轉換和倒計時的顯示,而且可以根據實際情況隨時手動,實現東西與南北方向的禁行與通行,且東西、南北方向的禁行與通行時間可靈活調整。按下復位鍵,系統可以恢復到初始狀態進行工作,按下東西方向的通行鍵,東西方向可以通行,按下南北方向的通行鍵南北方向可以通行。理想和現實還是有差距的,完成焊接和調試之后,經過簡單的觀察和調試,并沒有發現電路板上有開路和短路現象,接通電源之后,紅黃綠三個狀態的指示燈相互轉化,復位鍵可以正常工作,但是數碼管并沒有實現倒計時計數,沒有得到預期的結果。電路板成品圖如圖10所示

5.收獲與致謝

通過這次的課程設計,我們進一步了解和掌握了單片機的應用和工作原理,同時也鞏固了C語言編程,熟悉了Altium Designer軟件的操作,熟悉了原理圖的設計和PCB圖的生成,更重要的是接觸到了Proteus軟件,又學到了一些新的知識,在這次的課程設計中,既鞏固了原來學過的舊知識,同時也接觸到了新的知識;既學到了知識,也鍛煉了自己的動手能力,同時也加強了學生與學生之間的配合,融洽了師生之間的關系。同時也在告訴我們學無止境,要多多的去嘗試新的知識,接受新的事物。讓我們能在融洽的環境中學到知識,也不斷成長。特別感謝學院和老師們能為我們提供這么好的學習條件,讓我們能在融洽的環境中學到知識,也不斷成長。感謝老師的指導和同學的幫助,雖然課程設計的結果不盡人意,但是從中受益無窮。

6. 參考文獻

[1] 張毅剛.單片機原理及接口技術[M] .哈爾濱:哈爾濱工業大學出版社,1990.

[2] 李廣弟.單片機基礎[M] .北京:北京航空航天大學出版社,1992.

[3] 譚浩強.單片機課程設計[M] .北京:清華大學出版社,1989.

[4] 先鋒工作室.單片機程序設計實例[M] .北京:清華大學出版社,2003.

7.   附件7.1附錄1
元器件清單

元器件清單

元器件名稱

型號規格

數量

價格

備注

單片機

AT89S51

1

40腳底座

1

兩位數碼管

4

紅黃綠發光二極管

各4個

510Ω電阻

15

200Ω電阻

10

1KΩ電阻

5

10KΩ電阻

2

晶振

11.0592MHZ

1

33pf電容

4

10uf電容

3

100pf電容

2

100uf電容

2

7805

1

四角按鍵

4

USB母口

2

接線端子

1

KBP206G-BP整流橋

1

單排插針

2

7.3 附錄3

圖7.原理圖

圖8.PCB圖

圖9.仿真圖

圖10實物圖


單片機源程序如下:
  1. #include <reg51.h>                                              //包含MCS-51單片機頭文件
  2. #define uchar unsigned char                                                   //定義宏uchar
  3. #define unit unsigned int                                                       //定義宏uint
  4. sbit  P1_0=P1^0;                                                 //定義單片機I/O端口P1.0
  5. sbit  P1_1=P1^1;                                                 //定義單片機I/O端口P1.1
  6. sbit  P1_2=P1^2;                                                 //定義單片機I/O端口P1.2
  7. sbit  P1_3=P1^3;                                                 //定義單片機I/O端口P1.3
  8. sbit ew_red=P0^0;                            //定義單片機I/O端口P0.0為東西方向紅燈控制位
  9. sbit ew_yellow=P0^1;                         //定義單片機I/O端口P0.1為東西方向黃燈控制位
  10. sbit ew_green=P0^2;                          //定義單片機I/O端口P0.2為東西方向綠燈控制位
  11. sbit sn_red=P0^3;                             //定義單片機I/O端口P0.3為南北方向紅燈控制位
  12. sbit sn_yellow=P0^4;                          //定義單片機I/O端口P0.4為南北方向黃燈控制位
  13. sbit sn_green=P0^5;                           //定義單片機I/O端口P0.5為南北方向綠燈控制位
  14. sbit key_earth_west=P3^2;                     //定義單片機I/O端口P3.2東西方向通行控制按鍵
  15. sbit key_sourth_north=P3^3;                    //定義單片機I/O端口P3.3南北方向通行控制按鍵
  16. sbit all_not=P3^4;                                //定義單片機I/O端口P3.4為全部禁行控制位
  17. uchar code s7_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};         //七段碼顯示表
  18. uchar sou_nor_time;                                                //南北通行時間變量定義
  19. uchar east_weat_time;                                              //東西通行時間變量定義
  20. uchar time_flag;                                                         //時間標志位定義
  21. uchar traffic_flag;                         //traffic_flag=0 時南北通行,traffic_flag=1 時東西通行
  22. uchar time_multiply;                                                       //定義計時變量
  23. uchar ETO              ;
  24. void delayms(uchar z)                                                         //延時子程序
  25. {
  26. uchar i,j;                                                                   //定義變量i,j
  27. for(i=z;i>0;i--)                                                      //for循環,共循環z次
  28.        for(j=110;j>0;j--);                                             //for循環,共循環j次
  29. }
  30. void display_time(uchar time)                                            //顯示倒計時子程序
  31. {
  32.     P1_0 =0;                                                 //P1.T0輸出低電平,位選使能
  33.     P1_1 =1;                                                           //P1.1輸出高電平
  34.     P1_2 =1;                                                           //P1.2輸出高電平
  35.     P1_3 =1;                                                           //P1.3輸出高電平
  36.     P2=s7_table[time/10];                                          //P2端口輸出顯示的段碼
  37.     delayms(2);                                                               //延時2ms
  38.     P2=0;                                                           //P2端口輸出低電平
  39. P1_0 =1;                                                           //P1.0輸出高電平
  40.   P1_1 =0;                                                  //P1.1輸出低電平,位選使能
  41.     P2=s7_table[time%10];                                         //P2端口輸出顯示的段碼
  42.     delayms(2);                                                               //延時2ms
  43.     P2=0;                                                           //P2端口輸出低電平
  44. P1_1 =1;                                                           //P1.1輸出高電平
  45.     P1_2 =0;                                                  //P1.2輸出低電平,位選使能
  46.     P2=s7_table[time%10];                                         //P2端口輸出顯示的段碼
  47.     delayms(2);                                                               //延時2ms
  48.     P2=0;                                                           //P2端口輸出低電平
  49. P1_2 =1;                                                           //P1.2輸出高電平
  50.     P1_3 =0;                                                  //P1.3輸出低電平,位選使能
  51.     P2=s7_table[time%10];                                         //P2端口輸出顯示的段碼
  52.     delayms(2);                                                               //延時2ms
  53.     P2=0;                                                           //P2端口輸出低電平
  54.     P1_3 =1;                                                           //P1.3輸出高電平
  55. }
  56. void south_north_allow()                                              //南北通行允許子程序
  57. {
  58.     ew_red=0;                                                          //東西方向紅燈亮
  59.     ew_green=1;                                                      //東西方向綠燈熄滅
  60.     ew_yellow=1;                                                     //東西方向黃燈熄滅
  61.     sn_red=1;                                                        //南北方向紅燈熄滅
  62.     sn_green=0;                                                        //南北方向綠燈亮
  63.     sn_yellow=1;                                                      //南北方向黃燈熄滅
  64. }
  65. void east_west_allow()                                                //東西通行允許子程序
  66. {
  67.     ew_red=1;                                                        //東西方向紅燈熄滅
  68.     ew_green=0;                                                        //東西方向綠燈亮
  69.     ew_yellow=1;                                                    //東西方向黃燈熄滅
  70.     sn_red=0;                                                          //南北方向紅燈亮
  71.     sn_green=1;                                                      //南北方向綠燈熄滅
  72.     sn_yellow=1;                                                      //南北方向黃燈熄滅
  73. }
  74. void init0_timer0()                                                  //定時器0初始化子程序
  75. {
  76.     TMOD=0X01;                                                  //定時器0設置為模式1
  77.     TH0=(65536-50000)/256;                                              //TH0裝載初始值
  78.     TL0=(65536-50000)%256;                                             //TL0裝載初始值
  79.     ETO=1;                                                            //開啟定時器中斷
  80.     EA=1;                                                               //開啟CPU中斷
  81.     TR0=1;                                                              //啟動定時器T0
  82. }
  83. void keyscan()                                                           //鍵盤掃描子程序
  84. {
  85.     if(key_sourth_north==0)                                //判斷南北通行控制按鍵是否按下
  86.     {
  87.         delayms(2);                                                           //延時2ms
  88.         if(key_sourth_north==0)                        //再次判斷南北通行控制按鍵是否按下
  89.         {
  90.             south_north_allow();                                     //調用南北通行子程序
  91.             while(!key_sourth_north) display_time(time_flag);      //南北通行時,顯示通行倒計時
  92.             TR0=0;                                         //南北通行結束,關閉定時器T0
  93.          }
  94.      }
  95.     if(key_earth_west==0)                                  //判斷東西通行控制按鍵是否按下
  96.     {
  97.         delayms(2);                                                           //延時2ms
  98.         if(key_earth_west==0)                          //再次判斷東西通行控制按鍵是否按下
  99.         {
  100.             east_west_allow();                                       //調用東西通行子程序
  101.             while(!key_earth_west) display_time(time_flag);        //東西通行時,顯示通行倒計時
  102.             TR0=0;                                         //東西通行結束,關閉定時器T0
  103.          }
  104.      }
  105.      if(all_not==0)                                            //判斷全部禁行按鍵是否按下
  106.     {
  107.          delayms(2);                                                          //延時2ms
  108.          if(all_not==0)                                    //再次判斷全部禁行按鍵是否按下
  109.          {
  110.              TR0=0;                                  //進入全部禁行子程序,關閉定時器T0
  111.              ew_red=0;                                                 //東西方向紅燈亮
  112.              ew_green=1;                                             //東西方向綠燈熄滅
  113.              ew_yellow=1;                                            //東西方向黃燈熄滅
  114.              sn_red=0;                                                 //南北方向紅燈亮
  115.              sn_green=1;                                             //南北方向綠燈熄滅
  116.              sn_yellow=1;                                             //南北方向黃燈熄滅
  117.           }
  118.      }
  119. }
  120. void main()                                                                     //主程序
  121. {
  122.     sou_nor_time=15;                                          //初始化南北通行時間為15s
  123.     east_weat_time=6;                                           //初始化東西通行時間為6s
  124.     traffic_flag=0;                                                      //初始化,南北通行
  125.     time_flag=sou_nor_time;                                          //設置南北通行的時間
  126.     time_multiply =0;                                                    //計時變量初始化

  127.     init0_timer0();                                            //調用定時器T0初始化子程序
  128.     south_north_allow()  ;                                        //調用南北通
  129.     while(1)                                                         //while(1)無限循環
  130.     {
  131. keyscan();                                                          //調用鍵盤掃描子程序
  132.         display_time(time_flag);                                     //調用顯示倒計時子程序
  133.      }
  134. }
  135. void int0_isr() interrupt 1                                           //定時器T0中斷服務程序
  136. {
  137.     TH0=(65536-50000)/256;                                                //TH0裝載初值
  138.     TL0=(65536-50000)%256;                                               //TL0裝載初值
  139.     time_multiply++;                                                       //計時變量加1
  140.     if(time_multiply>=20)                                        //判斷計時變量是否大于20
  141.     {
  142.         time_multiply =0;                              //計時變量大于20,則將計時變量清零
  143.         time_flag--;                                                    //倒計時的秒數減1
  144.         if(traffic_flag==0)                            //若traffic_flag為0,則進入南北通行模式
  145.         {
  146.             if(time_flag>2)                                        //南北通行倒計時進行中
  147.             {
  148.                 south_north_allow();                                 //南北通行紅綠燈輸出
  149.              }
  150.              else if(time_flag>0)                                          //若倒計時小于2s
  151.              {
  152.                  sn_red=1;
  153.                  sn_green=1;
  154.                  sn_yellow=0;                                         //此時南北黃燈亮2s
  155.                  ew_red=0;                                       //此時東西仍然是紅燈亮
  156.                  ew_green=1;
  157.                  ew_yellow=1;
  158.               }
  159.               else
  160.               {
  161.                  traffic_flag=1;                 //此時南北通行倒計時結束,改為東西通行模式
  162.                  time_flag= east_weat_time;                         //東西通行時間變量賦值
  163.                }
  164.          }
  165.          if(traffic_flag==1)                                           //此時為東西通行模式
  166.          {
  167.              if(time_flag>2)                                           //東西通行計時結束
  168.              {
  169.                  east_west_allow();                                  //東西通行紅綠燈輸出
  170.               }
  171.               else if(time_flag>0)
  172.               {
  173.                   ew_red=1;                                          //此時東西黃燈亮2s
  174.                   ew_green=1;
  175.                   ew_yellow=0;
  176.                   sn_red=0;                                      //此時南北仍然是紅燈亮
  177.                   sn_green=1;
  178.                   sn_yellow=1;
  179.                }
  180.                else
  181.                {
  182.                   traffic_flag=0;                //此時東西通行倒計時結束,改為南北通行模式
  183.                   time_flag= sou_nor_time;                         //南北通行時間變量賦值
  184. ……………………

  185. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

完整的Word格式文檔51黑下載地址(可編輯):
基于單片機的交通燈控制系統.doc (628.79 KB, 下載次數: 54)
回復

使用道具 舉報

ID:453162 發表于 2018-12-24 10:28 | 顯示全部樓層
不錯,很棒!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜影院普通用户体验区 | 国产亚洲黄色片 | 欧美精品久久久久久 | 精品久久伊人 | 1级毛片 | 国产一区二区黑人欧美xxxx | 久久久久久天堂 | 国产一级片一区二区 | 伊人网91| 国产在线精品区 | 国产精品一区网站 | 一区二区三区四区在线视频 | 国产日韩欧美综合 | 欧美精品久久久久 | 精品久久久久久久久久久久久久久久久 | 成人福利网 | 欧美aaaa视频 | 日韩在线不卡视频 | 欧美最猛黑人xxxx黑人 | 在线观看av不卡 | 日韩在线国产 | 国产精品国产三级国产aⅴ入口 | 自拍偷拍中文字幕 | 日韩国产免费 | 天天干天天干 | 久久草视频 | 男人天堂久久 | 中文字幕一区在线观看视频 | 综合久久久久久久 | 精品国产乱码久久久久久影片 | 精品国产一区二区国模嫣然 | 国产在线精品一区二区三区 | 国产精品久久久久久久久久久久 | 五月激情六月婷婷 | 麻豆av在线免费观看 | 91在线免费视频 | 九九精品在线 | 日本一区二区在线视频 | 日韩精品一区二区三区在线 | 日韩欧美国产一区二区三区 | 国产亚洲一区二区在线观看 |