基于AT89c51單片機實現(xiàn)的交通燈.doc_第1頁
基于AT89c51單片機實現(xiàn)的交通燈.doc_第2頁
基于AT89c51單片機實現(xiàn)的交通燈.doc_第3頁
基于AT89c51單片機實現(xiàn)的交通燈.doc_第4頁
基于AT89c51單片機實現(xiàn)的交通燈.doc_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、江西科技師范大學通信與電子學院單片機應用技術實訓報告 實訓題目:模擬交通燈 小組成員:龔石沖 羅仁敏 曾建偉 班 級:12電子科學與技術 指導老師:熊朝松331、 實訓選題內容、要求交通模擬燈要求:1、 南北方向為主干道,東西方向為支路;主干路綠燈時間為45秒,紅燈時間為35秒; 支路綠燈時間30秒,紅燈時間為50秒,兩個方向的黃燈時間都為4秒;2、使用定時器實現(xiàn)時間的倒計時;用顯示部件顯示主干道路的倒計時變化;3、設計三個外部按鈕,分別用以手動控制緊急情況下兩個方向同時禁通過;南北方向 長時間通過(不顯示時間倒計時變化);東西方向長時間通過;釋放按鈕后則正常 通行。2、 實訓計劃和人員安排經

2、小組人員商定,分工完成任務,在課余時間完成。 若其中遇到什么問題,大家聚在一起討論解決。具體分工如下:1、 程序編寫:龔石沖2、 實體焊接:龔石沖3、 實訓報告:羅仁敏4、 視頻及PPT:曾建偉3、 實訓選題分析 交通燈由東西南北四向燈,倒計時顯示,人行橫道通行指示標志等部分組成。其中東西南北四向燈中的每一向都由紅、黃、綠三色燈組成;東西為一組,南北為一組。黃燈在紅綠燈之間轉換時亮。倒計時顯示表示紅、黃、綠燈亮時所剩時間。由于人行橫道通行指示標志與紅燈是同步的,所以在模擬交通燈時省略。交通會遇到一些突發(fā)情況。因此交通信號燈要設定一些特定功能,以防不時之需。 整個電路由單片機完成,控制部分由軟件

3、完成,硬件只負責響應。 4、 方案設計 方案一:主控系統(tǒng)采用AT89C51單片機作為控制器,由定時器1間接控制 通行倒計時及南北和東西的通行。由按鍵開關完成禁止通行,東西 通行,南北通行。 方案二: 主控系統(tǒng)采用AT89C51單片機作為控制器,由延時函數(shù)完成信號燈 的相互轉換,由定時器完成通行倒計時。由按鍵開關完成禁止通行, 東西通行,南北通行。方案比較:方案二由于信號燈的相互轉換與倒計時顯示用的是兩種獨立的方法 完成,要把這兩種方法運行的時間達到一致,這大大的增大了程序 的難度,而方案一切采用了同一種方法。就是程序變得了簡單。占 用端口少,耗電也最小。統(tǒng)電源采用獨立 的+5V穩(wěn)壓電源,有各種

4、 成熟電路可供選用,使此方案可靠穩(wěn)定。該設計可直接在I/O口上 接按鍵開關,精簡并優(yōu)化了電路。結合實際情況,顯示界面采用LED 數(shù)碼管動態(tài)掃描的方 法,滿足了倒計時的時間顯示輸出和狀態(tài)燈提 示信息輸出的要求,減少系統(tǒng)的復雜度,既經濟又簡潔。所以選擇 方案一。5、 方案實現(xiàn)該交通燈有以下幾個部分組成:緊急控制(按鍵電路)、復位電路、晶振電路、電源電路、單片機、led數(shù)碼管顯示、led信號指示燈。如圖所示:該交通燈控制系統(tǒng)有以上幾個部分組成:緊急控制(按鍵電路)、單片機。1各模塊電路1.1主控制系統(tǒng)主控器采用AT89C51,是美國ATMEL公司生產的一款性能穩(wěn)定、低功耗的單片機,兼容MCS-51系

5、列產品指令系統(tǒng)及引腳。片內含4KB的可重復編程的Flash程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術生產,使用5(120)V的電源電壓, 1288位的內部RAM,4個8位的雙向可位尋址的I/O端口,2個16位定時/計數(shù)器,6個中斷源,AT89C51單片機可提供許多高性價比的應用,靈活應用于各種控制領域。單片機的P0口及P2口應用于控制南北及東西方向的通行燈,P1口及P3.0、P3.1、P3.3、P3.4口應用于2組LED計時器的控制,P2.6、P2.7、P1.7分別用于南北方向和東西方向和禁止通行的緊急情況。1.2 晶振電路、復位電路 1.3 通行燈輸出控制道口交通燈指示采用

6、紅、綠、黃發(fā)光二極管,南北通行、東西通行各兩個。1.4 時間顯示電路紅綠燈通行時間采用數(shù)碼管顯示,這是一種很好的方法。通行剩余時間采用高亮7段LED發(fā)光數(shù)碼管,采用共陽數(shù)碼管。由于采用動態(tài)掃描的方法進行顯示,即逐個循環(huán)點亮各位顯示器。雖然這樣在任一時刻只有一位顯示器被點亮,但由于視覺殘留效應,看起來與全部顯示器同時點亮效果完全一樣。為了顯示LED顯示器的動態(tài)掃描,不僅要給顯示器提供段(字形代碼)的輸入之外,還要對顯示器加位控制,這就是通常所說的段控和位控。因此多位LED顯示器接口電路需要有兩個輸出口,其中一個用于輸出8條段控線(有小數(shù)點顯示);另一個用于輸出位控線,位控線的數(shù)目等于顯示器的位數(shù)

7、。時間顯示驅動電路如圖所示。時間顯示驅動電路1.5 電源電路 整個系統(tǒng)采用的是+5V電壓。由于實訓沒有要求,因此可采用自制不可調的3端穩(wěn)壓器件,用LM7805就可以滿足系統(tǒng)電源的要求。LM7805內部是由基準電壓回路、恒流源、過流保護、過壓保護和短路保護回路等8部分組成的三端集成穩(wěn)壓電源,且其低功耗,高效率,紋波系數(shù)小,輸出電壓穩(wěn)定。2.1 LED顯示器簡介通常所說的LED顯示器由7個發(fā)光二極管組成因此也稱之為七段LED顯示器,其排列形狀如圖3.10所示。此外,顯示器中還有一個圓點型發(fā)光二極管(在圖中以dp表示),用于顯示小數(shù)點。通過七個發(fā)光二極管亮暗的不同組合,可以顯示多種數(shù)字、字母以及其他

8、符號。LED顯示器中的發(fā)光二極管共有兩種連接方法:(1) 共陽極接法把發(fā)光二極管的陽極連在一起構成公共陽極。使用時公共陽極接+5V。這樣陰極端輸入低電平的段發(fā)光二極管就導通點亮,而輸入高電平的則不點亮。(2) 共陰極接法把發(fā)光二極管的陰極連在一起構成公共陰極。使用時公共陰極接地,這樣陽極端輸入高電平的段發(fā)光二極管就導通點亮,而輸入低電平的則不點亮。圖3.9 LED顯示器結構圖使用LED顯示器時要注意區(qū)分這兩種不同的接法。為了顯示數(shù)字或符號,要為LED顯示器提供代碼,這些代碼是為顯示字形的,因此稱之為字形代碼。七段發(fā)光二極管,再加上一個小數(shù)點位,共計八段。因此提供給LED顯示器的字形代碼正好一個

9、字節(jié)。各代碼位的對應關系如表3.4。表3.4 代碼對應關系表代碼位D7D6D5D4D3D2D1D0顯示段dpgfedcbA3.2 單片機AT89C51AT89C51是一種高效微控制器,它是美國ATMEL公司生產的低電壓,高性能CMOS8位單片機,片內含4Kbytes的可反復擦寫的Flash只讀程序存儲器(FPEROMFlash Programmable and Erasable Read Only Memory) 和1288位的隨機存取數(shù)據(jù)存儲器(RAM),該器件采用ATMEL公司的高密度、非易失性存儲技術生產,它與MCS-51系統(tǒng)產品兼容,AT89C51單片機功能強大,具有8Kb中央處理器(

10、CPU)和4KbFlash程序存儲器,性價比高,可應用于很多要求高性價比的場合,靈活地應用于各個控制領域。3.2.1 AT89C51的主要性能內含4Kb可重編程的FPEROM;與MCS-51產品指令系統(tǒng)完全兼容;1288位的內部RAM;4個8位(32根)雙向可位尋址的I/O端口;2個16位的計數(shù)/定時器;全雙工方式的串行通道(UART);6個中斷源;5個向量二級中斷結構;最高時鐘振蕩頻率可達12MHz;指令集中64條為單周期指令,支持6種尋址方式,共111條指令;低功耗空閑和掉電方式;片內振蕩器和時鐘電路。3.2.2 AT89C51的引腳功能AT89C51為雙列直插(DIP)式封裝的51單片機

11、芯片,有40條引腳,其引腳示意及功能分類如圖3.2所示。圖3.2 89C51單片機引腳圖各引腳功能說明如下:(1)主電源引腳 Vcc(40腳):接+5(120)V電源正端; Vss(20腳):接地。(2)I/O引腳P0口(3932腳):P0.0P0.7統(tǒng)稱為P0口。P0口是一組8位漏極開路型雙向I/O口,分時復用為低8位地址總線和雙向數(shù)據(jù)總線。作為輸出口用時,每位能吸收電流的方式驅動8個邏輯門電路,對端口P0寫“1”時,可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲器時,這組端口線分時轉換地址(低8位)和數(shù)據(jù)總線復用,在訪問期間激活內部上拉電阻。在FLASH編程時,P0口作為原碼輸入口,當Flash

12、進行校驗時,P0口輸出原碼,此時P0外部必須被拉高。P1口(18腳):P1.0P1.7統(tǒng)稱為P1口,可作為準雙向I/O口使用。P1是一個帶內部上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。對端口寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口。P1口被外部下拉為低電平時,輸出電流,是因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。在Flash編程和校驗時,P1口作為第八位地址接收。P2口(2128腳):P2.0P2.7統(tǒng)稱為P2口,一般作為準雙向I/O使用。P2是一個帶內部上拉電阻的8位雙向I/O口。P2的輸出緩沖器可驅動4個TTL邏輯門電路。當對

13、P2端口寫“1”時,內部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,由于內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。在接有片外存儲器或擴展I/O口且尋址范圍超過256B時,P2口用作高8位地址總線。當給出地址為“1”時,它就利用內部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀/寫時,P2口便輸出其特殊功能寄存器的內容。在FLASH編程和校驗時,P2口接收高八位地址信號和控制信號。P3口(1017腳):P3.0P3.7統(tǒng)稱為P3口。P3口是一組帶有內部上拉電阻的8位雙向I/O口。P3口的輸出緩沖器可驅動4個TTL邏輯門電路接收輸出電流。當P3口寫“1”時,通

14、過內部的上拉電阻上拉為高電平并作為輸入口。此時由于外部下拉為低電平,P3口將輸出電流(IIL)。除作為準雙向I/O口使用外,還可以將每一位用于第二功能,而且P3口的每一條引腳均可獨立定義為第一功能的輸入輸出或第二功能。P3口第二功能祥見表3.1 :表 3.1 P3口第二功能表口線第二功能信號名稱P3.0RXD串行數(shù)據(jù)接受P3.1TXD串行數(shù)據(jù)發(fā)送P3.2外中斷0申請P3.3外中斷1申請P3.4T0定時器/計數(shù)器0計數(shù)輸入P3.5T1定時器/計數(shù)器1計數(shù)輸入P3.6外部數(shù)據(jù)存儲器寫選通P3.7外部數(shù)據(jù)存儲器讀選通(3)外接晶體引腳XTAL1(19腳):它在單片機內部是一個反向放大器的輸入端,構成

15、了片內振蕩器。當采用外部時鐘時,HMOS單片機的該引腳應接地;CHMOS單片機的該引腳作為外部振蕩信號的輸入端。XTAL2(18腳):它在單片機內部是片內振蕩器的反向放大器的輸出端。當采用外部時鐘時,HMOS單片機的該引腳作為外部振蕩信號的輸入端;CHMOS單片機的該引腳應懸空不接。(4)控制線ALE/ (30腳):地址鎖存允許/編程信號。在訪問片外程序存儲器期間,此信號可用于控制鎖存P0輸出地址總線的低8位,ALE以每機器周期兩次進行信號輸出;在FLASH編程期間,此引腳用作編程脈沖的輸入端。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率fosc的1/6,可作為對外輸出的

16、時鐘脈沖或用于定時目的。但要注意的是:在訪問片外數(shù)據(jù)存儲器期間,ALE脈沖會跳空一個。若想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE執(zhí)行MOVX,MOVC指令使ALE起作用。另外,該引腳將被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。(29腳):片外程序存儲器讀選通信號輸出端,低電平有效。在由外部程序存儲器讀取指令或常數(shù)期間,每個機器周期內兩次有效,P0口讀回指令或常數(shù)。當訪問內部程序存儲器時,信號不跳變。RST/VPD (9腳):RST即RESET,VPD為備用電源,該引腳為單片機的上電復位或掉電保護端。當單片機振蕩器工作時,該引腳上出現(xiàn)持續(xù)兩個機器周期的高電平

17、,就可實現(xiàn)復位操作,使單片機回復到初始狀態(tài)。上電時,考慮到振蕩器有一定的起振時間,該引腳上高電平必須持續(xù)10ms以上才能保證有效復位。當VCC發(fā)生故障,降低到低電平規(guī)定值或掉電時,該引腳可接上備用電源VPD(+5V)為內部RAM供電,以保證RAM中的數(shù)據(jù)不丟失。/VPP(30腳):為片外程序存儲器選用端,訪問內部程序存儲器控制信號。當端接高電平時,CPU訪問內部程序存儲器。當接低電平時,則在此期間外部程序存儲器(0000H-FFFFH),則強調CPU訪問外部存儲器,而不管程序計數(shù)器的內容是多少。此外,該引腳還用做EPROM編程電壓的輸入端。在編程期間,此引腳用作21V編程電源VPP的輸入端。3

18、.2.3AT89C51的內部結構89C51單片機內部組成結構中包含運算器和控制器(CPU)、片內存儲器、4個并行I/O接、串行口、定時/計數(shù)器、中斷系統(tǒng)、振蕩器等功能部件10。其內部結構框圖如圖3.3所示。圖中PC是程序計數(shù)器;PSW是程序狀態(tài)字寄存器;DPTR是數(shù)據(jù)指針寄存器。圖3.3 AT89C51單片機內部結構框圖運算器和控制器89C51的運算器和控制器功能類似于一般微機中的微處理器(CPU),是單片機的核心部件,它決定了單片機的主要功能特性。它完成邏輯算術運算并協(xié)調單片機其它各部分的工作。各種算術、邏輯運算所涉及到的寄存器包括:累加器ACC、寄存器B、暫存器1(TEMP1)和暫存器2(

19、TEMP2)、程序狀態(tài)字寄存器PSW,程序計數(shù)器PC,堆棧指針SP,數(shù)據(jù)指針寄存器DPTR等。它們位于CPU內部,又稱CPU專用寄存器,以區(qū)別于I/O接口專用寄存器。存儲器MCS-51系列單片機存儲器組成是所謂的哈佛結構,存儲器的組織方式與通用單片機系統(tǒng)不同,包含程序存儲器與數(shù)據(jù)存儲器,其地址空間是相互獨立的,而不是程序存儲器與數(shù)據(jù)存儲器統(tǒng)一編址。在89C51單片機中,程序存儲器采用EEPROM,而數(shù)據(jù)存儲器采用RAM。它們又可以進一步分成內部或外部兩類。程序存儲器 程序存儲器內部和外部是統(tǒng)一連續(xù)編址的,內部占用地址空間的低4KB,地址0000H0FFFH,外部地址范圍1000HFFFFH,共

20、60KB。程序存儲器主要用來存放程序和常數(shù)。當程序計數(shù)器PC由內部ROM開始執(zhí)行到外部ROM時,會自動尋址外接程序存儲器。程序地址空間原則上可由用戶任意安排,但復位和中斷源的程序入口地址在51系列單片機中是固定的,用戶不能改變。入口地址見表3.2。復位后,CPU從0000H地址開始執(zhí)行程序。其他地址為中斷服務程序入口地址,響應某個中斷時,將自動從其對應的入口地址執(zhí)行中斷服務程序。表 3.2 51單片機復位、中斷入口地址操 作入口地址復位0000H外部中斷00003H定時器/計數(shù)器0溢出000BH外部中斷10013H定時器/計數(shù)器1溢出001BH串行口中斷0023H定時器/計數(shù)器2溢出或T2EX

21、端負跳變(52子系列)002BH數(shù)據(jù)存儲器 MCS-51系列單片機數(shù)據(jù)存儲器也有內部、外部之分。但與程序存儲器不同,片內、片外存儲器是分別獨立編址的,片內數(shù)據(jù)存儲器除RAM塊外,還有特殊功能寄存器(SFR)塊,其中片內數(shù)據(jù)存儲器有128個字節(jié),其編制為00HFFH;特殊功能寄存器也占128個字節(jié),其編制為80HFFH;二者連續(xù)而不重疊。外部RAM地址范圍0000HFFFFH,共64KB。內部存儲器可直接尋址。盡管片內、片外地址空間的低256B有重疊,但尋址并不會造成混亂。這是因為片內、片外存儲器使用不同的指令(MOV和MOVX)。擴展的I/O地址也占用數(shù)據(jù)存儲器空間。對I/O端口操作無須特殊指

22、令且訪問程序存儲器是用信號選通,而訪問片外數(shù)據(jù)存儲器時,由信號(讀)和信號(寫)選通。寄存器區(qū) 內部數(shù)據(jù)存儲器分為4個區(qū)域,數(shù)據(jù)RAM用于存放臨時變量,下面介紹其他三個寄存器區(qū):a) 工作寄存器區(qū) 它占用地址00FFH的32個內存單元,又分成4個區(qū)。每個區(qū)有R0R7共8個工作寄存器。工作寄存器區(qū)的選擇又由程序狀態(tài)寄存器PSW的第4位和第3位(RS1和RS0)共同指定。單片機復位時,RS1和RS0為零,故指向0區(qū)。通過位操作改變RS1和RS0的值,可以方便地指向任一個區(qū)間。b) 位尋址區(qū) 每位都有一個獨立的8位地址(占據(jù)空間007F),共128位。此外,在專用寄存器SFR中還有一部分是可以位尋址

23、的(有些位可能無定義)。c) 專用寄存器區(qū) 共有21個專用寄存器SFR,位于80FFH地址空間。這些寄存器又可以分為CPU專用寄存器和接口專用寄存器。CPU專用寄存器前面己經提過,而接口專用寄存器包括兩部分。一部分就是單片機的I/O端口P0P3,分別編址為80H、90H、A0H、B0H,共4個單元,32位,每一位都可以獨立尋址。另一部分為定時/計數(shù)器,串行口、中斷的一些控制寄存器。定時/計數(shù)器89C51有兩個16位定時/計數(shù)器(T0,T1)。在定時功能中,每個機器周期定時器加1,由于l個機器周期包含12個振蕩周期,因而它的計數(shù)頻率為1/12,即由定時器計數(shù)到的脈沖為振蕩周期頻率的1/12。在計

24、數(shù)器功能中,在外部事件相應輸入腳(T0或T1)產生負跳變時,計數(shù)器加1。由于計數(shù)器的計數(shù)過程需要2個機器周期(24個振蕩周期),所以,最高的計數(shù)頻率為振蕩頻率的1/24。這兩個定時/計數(shù)器的工作狀態(tài)(定時/計數(shù))及工作方式(方式0方式3)的選擇是由定時/計數(shù)器方式寄存器(TMOD)中的每位值所決定的。定時/計數(shù)器的控制由控制寄存器(TCON)完成。I/O口 89C51不僅有4個8位并行口,供單片機和外部RAM、EEPROM等擴展連接用或與其它設備交換信息用,它還有一個全雙工串行口,能同時發(fā)送和接收數(shù)據(jù)。在前面的引腳功能中已對并行口作了簡要介紹,在此就主要介紹一下串行口。串行口也就是P3.0和P

25、3.1的第二功能。它既能工作在異步方式,又能工作在同步方式。該串行口是全雙工的,它在物理上分為兩個獨立的發(fā)送緩沖器和接收緩沖器SBUF,但它們占用一個特殊功能寄存器的地址99H,只需對SBUF進行寫或讀的操作,就可以同時發(fā)送和接收了。串行口的工作方式選擇、波特率選擇、串行通信協(xié)議的完成,由兩個特殊功能寄存器,即串行口控制寄存器SCON和功耗控制寄存器PCON完成。中斷89C51單片機提供了6個中斷源,而每一個中斷源都能被程控為高優(yōu)先級或低優(yōu)先級。其中5個中斷源包括2個外部中斷和3個內部中斷。兩個外部中斷源為INT0和INT1,外部設備的中斷請求信號、掉電等故障信號都可以從INT0而和INT1引

26、腳輸入,向CPU提出中斷申請,INT0和INT1的中斷請求標志IE0、IE1分別設在TCON寄存器的TCON.1、TCON.3。3個內部中斷源為T0、Tl溢出中斷源及片內串行發(fā)送或接收中斷源,T0、Tl中斷請求標志TF0和TF1分別設在TCON寄存器的TCON.5、TCON.7,串行發(fā)送或接收中斷標志TI或RI設在SCON寄存器的第SCON.0、SCON.1。5個中斷源中的一個、幾個或全部中斷源的開、關由中斷允許寄存器(IE)完成,而每個中斷源的優(yōu)先級別的高低由中斷優(yōu)先級控制寄存器(IP)完成。89C51單片機中斷源簡要特性見表3.3。表3.3 中斷源特性表名稱符號標志符號標志符號位置矢量地址

27、優(yōu)先級別外部中斷INT0IE0TCON.10003H最高最低定時器0溢出中斷TF0TF0TCON.5000BH外部中斷1INT1IE1TCON.30013H定時器1溢出中斷TF1TF1TCON.7001BH串行口中斷R1+T1R1SCON.00023HT1SCON.1六、仿真電路圖7、 程序設計過程交通道口交通燈控制系統(tǒng)的控制程序主要包括以下幾個部分:主程序、顯示程序、定時中斷程序、等。4.1.1 主程序主程序主要是負責總體程序的管理功能,實現(xiàn)人與機的交互設定。因為設計采用動態(tài)掃描方式顯示時間,所以主程序大部分時間要調用掃描顯示程序。主程序流程圖如圖4.1所示。 開始 初始化 While(1)

28、Key1=1&key2=1&key3=1Key1=0Key2=0Key3=0 NanBei()State1() Stop() DongXi()State2()State3() display(ge1,shi1,ge2,shi2)State4()State8()State7()State6()State5() 主程序流程圖程序如下:#include #define uchar unsigned char#define uint unsigned int /調用函數(shù)的聲明 void display(uint shi1,uint ge1,uint shi2,uint ge2);/數(shù)碼管顯示函數(shù)的聲明

29、 void delay(uint z); /延時函數(shù)的聲明 void State1(); void State2(); void State3(); void State4(); void State5(); void State6(); void State7(); void State8(); void NanBei(); void DongXi(); void Stop (); /定義管腳 sbit ARED_NB = P05; sbit BRED_NB = P22; sbit AYELLOW_NB = P04; sbit BYELLOW_NB = P21; sbit AGREEN_NB

30、 = P03; sbit BGREEN_NB = P20; sbit ARED_DX = P25; sbit BRED_DX = P02; sbit AYELLOW_DX = P24; sbit BYELLOW_DX = P01; sbit AGREEN_DX = P23; sbit BGREEN_DX = P00; sbit DXweixuan1 = P33;/東西方向數(shù)碼管位選1 sbit DXweixuan2 = P34;/東西方向數(shù)碼管位選2 sbit NBweixuan1 = P31;/南北方向數(shù)碼管位選1 sbit NBweixuan2 = P30;/南北方向數(shù)碼管位選2 sbit

31、 Key1=P27; sbit Key2=P26; sbit Key3=P17; /定義全局變量 uchar flag1=0, flag2=1; uint shi1, ge1, shi2, ge2, aa; uint code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /主函數(shù) void main() /初始化管腳 P0=0xFF; P1=0Xff; P2=0xFF; P3=0xFF; /循環(huán)函數(shù) while(1) uchar flag1 = 0, flag2 = 0; if(Key1 = 0) /按鍵檢測 Stop();

32、 /調用禁止通行函數(shù) P1=0xff; /不顯示時間 if(Key2 = 0) /按鍵檢測 NanBei(); /調用南北單向通行函數(shù) P1=0xff; if(Key3 = 0) /按鍵檢測 DongXi(); /調用東西單向通行函數(shù) P1=0xff; if(Key1=1 & Key2=1 & Key3=1) State1(); /調用第1個狀態(tài)(東西紅燈亮42秒,南北綠燈亮42秒) State2(); /調用第2個狀態(tài)(東西紅燈亮 3秒,南北綠燈閃 3秒) State3(); /調用第3個狀態(tài)(東西紅燈亮 4秒,南北黃燈亮 4秒) State4(); /調用第4個狀態(tài)(東西紅燈亮 1秒,南北

33、紅燈亮 1秒) State5(); /調用第5個狀態(tài)(東西黃燈亮 4秒,南北紅燈亮 4秒) State6(); /調用第6個狀態(tài)(東西綠燈亮27秒,南北紅燈亮27秒) State7(); /調用第7個狀態(tài)(東西綠燈閃 3秒,南北紅燈亮 3秒) State8(); /調用第8個狀態(tài)(東西黃燈亮 4秒,南北黃燈亮 4秒) void NanBei()/南北單向通行函數(shù)的定義 ARED_NB=1;AYELLOW_NB=1;AGREEN_NB=0;BRED_NB=1;BYELLOW_NB=1;BGREEN_NB=0;ARED_DX=0;AYELLOW_DX=1;AGREEN_DX=1;BRED_DX=0

34、;BYELLOW_DX=1;BGREEN_DX=1; void DongXi() /東西單項通行函數(shù)的定義 ARED_NB=0;AYELLOW_NB=1;AGREEN_NB=1;BRED_NB=0;BYELLOW_NB=1;BGREEN_NB=1;ARED_DX=1;AYELLOW_DX=1;AGREEN_DX=0;BRED_DX=1;BYELLOW_DX=1;BGREEN_DX=0; void Stop () /禁止通行函數(shù)的定義 ARED_NB=0;AYELLOW_NB=1;AGREEN_NB=1;BRED_NB=0;BYELLOW_NB=1;BGREEN_NB=1;ARED_DX=0;A

35、YELLOW_DX=1;AGREEN_DX=1;BRED_DX=0;BYELLOW_DX=1;BGREEN_DX=1; void State1()/第1個狀態(tài)(東西紅燈亮42秒,南北綠燈亮42秒)函數(shù)的定義 uint temp1,temp2; temp1 = 50; temp2 = 45; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(Key1=1 & Key2=1 & Key3=1) if(flag1 = 0 & flag2 = 1)/定時20*50MS=1S flag2=

36、0; temp1-; temp2-; ARED_NB=1;AYELLOW_NB=1;AGREEN_NB=0; BRED_NB=1;BYELLOW_NB=1;BGREEN_NB=0; ARED_DX=0;AYELLOW_DX=1;AGREEN_DX=1; BRED_DX=0;BYELLOW_DX=1;BGREEN_DX=1; shi1=temp1/10; ge1=temp1%10; shi2=temp2/10; ge2=temp2%10; if(temp2 = 3) temp2 = 45; break; display(ge1,shi1,ge2,shi2); /調用數(shù)碼管顯示函數(shù) flag1 =

37、 1; void State2()/第2個狀態(tài)(東西紅燈亮 3秒,南北綠燈閃 3秒)函數(shù)的定義 uint temp1,temp2; temp1 = 8; temp2 = 3; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(Key1=1 & Key2=1 & Key3=1) if(flag1 = 1 & flag2 = 1)/定時20*50MS=1S flag2=0; temp1-; temp2-; ARED_NB=1;AYELLOW_NB=1;AGREEN_NB = AGRE

38、EN_NB; BRED_NB=1;BYELLOW_NB=1;BGREEN_NB = BGREEN_NB; ARED_DX=0;AYELLOW_DX=1;AGREEN_DX=1; BRED_DX=0;BYELLOW_DX=1;BGREEN_DX=1; shi1=0; shi2=0; ge1=temp1%10; ge2=temp2%10; if(temp2 = 0) temp2 = 3; break; display(ge1,shi1,ge2,shi2); /調用數(shù)碼管顯示函數(shù) flag1 = 2; void State3() /第3個狀態(tài)(東西紅燈亮 4秒,南北黃燈亮 4秒)函數(shù)的定義 uint

39、 temp1, temp2; temp1 = 5; temp2 = 4; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(Key1=1 & Key2=1 & Key3=1) if(flag1 = 2 & flag2 =1)/定時20*50MS=1S flag2=0; temp1-; temp2-; ARED_NB=1;AYELLOW_NB=0; AGREEN_NB=1; BRED_NB=1;BYELLOW_NB=0; BGREEN_NB=1; ARED_DX=0;AYELLOW

40、_DX=1;AGREEN_DX=1; BRED_DX=0;BYELLOW_DX=1;BGREEN_DX=1; shi1=0; shi2=0; ge1=temp1%10; ge2=temp2%10; if(temp2 = 0) temp2 = 4; break; display(ge1,shi1,ge2,shi2); /調用數(shù)碼管顯示函數(shù) flag1 = 3; void State4() /第4個狀態(tài)(東西紅燈亮 1秒,南北紅燈亮 1秒)函數(shù)的定義 uint temp1, temp2; temp1 = 1; temp2 = 35; TMOD=0x01; TH0=(65535-50000)/256

41、; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(Key1=1 & Key2=1 & Key3=1) if(flag1 = 3 & flag2 =1)/定時20*50MS=1S flag2=0; temp1-; temp2-; ARED_NB=0; AYELLOW_NB=1;AGREEN_NB=1; BRED_NB=0; BYELLOW_NB=1;BGREEN_NB=1; ARED_DX=0; AYELLOW_DX=1;AGREEN_DX=1; BRED_DX=0; BYELLOW_DX=1;BGREEN_DX=1; shi1=0; shi2

42、=temp2/10; ge1=temp1%10; ge2=temp2%10; if(temp1=0) temp1 = 1; break; display(ge1,shi1,ge2,shi2); flag1 = 4; void State5()/第5個狀態(tài)(東西黃燈亮 4秒,南北紅燈亮 4秒)函數(shù)的定義 uint temp1,temp2; temp1 = 4; temp2 = 34; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(Key1=1 & Key2=1 & Key3=1

43、) if(flag1 = 4 & flag2 =1) flag2=0; temp1-; temp2-; ARED_NB=0;AYELLOW_NB=1;AGREEN_NB=1; BRED_NB=0;BYELLOW_NB=1;BGREEN_NB=1; ARED_DX=1;AYELLOW_DX=0; AGREEN_DX=1; BRED_DX=1; BYELLOW_DX=0; BGREEN_DX=1; shi1=0; shi2=temp2/10; ge1=temp1%10; ge2=temp2%10; if(temp1=0) temp1 = 4; break; display(ge1,shi1,ge2

44、,shi2); /調用數(shù)碼管顯示函數(shù) flag1 = 5; void State6()/第6個狀態(tài)(東西綠燈亮27秒,南北紅燈亮27秒)函數(shù)的定義 uint temp; temp = 30; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(Key1=1 & Key2=1 & Key3=1) if(flag1 = 5 & flag2 =1) flag2=0; temp-;ARED_NB=0;AYELLOW_NB=1;AGREEN_NB=1; BRED_NB=0;BYELLOW_N

45、B=1;BGREEN_NB=1; ARED_DX=1;AYELLOW_DX=1;AGREEN_DX=0; BRED_DX=1;BYELLOW_DX=1;BGREEN_DX=0; shi1=temp / 10; shi2=temp / 10; ge1=temp % 10; ge2=temp % 10; if(temp = 3) temp = 30; break; display(ge1,shi1,ge2,shi2); /調用數(shù)碼管顯示函數(shù) flag1 = 6; void State7()/第7個狀態(tài)(東西綠燈閃 3秒,南北紅燈亮 3秒)函數(shù)的定義 uint temp; temp = 3; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(Key1=1 & Key2=1 & Key3=1) if(flag1 = 6 & flag2 =1) flag2=0; temp-;ARED_NB=0;AYELLOW_NB=1;AGREEN_NB=1; BRED_NB=0;BYELLOW_NB=1;BGREEN_NB=1; ARED_DX=1;AYELLOW_DX=1;AG

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論