版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三模塊單片機(jī)基本結(jié)構(gòu)項(xiàng)目實(shí)訓(xùn)項(xiàng)目7LED發(fā)光管控制項(xiàng)目8LED數(shù)碼管顯示控制項(xiàng)目7LED發(fā)光管控制任務(wù)3-7-1使用P1口控制LED燈閃爍任務(wù)3-7-2使用P3口流水點(diǎn)亮8位LED任務(wù)3-7-3使用數(shù)組控制P0口流水燈任務(wù)3-7-4使用運(yùn)算符控制P2口流水燈任務(wù)3-7-5使用swtich語(yǔ)句的控制P2口LED流水燈任務(wù)3-7-6使用if語(yǔ)句的控制P2口LED流水燈任務(wù)3-7-7使用數(shù)組的指針控制P2口流水燈任務(wù)3-7-8使用指針作函數(shù)參數(shù)控制P2口流水燈任務(wù)3-7-9使用函數(shù)庫(kù)文件控制P2口LED流水燈任務(wù)3-7-1使用P1口控制LED燈閃爍一、單片機(jī)的I/O口8051單片機(jī)40腳雙列直插式封裝,有四個(gè)8位的并行I/O接口:P0口(39~32)、P1口(1~8)、P2口(21~28)和P3口(10~17),共32根I/O線。每個(gè)I/O口主要由4部分構(gòu)成:端口鎖存器、輸入緩沖器、輸出驅(qū)動(dòng)器和端口引腳。它們都是雙向通道,每一條I/O線都能獨(dú)立地用作輸入或輸出線。作輸入時(shí)數(shù)據(jù)可以緩沖,作輸出時(shí)數(shù)據(jù)可以鎖存。單片機(jī)的四個(gè)I/O口功能不完全相同,在特性上的差別主要是P0、P2、P3口都還有第二功能,而P1口只能用作普通I/O口。P0口為雙向I/O口,既可作地址/數(shù)據(jù)總線口用,也可作普通I/O口用。P1口為準(zhǔn)雙向I/O口,只能用作普通I/O口。P2口為準(zhǔn)雙向I/O口,既可作地址總線口輸出地址高8位,也可作普通I/O口用。P3口為多用途端口,既可作普通I/O口用,也可用作專門(mén)定義的第二功能。任務(wù)3-7-1使用P1口控制LED燈閃爍P3口的第二功能位第二功能說(shuō)明位第二功能說(shuō)明P3.0RXD串行輸入口P3.4T0計(jì)數(shù)器0計(jì)數(shù)輸入P3.1TXD串行輸出口P3.5T1計(jì)數(shù)器1計(jì)數(shù)輸入P3.2外部中斷0輸入P3.6外部數(shù)據(jù)RAM寫(xiě)選通信號(hào)P3.3外部中斷1輸入P3.7外部數(shù)據(jù)RAM讀選通信號(hào)任務(wù)3-7-1使用P1口控制LED燈閃爍二、C語(yǔ)言的數(shù)據(jù)類型數(shù)據(jù)類型符號(hào)關(guān)鍵字字長(zhǎng)數(shù)的表示范圍整型有(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~2147483647無(wú)(unsigned)int160~65535(unsigned)short160~65535(unsigned)long320~4294967295字符型有char8-128~127無(wú)(unsigned)char80~255實(shí)型有float323.4E-38~3.4E38有double641.7E-308~1.7E308任務(wù)3-7-1使用P1口控制LED燈閃爍三、硬件電路設(shè)計(jì)四、軟件程序設(shè)計(jì)任務(wù)3-7-2使用P3口流水點(diǎn)亮8位LED一、C語(yǔ)言的循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是指程序根據(jù)某條件的存在重復(fù)執(zhí)行一段程序,直到這個(gè)條件不滿足為止。常用的循環(huán)結(jié)構(gòu)語(yǔ)句有for循環(huán)語(yǔ)句、while循環(huán)語(yǔ)句和do…while循環(huán)語(yǔ)句。1.for循環(huán)語(yǔ)句
for循環(huán)語(yǔ)句的一般格式如下:
for(初始化表達(dá)式;條件表達(dá)式;增量表達(dá)式) 語(yǔ)句;for循環(huán)語(yǔ)句的執(zhí)行過(guò)程如下: 初始化表達(dá)式 求解條件表達(dá)式:條件表達(dá)式為邏輯表達(dá)式,若其值為“真”,其邏輯值為“1”,則執(zhí)行for隨后的語(yǔ)句;若其值為“假”,其邏輯值為“0”,則跳出for循環(huán)語(yǔ)句執(zhí)行后續(xù)程序 若條件表達(dá)式為“真”,則在執(zhí)行for隨后的語(yǔ)句后,執(zhí)行增量表達(dá)式 再次求解條件表達(dá)式,形成循環(huán)任務(wù)3-7-2使用P3口流水點(diǎn)亮8位LED2.while循環(huán)語(yǔ)句
while循環(huán)語(yǔ)句先判定循環(huán)條件的真假,條件為真,則執(zhí)行循環(huán)體;條件為假,則跳出循環(huán)體,執(zhí)行后續(xù)程序。while循環(huán)語(yǔ)句的一般格式如下:
while(條件表達(dá)式)
循環(huán)體 當(dāng)循環(huán)體包含一個(gè)以上的語(yǔ)句時(shí),應(yīng)該用花括弧{}將這些語(yǔ)句括起來(lái)。當(dāng)條件表達(dá)式為常量“1”時(shí),實(shí)現(xiàn)無(wú)限循環(huán)。3.do…while循環(huán)語(yǔ)句
do…while循環(huán)語(yǔ)句循環(huán)語(yǔ)句先執(zhí)行循環(huán)體一次,再判定條件表達(dá)式的值。若條件為真,則繼續(xù)執(zhí)行循環(huán)體;若條件為假,則跳出循環(huán)體,執(zhí)行后續(xù)程序。do…while循環(huán)語(yǔ)句的一般格式如下:
do{
循環(huán)體語(yǔ)句
}while(條件表達(dá)式);任務(wù)3-7-2使用P3口流水點(diǎn)亮8位LED二、C語(yǔ)言的函數(shù)C語(yǔ)言程序是由函數(shù)組成的,一個(gè)C語(yǔ)言程序由一個(gè)主函數(shù)和若干個(gè)其他函數(shù)構(gòu)成。主函數(shù)有且只能有一個(gè),此外還可以有其他函數(shù)。主函數(shù)可以調(diào)用其他函數(shù),其他函數(shù)之間也可以互相調(diào)用,但是其他函數(shù)不能調(diào)用主函數(shù)。函數(shù)分為無(wú)參函數(shù)和有參函數(shù)兩種。無(wú)參函數(shù)被調(diào)用時(shí)沒(méi)有參數(shù)傳遞,有參函數(shù)被調(diào)用時(shí)有參數(shù)傳遞。無(wú)參函數(shù)定義的一般形式如下:
類型說(shuō)明符
函數(shù)名(void) //用“void”聲明該函數(shù)無(wú)參數(shù)
{
說(shuō)明部分
語(yǔ)句部分
}在函數(shù)定義的一般形式中,類型說(shuō)明符定義函數(shù)返回值的類型。如果函數(shù)沒(méi)有返回值,需要用“void”作為類型說(shuō)明符。如果函數(shù)有返回值,則用返回值的數(shù)據(jù)類型說(shuō)明符作為函數(shù)的類型說(shuō)明符。如果沒(méi)有定義類型說(shuō)明符,函數(shù)返回值默認(rèn)為整型數(shù)據(jù)。主函數(shù)只能用main()命名。其他函數(shù)可以根據(jù)函數(shù)的功能靈活命名,比如常用“delay()”命名延時(shí)函數(shù)。有參函數(shù)定義的一般形式如下:
類型說(shuō)明符
函數(shù)名(形式參數(shù)列表) //形式參數(shù)超過(guò)一個(gè)時(shí),用逗號(hào)隔開(kāi)
{
說(shuō)明部分
語(yǔ)句部分
}任務(wù)3-7-2使用P3口流水點(diǎn)亮8位LED三、C語(yǔ)言編程的基本語(yǔ)法與格式要求1.C語(yǔ)言中括號(hào)的用法 大括號(hào){}
圓括號(hào)() 方括號(hào)[]
尖括號(hào)<>2.C語(yǔ)言中逗號(hào)“,”與分號(hào)“;”的用法3.C語(yǔ)言中的中英文輸入法四、硬件電路設(shè)計(jì)任務(wù)3-7-2使用P3口流水點(diǎn)亮8位LED五、軟件程序設(shè)計(jì)任務(wù)3-7-3使用數(shù)組控制P0口流水燈一、C語(yǔ)言的數(shù)組1.?dāng)?shù)組 在程序設(shè)計(jì)中,把具有相同類型的若干變量按有序的形式組織起來(lái),這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。 數(shù)組類型說(shuō)明:數(shù)組說(shuō)明的一般形式為: 類型說(shuō)明符數(shù)組名[常量表達(dá)式];2.?dāng)?shù)組元素的表示方法
數(shù)組元素是組成數(shù)組的基本單元。數(shù)組元素也是一種變量,其標(biāo)識(shí)方法為數(shù)組名后跟一個(gè)下標(biāo)。下標(biāo)表示了元素在數(shù)組中的順序號(hào)。
數(shù)組元素的一般形式為:
數(shù)組名[下標(biāo)]3.?dāng)?shù)組的賦值 給數(shù)組賦值的方法除了用賦值語(yǔ)句對(duì)數(shù)組元素逐個(gè)賦值外,還可采用初始化賦值和動(dòng)態(tài)賦值的方法。 初始化賦值的一般形式為: 類型說(shuō)明符數(shù)組名[常量表達(dá)式]={值,值,……,值}; 在{}中的各數(shù)據(jù)值即為各元素的初值,各值之間用逗號(hào)間隔。任務(wù)3-7-3使用數(shù)組控制P0口流水燈二、C語(yǔ)言的字符集4.?dāng)?shù)組元素的引用 數(shù)組元素通常也稱為下標(biāo)變量。必須先定義數(shù)組,才能使用下標(biāo)變量。在C語(yǔ)言中只能逐個(gè)地使用下標(biāo)變量,而不能一次引用整個(gè)數(shù)組。 字符是組成語(yǔ)言的最基本的元素。C語(yǔ)言字符集由字母,數(shù)字,空格,標(biāo)點(diǎn)和特殊字符組成。在字符常量,字符串常量和注釋中還可以使用漢字或其它可表示的圖形符號(hào)。
1.字母:小寫(xiě)字母a~z共26個(gè),大寫(xiě)字母A~Z共26個(gè)。
2.數(shù)字:0~9共10個(gè)。
3.空白符:格符、制表符、換行符等統(tǒng)稱為空白符。
4.標(biāo)點(diǎn)和特殊字符。任務(wù)3-7-3使用數(shù)組控制P0口流水燈三、C語(yǔ)言的詞匯 在C語(yǔ)言中使用的詞匯分為六類:標(biāo)識(shí)符,關(guān)鍵字,運(yùn)算符,分隔符,常量,注釋符等。
1.標(biāo)識(shí)符:在程序中使用的變量名、函數(shù)名、標(biāo)號(hào)等統(tǒng)稱為標(biāo)識(shí)符。
2.關(guān)鍵字:是由C語(yǔ)言規(guī)定的具有特定意義的字符串,通常也稱為保留字。
3.運(yùn)算符:C語(yǔ)言中含有相當(dāng)豐富的運(yùn)算符。運(yùn)算符與變量,函數(shù)一起組成表達(dá)式,表示各種運(yùn)算功能。運(yùn)算符由一個(gè)或多個(gè)字符組成。
4.分隔符:在C語(yǔ)言中采用的分隔符有逗號(hào)和空格兩種。 逗號(hào)主要用在類型說(shuō)明和函數(shù)參數(shù)表中,分隔各個(gè)變量。 空格多用于語(yǔ)句各單詞之間,作間隔符。
5.常量:C語(yǔ)言中使用的常量可分為數(shù)字常量、字符常量、字符串常量、符號(hào)常量、轉(zhuǎn)義字符等多種。
6.注釋符:C語(yǔ)言的注釋符是以“/*”開(kāi)頭并以“*/”結(jié)尾的串。在“/*”和“*/”之間的即為注釋。如果只需注釋某一行語(yǔ)句,也可以在該行語(yǔ)句后面在“//”注釋符后對(duì)該行語(yǔ)句進(jìn)行注釋。四、硬件電路設(shè)計(jì)五、軟件程序設(shè)計(jì)任務(wù)3-7-3使用數(shù)組控制P0口流水燈任務(wù)3-7-4使用運(yùn)算符控制P2口流水燈一、C語(yǔ)言的基本運(yùn)算符1.運(yùn)算符的種類(1)算術(shù)運(yùn)算符:用于各類數(shù)值運(yùn)算。包括加(+)、減(-)、乘(*)、除(/)、求余或模運(yùn)算(%)、自增(++)、自減(--)共七種。(2)關(guān)系運(yùn)算符:用于比較運(yùn)算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六種。(3)邏輯運(yùn)算符:用于邏輯運(yùn)算。包括與(&&)、或(||)、非(!)三種。(4)位操作運(yùn)算符:參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。(5)賦值運(yùn)算符:用于賦值運(yùn)算,分為簡(jiǎn)單賦值(=)、復(fù)合算術(shù)賦值(+=、-=、*=、/=、%=)和復(fù)合位運(yùn)算賦值(&=、|=、^=、>>=、<<=)三類共十一種。(6)條件運(yùn)算符:這是一個(gè)三目運(yùn)算符,用于條件求值(?:)。
由條件運(yùn)算符組成條件表達(dá)式的一般形式為: 表達(dá)式1?表達(dá)式2:表達(dá)式3
其求值規(guī)則為:如果表達(dá)式1的值為真,則以表達(dá)式2的值作為條件表達(dá)式的值,否則以表達(dá)式3的值作為整個(gè)條件表達(dá)式的值。任務(wù)3-7-4使用運(yùn)算符控制P2口流水燈一、C語(yǔ)言的基本運(yùn)算符1.運(yùn)算符的種類(7)逗號(hào)運(yùn)算符:用于把若干表達(dá)式組合成一個(gè)表達(dá)式(,)。(8)指針運(yùn)算符:用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。(9)求字節(jié)數(shù)運(yùn)算符:用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。(10)特殊運(yùn)算符:有括號(hào)(),下標(biāo)[],成員(→,)等幾種。2.運(yùn)算符的優(yōu)先級(jí)和結(jié)合性1.運(yùn)算符的種類(7)逗號(hào)運(yùn)算符:用于把若干表達(dá)式組合成一個(gè)表達(dá)式(,)。(8)指針運(yùn)算符:用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。(9)求字節(jié)數(shù)運(yùn)算符:用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。(10)特殊運(yùn)算符:有括號(hào)(),下標(biāo)[],成員(→,)等幾種。3.基本的算術(shù)運(yùn)算符(1)加法運(yùn)算符“+”:加法運(yùn)算符為雙目運(yùn)算符,即應(yīng)有兩個(gè)量參與加法運(yùn)算。具有右結(jié)合性。(2)減法運(yùn)算符“-”:減法運(yùn)算符為雙目運(yùn)算符。但“-”也可作負(fù)值運(yùn)算符,此時(shí)為單目運(yùn)算,具有左結(jié)合性。(3)乘法運(yùn)算符“*”:乘法運(yùn)算符為雙目運(yùn)算,具有左結(jié)合性。(4)除法運(yùn)算符“/”:除法運(yùn)算符為雙目運(yùn)算具有左結(jié)合性。(5)求余運(yùn)算符(模運(yùn)算符)“%”:求余運(yùn)算符也為雙目運(yùn)算,具有左結(jié)合性。任務(wù)3-7-4使用運(yùn)算符控制P2口流水燈一、C語(yǔ)言的基本運(yùn)算符4.自增1、自減1運(yùn)算符 自增1運(yùn)算符記為“++”,其功能是使變量的值自增1。自減1運(yùn)算符記為“--”,其功能是使變量值自減1。自增1,自減1運(yùn)算符均為單目運(yùn)算,都具有右結(jié)合性??捎幸韵聨追N形式:
++i:i自增1后再參與其它運(yùn)算。
--i:i自減1后再參與其它運(yùn)算。
i++:i參與運(yùn)算后,i的值再自增1。
i--:i參與運(yùn)算后,i的值再自減1。5.左移、右移運(yùn)算符
左移運(yùn)算符“<<”的功能是將一個(gè)二進(jìn)制數(shù)的各位全部左移若干位,移動(dòng)過(guò)程中,高位丟棄,低位補(bǔ)0。
右移運(yùn)算符“>>”的功能是將一個(gè)二進(jìn)制數(shù)的各位全部右移若干位,正數(shù)在移動(dòng)過(guò)程中,低位丟棄,高位補(bǔ)0;負(fù)數(shù)則是高位補(bǔ)1。任務(wù)3-7-4使用運(yùn)算符控制P2口流水燈二、C語(yǔ)言的表達(dá)式1.算術(shù)表達(dá)式:是由算術(shù)運(yùn)算符和括號(hào)連接起來(lái)的式子。如:a+b、(a*2)/c、(x+r)*8-(a+b)/7、++I、(++i)-(j++)+(k--)等。2.賦值運(yùn)算符和賦值表達(dá)式
簡(jiǎn)單賦值運(yùn)算符和表達(dá)式:簡(jiǎn)單賦值運(yùn)算符記為“=”;由“=”連接的式子稱為賦值表達(dá)式。其一般形式為:變量=表達(dá)式
賦值表達(dá)式的功能是計(jì)算表達(dá)式的值再賦予左邊的變量。賦值運(yùn)算符具有右結(jié)合性。 按照C語(yǔ)言規(guī)定,任何表達(dá)式在其未尾加上分號(hào)就構(gòu)成為語(yǔ)句。3.復(fù)合賦值符及表達(dá)式 在賦值符“=”之前加上其它二目運(yùn)算符可構(gòu)成復(fù)合賦值符。如
+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=等。 構(gòu)成復(fù)合賦值表達(dá)式的一般形式為: 變量雙目運(yùn)算符表達(dá)式 等效于: 變量=變量運(yùn)算符表達(dá)式任務(wù)3-7-4使用運(yùn)算符控制P2口流水燈二、C語(yǔ)言的表達(dá)式4.逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式 在C語(yǔ)言中逗號(hào)“,”稱為逗號(hào)運(yùn)算符。其功能是把兩個(gè)表達(dá)式連接起來(lái)組成一個(gè)表達(dá)式,稱為逗號(hào)表達(dá)式。 其一般形式為: 表達(dá)式1,表達(dá)式2
其求值過(guò)程是分別求兩個(gè)表達(dá)式的值,并以表達(dá)式2的值作為整個(gè)逗號(hào)表達(dá)式的值。 并不是在所有出現(xiàn)逗號(hào)的地方都組成逗號(hào)表達(dá)式,如在變量說(shuō)明中,函數(shù)參數(shù)表中逗號(hào)只是用作各變量之間的間隔符。三、硬件電路設(shè)計(jì)四、軟件程序設(shè)計(jì)任務(wù)3-7-4使用運(yùn)算符控制P2口流水燈任務(wù)3-7-5用swtich語(yǔ)句控制P2口LED流水燈一、獨(dú)立按鍵與“軟件消抖”原理1.獨(dú)立式鍵盤(pán)接口電路 獨(dú)立式鍵盤(pán)接口電路如圖所示。每一個(gè)按鍵對(duì)應(yīng)于單片機(jī)I/O口的一位,各按鍵是相互獨(dú)立的。應(yīng)用時(shí),由軟件來(lái)識(shí)別鍵盤(pán)上的按鍵是否被按下。當(dāng)某個(gè)鍵被按下時(shí),該鍵所對(duì)應(yīng)的口線將被輸入低電平。反過(guò)來(lái),當(dāng)檢測(cè)到某按鍵口線為低電平時(shí),則可判定該口線對(duì)應(yīng)的按鍵被按下。所以可以通過(guò)軟件編程來(lái)判斷出各按鍵被按下的情況。2.按鍵的抖動(dòng)與消除任務(wù)3-7-5用swtich語(yǔ)句控制P2口LED流水燈二、C語(yǔ)言的分支結(jié)構(gòu)語(yǔ)句1.if語(yǔ)句
用if語(yǔ)句可以構(gòu)成分支結(jié)構(gòu)。它根據(jù)給定的條件進(jìn)行判斷,以決定執(zhí)行某個(gè)分支程序段。C語(yǔ)言的if語(yǔ)句有三種基本形式。 (1)第一種形式為基本形式:
if(表達(dá)式)語(yǔ)句;
其功能是:如果表達(dá)式的值為真,則執(zhí)行隨后的語(yǔ)句,否則程序跳過(guò)該語(yǔ)句繼續(xù)向后執(zhí)行。
(2)第二種形式為if-else形式:
if(表達(dá)式)
語(yǔ)句1;
Else
語(yǔ)句2; 其功能是:如果表達(dá)式的值為真,則執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2。任務(wù)3-7-5用swtich語(yǔ)句控制P2口LED流水燈二、C語(yǔ)言的分支結(jié)構(gòu)語(yǔ)句(3)第三種形式為if-else-if形式
if-else-if語(yǔ)句一般形式為:
if(表達(dá)式1)
語(yǔ)句1;
elseif(表達(dá)式2)
語(yǔ)句2;
elseif(表達(dá)式3)
語(yǔ)句3;
… elseif(表達(dá)式m)
語(yǔ)句m;
else
語(yǔ)句n;
其功能是:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行其對(duì)應(yīng)的語(yǔ)句。然后跳到整個(gè)if語(yǔ)句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語(yǔ)句n。然后繼續(xù)執(zhí)行后續(xù)程序。任務(wù)3-7-5用swtich語(yǔ)句控制P2口LED流水燈二、C語(yǔ)言的分支結(jié)構(gòu)語(yǔ)句2.switch語(yǔ)句 C語(yǔ)言還提供了另一種用于多分支選擇的switch語(yǔ)句,其一般形式為:
switch(表達(dá)式){ case常量表達(dá)式1:語(yǔ)句1; case常量表達(dá)式2:語(yǔ)句2; … case常量表達(dá)式n:語(yǔ)句n; default:語(yǔ)句n+1; }
其功能是:計(jì)算表達(dá)式的值。并逐個(gè)與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式的值相等時(shí),即執(zhí)行其后的語(yǔ)句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語(yǔ)句。如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時(shí),則執(zhí)行default后的語(yǔ)句。任務(wù)3-7-5用swtich語(yǔ)句控制P2口LED流水燈三、C語(yǔ)言中函數(shù)調(diào)用應(yīng)注意的幾個(gè)問(wèn)題1.對(duì)被調(diào)函數(shù)的說(shuō)明
在主調(diào)函數(shù)中調(diào)用某函數(shù)之前應(yīng)對(duì)該被調(diào)函數(shù)進(jìn)行說(shuō)明,這與使用變量之前要先進(jìn)行變量說(shuō)明是一樣的。在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)作說(shuō)明的目的是使編譯系統(tǒng)知道被調(diào)函數(shù)返回值的類型,以便在主調(diào)函數(shù)中按此種類型對(duì)返回值作相應(yīng)的處理。
對(duì)被調(diào)函數(shù)的說(shuō)明有兩種格式,一種為傳統(tǒng)格式,其一般格式為:
類型說(shuō)明符
被調(diào)函數(shù)名();
這種格式只給出函數(shù)返回值的類型,被調(diào)函數(shù)名及一個(gè)空括號(hào)。這種格式由于在括號(hào)中沒(méi)有任何參數(shù)信息,因此不便于編譯系統(tǒng)進(jìn)行錯(cuò)誤檢查,易于發(fā)生錯(cuò)誤。
另一種為現(xiàn)代格式,其一般形式為:
類型說(shuō)明符
被調(diào)函數(shù)名(類型
形參,類型
形參…);
或?yàn)椋?/p>
類型說(shuō)明符
被調(diào)函數(shù)名(類型,類型…);
現(xiàn)代格式的括號(hào)內(nèi)給出了形參的類型和形參名,或只給出形參類型。這便于編譯系統(tǒng)進(jìn)行檢錯(cuò),以防止可能出現(xiàn)的錯(cuò)誤。任務(wù)3-7-5用swtich語(yǔ)句控制P2口LED流水燈三、C語(yǔ)言中函數(shù)調(diào)用應(yīng)注意的幾個(gè)問(wèn)題2.可以省去被調(diào)函數(shù)說(shuō)明的幾種情況 C語(yǔ)言中又規(guī)定在以下幾種情況時(shí)可以省去主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)的函數(shù)說(shuō)明。 (1)如果被調(diào)函數(shù)的返回值是整型或字符型時(shí),可以不對(duì)被調(diào)函數(shù)作說(shuō)明,而直接調(diào)用。這時(shí)系統(tǒng)將自動(dòng)對(duì)被調(diào)函數(shù)返回值按整型處理。 (2)當(dāng)被調(diào)函數(shù)的函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前時(shí),在主調(diào)函數(shù)中也可以不對(duì)被調(diào)函數(shù)再作說(shuō)明而直接調(diào)用。 (3)如在所有函數(shù)定義之前,在函數(shù)外預(yù)先說(shuō)明了被調(diào)函數(shù)的類型,則在以后的各主調(diào)函數(shù)中,可不再對(duì)被調(diào)函數(shù)作說(shuō)明。 (4)對(duì)庫(kù)函數(shù)的調(diào)用不需要再作說(shuō)明,但必須把該函數(shù)的頭文件用include命令包含在源文件前部。四、硬件電路設(shè)計(jì)任務(wù)3-7-5用swtich語(yǔ)句控制P2口LED流水燈五、軟件程序設(shè)計(jì)任務(wù)3-7-6用if語(yǔ)句控制P2口LED流水燈一、MCS-51單片機(jī)的存儲(chǔ)器及其結(jié)構(gòu)1.程序存儲(chǔ)器 MCS-51單片機(jī)具有64kB程序存儲(chǔ)器尋址空間,它是用于存放用戶程序、數(shù)據(jù)和表格等信息。對(duì)于內(nèi)部無(wú)ROM的8031單片機(jī),它的程序存儲(chǔ)器必須外接,空間地址為64kB,此時(shí)單片機(jī)的EA端必須接地。強(qiáng)制CPU從外部程序存儲(chǔ)器讀取程序。對(duì)于內(nèi)部有ROM的8051等單片機(jī),正常運(yùn)行時(shí),EA則需接高電平,使CPU先從內(nèi)部的程序存儲(chǔ)中讀取程序,當(dāng)PC值超過(guò)內(nèi)部ROM的容量時(shí),才會(huì)轉(zhuǎn)向外部的程序存儲(chǔ)器讀取程序。 8051片內(nèi)有4kB的程序存儲(chǔ)單元,其地址為0000H—0FFFH,單片機(jī)啟動(dòng)復(fù)位后,程序計(jì)數(shù)器的內(nèi)容為0000H,所以系統(tǒng)將從0000H單元開(kāi)始執(zhí)行程序。但在程序存儲(chǔ)中有些特殊的單元,這在使用中應(yīng)加以注意: 其中一組特殊是0000H—0002H單元,系統(tǒng)復(fù)位后,PC為0000H,單片機(jī)從0000H單元開(kāi)始執(zhí)行程序,如果程序不是從0000H單元開(kāi)始,則應(yīng)在這三個(gè)單元中存放一條無(wú)條件轉(zhuǎn)移指令,讓CPU直接去執(zhí)行用戶指定的程序。任務(wù)3-7-6用if語(yǔ)句控制P2口LED流水燈一、MCS-51單片機(jī)的存儲(chǔ)器及其結(jié)構(gòu) 另一組特殊單元是0003H—002AH,這40個(gè)單元各有用途,它們被均勻地分為五段,它們的定義如下:
0003H—000AH:外部中斷0中斷地址區(qū);
000BH—0012H:定時(shí)/計(jì)數(shù)器0中斷地址區(qū);
0013H—001AH:外部中斷1中斷地址區(qū);
001BH—0022H:定時(shí)/計(jì)數(shù)器1中斷地址區(qū);
0023H—002AH:串行中斷地址區(qū)。 以上的40個(gè)單元是專門(mén)用于存放中斷處理程序的地址單元,中斷響應(yīng)后,按中斷的類型,自動(dòng)轉(zhuǎn)到各自的中斷區(qū)去執(zhí)行程序。因此以上地址單元不能用于存放程序的其他內(nèi)容,只能存放中斷服務(wù)程序。但是通常情況下,每段只有8個(gè)地址單元是不能存下完整的中斷服務(wù)程序的,因而一般也在中斷響應(yīng)的地址區(qū)安放一條無(wú)條件轉(zhuǎn)移指令,指向程序存儲(chǔ)器的其它真正存放中斷服務(wù)程序的空間去執(zhí)行,這樣中斷響應(yīng)后,CPU讀到這條轉(zhuǎn)移指令,便轉(zhuǎn)向其他地方去繼續(xù)執(zhí)行中斷服務(wù)程序。任務(wù)3-7-6用if語(yǔ)句控制P2口LED流水燈一、MCS-51單片機(jī)的存儲(chǔ)器及其結(jié)構(gòu)2.?dāng)?shù)據(jù)存儲(chǔ)器 數(shù)據(jù)存儲(chǔ)器也稱為隨機(jī)存取數(shù)據(jù)存儲(chǔ)器。MCS-51單片機(jī)的數(shù)據(jù)存儲(chǔ)器在物理上和邏輯上都分為兩個(gè)地址空間,一個(gè)是內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)和一個(gè)外部數(shù)據(jù)存儲(chǔ)區(qū)。MCS-51內(nèi)部RAM有128或256個(gè)字節(jié)的用戶數(shù)據(jù)存儲(chǔ)(不同的型號(hào)有分別),它們是用于存放執(zhí)行的中間結(jié)果和過(guò)程數(shù)據(jù)的。MCS-51的數(shù)據(jù)存儲(chǔ)器均可讀寫(xiě),部分單元還可以位尋址。
8051內(nèi)部RAM共有256個(gè)單元,這256個(gè)單元共分為兩部分。其一是地址從00H—7FH單元(共128個(gè)字節(jié))為用戶數(shù)據(jù)RAM。從80H—FFH地址單元(也是128個(gè)字節(jié))為特殊寄存器(SFR)單元。任務(wù)3-7-6用if語(yǔ)句控制P2口LED流水燈一、MCS-51單片機(jī)的存儲(chǔ)器及其結(jié)構(gòu) 在00H—1FH共32個(gè)單元中被均勻地分為四塊,每塊包含八個(gè)8位寄存器,均以R0—R7來(lái)命名,我們常稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為R0—R7,那么在程序中怎么區(qū)分和使用它們呢?可以用程序狀態(tài)字寄存器(PSW)來(lái)管理它們,CPU只要定義這個(gè)寄存的PSW的第3和第4位(RS0和RS1),即可選中這四組通用寄存器。對(duì)應(yīng)的編碼關(guān)系如圖所示。 內(nèi)部RAM的20H—2FH單元為位尋址區(qū),既可作為一般單元用字節(jié)尋址,也可對(duì)它們的位進(jìn)行尋址。位尋址區(qū)共有16個(gè)字節(jié),128個(gè)位,位地址為00H—7FH。位地址分配如表3-7-6(1)所示,CPU能直接尋址這些位,執(zhí)行例如置“1”、清“0”、求“反”、轉(zhuǎn)移、傳送和邏輯等操作。我們常稱MCS-51具有布爾處理功能,布爾處理的存儲(chǔ)空間指的就是這些為尋址區(qū)。任務(wù)3-7-6用if語(yǔ)句控制P2口LED流水燈一、MCS-51單片機(jī)的存儲(chǔ)器及其結(jié)構(gòu)
表3-7-6(1)
RAM位尋址區(qū)地址表單元地址MSB位地址LSB2FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H0FH0EH0DH0CH0BH0AH09H08H20H07H06H05H04H03H02H01H00H任務(wù)3-7-6用if語(yǔ)句控制P2口LED流水燈一、MCS-51單片機(jī)的存儲(chǔ)器及其結(jié)構(gòu)3.特殊功能寄存器 特殊功能寄存器(SFR)也稱為專用寄存器,特殊功能寄存器反映了MCS-51單片機(jī)的運(yùn)行狀態(tài)。很多功能也通過(guò)特殊功能寄存器來(lái)定義和控制程序的執(zhí)行。 MCS-51有21個(gè)特殊功能寄存器,它們被離散地分布在內(nèi)部RAM的80H—FFH地址中,這些寄存的功能已作了專門(mén)的規(guī)定,用戶不能修改其結(jié)構(gòu)。表3-7-2是特殊功能寄存器分布一覽表。標(biāo)識(shí)符號(hào)地址寄存器名稱ACC0E0H累加器B0F0HB寄存器PSW0D0H程序狀態(tài)字SP81H堆棧指針DPTR82H、83H數(shù)據(jù)指針(16位)含DPL和DPHIE0A8H中斷允許控制寄存器IP0B8H中斷優(yōu)先控制寄存器P080HI/O口0寄存器P190HI/O口1寄存器P20A0HI/O口2寄存器P30B0HI/O口3寄存器PCON87H電源控制及波特率選擇寄存器SCON98H串行口控制寄存器SBUF99H串行數(shù)據(jù)緩沖寄存器TCON88H定時(shí)控制寄存器TMOD89H定時(shí)器方式選擇寄存器TL08AH定時(shí)器0低8位TH08CH定時(shí)器0高8位TL18BH定時(shí)器1低8位TH18DH定時(shí)器1高8位任務(wù)3-7-6用if語(yǔ)句控制P2口LED流水燈二、MCS-51單片機(jī)的頭文件“REG51.H”
MCS-51單片機(jī)的特殊功能寄存器在KeilC51軟件系統(tǒng)的寄存器定義頭文件“REG51.H”中有著全面的定義。打開(kāi)Keil的安裝目錄,在C51文件夾下找到“INC”子文件夾,可以看到里面的“REG51.H”文件。 與表3-7-2所示特殊功能寄存器地址分布列表對(duì)比,可以發(fā)現(xiàn)兩者是完全統(tǒng)一的。在進(jìn)行C語(yǔ)言程序設(shè)計(jì)時(shí),必須在C源程序的開(kāi)始部分用“#include<REG51.H>”預(yù)編譯處理命令將定義特殊功能寄存器的頭文件“REG51.H”包含進(jìn)所編寫(xiě)的程序中來(lái),使單片機(jī)知道特殊功能寄存器是如何分配的。只有這樣,單片機(jī)才能識(shí)別程序中用到的這些特殊功能寄存器,正確地執(zhí)行程序設(shè)計(jì)的指令。三、硬件電路設(shè)計(jì)四、軟件程序設(shè)計(jì)任務(wù)3-7-6用if語(yǔ)句控制P2口LED流水燈任務(wù)3-7-7用數(shù)組的指針控制P2口流水燈一、C語(yǔ)言的指針1.指針的基本概念 在計(jì)算機(jī)中,所有的數(shù)據(jù)都是存放在存儲(chǔ)器中的。一般把存儲(chǔ)器中的一個(gè)字節(jié)稱為一個(gè)內(nèi)存單元。為了正確地訪問(wèn)這些內(nèi)存單元,必須為每個(gè)內(nèi)存單元編上號(hào)。根據(jù)一個(gè)內(nèi)存單元的編號(hào)即可準(zhǔn)確地找到該內(nèi)存單元。內(nèi)存單元的編號(hào)也叫做地址。既然根據(jù)內(nèi)存單元的編號(hào)或地址就可以找到所需的內(nèi)存單元,所以通常也把這個(gè)地址稱為指針。2.指針變量 在C語(yǔ)言中,允許用一個(gè)變量來(lái)存放指針,這種變量稱為指針變量。一個(gè)指針變量的值就是某個(gè)內(nèi)存單元的地址或稱為某內(nèi)存單元的指針。
一個(gè)指針是一個(gè)地址,是一個(gè)常量。而一個(gè)指針變量卻可以被賦予不同的指針值,是變量。定義指針的目的是為了通過(guò)指針去訪問(wèn)內(nèi)存單元。
指針變量的值是一個(gè)地址,這個(gè)地址不僅可以是變量的地址,也可以是其它數(shù)據(jù)結(jié)構(gòu)的地址。因?yàn)閿?shù)組或函數(shù)都是連續(xù)存放的,所以通過(guò)訪問(wèn)指針變量取得了數(shù)組或函數(shù)的首地址,也就找到了該數(shù)組或函數(shù)。凡是出現(xiàn)數(shù)組、函數(shù)的地方都可以用一個(gè)指針變量來(lái)表示,只要該指針變量中賦予數(shù)組或函數(shù)的首地址即可。這樣做,將會(huì)使程序的概念十分清楚,程序本身也精練,高效。任務(wù)3-7-7用數(shù)組的指針控制P2口流水燈一、C語(yǔ)言的指針3.指針變量的類型說(shuō)明 對(duì)指針變量的類型說(shuō)明包括三個(gè)內(nèi)容:
(1)指針類型說(shuō)明,即定義變量為一個(gè)指針變量;
(2)指針變量名;
(3)變量值(指針)所指向的變量的數(shù)據(jù)類型。 其一般形式為: 類型說(shuō)明符*變量名; 其中,*表示這是一個(gè)指針變量,變量名即為定義的指針變量名,類型說(shuō)明符表示本指針變量所指向的變量的數(shù)據(jù)類型。任務(wù)3-7-7用數(shù)組的指針控制P2口流水燈一、C語(yǔ)言的指針4.指針變量的賦值
指針變量同普通變量一樣,使用之前不僅要定義說(shuō)明,而且必須賦予具體的值。指針變量的賦值只能賦予地址,決不能賦予任何其它數(shù)據(jù),否則將引起錯(cuò)誤。 C語(yǔ)言中提供了地址運(yùn)算符&來(lái)表示變量的地址。
其一般形式為:&變量名;
設(shè)有指向整型變量的指針變量p,如要把整型變量a的地址賦予p可以有以下兩種方式:
(1)指針變量初始化的方法
inta;
int*p=&a; (2)賦值語(yǔ)句的方法
inta;
int*p; p=&a;任務(wù)3-7-7用數(shù)組的指針控制P2口流水燈一、C語(yǔ)言的指針5.指針變量的運(yùn)算 指針變量可以進(jìn)行的運(yùn)算方式是有限的,它只能進(jìn)行賦值運(yùn)算和部分算術(shù)運(yùn)算及關(guān)系運(yùn)算。 (1)指針運(yùn)算符 ①取地址運(yùn)算符“&”
取地址運(yùn)算符“&”是單目運(yùn)算符,其結(jié)合性為自右至左,其功能是取變量的地址。 ②取內(nèi)容運(yùn)算符“*” 取內(nèi)容運(yùn)算符“*”是單目運(yùn)算符,其結(jié)合性為自右至左,用來(lái)表示指針變量所指的變量。在“*”運(yùn)算符之后跟的變量必須是指針變量。 需要注意的是指針運(yùn)算符“*”和指針變量說(shuō)明中的指針說(shuō)明符“*”不是一回事。在指針變量說(shuō)明中,“*”是類型說(shuō)明符,表示其后的變量是指針類型。而表達(dá)式中出現(xiàn)的“*”則是一個(gè)運(yùn)算符用以表示指針變量所指的變量。任務(wù)3-7-7用數(shù)組的指針控制P2口流水燈一、C語(yǔ)言的指針(2)指針變量的運(yùn)算 ①賦值運(yùn)算
指針變量的賦值運(yùn)算有以下幾種形式:
(一)指針變量初始化賦值。 (二)把一個(gè)變量的地址賦予指向相同數(shù)據(jù)類型的指針變量。 (三)把一個(gè)指針變量的值賦予指向相同類型變量的另一個(gè)指針變量。 (四)把數(shù)組的首地址賦予指向數(shù)組的指針變量。 (五)把字符串的首地址賦予指向字符類型的指針變量。 (六)把函數(shù)的入口地址賦予指向函數(shù)的指針變量。 ②加減算術(shù)運(yùn)算對(duì)于指向數(shù)組的指針變量,可以加上或減去一個(gè)整數(shù)n。設(shè)pa是指向數(shù)組a的指針變量,則pa+n,pa-n,pa++,++pa,pa--,--pa運(yùn)算都是合法的。指針變量加或減一個(gè)整數(shù)n的意義是把指針指向的當(dāng)前位置(指向某數(shù)組元素)向前或向后移動(dòng)n個(gè)位置。
③兩指針變量進(jìn)行關(guān)系運(yùn)算
指向同一數(shù)組的兩指針變量進(jìn)行關(guān)系運(yùn)算可表示它們所指數(shù)組元素之間的關(guān)系。
任務(wù)3-7-7用數(shù)組的指針控制P2口流水燈二、C語(yǔ)言的數(shù)組指針變量1.?dāng)?shù)組指針變量:指向數(shù)組的指針變量稱為數(shù)組指針變量。
一個(gè)數(shù)組是由連續(xù)的一塊內(nèi)存單元組成的。數(shù)組名就是這塊連續(xù)內(nèi)存單元的首地址。一個(gè)數(shù)組也是由各個(gè)數(shù)組元素(下標(biāo)變量)組成的。每個(gè)數(shù)組元素按其類型不同占有幾個(gè)連續(xù)的內(nèi)存單元。一個(gè)數(shù)組元素的首地址也是指它所占有的幾個(gè)內(nèi)存單元的首地址。一個(gè)指針變量既可以指向一個(gè)數(shù)組,可把數(shù)組名或第一個(gè)元素的地址賦予它;也可以指向一個(gè)數(shù)組元素,如要使指針變量指向第i號(hào)元素,可以把i元素的首地址賦予它或把數(shù)組名加i賦予它。2.?dāng)?shù)組指針變量說(shuō)明的一般形式為: 類型說(shuō)明符*指針變量名 其中類型說(shuō)明符表示所指數(shù)組的類型。 引入指針變量后,就可以用兩種方法來(lái)訪問(wèn)數(shù)組元素了: 第一種方法為下標(biāo)法,即用a[i]形式訪問(wèn)數(shù)組元素。 第二種方法為指針?lè)?,即采?(pa+i)形式,用間接訪問(wèn)的方法來(lái)訪問(wèn)數(shù)組元素。三、硬件電路設(shè)計(jì)四、軟件程序設(shè)計(jì)任務(wù)3-7-7用數(shù)組的指針控制P2口流水燈任務(wù)3-7-8用指針作函數(shù)參數(shù)控制P2口流水燈一、C語(yǔ)言的有參函數(shù)1.有參函數(shù):也稱為帶參函數(shù),在函數(shù)定義及函數(shù)說(shuō)明時(shí)都有參數(shù)的函數(shù)。其參數(shù)稱為形式參數(shù)(簡(jiǎn)稱為形參)。
有參函數(shù)在函數(shù)調(diào)用時(shí)也必須給出參數(shù),稱為實(shí)際參數(shù)(簡(jiǎn)稱為實(shí)參)。進(jìn)行函數(shù)調(diào)用時(shí),主調(diào)函數(shù)將把實(shí)參的值傳送給形參,供被調(diào)函數(shù)使用。2.有參函數(shù)的一般形式: 類型說(shuō)明符函數(shù)名(形式參數(shù)表)
型式參數(shù)類型說(shuō)明
{
類型說(shuō)明 語(yǔ)句
}
有參函數(shù)比無(wú)參函數(shù)多了兩個(gè)內(nèi)容,其一是形式參數(shù)表,其二是形式參數(shù)類型說(shuō)明。在形式參數(shù)表中給出的參數(shù)稱為形式參數(shù),它們可以是各種類型的變量,各參數(shù)之間用逗號(hào)間隔。在進(jìn)行函數(shù)調(diào)用時(shí),主調(diào)函數(shù)將賦予這些形式參數(shù)實(shí)際的值。形參既然是變量,當(dāng)然必須給以類型說(shuō)明。任務(wù)3-7-8用指針作函數(shù)參數(shù)控制P2口流水燈一、C語(yǔ)言的有參函數(shù)3.函數(shù)的參數(shù)
有參函數(shù)的形參出現(xiàn)在函數(shù)定義中,在整個(gè)函數(shù)體內(nèi)都可以使用,離開(kāi)該函數(shù)則不能使用。實(shí)參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實(shí)參變量也不能使用。形參和實(shí)參的功能是作數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時(shí),主調(diào)函數(shù)把實(shí)參的值傳送給被調(diào)函數(shù)的形參從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。
函數(shù)的形參和實(shí)參具有以下特點(diǎn): (1)形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。 (2)實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等,無(wú)論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值、輸入等辦法使實(shí)參獲得確定值。 (3)實(shí)參和形參在數(shù)量上、類型上、順序上應(yīng)嚴(yán)格一致,否則會(huì)發(fā)生“類型不匹配”的錯(cuò)誤。 (4)函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的,即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參。因此在函數(shù)調(diào)用過(guò)程中,形參的值發(fā)生改變,而實(shí)參中的值不會(huì)變化。任務(wù)3-7-8用指針作函數(shù)參數(shù)控制P2口流水燈一、C語(yǔ)言的有參函數(shù)4.?dāng)?shù)組名作為函數(shù)參數(shù)(1)用數(shù)組名作函數(shù)參數(shù)與用數(shù)組元素作實(shí)參有幾點(diǎn)不同: ①用數(shù)組元素作實(shí)參時(shí),只要數(shù)組類型和函數(shù)的形參變量的類型一致,那么作為下標(biāo)變量的數(shù)組元素的類型也和函數(shù)形參變量的類型是一致的。因此,并不要求函數(shù)的形參也是下標(biāo)變量。也就是說(shuō),對(duì)數(shù)組元素的處理是按普通變量對(duì)待的。用數(shù)組名作函數(shù)參數(shù)時(shí),則要求形參和相對(duì)應(yīng)的實(shí)參都必須是類型相同的數(shù)組,都必須有明確的數(shù)組說(shuō)明。當(dāng)形參和實(shí)參二者不一致時(shí),就會(huì)發(fā)生錯(cuò)誤。 ②在普通變量或下標(biāo)變量作函數(shù)參數(shù)時(shí),形參變量和實(shí)參變量是由編譯系統(tǒng)分配的兩個(gè)不同的內(nèi)存單元。在函數(shù)調(diào)用時(shí)發(fā)生的值傳送是把實(shí)參變量的值賦予形參變量。在用數(shù)組名作函數(shù)參數(shù)時(shí),不是進(jìn)行值的傳送,而是進(jìn)行地址的傳送,也就是說(shuō)把實(shí)參數(shù)組的首地址賦予形參數(shù)組名。形參數(shù)組名取得該首地址之后,也就等于有了實(shí)在的數(shù)組。實(shí)際上是形參數(shù)組和實(shí)參數(shù)組為同一數(shù)組,共同擁有一段內(nèi)存空間。任務(wù)3-7-8用指針作函數(shù)參數(shù)控制P2口流水燈一、C語(yǔ)言的有參函數(shù)4.?dāng)?shù)組名作為函數(shù)參數(shù)(2)用數(shù)組名作為函數(shù)參數(shù)時(shí)應(yīng)注意以下幾點(diǎn): ①形參數(shù)組和實(shí)參數(shù)組的類型必須一致,否則將引起錯(cuò)誤。 ②形參數(shù)組和實(shí)參數(shù)組的長(zhǎng)度可以不相同,因?yàn)樵谡{(diào)用時(shí),只傳送首地址而不檢查形參數(shù)組的長(zhǎng)度。當(dāng)形參數(shù)組的長(zhǎng)度與實(shí)參數(shù)組不一致時(shí),雖不至于出現(xiàn)語(yǔ)法錯(cuò)誤(編譯能通過(guò)),但程序執(zhí)行結(jié)果將與實(shí)際不符,這是應(yīng)予以注意的。 ③在函數(shù)形參表中,允許不給出形參數(shù)組的長(zhǎng)度,或用一個(gè)變量來(lái)表示數(shù)組元素的個(gè)數(shù)。 ④多維數(shù)組也可以作為函數(shù)的參數(shù)。在函數(shù)定義時(shí)對(duì)形參數(shù)組可以指定每一維的長(zhǎng)度,也可省去第一維的長(zhǎng)度。5.指針變量作為函數(shù)參數(shù) 函數(shù)的參數(shù)不僅可以是數(shù)據(jù)、數(shù)組,也可以是指針。指針參數(shù)的作用是將一個(gè)變量的地址傳送到另一個(gè)函數(shù)中去。二、硬件電路設(shè)計(jì)三、軟件程序設(shè)計(jì)任務(wù)3-7-8用指針作函數(shù)參數(shù)控制P2口流水燈任務(wù)3-7-9函數(shù)庫(kù)文件控制P2口LED流水燈一、KeilC51的庫(kù)函數(shù)
C51強(qiáng)大功能及其高效率的重要體現(xiàn)之一在于其豐富的可直接調(diào)用的庫(kù)函數(shù),多使用庫(kù)函數(shù)使程序代碼簡(jiǎn)單,結(jié)構(gòu)清晰,易于調(diào)試和維護(hù),下面介紹C51的庫(kù)函數(shù)系統(tǒng)。
1.本征庫(kù)函數(shù)(intrinsicroutines)和非本征庫(kù)函數(shù)
C51提供的本征函數(shù)是指編譯時(shí)直接將固定的代碼插入當(dāng)前行,而不是用ACALL和LCALL語(yǔ)句來(lái)實(shí)現(xiàn),這樣就大大提供了函數(shù)訪問(wèn)的效率,而非本征函數(shù)則必須由ACALL及LCALL調(diào)用。
C51的本征庫(kù)函數(shù)只有9個(gè),數(shù)目雖少,但都非常有用,列舉如下:
_crol_、_cror_:將char型變量循環(huán)向左(右)移動(dòng)指定位數(shù)后返回
_iror_、_irol_:將int型變量循環(huán)向左(右)移動(dòng)指定位數(shù)后返回
_lrol_、_lror_:將long型變量循環(huán)向左(右)移動(dòng)指定位數(shù)后返回
_nop_:相當(dāng)于插入NOP _testbit_:相當(dāng)于JBCbitvar測(cè)試該位變量并跳轉(zhuǎn)同時(shí)清除。
_chkfloat_:測(cè)試并返回源點(diǎn)數(shù)狀態(tài)。 使用時(shí),必須包含#include<intrins.h>一行。任務(wù)3-7-9函數(shù)庫(kù)文件控制P2口LED流水燈一、KeilC51的庫(kù)函數(shù)
2.幾類重要的非本征庫(kù)函數(shù) (1)專用寄存器include文件reg51.h reg51.h是51系列單片機(jī)最基本的專用寄存器定義頭文件,其中包括了所有8051單片機(jī)特殊功能寄存器SFR的位定義。一般的51單片機(jī)系統(tǒng)都必須包括本文件。 (2)絕對(duì)地址訪問(wèn)include文件absacc.h
該文件中實(shí)際只定義了幾個(gè)宏,以確定各存儲(chǔ)空間的絕對(duì)地址。 (3)動(dòng)態(tài)內(nèi)存分配函數(shù),位于stdlib.h中。(4)緩沖區(qū)處理函數(shù),位于string.h中,其中包括拷貝、比較、移動(dòng)等函數(shù),如: memccpy、memchr、memcmp、memcpy、memmove、memset等,這樣很方便地對(duì)緩沖區(qū)進(jìn)行處理。 (5)輸入輸出流函數(shù),位于stdio.h中。輸入輸出流函數(shù)通過(guò)8051的串口或用戶定義的I/O口讀寫(xiě)數(shù)據(jù),缺省為8051串口。 (6)字符函數(shù),位于ctype.h中,檢查參數(shù)值或參數(shù)字符。 (7)數(shù)學(xué)函數(shù)math.h,用于各種數(shù)學(xué)運(yùn)算。任務(wù)3-7-9函數(shù)庫(kù)文件控制P2口LED流水燈二、
KeilC51庫(kù)函數(shù)的調(diào)用 函數(shù)庫(kù)文件的調(diào)用,必須在源程序的開(kāi)始處用“#include<>”命令將聲明該函數(shù)的頭文件包含進(jìn)程序中來(lái)。比如_crol_()函數(shù)是內(nèi)部函數(shù)文件intrins.h中定義的一個(gè)循環(huán)移位函數(shù)。在使用_crol_()函數(shù)時(shí)必須在源程序的開(kāi)始處用“#include<intrins.h>”命令將聲明_crol_()函數(shù)的頭文件intrins.h包含進(jìn)程序中來(lái)。
intrins.h頭文件中的循環(huán)移位函數(shù)、_nop_()函數(shù);ctype.h頭文件中的isalpha()函數(shù);stdlib.h頭文件中的rand()函數(shù);string.h頭文件中的strcmp()函數(shù)等函數(shù)都是經(jīng)常使用的庫(kù)函數(shù)。隨著對(duì)單片機(jī)技術(shù)的深入了解,將會(huì)接觸與運(yùn)用到越來(lái)越多的庫(kù)函數(shù)。三、硬件電路設(shè)計(jì)四、軟件程序設(shè)計(jì)任務(wù)3-7-9函數(shù)庫(kù)文件控制P2口LED流水燈項(xiàng)目8LED數(shù)碼管顯示控制任務(wù)3-8-1使用LED數(shù)碼靜態(tài)顯示數(shù)字任務(wù)3-8-2使用數(shù)碼管動(dòng)態(tài)掃描數(shù)碼顯示任務(wù)3-8-3使用數(shù)碼管仿跑馬燈任務(wù)3-8-4使用數(shù)碼管顯示倒計(jì)數(shù)過(guò)程任務(wù)3-8-1使用LED數(shù)碼靜態(tài)顯示數(shù)字一、LED數(shù)碼管1.LED數(shù)碼管的工作原理 LED數(shù)碼管是一種半導(dǎo)體發(fā)光器件,其基本單元是發(fā)光二極管。 LED數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光二極管單元(多一個(gè)小數(shù)點(diǎn)顯示)。 LED數(shù)碼管顯示數(shù)字和符號(hào)的原理與用火柴棒拼寫(xiě)數(shù)字類似,將發(fā)光二極管制作成筆畫(huà)顯示字段,通過(guò)給這些筆畫(huà)顯示字段數(shù)碼管加電壓來(lái)控制相應(yīng)的筆畫(huà)顯示字段發(fā)光,就可以達(dá)到顯示字符的目的。1.LED數(shù)碼管的工作原理 LED數(shù)碼管是一種半導(dǎo)體發(fā)光器件,其基本單元是發(fā)光二極管。 LED數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光二極管單元(多一個(gè)小數(shù)點(diǎn)顯示)。 LED數(shù)碼管顯示數(shù)字和符號(hào)的原理與用火柴棒拼寫(xiě)數(shù)字類似,將發(fā)光二極管制作成筆畫(huà)顯示字段,通過(guò)給這些筆畫(huà)顯示字段數(shù)碼管加電壓來(lái)控制相應(yīng)的筆畫(huà)顯示字段發(fā)光,就可以達(dá)到顯示字符的目的。 如圖所示為常見(jiàn)LED數(shù)碼管的實(shí)物圖及其筆畫(huà)顯示字段的名稱及分布圖:任務(wù)3-8-1使用LED數(shù)碼靜態(tài)顯示數(shù)字一、LED數(shù)碼管2.LED數(shù)碼管的分類 按發(fā)光二極管單元連接方式分為共陰極數(shù)碼管和共陽(yáng)極數(shù)碼管。如圖所示為兩種LED數(shù)碼管的內(nèi)部電路:
如(a)圖所示,共陰極數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管。共陰極數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽(yáng)極為高電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陽(yáng)極為低電平時(shí),相應(yīng)字段就不亮。
如(b)圖所示,共陽(yáng)數(shù)碼管是指將所有發(fā)光二極管的陽(yáng)極接到一起形成公共陽(yáng)極(COM)的數(shù)碼管。共陽(yáng)極數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。一、LED數(shù)碼管3.共陰極LED數(shù)碼管數(shù)字顯示段碼分析:數(shù)字顯示dpgfedcba共陰極段碼0001111110x3f1000001100x062010110110x5b3010011110x4f4011001100x665011011010x6d6011111010x7d7000001110x078011111110x7f9011011110x6f任務(wù)3-8-1使用LED數(shù)碼靜態(tài)顯示數(shù)字任務(wù)3-8-1使用LED數(shù)碼靜態(tài)顯示數(shù)字二、LED數(shù)碼管的驅(qū)動(dòng)方式1.靜態(tài)顯示驅(qū)動(dòng) 靜態(tài)驅(qū)動(dòng)也稱直流驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)是指每個(gè)數(shù)碼管的每一個(gè)段碼都要由單片機(jī)I/O口的一位端線進(jìn)行驅(qū)動(dòng),或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)的優(yōu)點(diǎn)是編程簡(jiǎn)單,顯示亮度高。缺點(diǎn)是占用I/O口端線多,如驅(qū)動(dòng)5個(gè)數(shù)碼管靜態(tài)顯示需要5×8=40根I/O口端線來(lái)驅(qū)動(dòng)(要知道一個(gè)51單片機(jī)可用的I/O口端線總共才有32位),實(shí)際應(yīng)用時(shí)必須增加譯碼驅(qū)動(dòng)器進(jìn)行驅(qū)動(dòng),增加了硬件電路的復(fù)雜性。2.動(dòng)態(tài)顯示驅(qū)動(dòng) 動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)筆畫(huà)顯示字段“a、b、c、d、e、f、g、dp”的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,各位選通由各自獨(dú)立的I/O線控制。當(dāng)單片機(jī)輸出字符的字段碼時(shí),所有數(shù)碼管都接收到相同的字段碼。究竟由那一個(gè)數(shù)碼管顯示出字符的字形,取決于單片機(jī)位選通電路對(duì)各個(gè)數(shù)碼管公共極COM端的控制。只要將需要顯示的數(shù)碼管的選通控制打開(kāi),該位就顯示出字形,沒(méi)有選通的數(shù)碼管就不會(huì)亮。通過(guò)分時(shí)輪流控制各個(gè)數(shù)碼管的公共極COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。在輪流顯示過(guò)程中,每位數(shù)碼管的點(diǎn)亮?xí)r間一般控制為1~2ms,由于人的視覺(jué)暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但因?yàn)閽呙璧乃俣茸銐蚩?,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,給人感覺(jué)動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,這樣能夠節(jié)省大量的I/O口端線,而且功耗更低。三、硬件電路設(shè)計(jì)四、軟件程序設(shè)計(jì)任務(wù)3-8-1使用LED數(shù)碼靜態(tài)顯示數(shù)字任務(wù)3-8-2用數(shù)碼管動(dòng)態(tài)掃描顯示數(shù)碼一、MCS-51單片機(jī)的工作時(shí)序1.MCS-51單片機(jī)的時(shí)序單位 時(shí)序是用定時(shí)單位來(lái)描述的,MCS-51單片機(jī)的時(shí)序單位有四個(gè),它們分別是節(jié)拍、狀態(tài)、機(jī)器周期和指令周期。 ①節(jié)拍與狀態(tài) 把振蕩脈沖的周期定義為節(jié)拍(為方便描述,用P表示),振蕩脈沖經(jīng)過(guò)二分頻后即得到整個(gè)單片機(jī)工作系統(tǒng)的時(shí)鐘信號(hào),把時(shí)鐘信號(hào)的周期定義為狀態(tài)(用S表示),這樣一個(gè)狀態(tài)就有兩個(gè)節(jié)拍,前半周期相應(yīng)的節(jié)拍定義為P1,后半周期對(duì)應(yīng)的節(jié)拍定義為P2。 ②機(jī)器周期 MCS-51單片機(jī)有固定的機(jī)器周期,規(guī)定一個(gè)機(jī)器周期有6個(gè)狀態(tài),分別表示為S1-S6,而一個(gè)狀態(tài)包含兩個(gè)節(jié)拍,一個(gè)機(jī)器周期就有12個(gè)節(jié)拍,可以記作S1P1、S1P2……S6P1、S6P2。一個(gè)機(jī)器周期共包含12個(gè)振蕩脈沖,即機(jī)器周期就是振蕩脈沖的12分頻。如果使用6MHz的時(shí)鐘頻率,一個(gè)機(jī)器周期就是2μs;如使用12MHz的時(shí)鐘頻率,一個(gè)機(jī)器周期就是1μs。對(duì)于常用的11.0592MHz的時(shí)鐘頻率,一個(gè)機(jī)器周期就是1.085μs。 ③指令周期 執(zhí)行一條指令所需要的時(shí)間稱為指令周期。MCS-51單片機(jī)的指令有單字節(jié)指令、雙字節(jié)指令和三字節(jié)指令,所以它們的指令周期也不盡相同,也就是說(shuō)它們所需的機(jī)器周期不相同,可能包括一到四個(gè)不等的機(jī)器周期。任務(wù)3-8-2用數(shù)碼管動(dòng)態(tài)掃描顯示數(shù)碼一、MCS-51單片機(jī)的工作時(shí)序2.MCS-51單片機(jī)的指令時(shí)序 MCS-51單片機(jī)指令系統(tǒng)中,按它們的長(zhǎng)度可分為單字節(jié)指令、雙字節(jié)指令和三字節(jié)指令。執(zhí)行這些
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年物業(yè)維修管理制度
- 制造業(yè)人力資源管理策略
- 銀行營(yíng)銷策略總結(jié)精準(zhǔn)定位提升競(jìng)爭(zhēng)力
- 2024年熱鬧的元宵節(jié)大班教案
- 2024年美術(shù)教案篇1
- 分公司資質(zhì)掛靠協(xié)議書(shū)(2篇)
- DB33T 2305-2021 大中型體育場(chǎng)館智慧化建設(shè)和管理規(guī)范
- 乳腺癌保乳手術(shù)
- 注塑產(chǎn)品項(xiàng)目可行性研究報(bào)告
- 《導(dǎo)彈驅(qū)逐艦》課件
- 死因監(jiān)測(cè)工作總結(jié)
- 邊防知識(shí)講座
- 分子病理學(xué)題庫(kù)
- 《腎病綜合征》課件
- 護(hù)理給藥制度課件
- 基于單片機(jī)的火災(zāi)報(bào)警系統(tǒng)設(shè)計(jì)
- 培智三年級(jí)上冊(cè)生活語(yǔ)文期末測(cè)試卷(A)
- GB/T 13296-2023鍋爐、熱交換器用不銹鋼無(wú)縫鋼管
- 新加坡學(xué)習(xí)匯報(bào)
- 人工智能與機(jī)器學(xué)習(xí)基礎(chǔ)課程
- 高速公路隧道工程施工方案
評(píng)論
0/150
提交評(píng)論