演示文稿語言程序設(shè)計(jì)基礎(chǔ)_第1頁
演示文稿語言程序設(shè)計(jì)基礎(chǔ)_第2頁
演示文稿語言程序設(shè)計(jì)基礎(chǔ)_第3頁
演示文稿語言程序設(shè)計(jì)基礎(chǔ)_第4頁
演示文稿語言程序設(shè)計(jì)基礎(chǔ)_第5頁
已閱讀5頁,還剩79頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

演示文稿語言程序設(shè)計(jì)基礎(chǔ)當(dāng)前1頁,總共84頁。(優(yōu)選)語言程序設(shè)計(jì)基礎(chǔ)當(dāng)前2頁,總共84頁。

本章主要介紹C51語言的數(shù)據(jù)類型、數(shù)據(jù)存儲(chǔ)類型、數(shù)據(jù)運(yùn)算、程序設(shè)計(jì)的基本結(jié)構(gòu)、數(shù)組和指針,要求學(xué)習(xí)者初步掌握C51語言程序設(shè)計(jì)的基本方法。當(dāng)前3頁,總共84頁。3.1C51語言概述C語言是美國國家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)制定的編程語言標(biāo)準(zhǔn)。1987年,ANSI公布了87ANSIC,即標(biāo)準(zhǔn)C語言。C51語言是在ANSIC的基礎(chǔ)上針對51單片機(jī)的硬件特點(diǎn)進(jìn)行了擴(kuò)展,并向51單片機(jī)上移植。經(jīng)過多年努力,C51語言已經(jīng)成為公認(rèn)的高效、簡潔而又貼近51單片機(jī)硬件的實(shí)用高級編程語言。當(dāng)前4頁,總共84頁。3.1.1使用C51語言的優(yōu)點(diǎn)C51語言具有結(jié)構(gòu)化和模塊化的特點(diǎn),便于閱讀和維護(hù)。C51語言的可移植性好,很多微控制器都支持C51編譯器。C51語言提供的庫函數(shù)包含許多標(biāo)準(zhǔn)子程序,具有較強(qiáng)的數(shù)據(jù)處理能力。用C51語言編寫的程序比用匯編語言編寫的程序更符合人們的思考習(xí)慣。寄存器分配、不同存儲(chǔ)器的尋址及數(shù)據(jù)類型等細(xì)節(jié)交由編譯器管理,使開發(fā)者可以更專心地考慮算法,而不是考慮一些細(xì)節(jié)問題。C51語言和微控制器是相對獨(dú)立的,開發(fā)者不必知道處理器的具體內(nèi)部結(jié)構(gòu)和處理過程。當(dāng)用新型的微控制器開發(fā)程序時(shí),可以很快上手,縮短學(xué)習(xí)時(shí)間和程序開發(fā)時(shí)間。當(dāng)前5頁,總共84頁。3.1.2C51與ANSIC的主要區(qū)別1.頭文件的區(qū)別

51系列單片機(jī)的生產(chǎn)廠家有多個(gè),它們的差異在于內(nèi)部資源如定時(shí)器、中斷、I/O等的數(shù)量以及功能的不同,而對使用者來說,只需要將相應(yīng)的功能寄存器的頭文件加載在程序內(nèi),就可實(shí)現(xiàn)其所具有的功能。因此,C51系列的頭文件集中體現(xiàn)了各系列芯片的不同資源及功能。

2.數(shù)據(jù)類型的區(qū)別計(jì)算機(jī)的CPU是32位或64位的,運(yùn)算能力強(qiáng),內(nèi)存大,ANSIC可以大量使用float型與longint型變量;單片機(jī)的CPU一般為8位或16位的,運(yùn)算能力較弱,因此C51變量類型以char型為主,int型為輔。當(dāng)前6頁,總共84頁。3.數(shù)據(jù)存儲(chǔ)類型的區(qū)別

C語言最初是為通用計(jì)算機(jī)設(shè)計(jì)的,在通用計(jì)算機(jī)中只有一個(gè)程序和數(shù)據(jù)統(tǒng)一尋址的內(nèi)存空間,而51系列單片機(jī)有片內(nèi)、片外程序存儲(chǔ)器,還有片內(nèi)、片外數(shù)據(jù)存儲(chǔ)器。標(biāo)準(zhǔn)C語言并沒有提供這部分存儲(chǔ)器的地址范圍的定義。此外,標(biāo)準(zhǔn)C語言對于51系列單片機(jī)中大量的特殊功能寄存器也沒有定義。

4.中斷方面的區(qū)別

ANSIC語言沒有處理單片機(jī)中斷的定義。而C51中有專門的中斷函數(shù)。

5.庫函數(shù)的區(qū)別由于ANSIC中的部分庫函數(shù)不適于嵌入式處理器系統(tǒng),因此被排除在C51之外,如字符屏幕和圖形函數(shù)等。當(dāng)前7頁,總共84頁。6.目標(biāo)代碼的區(qū)別

ANSIC由計(jì)算機(jī)生成.exe文件,編譯完成后直接在計(jì)算機(jī)上運(yùn)行;C51由單片機(jī)編譯生成.bin或.hex代碼文件,需要燒寫到單片機(jī)中并結(jié)合外圍電路執(zhí)行。

7.仿真調(diào)試的區(qū)別

C51程序在計(jì)算機(jī)上進(jìn)行編譯,然后需通過仿真器連接后進(jìn)行仿真調(diào)試。近年來隨著電路仿真軟件的不斷完善,也可通過Proteus等軟件直接在計(jì)算機(jī)上進(jìn)行仿真調(diào)試。但是從數(shù)據(jù)運(yùn)算操作、程序控制語句以及函數(shù)的使用上來說,C51與ANSIC幾乎沒有什么明顯的差別。如果程序設(shè)計(jì)者具備了有關(guān)標(biāo)準(zhǔn)C的編程基礎(chǔ),只要注意KeilC51與標(biāo)準(zhǔn)C的不同之處,并熟悉MCS-51單片機(jī)的硬件結(jié)構(gòu),就能夠較快地掌握C51的編程。當(dāng)前8頁,總共84頁。3.2C51數(shù)據(jù)類型3.2.1常量與變量常量:程序運(yùn)行過程中值不能改變的量稱為常量。常量存在于ROM中。變量:變量代表存儲(chǔ)器中的一個(gè)或多個(gè)存儲(chǔ)單元,用來存放數(shù)據(jù)。一般來講,這些數(shù)據(jù)在程序運(yùn)行過程中可以改變(只讀變量除外)。變量名命名規(guī)則:變量名只能由半角的字母、數(shù)字、下劃線組成,且第一個(gè)字符不能是數(shù)字。數(shù)據(jù)類型:變量存在的類型稱為數(shù)據(jù)類型。C51的數(shù)據(jù)類型如表3-1所示。當(dāng)前9頁,總共84頁。當(dāng)前10頁,總共84頁。3.2.2變量定義與賦值1.定義一個(gè)變量變量必須先定義,后使用。例如:

inta;charb;2.變量賦初值

C語言允許在定義變量的同時(shí)給變量賦初值。例如:charc=‘a(chǎn)’;inta=7;inta,b,c=9;//定義a、b、c為整型變量,對c賦初值。inta=3,b=3,c=3;當(dāng)前11頁,總共84頁。

在存儲(chǔ)空間夠用的情況下,盡量選擇8位即一個(gè)字節(jié)的char型,特別是unsignedchar。對于51系列單片機(jī)而言,浮點(diǎn)類型變量將明顯增加運(yùn)算時(shí)間和程序長度,如果可以的話,盡量使用靈活巧妙的算法來避免浮點(diǎn)變量的引入。當(dāng)前12頁,總共84頁。3.2.3C51的擴(kuò)展數(shù)據(jù)類型1.位變量bitbit的值可以是1(true),也可以是0(false)。例如:bitlock; //將lock定義為位變量bitdirention;//將direction定義為位變量位變量的使用說明:①位變量不能定義成一個(gè)指針,如不能定義:bit*pointer;②位變量不存在位數(shù)組,如不能定義:bitb_array[];③定義位變量時(shí),存儲(chǔ)類型只允許為data、bdata或者idata,如果將位變量的存儲(chǔ)類型定義成其他類型都將導(dǎo)致編譯出錯(cuò)。當(dāng)前13頁,總共84頁。

2.特殊功能寄存器sfr

MCS-51單片機(jī)特殊功能寄存器在片內(nèi)RAM區(qū)的80H~FFH之間?!皊fr”數(shù)據(jù)類型占用一個(gè)內(nèi)存單元,利用它可訪問MCS-51單片機(jī)內(nèi)部的所有特殊功能寄存器。

例如:“sfrP1=0x90;”這一語句定義了P1口在片內(nèi)的寄存器,在后面語句中可用“P1=0xff”(使P1的所有引腳輸出為高電平)之類的語句來操作特殊功能寄存器。

標(biāo)準(zhǔn)特殊功能寄存器在reg51.h、reg52.h等頭文件中已經(jīng)被定義,只要用文件包含做出申明即可使用。當(dāng)前14頁,總共84頁。3.特殊功能寄存器sfr16“sfr16”數(shù)據(jù)類型占用兩個(gè)內(nèi)存單元。sfr16和sfr一樣用于操作特殊功能寄存器。所不同的是它用于操作占兩個(gè)字節(jié)的特殊功能寄存器。例如:“sfr16DPTR=0x82;”語句定義了片內(nèi)16位數(shù)據(jù)指針寄存器DPTR,其低8位字節(jié)地址為82H。在后面的語句中可以對DPTR進(jìn)行操作。當(dāng)前15頁,總共84頁。4.特殊功能位sbitsbit是指MCS--51單片機(jī)片內(nèi)特殊功能寄存器的可尋址位。例如:

sfrPSW=0xd0; //定義PSW寄存器地址為0xd0sbitOV=PSW^2; //定義OV位為PSW.2

符號“^”前面是特殊功能寄存器的名字,“^”后面的數(shù)字定義了特殊功能寄存器可尋址位在寄存器中的位置,取值必須是0~7。

注意:不要把bit與sbit混淆。bit用來定義普通的位變量,值只能是二進(jìn)制的0或1。而sbit定義的是特殊功能位。當(dāng)前16頁,總共84頁。3.3C51數(shù)據(jù)的存儲(chǔ)類型3.3.1數(shù)據(jù)存儲(chǔ)類型

MCS-51系列單片機(jī)采用了哈佛結(jié)構(gòu),即程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器是分離的。51系列單片提供了三種不同類型的存儲(chǔ)區(qū)域(memoryareas):程序存儲(chǔ)區(qū)(programmemory);內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)(internaldatamemory);外部數(shù)據(jù)存儲(chǔ)區(qū)(externaldatamemory)。

C51編譯器完全支持MCS-51單片機(jī)及其系列的結(jié)構(gòu),可完全訪問MCS-51硬件系統(tǒng)所有部分。每個(gè)變量可準(zhǔn)確地賦予不同的存儲(chǔ)器類型(data,idata,pdata,xdata,code)。訪問內(nèi)部數(shù)據(jù)存儲(chǔ)器(idata)要比訪問外部數(shù)據(jù)存儲(chǔ)器(xdata)更快一些,因此,可將經(jīng)常使用的變量置于內(nèi)部數(shù)據(jù)存儲(chǔ)器中,而將較大及很少使用的數(shù)據(jù)單元置于外部數(shù)據(jù)存儲(chǔ)器中。當(dāng)前17頁,總共84頁。當(dāng)前18頁,總共84頁。

例如:datacharcharvar;charcodemsg[]=“ENTERPARAMETER:”;unsignedlongxdataarray[100];floatidatax,y,z;unsignedcharxdatavector[10][4];sfrP0=0x80;sbitRI=0x98;charbdataflags;sbitflag0=flags^0;說明:聲明變量時(shí)存儲(chǔ)區(qū)修飾符和數(shù)據(jù)類型修飾符的位置可以互換,即“chardatax;”和“datacharx;”是完全等效的。不過從兼容性的角度考慮,建議使用前一種格式。當(dāng)前19頁,總共84頁。3.3.2存儲(chǔ)器模式

如果在變量定義時(shí)略去存儲(chǔ)類型標(biāo)識符,編譯器會(huì)自動(dòng)選擇默認(rèn)存儲(chǔ)類型。默認(rèn)存儲(chǔ)類型進(jìn)一步由SMALL、COMPACT和LARGE存儲(chǔ)模式指令限制。C51變量的存儲(chǔ)器模式如表3-3所示。當(dāng)前20頁,總共84頁。3.3.3C51語言的絕對地址訪問1.絕對宏

C51編譯器提供一組宏定義來對code、data、pdata和xdata空間進(jìn)行絕對尋址,包括CBYTE、CWORD、DBYTE、DWORD、XBYTE、XWORD、PBYTE、PWORD。這些宏包含在名為absacc.h的頭文件中。在使用前,需要將頭文件包含進(jìn)來,即#include<absacc.h>。其中:

CBYTE:以字節(jié)形式對code區(qū)尋址;

CWORD:以字形式對code區(qū)尋址;

DBYTE:以字節(jié)形式對data區(qū)尋址;

DWORD:以字形式對data區(qū)尋址;

XBYTE:以字節(jié)形式對xdata區(qū)尋址;

XWORD:以字形式對xdata區(qū)尋址;

PBYTE:以字節(jié)形式對pdata區(qū)尋址;

PWORD:以字形式對pdata區(qū)尋址。當(dāng)前21頁,總共84頁。(1)按字節(jié)訪問存儲(chǔ)器宏的形式 宏名[地址]

數(shù)組中的下標(biāo)就是存儲(chǔ)器的地址,因此使用起來非常方便。例如:

DBYTE[0x30]=0x48; //給片內(nèi)RAM送數(shù)據(jù)

XBYTE[0x0002]=0x36; //給片外RAM送數(shù)據(jù)

dis_buf[0]=CBYTE[TABLE+5];//從CODE區(qū)讀取數(shù)據(jù)當(dāng)前22頁,總共84頁。

(2)按整型數(shù)訪問存儲(chǔ)器宏的形式

宏名[下標(biāo)]

由于整型數(shù)占兩個(gè)字節(jié),所以下標(biāo)與地址的關(guān)系為:地址=下標(biāo)×2。由于數(shù)組中的下標(biāo)與存儲(chǔ)器的地址是倍數(shù)關(guān)系,使用時(shí)要注意。例如:

DWORD[0x20]=0x1234;//給片內(nèi)RAM的0x40、0x41單元送數(shù)

XWORD[0x0002]=0x5678;//給片外RAM的0x0004、0x0005單元送數(shù)

當(dāng)前23頁,總共84頁。2._at_關(guān)鍵字格式如下:

[存儲(chǔ)器類型]數(shù)據(jù)類型說明符變量名_at_地址常數(shù)存儲(chǔ)器類型和數(shù)據(jù)類型必須為C51能識別的。地址常數(shù)必須位于有效的存儲(chǔ)器空間之內(nèi)。使用_at_定義的變量必須為全局變量。例如:

dataunsignedcharx1_at_0x40;

//在data區(qū)定義字節(jié)變量x1,它的地址為40Hxdataunsignedintx2_at_0x2000;

//在xdata區(qū)定義字變量x2,它的地址為2000Hdataunsignedcharbuffer[8]_at_0x50;

//在data區(qū)定義數(shù)組buffer,它的起始地址為50H當(dāng)前24頁,總共84頁。3.4C51的數(shù)據(jù)運(yùn)算

主要有:算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、位運(yùn)算符及賦值運(yùn)算符等3.4.1算術(shù)運(yùn)算算術(shù)運(yùn)算操作符主要包括:

+(加法運(yùn)算符),-(減法運(yùn)算符),*(乘法運(yùn)算符),

/(除法運(yùn)算符),%(模運(yùn)算或取余運(yùn)算符),++(自增運(yùn)算符),--(自減運(yùn)算符)。注意:“/”的功能是取除運(yùn)算結(jié)果的整數(shù)部分;“%”的功能是取除運(yùn)算結(jié)果的余數(shù)部分。例如:“5/3”的結(jié)果為1(商),而“5%3”的結(jié)果為2(余數(shù))。當(dāng)前25頁,總共84頁。

自增和自減運(yùn)算符的功能是使變量自動(dòng)加1或減1。自增和自減運(yùn)算符放在變量之前和變量之后是不同的。

++i,--i:在使用i之前,先使i值加(減)1。

i++,i--:在使用i之后,再使i值加(減)1。例如:若i=4,則執(zhí)行x=++i時(shí),先使i加1,再引用結(jié)果,即x=5,運(yùn)算結(jié)果為i=5,x=5。再如:若i=4,則執(zhí)行x=i++時(shí),先引用i值,即x=4,再使i加1,運(yùn)算結(jié)果為i=5,x=4。當(dāng)前26頁,總共84頁。3.4.2邏輯運(yùn)算邏輯運(yùn)算操作符主要包括:

&&(邏輯與),||(邏輯或),?。ㄟ壿嫹牵_壿嬤\(yùn)算結(jié)果為真時(shí)取1,否則取0。

3.4.3關(guān)系運(yùn)算關(guān)系運(yùn)算主要用于比較操作數(shù)的大小關(guān)系,包括:

<(小于),<=(小于等于),>(大于),>=(大于等于),

==(等于),!=(不等于)。若關(guān)系成立,結(jié)果為1;若關(guān)系不成立,結(jié)果為0。當(dāng)前27頁,總共84頁。

3.4.4位運(yùn)算

位運(yùn)算是將兩個(gè)操作數(shù)按二進(jìn)制數(shù)展開,然后對應(yīng)位進(jìn)行邏輯運(yùn)算。位運(yùn)算操作符包括:&(按位與),|(按位或),^(按位異或),~(按位取反),<<(位左移),>>(位右移)。位運(yùn)算的操作對象只能是整型和字符型數(shù)據(jù)。這些位運(yùn)算和匯編語言中的位操作指令十分類似。當(dāng)前28頁,總共84頁。1.左移運(yùn)算符(<<)該運(yùn)算符用來將一個(gè)數(shù)的各二進(jìn)制位全部左移若干位,左高位溢出,右低位補(bǔ)0。例如:

b=a<<2;a=a<<2;a<<=2;高位左移后溢出,舍棄掉。在該數(shù)左移時(shí)被溢出舍棄的高位不為1時(shí),左移1位相當(dāng)于該數(shù)乘以2。例如:

15<<2=60;又如,143<<2=60,原因是最高位為1,左移后被溢出,不能等同于乘以2。當(dāng)前29頁,總共84頁。2.右移運(yùn)算符(>>)該運(yùn)算符用來將一個(gè)數(shù)的各二進(jìn)制位全部右移若干位,左高位補(bǔ)0,右低位溢出。例如:

b=a>>2;a=a>>2;a>>=2;低位右移后溢出,舍棄掉。在該數(shù)右移時(shí)被溢出舍棄的低位不為1時(shí),右移1位相當(dāng)于該數(shù)除以2。例如:

16>>2=4又如,63>>2=15,原因是最后2位為1,右移后被溢出,不能等同于除以4。當(dāng)前30頁,總共84頁。3.按位異或運(yùn)算符(^)異或運(yùn)算的規(guī)則是:參加運(yùn)算的兩個(gè)二進(jìn)制位相同時(shí)結(jié)果為0(假),相異時(shí)結(jié)果為1(真)。即

0^0=0;0^1=1;1^0=1;1^1=0;例如:0x2D^0x0F=0x22,將十六進(jìn)制數(shù)0x2D與十六進(jìn)制數(shù)0x0F進(jìn)行按位異或運(yùn)算,則高四位保持不變,低四位全部翻轉(zhuǎn)。通過按位異或運(yùn)算可以實(shí)現(xiàn)對變量的某一位或某幾位的取反操作。當(dāng)前31頁,總共84頁。4.按位取反運(yùn)算符(~)按位取反運(yùn)算符是一個(gè)單目運(yùn)算符,用來對一個(gè)二進(jìn)制數(shù)按位取反,即將0變?yōu)?,1變?yōu)?。取反運(yùn)算符常與移位運(yùn)算符及按位與、按位或、按位異或運(yùn)算符結(jié)合使用,以實(shí)現(xiàn)對某一位或某幾位清0、置1、取反的操作。

5.按位與運(yùn)算符(&)參加運(yùn)算的兩個(gè)數(shù)據(jù),按二進(jìn)制位進(jìn)行與運(yùn)算。

6.按位或運(yùn)算符(|)參加運(yùn)算的兩個(gè)數(shù)據(jù),按二進(jìn)制位進(jìn)行或運(yùn)算。當(dāng)前32頁,總共84頁。3.4.5賦值運(yùn)算1.格式:變量名=表達(dá)式;例如:

a=2;b=3;c=2*a+b;2.復(fù)合賦值運(yùn)算符賦值符號前加上其他運(yùn)算符可構(gòu)成復(fù)合運(yùn)算符。C51語言10種復(fù)合運(yùn)算符:

+=,-=,*=,/=,%=,﹠=,︱=,^=,<<=,>>=

例如:

a+=b; //等價(jià)于a=(a+b)

x*=a+b; //等價(jià)于x=(x*(a+b))

a&=b; //等價(jià)于a=(a&b)

a<<=4; //等價(jià)于a=(a<<4)當(dāng)前33頁,總共84頁。類型符號功能算術(shù)運(yùn)算符+,-,*,/%,++,--加、減、乘、除求余、自增1、自減1邏輯運(yùn)算符&&,||,!與、或、非關(guān)系運(yùn)算符>,<,>=<=,==,!=

大于、小于、大于等于、小于等于、等于、不等于位運(yùn)算符&,|,~,^<<,>>位與、位或、位反、異或左移、右移C51基本運(yùn)算符運(yùn)算符的優(yōu)先級從低到高依次為:賦值運(yùn)算符、&&和||、關(guān)系運(yùn)算符、算術(shù)運(yùn)算符、邏輯非(!)運(yùn)算符。當(dāng)前34頁,總共84頁。3.5C51程序設(shè)計(jì)的基本結(jié)構(gòu)3.5.1C51語言中語句的分類控制語句:控制程序運(yùn)行的語句。空語句:只有一個(gè)分號的語句,稱為空語句。它不進(jìn)行任何操作。表達(dá)式語句:表達(dá)式后面加上分號就構(gòu)成一個(gè)表達(dá)式語句。函數(shù)調(diào)用語句也是表達(dá)式語句,由函數(shù)調(diào)用加分號構(gòu)成。復(fù)合語句:可以把多個(gè)語句用{}括起來,構(gòu)成復(fù)合語句,多用于選擇或循環(huán)結(jié)構(gòu)中。注釋語句:在C51中,由“/*”和“*/”符號對包含的內(nèi)容以及雙斜杠“//”后面的內(nèi)容均表示注釋語句。編程人員可使用注釋語句來解釋程序的功能,標(biāo)注修改時(shí)間等。當(dāng)前35頁,總共84頁。當(dāng)前36頁,總共84頁。3.5.2C51語言程序結(jié)構(gòu)C51程序按結(jié)構(gòu)可分為三類,即順序、選擇和循環(huán)結(jié)構(gòu)。

1.順序結(jié)構(gòu)順序結(jié)構(gòu)的程序是從前往后依次執(zhí)行語句。從整體上看,所有程序都是順序結(jié)構(gòu),只不過中間某些部分是由選擇結(jié)構(gòu)或循環(huán)結(jié)構(gòu)構(gòu)成,選擇結(jié)構(gòu)或循環(huán)結(jié)構(gòu)部分執(zhí)行完成后,程序重新按順序結(jié)構(gòu)向下執(zhí)行。當(dāng)前37頁,總共84頁。2.選擇結(jié)構(gòu)

選擇結(jié)構(gòu)的基本特點(diǎn)是程序由多路分支構(gòu)成,在程序的一次執(zhí)行中根據(jù)指定的條件,選擇執(zhí)行其中的一條分支,而其他分支上的語句被直接跳過。通過選擇結(jié)構(gòu),可以使計(jì)算機(jī)具有決策能力,從而使計(jì)算機(jī)能夠按照我們的意志在某個(gè)特定條件下完成相應(yīng)的操作,即能夠“隨機(jī)應(yīng)變”。選擇結(jié)構(gòu)包括:if語句、switch語句。當(dāng)前38頁,總共84頁。圖3-1if語句流程圖當(dāng)前39頁,總共84頁。

(1)if語句

if語句用來判定所給定的條件是否滿足,并根據(jù)判定結(jié)果決定執(zhí)行給出的兩種操作之一。C51語言提供3種形式的if語句:

形式一:

if(表達(dá)式)

{語句;}

括號中的表達(dá)式成立時(shí),執(zhí)行大括號內(nèi)的語句,否則跳過大括號中的語句而直接執(zhí)行下面的語句。例如:

if(x>y)

{max=x;min=y;}當(dāng)前40頁,總共84頁。形式二:流程圖如圖3-2所示。

if(表達(dá)式)

{語句1;}

else{語句2;}例如:

if(x>y){max=x;}else{max=y;}圖3-2if-else語句流程圖當(dāng)前41頁,總共84頁。形式三:流程圖如圖3-3所示。if(表達(dá)式1){語句1;}elseif(表達(dá)式2){語句2;}……elseif(表達(dá)式m){語句m;}else{語句n;}圖3-3if-elseif-else語句流程圖當(dāng)前42頁,總共84頁。例如:

if(x>1000){key=1;}elseif(x>500){key=2;}elseif(x>300){key=3;}elseif(x>100){key=4;}else{key=5;}當(dāng)前43頁,總共84頁。(2)switch語句switch語句是多分支選擇語句,一般形式如下:switch(表達(dá)式){ case常量表達(dá)式1:

{語句1;}break;

case常量表達(dá)式2:

{語句2;}break;

case常量表達(dá)式3:

{語句3;}break;

……case常量表達(dá)式n:

{語句n;}break;

default:

{語句n+1;}}當(dāng)前44頁,總共84頁。3.循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是根據(jù)某個(gè)或某些條件是否成立,來決定是否重復(fù)運(yùn)行一段相同的程序。(1)采用if和goto構(gòu)成的循環(huán)采用if和goto語句可以構(gòu)成“當(dāng)型”循環(huán),格式如下:

Loop:if(表達(dá)式)

{語句;

gotoloop;

}

采用if和goto語句也可以構(gòu)成“直到型”循環(huán)程序,格式如下:

Loop:{語句;

if(表達(dá)式)gotoloop;

}

采用goto語句可構(gòu)成無條件轉(zhuǎn)向語句,格式如下:

goto語句標(biāo)號;當(dāng)前45頁,總共84頁。(2)for循環(huán)語句其一般格式為:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3){循環(huán)體語句(內(nèi)部可為空)}for循環(huán)語句的執(zhí)行過程為:第一步:求解表達(dá)式1。第二步:求解表達(dá)式2。若其值為真,則執(zhí)行循環(huán)體;若其值為假,則循環(huán)語句結(jié)束,執(zhí)行后續(xù)語句。第三步:求解表達(dá)式3。并轉(zhuǎn)到第二步繼續(xù)執(zhí)行,直至條件為假時(shí)結(jié)束循環(huán)。當(dāng)前46頁,總共84頁。【例3-1】用for語句求1+2+…+100的值。

程序如下:

#include<stdio.h>

voidmain()

{inti,s;

s=0;

for(i=0;i<=100;i++)

{s=s+i;}printf(“1+2+…+100=%d\n”,s);

}注意:3個(gè)表達(dá)式都是可選項(xiàng),可以任意省略,但“;”不能省。省略表達(dá)式1是不對循環(huán)變量賦初值;省略表達(dá)式2是不判斷循環(huán)條件的真假;省略表達(dá)式3是不對循環(huán)變量進(jìn)行操作。例如:for(;;)//表示無限循環(huán)。當(dāng)前47頁,總共84頁。(3)while循環(huán)語句其一般格式為;

while(表達(dá)式){循環(huán)體語句(內(nèi)部可為空)}

流程圖while語句先求解循環(huán)條件表達(dá)式的值。如果為真,則執(zhí)行循環(huán)體;否則跳出循環(huán),執(zhí)行后續(xù)操作。注意:一般來說在循環(huán)體中應(yīng)該有使循環(huán)最終能結(jié)束的語句。如果表達(dá)式初始值為假,則循環(huán)體將一次都不執(zhí)行。當(dāng)前48頁,總共84頁?!纠?-2】用while語句求1+2+…+100的值。

程序如下:

#include<stdio.h>voidmain()

{inti,s;

i=100;s=0;

while(i>0)

{s=s+i;i=i-1;}printf(“1+2+…+100=%d\n”,s);

}當(dāng)前49頁,總共84頁。(4)do-while循環(huán)語句其語句格式為:

do{循環(huán)體語句;}while(表達(dá)式);do-while循環(huán)是先執(zhí)行循環(huán)體一次,再判斷表達(dá)式的值,若為真,則繼續(xù)執(zhí)行循環(huán),否則退出循環(huán)。

do-while語句至少執(zhí)行循環(huán)體一次。當(dāng)前50頁,總共84頁?!纠?-3】用do-while語句求1+2+…+100的值。程序如下:#include<stdio.h>voidmain()

{inti,s;

i=100;s=0;

do{s=s+i;i=i-1;}while(i>0);

printf(“1+2+…+100=%d\n”,s);

}注意:do-while語句先執(zhí)行,后判斷。如果循環(huán)體內(nèi)只有一條語句,可以不用{},循環(huán)體{}后無分號。while(表達(dá)式)后的分號不能省。當(dāng)前51頁,總共84頁。綜上所述,無限循環(huán)可以由下面三種方法實(shí)現(xiàn):①for(;;)

{……//代碼段;

}②while(1)

{……//代碼段;

}③do{……//代碼段;

}while(1);當(dāng)前52頁,總共84頁。(5)break語句、continue語句、goto語句在循環(huán)語句執(zhí)行過程中,如果需要在滿足循環(huán)判定條件的情況下跳出代碼段,可以使用break或continue語句;如果要從任意地方跳轉(zhuǎn)到代碼的某個(gè)地方,可以使用goto語句。break語句:用于從循環(huán)代碼中退出,然后執(zhí)行循環(huán)語句之后的語句,不再進(jìn)入循環(huán)。

格式:break;continue語句:用于退出當(dāng)前循環(huán),不再執(zhí)行本輪循環(huán),程序代碼從下一輪循環(huán)開始執(zhí)行,直到判斷條件不滿足為止。其與break語句的區(qū)別是該語句不是退出整個(gè)循環(huán)。

格式:continue;goto語句:是一個(gè)無條件轉(zhuǎn)移語句。當(dāng)執(zhí)行g(shù)oto語句時(shí),程序指針跳轉(zhuǎn)到goto給出的下一條代碼。

格式:goto標(biāo)號;當(dāng)前53頁,總共84頁。3.6C51的數(shù)組與指針C51語言的構(gòu)造數(shù)據(jù)類型主要有數(shù)組、指針和結(jié)構(gòu)等。在單片機(jī)系統(tǒng)中,數(shù)組的應(yīng)用比較廣泛,指針則次之,結(jié)構(gòu)用得相對較少。這里我們只討論數(shù)組和指針。

3.6.1數(shù)組簡介數(shù)組是同類數(shù)據(jù)的一個(gè)有序結(jié)合,用數(shù)組名來標(biāo)識。整型變量的有序結(jié)合稱為整型數(shù)組,字符型變量的有序結(jié)合稱為字符型數(shù)組。數(shù)組中的數(shù)據(jù),稱為數(shù)組元素。數(shù)組中各元素的順序用下標(biāo)表示,下標(biāo)為n的元素可以表示為:數(shù)組名[n]。改變[]中的下標(biāo)就可以訪問數(shù)組中的所有的元素。當(dāng)前54頁,總共84頁。

C51語言中常用的有一維、二維數(shù)組和字符數(shù)組。

(1)一維數(shù)組具有一個(gè)下標(biāo)的數(shù)組元素組成的數(shù)組稱為一維數(shù)組。一維數(shù)組的形式如下:

類型說明符數(shù)組名[元素個(gè)數(shù)]

其中,數(shù)組名是一個(gè)標(biāo)識符,元素個(gè)數(shù)是一個(gè)常量表達(dá)式,不能是含有變量的表達(dá)式。例如:

charch[10];該例定義了一個(gè)一維字符型數(shù)組ch[],有10個(gè)元素,每個(gè)元素由不同的下標(biāo)表示,分別為ch[0],ch[1],ch[2],…,ch[9]。當(dāng)前55頁,總共84頁。在定義數(shù)組的時(shí)候可對全部元素賦初值,例如:

intidataa[6]={0,1,2,3,4,5};也可只對數(shù)組的部分元素初始化,例如:

intidataa[10]={0,1,2,3,4,5}在定義數(shù)組時(shí),若不對數(shù)組全部元素賦初值,則元素被缺省地賦值為0。當(dāng)前56頁,總共84頁。

(2)二維或多維數(shù)組具有兩個(gè)或兩個(gè)以上下標(biāo)的數(shù)組稱為二維數(shù)組或多維數(shù)組。定義二維數(shù)組的一般形式為:數(shù)據(jù)類型說明符數(shù)組名[行數(shù)][列數(shù)]

其中,數(shù)組名是一個(gè)標(biāo)識符,行數(shù)和列數(shù)都是常量表達(dá)式。二維數(shù)組可以在定義時(shí)進(jìn)行整體初始化,也可以在定義以后單個(gè)進(jìn)行賦值。例如:

floatdemo2[3][4];//demo2數(shù)組有3行4列共12個(gè)實(shí)型元素

inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

//全部初始化當(dāng)前57頁,總共84頁。

(3)字符數(shù)組

若一個(gè)數(shù)組的元素是字符型的,則該數(shù)組就是一個(gè)字符數(shù)組。例如:

chara[10]={‘B’,‘E’,‘I’,‘’,‘J’,‘I’,‘N’,‘G’,‘/0’};

上面定義了一個(gè)字符型數(shù)組a[],有10個(gè)數(shù)組元素,并且將9個(gè)字符(其中包括一個(gè)字符串結(jié)束標(biāo)志‘\0’)分別賦給了a[0]~a[8],剩余的a[9]被系統(tǒng)自動(dòng)賦予空格字符。

當(dāng)前58頁,總共84頁。

C51還允許用字符串直接給字符數(shù)組置初值,例如:

chara[10]={“BEIJING”};

用雙引號括起來的一串字符,稱為字符串常量,C51編譯器會(huì)自動(dòng)地在字符串末尾加上結(jié)束符‘\0’。用單引號括起來的字符為字符的ASCII碼值,而不是字符串。例如‘a(chǎn)’表示a的ASCII碼值為61H,而“a”表示一個(gè)字符串,由兩個(gè)字符a和\0組成。一個(gè)字符串可以用一維數(shù)組來裝入,但數(shù)組的元素?cái)?shù)目一定要比字符數(shù)多一個(gè),以便C51編譯器自動(dòng)在其后面加入結(jié)束符‘\0’。當(dāng)前59頁,總共84頁。3.6.2數(shù)組的應(yīng)用

在C51編程中,數(shù)組的一個(gè)非常有用的功能是查表。例如數(shù)學(xué)運(yùn)算,編程者更愿意采用查表計(jì)算而不是公式計(jì)算。又如,對于傳感器的非線性轉(zhuǎn)換需要進(jìn)行補(bǔ)償,使用查表法就要有效得多。再如,LED顯示程序中,根據(jù)要顯示的數(shù)值,通過查表找到對應(yīng)的顯示段碼送到LED顯示器顯示。當(dāng)前60頁,總共84頁。

【例3-4】使用查表法,計(jì)算數(shù)0~9的平方。

#defineucharunsignedchar

ucharcodesquare[10]={0,1,4,9,16,25,36,49,64,81};

//0~9的平方表,在程序存儲(chǔ)器中

ucharfuction(ucharnumber)

{returnsquare[number];//返回要求得其平方的數(shù)

};

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

{ucharresult;

result=fuction(7);

//函數(shù)fuction()的返回值為7的平方49,存入result變量中

}當(dāng)前61頁,總共84頁。3.6.3數(shù)組與存儲(chǔ)空間

當(dāng)程序中設(shè)定了一個(gè)數(shù)組時(shí),C51編譯器就會(huì)在系統(tǒng)的存儲(chǔ)空間中開辟一個(gè)區(qū)域,用于存放數(shù)組的內(nèi)容。數(shù)組就包含在這個(gè)由連續(xù)存儲(chǔ)單元組成的模塊的存儲(chǔ)體內(nèi)。對于字符(char)數(shù)組而言,它占據(jù)了內(nèi)存中一連串的字節(jié)位置。對于整型(int)數(shù)組而言,它將在存儲(chǔ)區(qū)中占據(jù)一連串連續(xù)的字節(jié)對的位置。對于長整型(long)數(shù)組或浮點(diǎn)型(float)數(shù)組而言,一個(gè)成員將占有4字節(jié)的存儲(chǔ)空間。當(dāng)前62頁,總共84頁。當(dāng)一維數(shù)組被創(chuàng)建時(shí),C51編譯器就會(huì)根據(jù)數(shù)組的類型在內(nèi)存中開辟一塊大小等于數(shù)組長度乘以數(shù)據(jù)類型長度(即類型占有的字節(jié)數(shù))的區(qū)域。對于二維數(shù)組a[m][n]而言,其存儲(chǔ)順序是按行存儲(chǔ),先存第0行元素的第0列、第1列、第2列,直至第n-1列;然后存第1行元素的第0列、第1列、第2列,直至第n-1列;……;按此順序存儲(chǔ),直到第m-1行的第n-1列。當(dāng)數(shù)組特別是多維數(shù)組中大多數(shù)元素沒有被有效利用時(shí),就會(huì)浪費(fèi)大量的存儲(chǔ)空間。對于51單片機(jī),其存儲(chǔ)資源極為有限,因此在進(jìn)行C51語言編程時(shí),要仔細(xì)地根據(jù)需要來選擇數(shù)組的大小。當(dāng)前63頁,總共84頁。3.7C51函數(shù)

函數(shù)是指能夠執(zhí)行特定功能和任務(wù)的程序代碼段。一個(gè)完整的C51程序是由一個(gè)主函數(shù)和若干個(gè)其他函數(shù)組成。主函數(shù)是main()函數(shù),主函數(shù)是唯一的,整個(gè)程序從這個(gè)主函數(shù)開始執(zhí)行。使用函數(shù)時(shí)應(yīng)注意:①函數(shù)數(shù)目不受限制;②main()函數(shù)是主函數(shù),可以調(diào)用其他函數(shù),而不允許被其他函數(shù)調(diào)用;③除主函數(shù)外,其他函數(shù)之間允許互相調(diào)用。當(dāng)前64頁,總共84頁。

3.7.1函數(shù)的分類1.按有無返回值分無返回值函數(shù):執(zhí)行完成后不向主調(diào)函數(shù)返回函數(shù)值。類型說明符為void。有返回值函數(shù):執(zhí)行完成后向主調(diào)函數(shù)返回一個(gè)執(zhí)行的結(jié)果(返回值)。2.按有無參數(shù)傳遞分無參函數(shù):主調(diào)函數(shù)和被調(diào)函數(shù)之間不進(jìn)行參數(shù)的傳遞。有參函數(shù):主調(diào)函數(shù)和被調(diào)函數(shù)之間存在參數(shù)的傳遞。被調(diào)函數(shù)所帶的參數(shù)稱為形式參數(shù),主調(diào)函數(shù)所帶的參數(shù)稱為實(shí)際參數(shù)。3.按函數(shù)定義分函數(shù)按照定義可分為主函數(shù)、自定義函數(shù)、庫函數(shù)。當(dāng)前65頁,總共84頁。3.7.2函數(shù)的定義

1.無參函數(shù)的定義此種函數(shù)在被調(diào)用時(shí),既無參數(shù)輸入,也不返回結(jié)果給調(diào)用函數(shù),只是為完成某種操作而編寫的函數(shù)。無參函數(shù)的定義形式為:

函數(shù)類型函數(shù)名()

{

函數(shù)體;

}當(dāng)前66頁,總共84頁。2.有參函數(shù)的定義調(diào)用此種函數(shù)時(shí),必須提供實(shí)際的輸入函數(shù)。有參函數(shù)的定義形式為:

函數(shù)類型函數(shù)名(形式參數(shù)列表)形式參數(shù)說明;

{

函數(shù)體;

}

其中,“函數(shù)類型”說明了自定義函數(shù)返回值的類型。當(dāng)前67頁,總共84頁。

【例3-7】設(shè)計(jì)可調(diào)節(jié)時(shí)間的延時(shí)程序。

voiddelay(unsignedintn)

{unsignedchari,j;

while(n--)

{ for(i=128;i>0;i--)

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

} } 當(dāng)前68頁,總共84頁。

3.空函數(shù)此種函數(shù)體內(nèi)是空白的。調(diào)用空函數(shù)時(shí),什么工作也不做,不起任何作用。定義空函數(shù)的目的,并不是為了執(zhí)行某種操作,而是為了以后程序功能的擴(kuò)充??蘸瘮?shù)的定義形式為:返回值類型標(biāo)識符函數(shù)名()

{}

例如:

floatmin()

{} //空函數(shù),占好位置當(dāng)前69頁,總共84頁。1.函數(shù)的參數(shù)函數(shù)的參數(shù)包括形式參數(shù)和實(shí)際參數(shù)。①形式參數(shù):函數(shù)的函數(shù)名后面括號中的變量名稱為形式參數(shù),簡稱形參。②實(shí)際參數(shù):在函數(shù)調(diào)用時(shí),主調(diào)函數(shù)名后面括號中的表達(dá)式稱為實(shí)際參數(shù),簡稱實(shí)參。在C語言的函數(shù)調(diào)用中,實(shí)際參數(shù)與形式參數(shù)之間的數(shù)據(jù)傳遞是單向進(jìn)行的,只能由實(shí)際參數(shù)傳遞給形式參數(shù),而不能由形式參數(shù)傳遞給實(shí)際參數(shù)。實(shí)際參數(shù)與形式參數(shù)的類型必須一致,否則會(huì)發(fā)生類型不匹配的錯(cuò)誤。當(dāng)前70頁,總共84頁。2.函數(shù)的返回值函數(shù)返回值是通過return語句獲得的。一個(gè)函數(shù)可有一個(gè)以上的return語句,但是多于一個(gè)的return語句必須在選擇結(jié)構(gòu)(if或do/case)中使用,因?yàn)楸徽{(diào)用函數(shù)一定只能返回一個(gè)變量。函數(shù)返回值的類型一般在定義函數(shù)時(shí),由返回值的標(biāo)識符來指定。例如在函數(shù)名之前的int,指定函數(shù)的返回值的類型為整型數(shù)(int)。若沒有指定函數(shù)的返回值類型,默認(rèn)返回值為整型類型。當(dāng)函數(shù)沒有返回值時(shí),則使用標(biāo)識符void進(jìn)行說明。當(dāng)前71頁,總共84頁。

3.7.4函數(shù)的調(diào)用

在一個(gè)函數(shù)中需要用到某個(gè)函數(shù)的功能時(shí),就調(diào)用該函數(shù)。調(diào)用者稱為主調(diào)函數(shù),被調(diào)用者稱為被調(diào)函數(shù)。1.函數(shù)調(diào)用的一般形式 函數(shù)名 {實(shí)際參數(shù)列表};

若被調(diào)函數(shù)是有參函數(shù),則主調(diào)函數(shù)必須把被調(diào)函數(shù)所需的參數(shù)傳遞給被調(diào)函數(shù),要求實(shí)參與形參數(shù)據(jù)在數(shù)量、類型和順序上都一致。實(shí)參可以是常量、變量和表達(dá)式。實(shí)參對形參的數(shù)據(jù)傳遞是單向的,即只能將實(shí)參傳遞給形參。當(dāng)前72頁,總共84頁。2.函數(shù)調(diào)用的方式(1)函數(shù)調(diào)用語句函數(shù)調(diào)用語句把被調(diào)用函數(shù)的函數(shù)名作為主調(diào)函數(shù)的一個(gè)語句。例如:

print_message();(2)函數(shù)結(jié)果作為表達(dá)式的一個(gè)運(yùn)算對象函數(shù)結(jié)果作為表達(dá)式的一個(gè)運(yùn)算對象,例如:

result=2*gcd(a,b);

被調(diào)用函數(shù)作為一個(gè)運(yùn)算對象出現(xiàn)在表達(dá)式中。這要求被調(diào)用函數(shù)帶有return語句,以便返回一個(gè)明確的數(shù)值參加表達(dá)式的運(yùn)算。(3)函數(shù)參數(shù)函數(shù)參數(shù)即被調(diào)函數(shù)作為另一個(gè)函數(shù)的實(shí)際參數(shù)。例如:

m=max(a,gcd(u,v));

其中,gcd(u,v)是一次函數(shù)調(diào)用,它的值作為另一個(gè)函數(shù)的max()的實(shí)際參數(shù)之一。當(dāng)前73頁,總共84頁。

在一個(gè)函數(shù)調(diào)用另一個(gè)函數(shù)時(shí),須具備以下條件:①被調(diào)用函數(shù)必須是已經(jīng)存在的函數(shù)(庫函數(shù)或用戶自定義的函數(shù))。②如果程序中使用了庫函數(shù),或使用了不在同一文件中的其他自定義函數(shù),則應(yīng)該在程序的開頭處使用#include包含語句,將所有的函數(shù)信息包含到程序中來。③如果程序中使用了自定義函數(shù),且該函數(shù)與調(diào)用它的函數(shù)同在一個(gè)文件中,則應(yīng)根據(jù)主調(diào)函數(shù)與被調(diào)函數(shù)在文件中的位置,決定是否對被調(diào)函數(shù)做出說明。如果被調(diào)函數(shù)在主調(diào)函數(shù)之后,一般應(yīng)在主調(diào)函數(shù)中,在被調(diào)用函數(shù)調(diào)之前,對被調(diào)函數(shù)的返回值類型做出說明。如果被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)之前,不用對被調(diào)函數(shù)進(jìn)行說明。如果在所有函數(shù)定義之前,在文件的開頭處,在函數(shù)的外部已經(jīng)說明了函數(shù)的類型,則在主調(diào)函數(shù)中不必對所調(diào)用的函數(shù)再做返回值類型說明。當(dāng)前74頁,總共84頁。3.7.5中斷服務(wù)函數(shù)

使用interrupt可以將一個(gè)函數(shù)定義成中斷服務(wù)函數(shù)。中斷服務(wù)函數(shù)的一般形式為:函數(shù)類型函數(shù)名(形式參數(shù)表)interruptnusingn關(guān)鍵字interrupt后的n是中斷號。對于51單片機(jī),n取值為0~4。關(guān)鍵字using后的n是所選擇的寄存器組。using是一個(gè)選項(xiàng),可省略。如果沒有使用using關(guān)鍵字指明寄存器組,中斷函數(shù)中的所有工作寄存器的內(nèi)容將被保存到堆棧中。當(dāng)前75頁,總共84頁。

3.7.6變量及存儲(chǔ)方式

1.變量①局部變量:是某一個(gè)函數(shù)中存在的變量,它只在該函數(shù)內(nèi)部有效。②全局變量:在整個(gè)源文件中都存在的變量。其有效區(qū)間是從定義點(diǎn)開始到源文件結(jié)束,其中的所有函數(shù)都可直接訪問該變

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論