《單片機原理及應(yīng)用技術(shù)項目化教程》課件項目三_第1頁
《單片機原理及應(yīng)用技術(shù)項目化教程》課件項目三_第2頁
《單片機原理及應(yīng)用技術(shù)項目化教程》課件項目三_第3頁
《單片機原理及應(yīng)用技術(shù)項目化教程》課件項目三_第4頁
《單片機原理及應(yīng)用技術(shù)項目化教程》課件項目三_第5頁
已閱讀5頁,還剩77頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

模塊3中斷控制的花樣彩燈設(shè)計3.1項目描述 3.2項目目的與要求

3.3項目支撐知識鏈接3.4項目實施

項目小結(jié)項目拓展技能與練習(xí)

【項目導(dǎo)入】

早期的單片機系統(tǒng)中并沒有引入中斷機制,隨著工業(yè)技術(shù)的發(fā)展,要求在工業(yè)控制系統(tǒng)中能實時、快速、準確地處理一些突發(fā)事件,由此促使了中斷技術(shù)的出現(xiàn)。如今中斷技術(shù)在單片機中的應(yīng)用越來越廣泛。在此,我們通過設(shè)計一個項目—中斷控制的花樣彩燈,讓同學(xué)們掌握中斷技術(shù)在單片機中的使用。

【項目目標】

1.知識目標

(1)理解中斷的概念;

(2)熟悉單片機的中斷結(jié)構(gòu)和控制;

(3)理解中斷控制寄存器的各位含義;

(4)掌握中斷的處理過程。

(5)掌握C51中斷函數(shù)的定義。

2.能力目標

(1)編程中會使用中斷各寄存器;

(2)掌握中斷的入口地址的安排;

(3)能運用C51語言編寫中斷應(yīng)用程序。

3.1項目描述

單片機的中斷技術(shù)在工業(yè)控制與測量領(lǐng)域有著廣泛的應(yīng)用。本項目通過用一個按鍵產(chǎn)生的中斷信號來控制花樣彩燈的閃亮方式。通過該項目的學(xué)習(xí),學(xué)生可掌握單片機中斷的基本概念、中斷的處理過程以及中斷服務(wù)程序的編寫,為以后單片機系統(tǒng)的開發(fā)奠定扎實的基礎(chǔ)。

3.2項目目的與要求

本項目采用外部中斷方式控制彩燈的運行,通過按動按鍵產(chǎn)生中斷,使得彩燈以三種方式閃亮。項目在實施過程中需要解決以下關(guān)鍵問題:

(1)各中斷控制寄存器的每一位的值如何確定?

(2)采用何種中斷信號?如何處理該中斷過程?

(3)按鍵按下后,中斷如何響應(yīng)?

(4)中斷服務(wù)程序如何編寫?

3.3項目支撐知識鏈接

3.3.1中斷系統(tǒng)概述

1.中斷的概念

在現(xiàn)實生活中,往往會遇到這樣的事情:你在看書—電話響了—接電話—通話完畢—從剛才停止的地方繼續(xù)看書。這是一個典型的中斷現(xiàn)象,為什么會出現(xiàn)此現(xiàn)象呢?就是因為當(dāng)你正做一件事情(看書)時,突然出現(xiàn)了一個重要的事情要處理(接電話),而一個人又不能同時完成兩項任務(wù),這時就必須采取穿插著去做的方法來實現(xiàn)。與生活中的中斷現(xiàn)象相似,在單片機執(zhí)行程序的過程中,由于內(nèi)部或者外部發(fā)生某一突發(fā)事件去請求CPU處理(中斷發(fā)生);CPU暫時中斷當(dāng)前程序的執(zhí)行,轉(zhuǎn)去處理所發(fā)生的事件(中斷響應(yīng)和中斷服務(wù));待處理完畢后,再返回來執(zhí)行原來被中斷的程序(中斷返回)。這一處理過程稱為中斷。在中斷系統(tǒng)中,常用到以下幾個概念:CPU正常情況下運行的程序稱為主程序;向CPU提出中斷申請的設(shè)備稱為中斷源;中斷源向CPU所發(fā)出的請求中斷的信號稱為中斷請求;CPU在滿足條件的情況下,接受中斷申請,終止現(xiàn)行的執(zhí)行轉(zhuǎn)而為申請中斷的對象服務(wù)稱為中斷響應(yīng);為服務(wù)對象服務(wù)的程序稱為中斷服務(wù)程序;現(xiàn)行程序被中斷的地址稱為斷點;中斷服務(wù)程序結(jié)束后,返回到原來的程序稱為中斷返回。單片機中斷過程示意圖如圖3-1所示。圖3-1單片機中斷過程示意圖此處需要注意兩點,分別是:保護斷點和保護現(xiàn)場。

保護斷點指的是當(dāng)CPU響應(yīng)外設(shè)提出的中斷請求時,在轉(zhuǎn)入中斷服務(wù)程序之前,把主程序斷點(程序計數(shù)器PC的當(dāng)前值)保存起來,以便中斷服務(wù)程序執(zhí)行結(jié)束返回到主程序后,從斷點處又開始繼續(xù)執(zhí)行主程序。保護現(xiàn)場指的是CPU執(zhí)行中斷處理程序時,可能要使用主程序中使用過的累加器、寄存器或標志位,為了使這些單元的值在中斷服務(wù)程序中不被沖掉,在進入中斷服務(wù)程序前,要將有關(guān)寄存器保護起來。中斷服務(wù)程序執(zhí)行完時,還必須恢復(fù)原寄存器的內(nèi)容及原程序中斷處的地址,即恢復(fù)現(xiàn)場和恢復(fù)斷點。

2.89C51中斷系統(tǒng)的結(jié)構(gòu)

89C51系列單片機的中斷系統(tǒng)有5個中斷源,分別是、、T0、T1和串行端口。4個中斷控制寄存器TCON、SCON、IE、IP用于控制中斷類型、鎖存中斷標志以及控制中斷的開/關(guān)和中斷源的優(yōu)先級別。5個中斷源有兩個優(yōu)先級,可實現(xiàn)二級中斷服務(wù)嵌套,由片內(nèi)特殊功能寄存器中的中斷允許寄存器IE控制CPU是否響應(yīng)中斷請求,由中斷優(yōu)先級寄存器IP安排各中斷源的優(yōu)先級,同一優(yōu)先級內(nèi)各中斷同時提出中斷請求時,由內(nèi)部的查詢邏輯確定其響應(yīng)次序。

89C51單片機的中斷系統(tǒng)包括中斷請求標志位(在相關(guān)的特殊功能寄存器中)、中斷允許寄存器IE、中斷優(yōu)先級寄存器IP及內(nèi)部硬件查詢電路,如圖3-2所示,圖中反映出了89C51單片機中斷系統(tǒng)的功能和控制情況。圖3-289C51中斷系統(tǒng)內(nèi)部結(jié)構(gòu)圖

3.中斷的功能

隨著計算機技術(shù)的應(yīng)用,人們發(fā)現(xiàn)中斷技術(shù)不僅解決了快速主機與慢速I/O設(shè)備的數(shù)據(jù)傳送問題,而且還具有如下功能:

(1)提高CPU的工作效率。中斷請求發(fā)生于時間不確定的事件(如定時時間到的處理)中,在中斷請求發(fā)生時需要CPU暫停當(dāng)前的工作。因此采用中斷技術(shù)使CPU避免了不必要的等待和查詢,大大提高了CPU的工作效率,實現(xiàn)了CPU與外圍部件或外部設(shè)備的并行工作。

(2)處理故障。把那些可以預(yù)知的故障(如除數(shù)為0、掉電等)作為中斷源,編制相應(yīng)的故障處理中斷服務(wù)程序,這樣當(dāng)故障發(fā)生時,CPU就能及時發(fā)現(xiàn)并自動進行處理。

(3)實現(xiàn)實時控制。在實時測控系統(tǒng)中,要求單片機能對現(xiàn)場的許多隨機參數(shù)、信息進行快速分析、運算并及時處理,而中斷機制正好滿足了這種在任何時刻提出處理請求的實時控制。

(4)實現(xiàn)人機交互。用戶需要對單片機的工作進行干預(yù)時,可以通過按鍵請求使單片機按照用戶的意圖進行工作。3.3.2中斷的處理過程

1.中斷源

89C51系列單片機有5個中斷源:(P3.2),(P3.3),定時器/計數(shù)器T0、T1的溢出中斷,串行端口的發(fā)送(TXD)和接收(RXD)中斷(只占一個中斷源)。下面分別作一介紹。

(1)?

(P3.2):外部中斷0請求信號輸入引腳???/p>

由IT0(TCON.0)選擇其為低電平有效還是下降沿有效。當(dāng)CPU檢測到P3.2引腳上出現(xiàn)有效的中斷信號時,中斷標志IE0(TCON.1)置1,開始向CPU申請中斷。

(2)?

(P3.3):外部中斷1請求信號輸入引腳??捎蒊T1(TCON.2)選擇其為低電平有效還是下降沿有效。當(dāng)

CPU檢測到P3.3引腳上出現(xiàn)有效的中斷信號時,中斷標志IE1(TCON.3)置1,開始向CPU申請中斷。

(3)?T0(P3.4):內(nèi)部中斷,片內(nèi)定時器/計數(shù)器T0溢出時發(fā)出中斷請求。當(dāng)定時器/計數(shù)器T0發(fā)生溢出時,置位TF0,向CPU申請中斷。

(4)?T1(P3.5):內(nèi)部中斷,片內(nèi)定時器/計數(shù)器T1溢出

時發(fā)出中斷請求。當(dāng)定時器/計數(shù)器T1發(fā)生溢出時,置位TF1,向CPU申請中斷。

(5)串行端口:內(nèi)部中斷,包括串行接收中斷RI和串行發(fā)送中斷TI。當(dāng)接口接收完一幀串行數(shù)據(jù)時置位RI,或當(dāng)串行接口發(fā)送完一幀串行數(shù)據(jù)時置位TI,向CPU申請中斷。

2.中斷申請標志(TCON和SCON)

在中斷系統(tǒng)中,應(yīng)用何種中斷,采用何種觸發(fā)方式,是由定時器/計數(shù)器控制寄存器TCON和串行端口控制寄存器SCON的相應(yīng)位規(guī)定的。TCON和SCON均屬于特殊功能寄存器,字節(jié)地址分別為88H和98H,兩者都可以進行位尋址。

1)定時器/計數(shù)器控制寄存器TCON

TCON是定時器/計數(shù)器控制寄存器,其字節(jié)地址為88H,可進行位尋址。這個寄存器有兩個作用,即除了控制定時器/計數(shù)器T0、T1的溢出中斷和鎖存T0、T1的溢出中斷標志位外,還控制外部中斷的觸發(fā)方式和鎖存外部中斷請求標志。其格式如下:

TCON寄存器各控制位的含義如下:

IT0(TCON.0):選擇外部中斷的中斷觸發(fā)方式。當(dāng)IT0=0時,為電平觸發(fā)方式,低電平有效;當(dāng)IT0=1時,為邊沿觸發(fā)方式,下降沿有效(即P3.2引腳信號出現(xiàn)負跳變有效)。

IT1(TCON.2):選擇外部中斷的中斷觸發(fā)方式。當(dāng)IT1=0時外部中斷的中斷觸發(fā)方式為電平觸發(fā)方式,低電平有效;當(dāng)IT1=1時,外部中斷的中斷觸發(fā)方式為邊沿觸發(fā)方式,負跳變有效(1→0)。

IE0(TCON.1):外部中斷的中斷請求標志。當(dāng)IE0=1時,表示外部中斷向CPU請求中斷。

IE1(TCON.3):外部中斷的中斷請求標志。當(dāng)IE1=1時,表示外部中斷向CPU請求中斷。

TF0(TCON.5):片內(nèi)定時器/計數(shù)器T0溢出中斷請求標志。定時器/計數(shù)器的核心為加法器,當(dāng)定時器/計數(shù)器T0發(fā)生定時或計數(shù)溢出時,由硬件置位TF0,向CPU申請中斷,CPU響應(yīng)中斷后,會自動對TF0清零。

TF0(TCON.5):片內(nèi)定時器/計數(shù)器T0溢出中斷請求標志。定時器/計數(shù)器的核心為加法器,當(dāng)定時器/計數(shù)器T0發(fā)生定時或計數(shù)溢出時,由硬件置位TF0,向CPU申請中斷,CPU響應(yīng)中斷后,會自動對TF0清零。

TF1(TCON.7):片內(nèi)定時器/計數(shù)器T1溢出中斷請求標志。其操作功能與TF0類同。

TR0(TCON.4):定時器/計數(shù)器T0的啟動/停止控制位,由軟件進行設(shè)定。TR0=0,停止T0定時(或者計數(shù));TR0=1,啟動T0定時(或者計數(shù))。

TR1(TCON.6):定時器/計數(shù)器T1的啟動/停止控制位,由軟件進行設(shè)定。TR1=0,停止T1定時(或者計數(shù));TR1=1,啟動T1定時(或者計數(shù))。

2)串行端口控制寄存器SCON

SCON為串行端口控制寄存器,其字節(jié)地址為98H,也可以進行位尋址。串行端口的接收和發(fā)送數(shù)據(jù)中斷請求標志位(RI、TI)被鎖存在端口控制寄存器SCON中,其格式如下:

SCON寄存器各位的含義如下:

RI(SCON.0):串行端口接收中斷請求標志位。在串行端口允許接收時,每接收完一幀數(shù)據(jù),由硬件自動將RI位置1。同樣,CPU響應(yīng)中斷時不會清除RI,RI位的清0必須由用戶用指令來完成。

TI(SCON.1):串行端口發(fā)送中斷請求標志位。CPU將一個數(shù)據(jù)寫入發(fā)送緩沖器SBUF時,就啟動發(fā)送,每發(fā)送完一幀串行數(shù)據(jù)后,硬件置位TI。但CPU響應(yīng)中斷時,并不清除TI,必須在中斷服務(wù)程序中由軟件對TI清0。在中斷系統(tǒng)中,將串行端口的接收中斷RI和發(fā)送中斷TI經(jīng)邏輯或運算后作為內(nèi)部的一個中斷源。當(dāng)CPU響應(yīng)串行端口中斷請求時,CPU并不清楚是接收中斷請求還是發(fā)送中斷請求,所以用戶在編寫串行端口中斷服務(wù)程序時,在程序中必須識別是RI還是TI產(chǎn)生的中斷請求,從而執(zhí)行相應(yīng)的中斷服務(wù)程序。另外,SCON其他各位的功能和作用與串行通信有關(guān),將在項目5中介紹。

3.中斷允許控制

89C51對中斷源的開放或屏蔽是由中斷允許寄存器IE控制的,IE的字節(jié)地址為A8H,既可以按字節(jié)尋址,也可以按位尋址。當(dāng)單片機復(fù)位時IE被清為0。通過對IE各位的置1或清0操作,可實現(xiàn)打開或屏蔽某個中斷。IE的格式如下:

IE寄存器各位的含義如下:

EA(IE.7):中斷允許總控制位,其狀態(tài)由用戶通過程序進行控制。EA=0,中斷禁止,即關(guān)中斷;EA=1,中斷總允許,即開中斷。對各中斷源的中斷請求是否允許還取決于各中斷源的中斷允許控制位的狀態(tài)。

EX0(IE.0):外中斷0(即)的中斷允許控制位。EX0=0,禁止中斷;EX0=1,允許中斷。

ET0(IE.1):定時器T0的中斷允許控制位。ET0=0,禁止T0中斷;ET0=1,允許T0中斷。

EX1(IE.2):外中斷1(即)的中斷允許控制位。EX1=0,禁止中斷;EX1=1,允許中斷。

ET1(IE.3):定時器T1的中斷允許控制位。中斷總允許時,ET1=0,禁止T1中斷;ET1=1,允許T1中斷。

ES(IE.4):串行口中斷允許控制位。中斷總允許時,ES=0,禁止串行口中斷;ES=1,允許串行口中斷。

89C51系統(tǒng)復(fù)位后,IE寄存器中各位均被清0,禁止所有的中斷。在應(yīng)用時,由軟件進行設(shè)定,既可以使用位操作,也可以使用字節(jié)操作來實現(xiàn)對IE的設(shè)置。

4.中斷優(yōu)先級控制及中斷嵌套

1)中斷優(yōu)先級

89C51單片機有兩個中斷優(yōu)先級,即可實現(xiàn)二級中斷服務(wù)程序嵌套。每個中斷源的中斷優(yōu)先級都是由中斷優(yōu)先級寄存器IP中的相應(yīng)位的狀態(tài)來控制的。IP的狀態(tài)也由軟件設(shè)定,某位設(shè)定為1時,相應(yīng)的中斷源為高優(yōu)先級中斷;某位設(shè)定為0時,相應(yīng)的中斷源為低優(yōu)先級中斷。IP寄存器的字節(jié)地址為B8H,既可以按字節(jié)訪問,又可以按位訪問。其格式如下:

IP寄存器的各位的含義如下:

PX0(IP.0):外中斷0的中斷優(yōu)先級控制位。PX0=0時,外中斷0為低中斷優(yōu)先級;PX0=1時,外中斷0為高中斷優(yōu)先級。

PT0(IP.1):定時器T0的中斷優(yōu)先級控制位。PT0=0時,T0為低中斷優(yōu)先級;PT0=1時,T0為高中斷優(yōu)先級。

PX1(IP.2):外中斷1的中斷優(yōu)先級控制位。PX1=0時,外中斷1為低中斷優(yōu)先級;PX1=1時,外中斷1為高中斷優(yōu)

先級。

PT1(IP.3):定時器T1的中斷優(yōu)先級控制位。PT1=0時,T1為低中斷優(yōu)先級;PT1=1時,T1為高中斷優(yōu)先級。

PS(IP.4):串行中斷源的中斷優(yōu)先級控制位。PS=0時,串行中斷為低中斷優(yōu)先級;PS=1時,串行中斷為高中斷優(yōu)先級。

若某幾個控制位為1,則相應(yīng)的中斷源就規(guī)定為高級中斷;反之,若某幾個控制位為0,則相應(yīng)的中斷源就規(guī)定為低級中斷。

對同時到來的優(yōu)先級中斷請求,將按照自然優(yōu)先級來確定中斷響應(yīng)次序,如表3-1所示。

2)中斷嵌套

當(dāng)CPU正在執(zhí)行中斷服務(wù)程序時,如果出現(xiàn)了另一個優(yōu)先級比它高的中斷請求,則CPU就暫時中止執(zhí)行原來優(yōu)先級較低的中斷源的服務(wù)程序,保護當(dāng)前的斷點,轉(zhuǎn)去響應(yīng)優(yōu)先級更高的中斷請求并為其服務(wù)。待服務(wù)結(jié)束后,再去執(zhí)行優(yōu)先級別較低的原中斷服務(wù)程序。該過程被稱為中斷嵌套(類似于子程序的嵌套),該中斷系統(tǒng)稱為多級中斷系統(tǒng)。中斷嵌套的過程如圖3-3所示。圖3-3中斷嵌套示意圖

5.中斷處理過程

89C51單片機的中斷處理過程可分為三個階段,即中

斷響應(yīng)、中斷處理和中斷返回,如圖3-4所示。單片機工作時,在每個機器周期中都去查詢各個中斷標記位,如果是“1”,就說明有中斷請求;接下來判斷中斷請求是否滿足響應(yīng)條件,若滿足響應(yīng)條件,就進入中斷處理;中斷處理完畢,進行中斷返回,繼續(xù)執(zhí)行指令。圖3-4中斷處理過程的三個階段

1)中斷響應(yīng)

中斷響應(yīng)的條件是:①中斷源有中斷請求;②此中斷源的中斷允許位為1;③?CPU開中斷(即EA=1)。同時滿足這三個條件時,CPU才有可能響應(yīng)中斷。

圖3-5所示為某中斷的響應(yīng)時序。從中斷源提出中斷申請,到CPU響應(yīng)中斷(如果滿足了響應(yīng)中斷響應(yīng)條件),需要經(jīng)歷一定的時間。圖3-5中斷的響應(yīng)時序

89C51的中斷響應(yīng)時間(從標志置1到進入相應(yīng)的中斷服務(wù))至少有3個完整的機器周期。中斷控制系統(tǒng)對各中斷標志進行查詢需要1個機器周期,如果響應(yīng)條件具備,則CPU執(zhí)行中斷系統(tǒng)提供的相應(yīng)向量地址的硬件長調(diào)用指令要占用2個機器周期。

此外,如果中斷響應(yīng)過程受阻,則要增加等待時間。若同級或高級中斷正在進行,則所需要的附加等待時間取決于正在執(zhí)行的中斷服務(wù)程序的長短,等待的時間不確定。若沒有同級或高級中斷正在進行,則所需要的附加時間在3~5個機器周期之間。

2)中斷處理

如果一個中斷被響應(yīng),則按下列過程進行處理:

(1)給相應(yīng)的優(yōu)先級觸發(fā)器狀態(tài)置1,指明CPU正在響應(yīng)的中斷優(yōu)先級的級別,同時屏蔽所有同級或更低級的中斷請求,允許更高級的中斷請求。

(2)執(zhí)行一個硬件生成子程序調(diào)用指令,使控制轉(zhuǎn)到相應(yīng)的中斷入口向量地址,并清除中斷源的中斷請求標志(TI和RI除外)。

(3)在執(zhí)行中斷服務(wù)程序之前,CPU只保護一個地址(PC的值),如果主程序和中斷服務(wù)子程序都用到一些公共存儲空間(如A、PSW、DPTR等),那么執(zhí)行中斷服務(wù)子程序前將這些數(shù)據(jù)保存起來,以免返回主程序時出現(xiàn)錯誤。

(4)轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序入口,即將被響應(yīng)的中斷入口向量地址送入PC中,執(zhí)行中斷服務(wù)程序。51單片機的五個中斷源都有各自的入口地址,見表3-1。

6.中斷的應(yīng)用

1)具體的中斷服務(wù)程序

CPU響應(yīng)中斷結(jié)束后即轉(zhuǎn)至中斷服務(wù)程序的入口,從中斷服務(wù)程序的第一條指令開始到返回指令為止。不同的中斷服務(wù)的內(nèi)容及要求各不相同,其處理過程也有所區(qū)別。一般情況下,中斷處理包括兩部分內(nèi)容:一是保護現(xiàn)場,二是為中斷源服務(wù)。

C51編譯器支持在C源程序中直接開發(fā)中斷過程,在中斷服務(wù)程序中,必須指定對應(yīng)的中斷號,用中斷號確定該中斷服務(wù)程序是哪個中斷所對應(yīng)的中斷服務(wù)程序。

中斷服務(wù)程序格式:

Void函數(shù)名(參數(shù))interruptnusingm

{函數(shù)體語句;}

其中,interrupt后面的n是中斷號;關(guān)鍵字using后面的m是所選擇的寄存器組,取值范圍為0~3,定義中斷時using是個選項,可以省略不用。

2)中斷服務(wù)程序舉例

【例3-1】利用單片機的外部中斷0響應(yīng)按鍵開關(guān)信號,當(dāng)有按鍵按下時會觸發(fā)中斷,中斷發(fā)生時將LED狀態(tài)取反,產(chǎn)生LED的亮滅由按鍵(中斷)控制,電路圖如圖3-6所示。圖3-6中斷控制的單個LED燈

C51程序如下:

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitLED=P0^0;

/*********主程序************/

voidmain()

{LED=1;

EA=1; //允許中斷

EX0=1; //使用外部中斷0

T0=1; //選擇外部的中斷的中斷觸發(fā)方式

while(1);

}

/*********INT0中斷函數(shù)************/

voidEX_INT0()interrupt0

{LED=~LED;//控制LED亮滅

}

【例3-2】設(shè)計中斷計數(shù),要求每次按下按鍵時觸發(fā)中斷,中斷程序累加計數(shù),計數(shù)值顯示在3只數(shù)碼管上,按下清零鍵時數(shù)碼管清零,硬件電路如圖3-7所示。圖3-7中斷控制的計數(shù)電路C51程序如下:

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

//0~9的段碼

ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

//計數(shù)值分解后各個待顯示的數(shù)位

ucharDSY_Buffer[]={0,0,0};

ucharCount=0;

sbitClear_Key=P3^6;

//數(shù)碼管上顯示計數(shù)值voidShow_Count_ON_DSY()

{ DSY_Buffer[2]=Count/100; //獲取3個數(shù)

DSY_Buffer[1]=Count%100/10;

DSY_Buffer[0]=Count%10;

if(DSY_Buffer[2]==0) //高位為0時不顯示

{ DSY_Buffer[2]=0x0a;

if(DSY_Buffer[1]==0)//高位為0,若第二位為0同樣不顯示

DSY_Buffer[1]=0x0a;

}

P0=DSY_CODE[DSY_Buffer[0]];

P1=DSY_CODE[DSY_Buffer[1]];

P2=DSY_CODE[DSY_Buffer[2]];

}

//主程序

voidmain(){ P0=0x00;

P1=0x00;

P2=0x00;

IE=0x81; //允許INT0中斷

IT0=1; //下降沿觸發(fā)

while(1) {

if(Clear_Key==0)Count=0; //清0

Show_Count_ON_DSY();

}

}

//INT0中斷函數(shù)

voidEX_INT0()interrupt0

{

Count++; //計數(shù)值遞增

}

3.4項目實施

3.4.1項目硬件設(shè)計

中斷控制的花樣彩燈系統(tǒng)的結(jié)構(gòu)比較簡單,其硬件電路模塊包括電源電路、時鐘電路、按鍵復(fù)位電路和LED燈接口電路,具體硬件電路如圖3-8所示。圖3-8中斷控制的彩燈電路圖3.4.2項目軟件設(shè)計

設(shè)計中采用單片機的外部中斷方式來實現(xiàn)對按鍵輸入進行處理。一般中斷函數(shù)和主函數(shù)之間的運行相當(dāng)于兩個程序并行運行,在本項目中,用中斷函數(shù)控制彩燈的顯示。在本程序設(shè)計中,采用的主函數(shù)和中斷函數(shù)流程圖如圖3-9所示。圖3-9彩燈設(shè)計的主函數(shù)和中斷函數(shù)流程圖另外,設(shè)計中我們采用了一個判斷變量f,當(dāng)不發(fā)生中斷時,f的值不變,程序保持運行,使彩燈按照其中的一種花樣閃亮,當(dāng)按下S鍵時,單片機終止原來的程序運行,調(diào)用中斷子函數(shù),則f的值發(fā)生一次改變,在中斷返回后,主程序再次執(zhí)行到判斷變量f的值,由于f的值已改變,所以將執(zhí)行一個彩燈控制的子程序,彩燈將按照另一種花樣變化顯示。在按鍵時會有一定的延時,采用延時程序消除按鍵產(chǎn)生的抖動。根據(jù)程序流程圖,寫出單片機C51語言程序:

#include<reg51.h>

#defineucharunsignedchar

ucharlight,f,b;

/********延時0.5s的子函數(shù)*********/

voiddelay05s()

{uchari,j,k;

for(i=5;i>0;i--)

for(j=200;j>0;j--)

for(k=250;k>0;k--);

}/********延時10ms的子函數(shù)*********/

voiddelay10ms()

{uchari,k;

for(i=20;i>0;i--)

for(k=250;k>0;k--);

}

/********左移點亮彩燈*********/

voidleft(){light=light<<1;

if(light==0)light=0x01;

P2=~light;

}

/********右移點亮彩燈*********/

voidright()

{light=light>>1;

if(light==0)light=0x01;

P2=~light;

}/********用戶自定義點亮彩燈*********/

voidassum()

{ucharcodedispcode[8]={0xff,0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e};

if(b==7)b=0;

elseb++;

P2=dispcode[b];

}

/********主函數(shù)*********/

voidmain(){IT0=1; //設(shè)置外部中斷0下降沿觸發(fā)

EX0=1; //開外部中斷0

EA=1; //開總中斷

f=1;

light=0x01;

b=0;

whi

溫馨提示

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

評論

0/150

提交評論