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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、江西科技師范大學(xué)通信與電子學(xué)院?jiǎn)纹瑱C(jī)應(yīng)用技術(shù)實(shí)訓(xùn)報(bào)告 實(shí)訓(xùn)題目:模擬交通燈 小組成員:龔石沖 羅仁敏 曾建偉 班 級(jí):12電子科學(xué)與技術(shù) 指導(dǎo)老師:熊朝松331、 實(shí)訓(xùn)選題內(nèi)容、要求交通模擬燈要求:1、 南北方向?yàn)橹鞲傻?,東西方向?yàn)橹罚恢鞲陕肪G燈時(shí)間為45秒,紅燈時(shí)間為35秒; 支路綠燈時(shí)間30秒,紅燈時(shí)間為50秒,兩個(gè)方向的黃燈時(shí)間都為4秒;2、使用定時(shí)器實(shí)現(xiàn)時(shí)間的倒計(jì)時(shí);用顯示部件顯示主干道路的倒計(jì)時(shí)變化;3、設(shè)計(jì)三個(gè)外部按鈕,分別用以手動(dòng)控制緊急情況下兩個(gè)方向同時(shí)禁通過(guò);南北方向 長(zhǎng)時(shí)間通過(guò)(不顯示時(shí)間倒計(jì)時(shí)變化);東西方向長(zhǎng)時(shí)間通過(guò);釋放按鈕后則正常 通行。2、 實(shí)訓(xùn)計(jì)劃和人員安排經(jīng)

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

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

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

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

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

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

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

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

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

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

12、進(jìn)行校驗(yàn)時(shí),P0口輸出原碼,此時(shí)P0外部必須被拉高。P1口(18腳):P1.0P1.7統(tǒng)稱(chēng)為P1口,可作為準(zhǔn)雙向I/O口使用。P1是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門(mén)電流。對(duì)端口寫(xiě)“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。P1口被外部下拉為低電平時(shí),輸出電流,是因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流。在Flash編程和校驗(yàn)時(shí),P1口作為第八位地址接收。P2口(2128腳):P2.0P2.7統(tǒng)稱(chēng)為P2口,一般作為準(zhǔn)雙向I/O使用。P2是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口。P2的輸出緩沖器可驅(qū)動(dòng)4個(gè)TTL邏輯門(mén)電路。當(dāng)對(duì)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

27、優(yōu)先級(jí)別外部中斷INT0IE0TCON.10003H最高最低定時(shí)器0溢出中斷TF0TF0TCON.5000BH外部中斷1INT1IE1TCON.30013H定時(shí)器1溢出中斷TF1TF1TCON.7001BH串行口中斷R1+T1R1SCON.00023HT1SCON.1六、仿真電路圖7、 程序設(shè)計(jì)過(guò)程交通道口交通燈控制系統(tǒng)的控制程序主要包括以下幾個(gè)部分:主程序、顯示程序、定時(shí)中斷程序、等。4.1.1 主程序主程序主要是負(fù)責(zé)總體程序的管理功能,實(shí)現(xiàn)人與機(jī)的交互設(shè)定。因?yàn)樵O(shè)計(jì)采用動(dòng)態(tài)掃描方式顯示時(shí)間,所以主程序大部分時(shí)間要調(diào)用掃描顯示程序。主程序流程圖如圖4.1所示。 開(kāi)始 初始化 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 /調(diào)用函數(shù)的聲明 void display(uint shi1,uint ge1,uint shi2,uint ge2);/數(shù)碼管顯示函數(shù)的聲明

29、 void delay(uint z); /延時(shí)函數(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) /按鍵檢測(cè) Stop();

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

33、紅燈亮 1秒) State5(); /調(diào)用第5個(gè)狀態(tài)(東西黃燈亮 4秒,南北紅燈亮 4秒) State6(); /調(diào)用第6個(gè)狀態(tài)(東西綠燈亮27秒,南北紅燈亮27秒) State7(); /調(diào)用第7個(gè)狀態(tài)(東西綠燈閃 3秒,南北紅燈亮 3秒) State8(); /調(diào)用第8個(gè)狀態(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() /東西單項(xiàng)通行函數(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個(gè)狀態(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)/定時(shí)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); /調(diào)用數(shù)碼管顯示函數(shù) flag1 =

37、 1; void State2()/第2個(gè)狀態(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)/定時(shí)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); /調(diào)用數(shù)碼管顯示函數(shù) flag1 = 2; void State3() /第3個(gè)狀態(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)/定時(shí)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); /調(diào)用數(shù)碼管顯示函數(shù) flag1 = 3; void State4() /第4個(gè)狀態(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)/定時(shí)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個(gè)狀態(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); /調(diào)用數(shù)碼管顯示函數(shù) flag1 = 5; void State6()/第6個(gè)狀態(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); /調(diào)用數(shù)碼管顯示函數(shù) flag1 = 6; void State7()/第7個(gè)狀態(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論