任務(wù)二發(fā)光二極管控制_第1頁
任務(wù)二發(fā)光二極管控制_第2頁
任務(wù)二發(fā)光二極管控制_第3頁
任務(wù)二發(fā)光二極管控制_第4頁
任務(wù)二發(fā)光二極管控制_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、任務(wù)二任務(wù)二 發(fā)光二極管控制發(fā)光二極管控制一、任務(wù)背景知識(shí)一、任務(wù)背景知識(shí) LED(Light Emitting Diode),發(fā)光二極管,是一種固態(tài)的半導(dǎo)體器件,它可以直接把電轉(zhuǎn)化為光。LED的心臟是一個(gè)半導(dǎo)體的晶片,晶片的一端附在一個(gè)支架上,一端是負(fù)極,另一端連接電源的正極,使整個(gè)晶片被環(huán)氧樹脂封裝起來,實(shí)物圖如圖2-1。YL-236設(shè)備上的LED發(fā)光二極管顯示電路如圖2-2。LED發(fā)光二極管顯示電路內(nèi)部原理圖如圖2-3所示。 發(fā)光二極管是一種直接能把電能轉(zhuǎn)變?yōu)楣饽艿陌雽?dǎo)體器件。與其它發(fā)光器件相比,具有體積小、功耗低、發(fā)光均勻、穩(wěn)定、響應(yīng)速度快、壽命長(zhǎng)和可靠性高等優(yōu)點(diǎn),被廣泛應(yīng)用于各種電子

2、儀器、音響設(shè)備、計(jì)算機(jī)等作電流指示、音頻指示和信息狀態(tài)顯示等。 圖2-1 LED燈實(shí)物圖 圖2-2 LED發(fā)光二極管顯示電路 圖2-3 LED發(fā)光二極管顯示電路內(nèi)部原理圖 發(fā)光二極管的管芯結(jié)構(gòu)與普通二極管相似,由一個(gè)PN結(jié)構(gòu)成。當(dāng)在發(fā)光二極管PN結(jié)上加正向電壓時(shí),空間電荷層變窄,載流子擴(kuò)散運(yùn)動(dòng)大于漂移運(yùn)動(dòng),致使P區(qū)的空穴注入N區(qū),N區(qū)的電子注入P區(qū)。當(dāng)電子和空穴復(fù)合時(shí)會(huì)釋放出能量并以發(fā)光的形式表現(xiàn)出來。二二 任務(wù)要求任務(wù)要求 為了使得學(xué)生對(duì)該知識(shí)點(diǎn)更好的理解,下面以4個(gè)具體的任務(wù)為例講解。 1.點(diǎn)亮發(fā)光二極管; 2.閃爍發(fā)光二極管; 3.亮度控制; 4.流水燈;三、任務(wù)實(shí)施三、任務(wù)實(shí)施1任務(wù)分

3、析任務(wù)分析 為了完成上面4個(gè)任務(wù),先畫出發(fā)光二級(jí)管任務(wù)原理圖如圖圖2-4,然后一一分析實(shí)現(xiàn)方法。 (1)要讓發(fā)光二極管D1、D3點(diǎn)亮,只要引腳P1.0和引腳P1.2為低電平即可。同理,只要引腳P1.1為高電平,D2就不會(huì)點(diǎn)亮。程序中用“0”來表示低電平,“1”來表示高電平。因此讓此圖的發(fā)光二極管點(diǎn)亮,只要將值“0”賦給單片機(jī)對(duì)應(yīng)的引腳即可。同理,讓發(fā)光二極管熄滅,只要將值“1”賦給單片機(jī)對(duì)應(yīng)的引腳即可。 (2)發(fā)光二級(jí)管的閃爍,實(shí)際上就是發(fā)光二級(jí)“亮”和“滅”切換時(shí)間比相同。 (3)漸亮,就是要控制發(fā)光二極管亮度,讓它慢慢地亮起來直到全亮。如果是模擬電路,可通過電阻調(diào)節(jié)發(fā)光二極管的電流來實(shí)現(xiàn)亮

4、度調(diào)節(jié)。但是,單片機(jī)控制發(fā)光二極管,要么亮,要么滅。如何讓它漸亮呢?答案就是控制發(fā)光管“亮/滅”時(shí)間比例。讓發(fā)光二極管在“亮”和“滅”之間快速地切換,由于切換速度很快,眼睛看不出來閃爍現(xiàn)象。只要讓“亮”的時(shí)間比例逐漸增加,而“滅”占的時(shí)間比例逐漸減少,亮度就會(huì)越來越亮,直至全亮。 (4)用數(shù)組實(shí)現(xiàn)流水燈:只要算出每一步的數(shù)據(jù)存入數(shù)組中,即可通過時(shí)間的長(zhǎng)短來實(shí)現(xiàn)流水燈的效果。 2任務(wù)具體實(shí)施任務(wù)具體實(shí)施點(diǎn)亮發(fā)光二極管點(diǎn)亮發(fā)光二極管 接線圖根據(jù)前面的分析,點(diǎn)亮發(fā)光二極管的接線圖如圖2-5所示。 LED顯示模塊 +5VLED1 LED2 LED3 GNDP1.0 P1.1 P1.2 主機(jī)模塊 +5V

5、 GND 電源模塊 +5V GND 源程序代碼#include#define off 1#define on 0sbit D1=P10; /定義P1.0引腳為D1sbit D2=P11; /定義P1.1引腳為D2sbit D3=P12; /定義P1.2引腳為D3int main() D1=on; /D1等于“開”D1亮 D2=off; /D2等于“關(guān)”D2滅 D3=on; /D3等于“開”D3亮 while(1); /死循環(huán),讓程序停留在此處 /* 把上面的主函數(shù)該成下面的也能實(shí)現(xiàn)相應(yīng)功能*/ main() P1=0 x02; /點(diǎn)亮D1、D3,關(guān)閉D2 while(1); /死循環(huán),讓程序停

6、留在此處 由于該程序很簡(jiǎn)單,這里沒有把實(shí)驗(yàn)圖畫出,學(xué)生可自己接線做結(jié)果。 閃爍發(fā)光二極管閃爍發(fā)光二極管 接線圖 根據(jù)前面的分析,閃爍發(fā)光二極管的接線圖如圖2-6所示。 LED顯示模塊 +5VLED1 GNDP2.0 主機(jī)模塊 +5V GND 電源模塊 +5V GND 如圖2-6 閃爍發(fā)光二極管的接線圖 源程序代碼 #include Sbit LED=P20; /定義p2.0引腳為L(zhǎng)ED int main() unsigned int i; /在函數(shù)內(nèi)部定義變量 LED=0; while(1) i=0 while(i30000)i=i+1; /延時(shí) LED=!LED; /然后,取反 由于該程序很

7、簡(jiǎn)單,這里沒有把實(shí)驗(yàn)圖畫出,學(xué)生可自己接線做結(jié)果,或者用仿真軟件進(jìn)行仿真結(jié)果。 亮度控制亮度控制 接線圖 根據(jù)前面的分析,亮度控制的接線圖如圖2-7所示。 LED顯示模塊 +5VLED1 GNDP1.0 主機(jī)模塊 +5V GND 電源模塊 +5V GND圖2-7 亮度控制的接線圖 源程序代碼 #include sbit D1=P10 /*延時(shí)函數(shù)*/delay(unsigned int i) while(-i); /*主函數(shù)*/int main() unsigned char i; /定義一個(gè)無符號(hào)字節(jié)變量 D1=1; /使D1開機(jī)為關(guān)閉狀態(tài) while(1) i=20; /循環(huán)次數(shù)20次,L

8、ED閃10次while(i0) D1=!D1; /取反,兩次閃一次delay(5000); /短延時(shí)i=i-1;i=10;while(i0) D1=!D1;delay(30000); /長(zhǎng)延時(shí)i=i-1; 該任務(wù)是一個(gè)亮度控制實(shí)驗(yàn),學(xué)生可自己接線在設(shè)備上做結(jié)果,或者用仿真軟件進(jìn)行仿真看結(jié)果的變化。 流水燈 接線圖 根據(jù)前面的分析,流水燈控制的接線圖如圖2-8所示。 LED顯示模塊 +5V D0-D7 GND P2.0-P2.7 主機(jī)模塊 +5V GND 電源模塊 +5V GND 圖2-8 流水燈控制的接線圖 源程序代碼 /*數(shù)組實(shí)現(xiàn)流水燈*/#include at89x52.h /AT89單片

9、機(jī)頭文件 #define uchar unsigned char /#define uint unsigned int /#define LED P2 /* 延時(shí)函數(shù) */delay(uint i) while(-i); /* 流水燈數(shù)組 */uchar code Ld=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; /* 主函數(shù) */int main() char s=0; while(1) LED=Lds; /送流水燈數(shù)據(jù)到I/O口 delay(35000); /延時(shí),送下次數(shù)據(jù) s=(s+1)%8; /數(shù)組下標(biāo)變量循環(huán)加1 該任務(wù)是一個(gè)流

10、水燈控制實(shí)驗(yàn),學(xué)生可自己接線在設(shè)備上做結(jié)果,或者用仿真軟件進(jìn)行仿真看結(jié)果的變化。其結(jié)果是燈從左向右亮。 。項(xiàng)目?jī)?nèi)容完成要求 分值完成情況自評(píng)分值 發(fā)光二極管控制 流程設(shè)計(jì)正確 20 程序編寫正確 30 實(shí)物連線正確 20 調(diào)試程序正確 30 四、四、任務(wù)自評(píng)任務(wù)自評(píng) 在完成了上面的任務(wù)之后,就用下面的評(píng)分標(biāo)準(zhǔn)來檢查自己的學(xué)習(xí)情況。 五、知識(shí)拓展五、知識(shí)拓展1AT89S52芯片芯片4個(gè)個(gè)I/O口講解口講解 AT89S52芯片有4組8位I/O口:P0、P1、P2和P3口,P1、P2和P3為準(zhǔn)雙向口,P0口則為雙向三態(tài)輸入輸出口,下面我們分別介紹這幾個(gè)口線: P0口和P2電路圖如圖2-9和2-10,

11、由圖可見,電路中包含一個(gè)數(shù)據(jù)輸出鎖存器和兩個(gè)三態(tài)數(shù)據(jù)輸入緩沖器,另外還有一個(gè)數(shù)據(jù)輸出的驅(qū)動(dòng)和控制電路。這兩組口線用來作為CPU與外部數(shù)據(jù)存儲(chǔ)器、外部程序存儲(chǔ)器和I/O擴(kuò)展口,而不能象P1、P3直接用作輸出口。它們一起可以作為外部地址總線,P0口身兼 兩職,既可作為地址總線,也可作為數(shù)據(jù)總線。 圖2-9 P2口鎖存器和緩沖器結(jié)構(gòu) P2口作為外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器的地址總線的高8位輸出口AB8-AB15,P0口由ALE選通作為地址總線的低8位輸出口AB0-AB7。外部的程序存儲(chǔ)器由PSEN信號(hào)選通,數(shù)據(jù)存儲(chǔ)器則由WR和RD讀寫信號(hào)選通,因?yàn)?16=64k,所以8051最大可外接64kB的程序存

12、儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。圖2-10 P2口鎖存器和緩沖器結(jié)構(gòu)P1口: 右圖為P1口其中一位的電路圖2-11,P1口為8位準(zhǔn)雙向口,每一位均可單獨(dú)定義為輸入或輸出口,當(dāng)作為輸入口時(shí),1寫入鎖存器,Q(非)=0,T2截止,內(nèi)上拉電阻將電位拉至1,此時(shí)該口輸出為1,當(dāng)0寫入鎖存器,Q(非)=1,T2導(dǎo)通,輸出則為0。 作為輸入口時(shí),鎖存器置1,Q(非)=0,T2截止,此時(shí)該位既可以把外部電路拉成低電平,也可由內(nèi)部上拉電阻拉成高電平,正因?yàn)檫@個(gè)原因,所以P1口常稱為準(zhǔn)雙向口。需要說明的是,作為輸入口使用時(shí),有兩種情況,其一是:首先是讀鎖存器的內(nèi)容,進(jìn)行處理后再寫到鎖存器中,這種操作即讀修改寫操作,象JBC(

13、邏輯判斷)、CPL(取反)、INC(遞增)、DEC(遞減)、ANL(與邏輯)和ORL(邏輯或)指令均屬于這類操作。其二是:讀P1口線狀態(tài)時(shí),打開三態(tài)門G2,將外部狀態(tài)讀入CPU。圖2-11 P1口鎖存器和緩沖器結(jié)構(gòu) 圖2-12 P3口線邏輯電路圖 P3口的電路如上圖2-12所示,P3口為準(zhǔn)雙向口,為適應(yīng)引腳的第二功能的需要,增加了第二功能控制邏輯,在真正的應(yīng)用電路中,第二功能顯得更為重要。由于第二功能信號(hào)有輸入輸出兩種情況,這里分別加以說明。 P3口的輸入輸出及P3口鎖存器、中斷、定時(shí)/計(jì)數(shù)器、串行口和特殊功能寄存器有關(guān),P3口的第一功能和P1口一樣可作為輸入輸出端口,同樣具有字節(jié)操作和位操作

14、兩種方式,在位操作模式下,每一位均可定義為輸入或輸出。 這里著重討論P(yáng)3口的第二功能,P3口的第二功能各管腳定義在任務(wù)一表1-1中進(jìn)行了詳細(xì)講解. 對(duì)于第二功能為輸出引腳,當(dāng)作I/O口使用時(shí),第二功能信號(hào)線應(yīng)保持高電平,與非門開通,以維持從鎖存器到輸出口數(shù)據(jù)輸出通路暢通無阻。而當(dāng)作第二功能口線使用時(shí),該位的鎖存器置高電平,使與非門對(duì)第二功能信號(hào)的輸出是暢通的,從而實(shí)現(xiàn)第二功能信號(hào)的輸出。對(duì)于第二功能為輸入的信號(hào)引腳,在口線上的輸入通路增設(shè)了一個(gè)緩沖器,輸入的第二功能信號(hào)即從這個(gè)緩沖器的輸出端取得。而作為I/O口線輸入端時(shí),取自三態(tài)緩沖器的輸出端。這樣,不管是作為輸入口使用還是第二功能信號(hào)輸入,

15、輸出電路中的鎖存器輸出和第二功能輸出信號(hào)線均應(yīng)置“1”。 2. I/O口工作原理口工作原理 (1)P0作為地址數(shù)據(jù)總線時(shí),T1和T2是一起工作的,構(gòu)成推挽結(jié)構(gòu)。高電平時(shí),T1打開,T2截止;低電平時(shí),T1截止,T2打開。這種情況下不用外接上拉電阻.而且,當(dāng)T1打開,T2截止,輸出高電平的時(shí)候,因?yàn)閮?nèi)部電源直接通過T1輸出到P0口線上,因此驅(qū)動(dòng)能力(電流)可以很大,這就是為什么教科書上說可以驅(qū)動(dòng)8個(gè)TTL負(fù)載的原因。 (2)P0作為一般端口時(shí),T1就永遠(yuǎn)的截止,T2根據(jù)輸出數(shù)據(jù)0導(dǎo)通和1截止,導(dǎo)通時(shí)拉地,當(dāng)然是輸出低電平;要輸出高電平,T2就截止,P0口就沒有輸出了,(注意,這種情況就是所謂的高

16、阻浮空狀態(tài)),如果加上外部上拉電阻,輸出就變成了高電平1。 (3) 其他端口P1、P2和P3,在內(nèi)部直接將P1口中的T1換成了上拉電阻,所以不用外接,但內(nèi)部上拉電阻太大,電流太小,有時(shí)因?yàn)殡娏鞑粔?,也?huì)再并一個(gè)上拉電阻。 (4) 在某個(gè)時(shí)刻,P0口上輸出的是作為總線的地址數(shù)據(jù)信號(hào)還是作為普通I/O口的電平信號(hào),是依靠多路開關(guān)MUX來切換的。而MUX的切換,又是根據(jù)單片機(jī)指令來區(qū)分的。當(dāng)指令為外部存儲(chǔ)器/IO口讀/寫時(shí),比如 MOVX A,DPTR ,MUX是切換到地址/數(shù)據(jù)總線上;而當(dāng)普通MOV傳送指令操作P0口時(shí),MUX是切換到內(nèi)部總線上的。 (5) P0、P1、P2、P3口用于輸入時(shí),需要

17、寫1使IO下拉的MOS管截止,以免MOS管導(dǎo)通將輸入拉底為0,當(dāng)一直用于輸入時(shí)不用置1(先使用該IO輸出,該IO鎖存器里可能是0,再用該IO輸入則會(huì)使MOS管導(dǎo)通),將IO寫1后,該IO鎖存器不會(huì)變了,所以再一直用于輸入不用置1。p0用于地址數(shù)據(jù)線時(shí)輸入不用寫1,因?yàn)镸UX沒和鎖存器相連。 因?yàn)槎丝?、2、3有固定的內(nèi)部上拉,所以有時(shí)候他們被稱為準(zhǔn)雙向口。 端口0, 從另外一方面來說,就被 認(rèn)為是真正的雙向,因?yàn)楫?dāng)它被設(shè)置為輸入的時(shí)候是浮空(高阻態(tài))的。 3. P0口上拉電阻選擇口上拉電阻選擇 如果是驅(qū)動(dòng)led,那么用1K左右的就行了。如果希望亮度大一些,電阻可減小,最小不要小于200歐姆,否

18、則電流太大;如果希望亮度小一些,電阻可增大,增加到多少呢,主要看亮度情況,以亮度合適為準(zhǔn),一般來說超過3K以上時(shí),亮度就很弱了,但是對(duì)于超高亮度的LED,有時(shí)候電阻為10K時(shí)覺得亮度還能夠用。我通常就用1k的。 對(duì)于驅(qū)動(dòng)光耦合器,如果是高電位有效,即耦合器輸入端接端口和地之間,那么和LED的情況是一樣的;如果是低電位有效,即耦合器輸入端接端口和VCC之間,那么除了要串接一個(gè)1-4.7k之間的電阻以外,同時(shí)上拉電阻的阻值就可以用的特別大,用100k500K之間的都行,當(dāng)然用10K的也可以,但是考慮到省電問題,沒有必要用那么小的。 對(duì)于驅(qū)動(dòng)晶體管,又分為PNP和NPN管兩種情況:對(duì)于NPN,毫無疑

19、問NPN管是高電平有效的,因此上拉電阻的阻值用2K20K之間的,具體的大小還要看晶體管的集電極接的是什么負(fù)載,對(duì)于LED類負(fù)載,由于發(fā)管電流很小,因此上拉電阻的阻值可以用20k的,但是對(duì)于管子的集電極為繼電器負(fù)載時(shí),由于集電極電流大,因此上拉電阻的阻值最好不要大于4.7K,有時(shí)候甚至用2K的。對(duì)于PNP管,毫無疑問PNP管是低電平有效的,因此上拉電阻的阻值用100K以上的就行了,且管子的基極必須串接一個(gè)110K的電阻,阻值的大小要看管子集電極的負(fù)載是什么,對(duì)于LED類負(fù)載,由于發(fā)光電流很小,因此基極串接的電阻的阻值可以用20k的,但是對(duì)于管子的集電極為繼電器負(fù)載時(shí),由于集電極電流大,因此基極電

20、阻的阻值最好不要大于4.7K。 對(duì)于驅(qū)動(dòng)TTL集成電路,上拉電阻的阻值要用110K之間的,有時(shí)候電阻太大的話是拉不起來的,因此用的阻值較小。但是對(duì)于CMOS集成電路上拉電阻的阻值就可以用的很大,一般不小于20K,我通常用100K的,實(shí)際上對(duì)于CMOS電路,上拉電阻的阻值用1M的也是可以的,但是要注意上拉電阻的阻值太大的時(shí)候,容易產(chǎn)生干擾,尤其是線路板的線條很長(zhǎng)的時(shí)候,這種干擾更嚴(yán)重,這種情況下上拉電阻不宜過大,一般要小于100K,有時(shí)候甚至小于10K。 4. 擴(kuò)展幾個(gè)預(yù)編譯指令的用法擴(kuò)展幾個(gè)預(yù)編譯指令的用法 預(yù)處理過程掃描源代碼,對(duì)其進(jìn)行初步的轉(zhuǎn)換,產(chǎn)生新的源代碼提供給編譯器??梢婎A(yù)處理過程先

21、于編譯器對(duì)源代碼進(jìn)行處理。在C語言中,并沒有任何內(nèi)在的機(jī)制來完成如下一些功能:在編譯時(shí)包含其他源文件、定義宏、根據(jù)條件決定編譯時(shí)是否包含某些代碼。要完成這些工作,就需要使用預(yù)處理程序。盡管在目前絕大多數(shù)編譯器都包含了預(yù)處理程序,但通常認(rèn)為它們是獨(dú)立于編譯器的。預(yù)處理過程讀入源代碼,檢查包含預(yù)處理指令的語句和宏定義,并對(duì)源代碼進(jìn)行響應(yīng)的轉(zhuǎn)換。預(yù)處理過程還會(huì)刪除程序中的注釋和多余的空白字符。預(yù)處理指令是以#號(hào)開頭的代碼行。#號(hào)必須是該行除了任何空白字符外的第一個(gè)字符。#后是指令關(guān)鍵字,在關(guān)鍵字和#號(hào)之間允許存在任意個(gè)數(shù)的空白字符。整行語句構(gòu)成了一條預(yù)處理指令,該指令將在編譯器進(jìn)行編譯之前對(duì)源代碼做

22、某些轉(zhuǎn)換。下面是部分預(yù)處理指令: 指令 用途 # 空指令,無任何效果 #include 包含一個(gè)源代碼文件 #define 定義宏 #undef 取消已定義的宏 #if 如果給定條件為真,則編譯下面代碼 #ifdef 如果宏已經(jīng)定義,則編譯下面代碼 #ifndef 如果宏沒有定義,則編譯下面代碼 #elif 如果前面的#if給定條件不為真,當(dāng)前條件為真,則編譯下面代碼 #endif 結(jié)束一個(gè)#if#else條件編譯塊 #error 停止編譯并顯示錯(cuò)誤信息文件包含 #include預(yù)處理指令的作用是在指令處展開被包含的文件。包含可以是多重的,也就是說一個(gè)被包含的文件中還可以包含其他文件。標(biāo)準(zhǔn)C編

23、譯器至少支持八重嵌套包含。預(yù)處理過程不檢查在轉(zhuǎn)換單元中是否已經(jīng)包含了某個(gè)文件并阻止對(duì)它的多次包含。這樣就可以在多次包含同一個(gè)頭文件時(shí),通過給定編譯時(shí)的條件來達(dá)到不同的效果。例如: #define AAA #include t.c #undef AAA #include t.c 為了避免那些只能包含一次的頭文件被多次包含,可以在頭文件中用編譯時(shí)條件來進(jìn)行控制。例如: /*my.h*/ #ifndef MY_H #define MY_H #endif在程序中包含頭文件有兩種格式: #include #include my.h 第一種方法是用尖括號(hào)把頭文件括起來。這種格式告訴預(yù)處理程序在編譯器自帶的

24、或外部庫的頭文件中搜索被包含的頭文件。第二種方法是用雙引號(hào)把頭文件括起來。這種格式告訴預(yù)處理程序在當(dāng)前被編譯的應(yīng)用程序的源代碼文件中搜索被包含的頭文件,如果找不到,再搜索編譯器自帶的頭文件。采用兩種不同包含格式的理由在于,編譯器是安裝在公共子目錄下的,而被編譯的應(yīng)用程序是在它們自己的私有子目錄下的。一個(gè)應(yīng)用程序既包含編譯器提供的公共頭文件,也包含自定義的私有頭文件。采用兩種不同的包含格式使得編譯器能夠在很多頭文件中區(qū)別出一組公共的頭文件。 (2) 宏 宏定義了一個(gè)代表特定內(nèi)容的標(biāo)識(shí)符。預(yù)處理過程會(huì)把源代碼中出現(xiàn)的宏標(biāo)識(shí)符替換成宏定義時(shí)的值。宏最常見的用法是定義代表某個(gè)值的全局符號(hào)。宏的第二種用

25、法是定義帶參數(shù)的宏,這樣的宏可以象函數(shù)一樣被調(diào)用,但它是在調(diào)用語句處展開宏,并用調(diào)用時(shí)的實(shí)際參數(shù)來代替定義中的形式參數(shù)。 #define指令 #define預(yù)處理指令是用來定義宏的。該指令最簡(jiǎn)單的格式是:首先神明一個(gè)標(biāo)識(shí)符,然后給出這個(gè)標(biāo)識(shí)符代表的代碼。在后面的源代碼中,就用這些代碼來替代該標(biāo)識(shí)符。這種宏把程序中要用到的一些全局值提取出來,賦給一些記憶標(biāo)識(shí)符。 #define MAX_NUM 12 Int arrayMAX_NUM; for(i=0;iMAX_NUM;i+) /*/ 在這個(gè)例子中,對(duì)于閱讀該程序的人來說,符號(hào)MAX_NUM就有特定的含義,它代表的值給出了數(shù)組所能容納的最大元素?cái)?shù)目。程序中可以多次使用這個(gè)值。作為一種約定,習(xí)慣上總是全部用大寫字母來定義宏,這樣易于把程序紅的宏標(biāo)識(shí)符和一般變量標(biāo)識(shí)符區(qū)別開來。如果想要改變數(shù)組的大小,只需要更改宏定義并重新編譯程序即可。 帶參數(shù)的#define指令 帶參數(shù)的宏和函數(shù)調(diào)用看起來有些相似。看一個(gè)例子: #define Cube(x) (x)*(x)*(x)可以時(shí)任何數(shù)字表達(dá)式甚至函數(shù)調(diào)用來代替參數(shù)x。這

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論