版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、在線教務(wù)輔導(dǎo)網(wǎng): :/教材其余課件及動(dòng)畫素材請(qǐng)查閱在線教務(wù)輔導(dǎo)網(wǎng)QQ:349134187 或者直接輸入下面地址:第3章 MCS51系單片機(jī)C語言程序設(shè)計(jì)實(shí)訓(xùn)任務(wù)3 LED顯示電路 3.1 C語言與MCS51單片機(jī) 3.2 C51的數(shù)據(jù)與運(yùn)算 3.3 C51程序根本結(jié)構(gòu)與控制語句 3.4 函數(shù) 3.5 C51構(gòu)造數(shù)據(jù)類型 實(shí)訓(xùn)任務(wù)3 LED顯示電路任務(wù):將09這十個(gè)數(shù)循環(huán)送P0口七段LED上顯示 C51程序: #include reg51.hsbit P20=P20;void mDelay(unsigned int DelayTime) unsigned int j=0;for(;DelayTi
2、me0;DelayTime-) for(j=0;j125;j+) ; 實(shí)訓(xùn)任務(wù)3 LED顯示電路void main() unsigned char str10=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90; unsigned char i; P20=1; while(1) for(i=0;i10;i+) P0=stri; mDelay(1000); /*延時(shí)1000毫秒*/ 3.1 C語言與MCS51單片機(jī)在進(jìn)行單片機(jī)應(yīng)用系統(tǒng)的程序設(shè)計(jì)時(shí),匯編語言是一種常用的軟件工具。它能直接操作硬件,指令的執(zhí)行速度快。但其指令系統(tǒng)的格
3、式受硬件結(jié)構(gòu)的限制很大,程序不易理解,且難于編寫與調(diào)試,可移植性也差。目前在單片機(jī)的開發(fā)應(yīng)用中,已逐漸開始引入高級(jí)語言,C語言就是其中的一種。采用C語言不必對(duì)單片機(jī)的具體硬件結(jié)構(gòu)和指令系統(tǒng)有深入的了解,也能夠編出符合硬件實(shí)際的程序。 3.1.1 C語言與MCS51單片機(jī)用C語言編寫的MCS51單片機(jī)應(yīng)用程序(本書后面簡稱為C51程序),雖然不用像匯編語言那樣須具體組織、分配存儲(chǔ)器資源和處理端口數(shù)據(jù),但在C51語言編程中,對(duì)數(shù)據(jù)類型與變量的定義,必須要與單片機(jī)的存儲(chǔ)結(jié)構(gòu)相關(guān)聯(lián),否那么編譯器不能正確地映射定位。深入理解并應(yīng)用C51對(duì)標(biāo)準(zhǔn)C的擴(kuò)展是學(xué)習(xí)C51的關(guān)鍵之一。 3.1.2 C51程序結(jié)構(gòu)
4、用C語言編寫單片機(jī)應(yīng)用程序與標(biāo)準(zhǔn)的C語言程序在語法規(guī)那么、程序結(jié)構(gòu)及程序設(shè)計(jì)方法等方面根本相同,但C51程序與標(biāo)準(zhǔn)的C程序在以下幾個(gè)方面是不一樣: 1C51中定義的庫函數(shù)和標(biāo)準(zhǔn)C語言定義的庫函數(shù)不同。標(biāo)準(zhǔn)的C語言定義的庫函數(shù)是按通用微型計(jì)算機(jī)來定義的,而C51中的庫函數(shù)是按MCS-51單片機(jī)結(jié)構(gòu)來定義的; 2C51中的數(shù)據(jù)類型與標(biāo)準(zhǔn)C的數(shù)據(jù)類型也有區(qū)別,在C51中還增加了幾種針對(duì)MCS-51單片機(jī)特有的數(shù)據(jù)類型;3.1.2 C51程序結(jié)構(gòu) 3C51變量的存儲(chǔ)模式與標(biāo)準(zhǔn)C中變量的存儲(chǔ)模式不一樣,C51中變量的存儲(chǔ)模式是與MCS-51單片機(jī)的存儲(chǔ)器結(jié)構(gòu)緊密相關(guān); 4C51與標(biāo)準(zhǔn)C的輸入輸出處理方式
5、不一樣,C51中的輸入輸出是通過MCS-51串行口來完成的,輸入輸出指令執(zhí)行前必須要對(duì)串行口進(jìn)行初始化; 5C51與標(biāo)準(zhǔn)C在函數(shù)使用方面也有一定的區(qū)別,C51中有專門的中斷函數(shù)。3.2 C51的數(shù)據(jù)與運(yùn)算 3.2.1 數(shù)據(jù)與數(shù)據(jù)類型 表3-1 Keil Cx51的數(shù)據(jù)類型數(shù) 據(jù) 類 型長 度值 域unsigned char1字節(jié)(Byte)0255signed char1字節(jié)-128+127unsigned int2字節(jié)065536signed int2字節(jié)-32768+32767unsigned long4字節(jié)04294967295signed long4字節(jié)-2147483648+2147
6、483647float4字節(jié)1.176E-383.40E+38*13字節(jié)對(duì)象的地址bit1位(bit)0或1sbit1位0或1sfr1字節(jié)0255sfr162字節(jié)0655363.2.1 數(shù)據(jù)與數(shù)據(jù)類型 C51擴(kuò)展的數(shù)據(jù)類型(1) bit位型 bit是C51編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可定義一個(gè)位變量,但不能定義位指針,也不能定義位數(shù)組。它的取值是一個(gè)二進(jìn)制位,不是0就是1。(2)sbit位型 sbit是也是C51編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可從字節(jié)中定義一個(gè)位尋址對(duì)象,來訪問片內(nèi)RAM中的可尋址位或特殊功能存放器中的可尋址位。 3.2.1 數(shù)據(jù)與數(shù)據(jù)類型(3)sfr/sfr16特殊功能
7、存放器型 MCS-51單片機(jī)內(nèi)部所有8位的特殊功能存放器都可以用sfr數(shù)據(jù)類型來訪問,占用一個(gè)內(nèi)存單元,值域?yàn)?255。而16位的特殊功能存放器用sfr16類型來訪問。對(duì)可位尋址的特殊功能存放器中的位變量用sbit來定義。3.2.2 常量與變量常量是在程序運(yùn)行過程中其值不能改變的量。而變量是在程序運(yùn)行過程中其值可以不斷變化的量。一、常量 常量的數(shù)據(jù)類型可以有整型、浮點(diǎn)型、字符型、字符串型和位標(biāo)量。常量可用在不必改變值的場(chǎng)合,如固定的數(shù)據(jù)表、字庫等。1整型常量 整型常量可以表示為十進(jìn)制形式、十六進(jìn)制形式加上前綴0(讀作零)X或0 x或八進(jìn)制形式用數(shù)字0作前綴 。長整型常量在數(shù)字后面加字母L。2浮
8、點(diǎn)型常量 浮點(diǎn)型常量可表示為十進(jìn)制形式和指數(shù)形式。3字符型常量 字符常量是指用單引號(hào)括起來的單個(gè)字符。轉(zhuǎn)義字符是一種特殊的字符常量。3.2.2 常量與變量 4字符串常量 字符串常量是由一對(duì)雙引號(hào)括起來的字符序列。系統(tǒng)會(huì)在字符串尾部加上轉(zhuǎn)義字符0作為字符串的結(jié)束標(biāo)志。 5位常量 位常量是一位二進(jìn)制值0或1。 6符號(hào)常量 常量也可以用一個(gè)符號(hào)來表示。符號(hào)常量在使用之前必須先作定義。定義方式如下: # define 標(biāo)識(shí)符 常量 /*用預(yù)處理命令,把標(biāo)識(shí)符定義為其后的常量值*/ 例 :# define PI 3.14 3.2.2 常量與變量 二、變量 變量數(shù)據(jù)類型可以選用C51所有支持的數(shù)據(jù)類型。
9、在程序中使用變量必須定義后使用,在C51程序設(shè)計(jì)中,定義一個(gè)變量的格式如下: 存儲(chǔ)種類 數(shù)據(jù)類型 存儲(chǔ)器類型 變量名表;3.2.2 常量與變量1數(shù)據(jù)類型 變量的數(shù)據(jù)類型可以是C51編譯器支持的各種數(shù)據(jù)類型。指定數(shù)據(jù)類型時(shí)要注意變量的數(shù)值范圍。在程序中應(yīng)盡可量使用無符號(hào)字符變量和位變量。2變量名 變量名即變量的標(biāo)識(shí),要使用合法的C語言標(biāo)識(shí)符。合法的C標(biāo)識(shí)符由字母、數(shù)字和下劃線組成,且必須由字母或下劃線開頭,字母的大小寫不等價(jià)。在C51編譯器中,標(biāo)識(shí)符的有效位數(shù)不能超過32位。3.2.2 常量與變量3.存儲(chǔ)器類型 MCS-51單片機(jī)的存儲(chǔ)器結(jié)構(gòu)和一般微型計(jì)算機(jī)不同,在MCS-51單片機(jī)中程序存儲(chǔ)器
10、和數(shù)據(jù)存儲(chǔ)嚴(yán)格分開,各有片內(nèi)和片外兩局部,特殊功能存放器和片內(nèi)數(shù)據(jù)存儲(chǔ)器統(tǒng)一編址。存儲(chǔ)器類型就是說明單片機(jī)的存儲(chǔ)區(qū)域情況。存儲(chǔ)器類型指定了該變量在MCS-51單片機(jī)中使用的存儲(chǔ)區(qū)域。 Keil C51編譯器能識(shí)別的存儲(chǔ)器類型有data、bdata、idata 、pdata、xdata、code幾種。3.2.2 常量與變量存儲(chǔ)器類型說 明 data直接尋址的片內(nèi)RAM低128B,訪問速度最快 bdata片內(nèi)RAM的可位尋址區(qū)(20H2FH),允許位和字節(jié)混合訪問 idata間接尋址訪問的片內(nèi)RAM(256B),允許訪問全部片內(nèi)RAM pdata用Ri間接訪問的片外RAM的低256B xdata用
11、DPTR間接訪問的片外RAM,允許訪問全部64k片外RAM code程序存儲(chǔ)器ROM(64K)空間表3-3 存儲(chǔ)器類型3.2.2 常量與變量例: unsigned int code num10=0,1,4,9,16,25,36,49,64,81; unsigned char data x; int idata a=0; sbit flag1=status_10; unsigned char pdata y1; 3.2.2 常量與變量三、特殊功能存放器變量 在C51中,允許用戶對(duì)這些特殊功能存放器進(jìn)行訪問,訪問時(shí)必須通過sfr或sfr16數(shù)據(jù)類型說明符進(jìn)行定義,定義時(shí)指明它們所對(duì)應(yīng)的片內(nèi)RAM單
12、元的地址,使定義后的特殊功能存放器變量與51單片機(jī)的SFR對(duì)應(yīng)。特殊功能存放器變量定義格式如下:sfr 8位特殊功能存放器名=特殊功能存放器字節(jié)地址常數(shù);sfr16 16位特殊功能存放器名=特殊功能存放器字節(jié)地址常數(shù);例如:sfr PSW=0 xd0; sfr16 DPTR=0 x82;3.2.2 常量與變量四、位變量 在C51中,允許用戶通過位類型符定義位變量。位類型符有兩個(gè):bit和sbit??梢远x兩種位變量。 bit位類型符用于定義一般的可位處理位變量。它的定義格式如下: bit 位變量名; 位變量的存儲(chǔ)器類型只能是bdata、data、idata。即位變量的空間只能是片內(nèi)RAM的可位
13、尋址區(qū)20H2FH,嚴(yán)格來說只能是bdata。例如: bit data a1; /*正確*/bit bdata a2; /*正確*/bit pdata a3; /*錯(cuò)誤*/bit xdata a4; /*錯(cuò)誤*/3.2.2 常量與變量 sbit位類型符用于定義在可位尋址字節(jié)或特殊功能存放器中的位,定義時(shí)須指明其位地址,可以是位直接地址,可以是可位尋址變量帶位號(hào),也可以是特殊功能存放器名帶位號(hào)。定義格式如下: sbit 位變量名=位地址常數(shù);例如:sbit CY=oxd7;unsigned char bdata flag;sbit flag0=flag0;sfr P1=0 x90;sbit P1
14、_0=P10;sbit P1_2=0 x902; 3.2.3 絕對(duì)地址的訪問在C51程序中可以使用存儲(chǔ)單元的絕對(duì)地址來訪問存儲(chǔ)器。C51提供了三種訪問絕對(duì)地址的方法:1使用C51中絕對(duì)宏: C51編譯器提供了一組宏定義來對(duì)51系列單片機(jī)的code、data、pdata和xdata空間進(jìn)行絕對(duì)尋址。在頭文件absacc.h中定義了8個(gè)絕對(duì)宏 。宏名為:CBYTE、DBYTE、PBYTE、XBYTE、CWORD、DWORD、PWORD或XWORD。 3.2.3 絕對(duì)地址的訪問訪問形式如下: 宏名地址 其中:CBYTE以字節(jié)形式對(duì)code區(qū)尋址,DBYTE以字節(jié)形式對(duì)data區(qū)尋址,PBYTE以字節(jié)
15、形式對(duì)pdata區(qū)尋址,XBYTE以字節(jié)形式對(duì)xdata區(qū)尋址,CWORD以字形式對(duì)code區(qū)尋址,DWORD以字形式對(duì)data區(qū)尋址,PWORD以字形式對(duì)pdata區(qū)尋址,XWORD以字形式對(duì)xdata區(qū)尋址。 在程序中,使用預(yù)處理命令“include 后就可使用其中定義的宏來訪問絕對(duì)地址。 3.2.3 絕對(duì)地址的訪問例如:#include /*將絕對(duì)地址頭文件包含在文件中*/#define uchar unsigned char #define uint unsigned int void main(void) uchar var1; uint var2; var1=XBYTE0 x000
16、5; /*利用XBYTE0 x0005訪問片外RAM的0005H字節(jié)單元,取單元內(nèi)容賦值給變量var1*/ var2=XWORD0 x0002; /*利用XWORD0 x0002訪問片外RAM的0004H字單元*/ . 3.2.3 絕對(duì)地址的訪問2使用C51擴(kuò)展關(guān)鍵字_at_ 使用_at_對(duì)指定的存儲(chǔ)器空間的絕對(duì)地址進(jìn)行訪問,一般格式如下: 存儲(chǔ)器類型 數(shù)據(jù)類型說明符 變量名 _at_ 地址常數(shù);說明: (1)通過這種絕對(duì)地址定義的變量不能被初使化;(2)bit型函數(shù)及變量不能用_at_指定。(3)使用_at_定義的變量必須為全局變量。例如:data char x1 _at_ 0 x40; /
17、*在data區(qū)中定義字符變量x1,它的地址為40H*/xdata int x2 _at_ 0 x2000; /*在xdata區(qū)中定義整型變量x2,它的地址為2000H*/3.2.3 絕對(duì)地址的訪問3通過指針訪問 Keil C51編譯器允許使用者規(guī)定指針指向的存儲(chǔ)段,這種指針叫具體指針。使用具體指針的好處是節(jié)省了存儲(chǔ)空間。采用具體指針的方法,可以實(shí)現(xiàn)在C51程序中對(duì)任意指定的存儲(chǔ)器單元進(jìn)行訪問。例4-1 通過指針實(shí)現(xiàn)絕對(duì)地址的訪問。#define uchar unsigned char /*定義符號(hào)uchar為數(shù)據(jù)類型符unsigned char*/#define uint unsigned i
18、nt /*定義符號(hào)uint為數(shù)據(jù)類型符unsigned int*/3.2.3 絕對(duì)地址的訪問void main(void)uchar data var1;uchar pdata *p1; /*定義一個(gè)指向pdata區(qū)的指針p1*/uint xdata *p2; /*定義一個(gè)指向xdata區(qū)的指針p2*/uchar data *p3; /*定義一個(gè)指向data區(qū)的指針p3*/p1=0 x30; /*p1指針賦值,使p1指向pdata區(qū)的30H單元*/p2=0 x1000; /*p2指針賦值,使p2指向xdata區(qū)的1000H單元*/*p1=0 xff; /*將數(shù)據(jù)0 xff送到片外RAM30H單
19、元*/*p2=0 x1234; /*將數(shù)據(jù)0 x1234送到片外RAM1000H單元*/p3=&var1; /*p3指針指向data區(qū)的var1變量*/*p3=0 x20; /*給變量var1賦值0 x20*/3.2.4 根本運(yùn)算符和表達(dá)式1算術(shù)運(yùn)算符和表達(dá)式算術(shù)運(yùn)算符用于各類數(shù)值運(yùn)算。包括加+、減-、乘*、除/、求余或稱模運(yùn)算,%、自增+和自減-共七種。 由算術(shù)運(yùn)算符將各種運(yùn)算對(duì)象連接起來的符合C語言語法的式子稱為算術(shù)表達(dá)式。 3.2.4 根本運(yùn)算符和表達(dá)式2關(guān)系運(yùn)算符和表達(dá)式 關(guān)系運(yùn)算符用于比較運(yùn)算。包括大于、小于=、小于等于、=、=的優(yōu)先級(jí)別相同,高于=和!=,=和!=優(yōu)先級(jí)別相同。關(guān)系
20、運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符。關(guān)系運(yùn)算符的結(jié)合性為左結(jié)合。 由關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來的式子稱為關(guān)系表達(dá)式。關(guān)系表達(dá)式通常用來完成某種條件的判斷。關(guān)系表達(dá)式的結(jié)果是邏輯值,即條件成立,結(jié)果為“1,不成立時(shí)結(jié)果為“0。3.2.4 根本運(yùn)算符和表達(dá)式3邏輯運(yùn)算符和表達(dá)式 邏輯運(yùn)算符用于邏輯運(yùn)算,包括邏輯與&、邏輯或|、邏輯非!三種。 邏輯與和邏輯或是雙目運(yùn)算符,具有左結(jié)合性,邏輯非為單目運(yùn)算符,具有右結(jié)合性。 在邏輯運(yùn)算符中,邏輯非的優(yōu)先級(jí)最高,邏輯與次之,邏輯或最低。 用邏輯運(yùn)算符將邏輯量連接起來的式子稱為邏輯表達(dá)式。其邏輯量可以是任何C合法的表達(dá)式。在C語言中,判斷真假時(shí),“0為假,“非
21、0為真;計(jì)算邏輯量時(shí),真的結(jié)果為“1,假的結(jié)果為“0。3.2.4 根本運(yùn)算符和表達(dá)式4位運(yùn)算符和表達(dá)式 運(yùn)用位運(yùn)算符可以使參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與&、位或|、位非、位異或、左移六種。 由位算符構(gòu)成的式子為位表達(dá)式。注意位運(yùn)算的對(duì)象只能是整型或字符型,不能為實(shí)型數(shù)據(jù)。3.2.4 根本運(yùn)算符和表達(dá)式5賦值運(yùn)算符和表達(dá)式 賦值運(yùn)算符用于賦值運(yùn)算,分為簡單賦值=、復(fù)合算術(shù)賦值+=、-=、*=、/=、%=和復(fù)合位運(yùn)算賦值&=、|=、=、=、=三類共十一種。 賦值運(yùn)算符的優(yōu)先級(jí)與關(guān)系運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符比較級(jí)別最低,具有右結(jié)合性。 賦值表達(dá)式的一般形式: 3.2.4 根本運(yùn)算符和
22、表達(dá)式6條件運(yùn)算符和表達(dá)式 條件運(yùn)算符“?:是一個(gè)三目運(yùn)算符,也是C語言中的惟一的三目運(yùn)算,可以把3個(gè)表達(dá)式連接成一個(gè)條件表達(dá)式,用于條件求值。一般形式: 表達(dá)式1?表達(dá)式2:表達(dá)式33.2.4 根本運(yùn)算符和表達(dá)式7逗號(hào)運(yùn)算符和表達(dá)式 逗號(hào)運(yùn)算符“,用于把假設(shè)干表達(dá)式組合成一個(gè)表達(dá)式。一般形式: 表達(dá)式1,表達(dá)式2,表達(dá)式3 逗號(hào)運(yùn)算符在所有運(yùn)算符中優(yōu)先級(jí)最低,具有左結(jié)合性。 用逗號(hào)運(yùn)算符把兩個(gè)表達(dá)式連接起來的表達(dá)式稱為逗號(hào)表達(dá)式。 3.2.5 C51的表達(dá)式語句和復(fù)合語句1表達(dá)式語句表達(dá)式語句是C語言中最根本的一種語句。在表達(dá)式的后邊加一個(gè)分號(hào)“;就構(gòu)成了表達(dá)式語句 ,如: a=b*9; x
23、=8,y=7;2空語句在C語言中有一個(gè)特殊的表達(dá)式語句,稱為空語句,它僅僅由一個(gè)分號(hào)“;組成。3.2.5 C51的表達(dá)式語句和復(fù)合語句3復(fù)合語句 C程序中經(jīng)常使用一種復(fù)合語句。常用將假設(shè)干條語句組合在一起形成一種功能塊,這種由假設(shè)干條語句組合而成的一種語句就稱作復(fù)合語句。 復(fù)合語句的一般形式為:局部變量定義;語句l;語句2;3.3 C51程序根本結(jié)構(gòu)與控制語句3.3.1 C51程序的根本結(jié)構(gòu) C語言是一種結(jié)構(gòu)化程序設(shè)計(jì)語言,以函數(shù)為根本單位,每個(gè)函數(shù)的編程都由假設(shè)干根本結(jié)構(gòu)組成。歸納起來C51有三種根本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。3.3.2 選擇語句 在C51中,有三種條件語句實(shí)現(xiàn)選擇
24、結(jié)構(gòu):if語句、if-else語句、if-else-if語句。另外在C51中還支持多分支結(jié)構(gòu),多分支結(jié)構(gòu)既可以通過if和if-else語句嵌套實(shí)現(xiàn),可用swith語句實(shí)現(xiàn)。3.3.2 選擇語句一、if語句if語句是C51中的一個(gè)根本條件選擇語句,它通常有三種格式:1if表達(dá)式 語句 其執(zhí)行過程是:先計(jì)算表達(dá)式的值,假設(shè)表達(dá)式的值為真 (非0),執(zhí)行其后的語句,假設(shè)表達(dá)式的值為假(等于0),不執(zhí)行語句,直接跳過執(zhí)行后面的程序。例如: if(xy) printf(“x=%dn,x);3.3.2 選擇語句2if表達(dá)式 語句1 else 語句2 其執(zhí)行過程是:如果表達(dá)式的值為真,執(zhí)行語句1,表達(dá)式的值
25、為假,執(zhí)行語句2。例如: if(xy) max=x; else max=y;3.3.2 選擇語句3if表達(dá)式1 語句1else if表達(dá)式2 語句2else if表達(dá)式3 語句3 else if表達(dá)式n-1 語句n-1else 語句n其執(zhí)行過程是:先判斷表達(dá)式1的值,如果為真,執(zhí)行語句1;如果表達(dá)式1的值為假,再判斷表達(dá)式2的值,如果表達(dá)式2為真,執(zhí)行語句2,否那么判斷表達(dá)式3,如此依次判斷下去,假設(shè)有表達(dá)式成立就執(zhí)行對(duì)應(yīng)的語句,如果所有表達(dá)式都為假,那么執(zhí)行語句n。3.3.2 選擇語句例如:if (score=90) printf(“Your result is an An);else if
26、 (score=80) printf(“Your result is an Bn);else if (score=70) printf(“Your result is an Cn);else if (score=60) printf(“Your result is an Dn);else printf(“Your result is an En);3.3.2 選擇語句二、switch語句if語句通過嵌套可以實(shí)現(xiàn)多分支結(jié)構(gòu),但結(jié)構(gòu)復(fù)雜。switch是C51中提供的專門處理多分支結(jié)構(gòu)的多分支選擇語句。它的格式如下:switch 表達(dá)式case 常量表達(dá)式1:語句1;case 常量表達(dá)式2:語句2;
27、 case 常量表達(dá)式n:語句n;default:語句n+1;3.3.2 選擇語句例如:switch(score/10)case 10:case 9: printf(“Your result is an An);break;case 8: printf(“Your result is an Bn); break;case 7: printf(“Your result is an Cn); break;case 6: printf(“Your result is an Dn); break;default: printf(“Your result is an En);3.3.3 循環(huán)語句1whi
28、le語句 while語句在C51中用于實(shí)現(xiàn)當(dāng)型循環(huán)結(jié)構(gòu),它的格式如下: while表達(dá)式 語句;/*循環(huán)體*/ while語句后面的表達(dá)式是能否循環(huán)的條件,后面的語句是循環(huán)體。當(dāng)表達(dá)式為非0真時(shí),就重復(fù)執(zhí)行循環(huán)體內(nèi)的語句;當(dāng)表達(dá)式為0假,那么中止while循環(huán),程序?qū)?zhí)行循環(huán)結(jié)構(gòu)之外的下一條語句。 3.3.3 循環(huán)語句2do while語句 do while語句在C51中用于實(shí)現(xiàn)直到型循環(huán)結(jié)構(gòu),它的格式如下: do 語句; /*循環(huán)體*/ while表達(dá)式; 它的特點(diǎn)是:先執(zhí)行循環(huán)體中的語句,再判別表達(dá)式的值。如表達(dá)式為非0真,那么再執(zhí)行循環(huán)體,然后又判斷,直到有表達(dá)式為0假時(shí),退出循環(huán),執(zhí)行
29、do while結(jié)構(gòu)的下一條語句。 3.3.3 循環(huán)語句3for語句 在C51語言中,for語句是使用最靈活、用得最多的循環(huán)控制語句,同時(shí)也最為復(fù)雜。它可以用于循環(huán)次數(shù)已經(jīng)確定的情況,也可以用于循環(huán)次數(shù)不確定的情況。它完全可以代替while語句,功能最強(qiáng)大。它的格式如下: for表達(dá)式1;表達(dá)式2;表達(dá)式3 語句; /*循環(huán)體*/for語句后面帶三個(gè)表達(dá)式,它的執(zhí)行過程如下:1先求解表達(dá)式1的值;3.3.3 循環(huán)語句2求解表達(dá)式2的值,如表達(dá)式2的值為真,那么執(zhí)行循環(huán)休中的語句,然后執(zhí)行第三步的操作,如表達(dá)式2的值為假,轉(zhuǎn)到第五步;3求解表達(dá)式3;4轉(zhuǎn)到第二步繼續(xù)執(zhí)行。5退出for循環(huán),執(zhí)行下
30、面的一條語句。 在for循環(huán)中,一般表達(dá)式1為初值表達(dá)式,用于給循環(huán)變量賦初值;表達(dá)式2為條件表達(dá)式,對(duì)循環(huán)變量進(jìn)行判斷;表達(dá)式3為循環(huán)變量更新表達(dá)式,用于對(duì)循環(huán)變量的值進(jìn)行更新,使循環(huán)變量能不滿足條件而退出循環(huán)。3.3.3 循環(huán)語句 在一個(gè)循環(huán)的循環(huán)體中允許又包含一個(gè)完整的循環(huán)結(jié)構(gòu),這種結(jié)構(gòu)稱為循環(huán)的嵌套。外面的循環(huán)稱為外循環(huán),里面的循環(huán)稱為內(nèi)循環(huán),如果在內(nèi)循環(huán)的循環(huán)體內(nèi)又包含循環(huán)結(jié)構(gòu),就構(gòu)成了多重循環(huán)。在C51中,允許三種循環(huán)結(jié)構(gòu)相互嵌套。例4-5 用嵌套結(jié)構(gòu)構(gòu)造一個(gè)延時(shí)程序。void delay(unsigned int x)unsigned char j;while(x-) for (
31、j=0;j125;j+);3.3.4 break和continue語句1break語句一般形式:break;作用:跳出所在的多分支switch語句,while、do-while、for循環(huán)語句提前結(jié)束循環(huán)。2continue 語句一般形式:continue;作用:continue語句用在循環(huán)結(jié)構(gòu)中,用于結(jié)束本次循環(huán),跳過循環(huán)體中continue下面尚未執(zhí)行的語句,直接進(jìn)行下一次是否執(zhí)行循環(huán)的判定。3.3.4 break和continue語句 continue語句和break語句的區(qū)別在于:continue語句只是結(jié)束本次循環(huán)而不是終止整個(gè)循環(huán);break語句那么是結(jié)束循環(huán),不再進(jìn)行條件判斷。3
32、.4 函數(shù) C程序是由函數(shù)構(gòu)成的,函數(shù)相當(dāng)于其它高級(jí)語言中的過程和子程序。一個(gè)函數(shù)實(shí)現(xiàn)一個(gè)特定的功能,是獨(dú)立的,可供主函數(shù)或其它函數(shù)調(diào)用。一個(gè)主函數(shù)和假設(shè)干其它函數(shù)的集合構(gòu)成一個(gè)C語言源程序。采用函數(shù)結(jié)構(gòu)的編程方法使C語言程序結(jié)構(gòu)清晰,易于編寫、閱讀和維護(hù)。3.4.1 函數(shù)的分類 從用戶使用的角度,C語言的函數(shù)分為庫函數(shù)和用戶自定義函數(shù)兩種。C語言系統(tǒng)本身提供了非常豐富的庫函數(shù)供程序調(diào)用。用戶還可以根據(jù)需要編寫自定義函數(shù);從函數(shù)的形式,函數(shù)又分為無參函數(shù)和有參函數(shù)兩種。無參函數(shù)在被調(diào)用時(shí)不需要主調(diào)函數(shù)將某些數(shù)據(jù)傳遞給它;有參函數(shù)在被調(diào)用時(shí)需要主調(diào)函數(shù)給它傳遞數(shù)據(jù)。3.4.2 函數(shù)的定義函數(shù)定義
33、的一般格式如下:函數(shù)類型 函數(shù)名形式參數(shù)表列 reentrantinterrupt musing n 聲明局部 執(zhí)行局部 前面局部稱為函數(shù)的首部,后面稱為函數(shù)體,格式說明:1函數(shù)類型 函數(shù)類型說明了函數(shù)返回值的數(shù)據(jù)類型。3.4.2 函數(shù)的定義2函數(shù)名 函數(shù)名是用戶為自定義函數(shù)取的名字以便調(diào)用函數(shù)時(shí)使用。3形式參數(shù)表 形式參數(shù)表用于列出在主調(diào)函數(shù)與被調(diào)用函數(shù)之間進(jìn)行數(shù)據(jù)傳遞的形式參數(shù)的數(shù)據(jù)類型和名稱。4聲明局部 聲明局部主要完成變量的定義、對(duì)被調(diào)用函數(shù)的聲明等。 3.4.2 函數(shù)的定義5執(zhí)行局部 執(zhí)行局部由一系列語句組成,完成函數(shù)的具體功能設(shè)計(jì)。6reentrant修飾符 這個(gè)修飾符用于把函數(shù)定
34、義為可重入函數(shù)。所謂可重入函數(shù)就是允許被遞歸調(diào)用的函數(shù)。函數(shù)的遞歸調(diào)用是指當(dāng)一個(gè)函數(shù)正被調(diào)用尚未返回時(shí),又直接或間接調(diào)用函數(shù)本身。一般的函數(shù)不能做到這樣,只有重入函數(shù)才允許遞歸調(diào)用。 3.4.2 函數(shù)的定義7interrupt m修飾符 interrupt m是C51函數(shù)中非常重要的一個(gè)修飾符。在C51程序設(shè)計(jì)中,中斷過程通過使用interrupt關(guān)鍵字和中斷號(hào)m(031)來實(shí)現(xiàn)。中斷號(hào)對(duì)應(yīng)8051單片機(jī)的中斷程序的入口地址。當(dāng)函數(shù)定義時(shí)用了interrupt m修飾符,系統(tǒng)編譯時(shí)把對(duì)應(yīng)函數(shù)轉(zhuǎn)化為中斷函數(shù),自動(dòng)加上程序頭段和尾段,并按MCS-51系統(tǒng)中斷的處理方式處理。 3.4.2 函數(shù)的定義
35、表3-4 中斷號(hào)與中斷源的對(duì)應(yīng)關(guān)系中斷號(hào)m對(duì)應(yīng)中斷源0外部中斷01定時(shí)/計(jì)數(shù)器T02外部中斷13定時(shí)/計(jì)數(shù)器T14串行口中斷5定時(shí)/計(jì)數(shù)器T2631預(yù)留值3.4.2 函數(shù)的定義例4-6 編寫一個(gè)用于統(tǒng)計(jì)外中斷0的中斷次數(shù)的中斷效勞程序extern int x=0;void int0() interrupt 0 x+;3.4.2 函數(shù)的定義8using n修飾符修飾符using n用于指定中斷效勞程序使用的工作存放器組,其中n的取值為03,表示存放器組號(hào)。 對(duì)于using n修飾符的使用,注意以下幾點(diǎn):1參加using n后,所有被中斷調(diào)用的過程都必須使用同一個(gè)存放器組,否那么參數(shù)傳遞會(huì)發(fā)生錯(cuò)誤
36、。2using n修飾符不能用于有返回值的函數(shù),因?yàn)镃51函數(shù)的返回值是放在存放器中的。如存放器組改變了,返回值就會(huì)出錯(cuò)。3.4.2 函數(shù)的定義例4-7 利用定時(shí)器T1工作在方式1,完成定時(shí)器計(jì)算器t_count計(jì)數(shù)。#include #include extern unsigned int t_count;void timer_int(void) interrupt 1 using 0 TR0=0; TH0=0X3C; TL0=0XB0; TR0=1; t_count+;3.4.3 函數(shù)的調(diào)用 C語言程序中函數(shù)是可以互相調(diào)用的。在函數(shù)調(diào)用時(shí),通過主調(diào)函數(shù)的實(shí)際參數(shù)與被調(diào)函數(shù)的形式參數(shù)之間進(jìn)行
37、數(shù)據(jù)傳遞來實(shí)現(xiàn)函數(shù)間參數(shù)的傳遞。 函數(shù)調(diào)用的一般形式如下: 函數(shù)名實(shí)際參數(shù)表列; 函數(shù)調(diào)用中的實(shí)參與函數(shù)定義中的形參必須在個(gè)數(shù)、類型及順序上嚴(yán)格保持一致,以便將實(shí)際參數(shù)的值正確地傳遞給形式參數(shù),否那么在函數(shù)調(diào)用時(shí)會(huì)產(chǎn)生意想不到的錯(cuò)誤結(jié)果。 3.4.3 函數(shù)的調(diào)用按照函數(shù)調(diào)用在主調(diào)函數(shù)中出現(xiàn)的位置,函數(shù)調(diào)用方式有以下三種:1函數(shù)語句。把被調(diào)用函數(shù)作為主調(diào)用函數(shù)的一個(gè)語句。2函數(shù)表達(dá)式。函數(shù)被放在一個(gè)表達(dá)式中,以一個(gè)運(yùn)算對(duì)象的方式出現(xiàn)。這時(shí)的被調(diào)用函數(shù)要求帶有返回語句,以返回一個(gè)明確的數(shù)值參加表達(dá)式的運(yùn)算。3函數(shù)參數(shù)。此時(shí)被調(diào)用函數(shù)作為另一個(gè)函數(shù)的實(shí)際參數(shù)。3.4.3 函數(shù)的調(diào)用 函數(shù)調(diào)用的前提是
38、被調(diào)函數(shù)必須已經(jīng)存在即已定義過。如果使用庫函數(shù),需使用預(yù)處理命令“#include 將有關(guān)函數(shù)的信息包含到本文件中。當(dāng)使用了用戶自定義函數(shù)時(shí),如果在函數(shù)定義之前調(diào)用,需要在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)進(jìn)行聲明。 在C51中,函數(shù)聲明(函數(shù)原型)一般形式如下: extern 函數(shù)類型 函數(shù)名形式參數(shù)表;3.4.4 函數(shù)值 函數(shù)的值是指函數(shù)被調(diào)用之后,執(zhí)行被調(diào)函數(shù)體中的程序段所取得并返回給主調(diào)函數(shù)的值。 函數(shù)的值一般通過return語句返回主調(diào)函數(shù)。return 語句的一般形式為: return 表達(dá)式; 或者為: return (表達(dá)式); 該語句的功能是計(jì)算表達(dá)式的值,并返回給主調(diào)函數(shù)。在函數(shù)中允許有
39、多個(gè)return語句,但每次調(diào)用只能有一個(gè)return 語句被執(zhí)行, 因此只能返回一個(gè)函數(shù)值 如果被調(diào)函數(shù)中沒有return語句,函數(shù)并不是不帶回返回值,只是不帶回有用的值帶回一個(gè)不確定的值。為明確表示不帶回值,可以用void定義為無類型空類型。3.5 C51構(gòu)造數(shù)據(jù)類型3.5.1 數(shù)組數(shù)組是一組有序數(shù)據(jù)的集合。數(shù)組中每一個(gè)元素的類型相同。數(shù)組必須先定義后使用。常用的有一維數(shù)組、二維數(shù)組和字符數(shù)組。一維數(shù)組的定義形式為:類型說明符 數(shù)組名常量表達(dá)式;其中,類型說明符是數(shù)組中各元素的數(shù)據(jù)類型。數(shù)組名是用戶定義的數(shù)組標(biāo)識(shí)符。方括號(hào)中的常量表達(dá)式表示數(shù)據(jù)元素的個(gè)數(shù),也稱為數(shù)組的長度。例如:int a
40、10;/*定義一個(gè)數(shù)組,數(shù)組名a,有10個(gè)元素,每個(gè)元素的類型均為int*/3.5.2 指針在C語言中把一個(gè)變量的地址稱為指針。而指針變量是一個(gè)變量,其值是另一個(gè)變量的地址。指針變量與其他變量一樣,必須選定義后使用。指針變量定義的一般形式為: 類型說明符 存儲(chǔ)器類型 指針變量名;3.5.2 指針 其中,類型說明符定義了指針變量的基類型,說明了該指針變量可以指向的變量的類型。存儲(chǔ)器類型是C51的擴(kuò)展,是可選項(xiàng)。有此項(xiàng),指針被定義為基于存儲(chǔ)器的指針,無此項(xiàng),被定義為一般指針。 例如:char *p; /*p為一個(gè)指向char型變量的指針,而p本身那么依存儲(chǔ)模式存放*/char data * str
41、; /*str指向data區(qū)中char型數(shù)據(jù)*/ int xdata * pow; /*pow指向外部RAM的int型整數(shù)*/3.5.2 指針在C語言中為使用指針變量提供了兩種運(yùn)算符:取地址運(yùn)算符&和取內(nèi)容運(yùn)算符*。取地址運(yùn)算符&:是單目運(yùn)算符,其結(jié)合性為自右至左,其功能是取變量的地址。取地址的一般形式為: 指針變量 = &目標(biāo)變量;其功能是將目標(biāo)變量的地址賦給左邊的指針變量,使指針變量指向目標(biāo)變量。例如:int a;int *p;p=&a; /*表示將a的地址賦給p */3.5.2 指針取內(nèi)容運(yùn)算符*是單目運(yùn)算符,其結(jié)合性為自右至左,用來表示指針變量所指的變量。取內(nèi)容的一般形式為: 變量 = *指針變量;其功能是將指針變量所指向的目標(biāo)變量的值賦給左邊的變量。例如:int a,b,*p;p=&a;*p=5; /*表示給a賦值5 */b=*p; /*表示將a的值賦給b*/3.5.3 結(jié)構(gòu)體和聯(lián)合體一、結(jié)構(gòu)體 結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型,它是將假設(shè)干個(gè)不同類型的數(shù)據(jù)結(jié)合在一
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030便利店行業(yè)競(jìng)爭(zhēng)格局與加盟體系優(yōu)化研究報(bào)告
- 2025-2030中國防輻射市場(chǎng)需求前景預(yù)測(cè)與投資價(jià)值評(píng)估研究報(bào)告
- 2025-2030中國智能陽臺(tái)行業(yè)市場(chǎng)現(xiàn)狀分析及投資評(píng)估規(guī)劃前景研究報(bào)告
- 2025-2030中國電腦散熱風(fēng)扇行業(yè)需求規(guī)模預(yù)測(cè)及競(jìng)爭(zhēng)戰(zhàn)略規(guī)劃研究報(bào)告
- 2025-2030中國生物飼料行業(yè)投資效益分析及需求格局趨勢(shì)預(yù)測(cè)研究報(bào)告
- 2026年浙江省溫嶺市衛(wèi)生事業(yè)單位公開招聘醫(yī)學(xué)衛(wèi)生類高學(xué)歷人才備考題庫及一套完整答案詳解
- 涼州區(qū)從2026屆小學(xué)全科型教師培養(yǎng)計(jì)劃畢業(yè)生中公開招聘事業(yè)單位工作人員備考題庫及完整答案詳解一套
- 2025至2030中國白羽肉雞種源自主化進(jìn)程與市場(chǎng)替代空間研究報(bào)告
- 2026年長春市消防救援支隊(duì)南部都市經(jīng)濟(jì)開發(fā)區(qū)大隊(duì)公開招錄政府專職消防員的備考題庫及參考答案詳解一套
- 安泰天龍鎢鉬科技有限公司招聘?jìng)淇碱}庫-2026屆及答案詳解1套
- 植入式靜脈給藥裝置(輸液港)-中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)2023
- GB/T 2988-2023高鋁磚
- 東風(fēng)7電路圖解析
- 數(shù)字填圖系統(tǒng)新版(RgMap2.0)操作手冊(cè)
- YY/T 1778.1-2021醫(yī)療應(yīng)用中呼吸氣體通路生物相容性評(píng)價(jià)第1部分:風(fēng)險(xiǎn)管理過程中的評(píng)價(jià)與試驗(yàn)
- FZ/T 73009-2021山羊絨針織品
- JJF 1069-2012 法定計(jì)量檢定機(jī)構(gòu)考核規(guī)范(培訓(xùn)講稿)
- 2011-2015廣汽豐田凱美瑞維修手冊(cè)wdl
- DFMEA編制作業(yè)指導(dǎo)書新版
- DB35∕T 1844-2019 高速公路邊坡工程監(jiān)測(cè)技術(shù)規(guī)程
- 城市管理綜合執(zhí)法局城管執(zhí)法與執(zhí)法程序PPT模板
評(píng)論
0/150
提交評(píng)論