版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第3章 單片機C51語言設(shè)計基礎(chǔ),3.1 C51的數(shù)據(jù) 3.2 C51對單片機主要資源的控制 3.3 C51的基本運算與流程控制 3.4 C51的數(shù)組與指針 3.5 C51函數(shù) 3.6 C51的預(yù)處理命令,3.1 C51的數(shù)據(jù),3.1.1 數(shù)據(jù)類型 3.1.2 常量與變量 3.1.3 數(shù)據(jù)存儲類型 3.1.4 局部變量與全局變量,3.1.1 數(shù)據(jù)類型,3.1.2 常量與變量,1常量 C51語言中的常量是不接受程序修改的固定值,常量可以是任意數(shù)據(jù)類型。 C51中的常量有整型常量、實型常量、字符型常量、字符串常量符號常量等。,(2)實型常量,在整型常量后加一個字母“L”或“l(fā)”,表示該數(shù)位長整型。
2、例如23L、0Xfd4l等。 如果需要的是負值,則必須將負號“-”放置于常量表達式的最前面,例如-0 x56、-9等。,實型常量又稱浮點常量,是一個十進制表示的符號實數(shù)。實型常量的值包括整數(shù)部分、尾數(shù)部分和指數(shù)部分。實型常量的形式如下: digits.digitsE+/-digits 一些實型常量的示例如下: 15.75、1.575E1、1575E-3、 -0.0025、-2.5e-3、25E-4。,(3)字符型常量,字符型常量是指用一對單引號括起來的一個字符。如a、9、!等。字符常量中的單引號只起定界作用并不表示字符本身。 在C51語言中,字符是按其對應(yīng)的ASCII碼值來存儲的,1個字符占1
3、個字節(jié),字符串常量是指用一對雙引號括起來的一串字符,雙引號只起定界作用,如China、123456等。,(5)符號常量,C51語言中允許將程序中的常量定義為一個標(biāo)識符,稱為符號常量。 符號常量一般使用大寫英文字母表示,以區(qū)別于一般用小寫字母表示的變量。 符號常量在使用前必須先定義,定義的形式是: #define 標(biāo)識符 常量 #define PI 3.1415926,2變量,變量的定義: 數(shù)據(jù)類型 變量名; int i,j,k; unsigned char si; unsigned int ui; double balance,profit,loss; C51中常用的:bit、char、int
4、,(1)整型變量(INT) 16位數(shù)據(jù),有符號:signed int -32 76832 767 無符號:unsigned int 065 535 0 x1234存儲形式,(3)實型變量,(2)長整型變量(long int) 長整型變量長度是32位,占用4個字節(jié)(byte),其他方面和整型變量(int)相似。,分為單精度(float)型和雙精度(double)型。 其定義形式為: float x,y; /指定x,y為單精度實數(shù) double z; /指定z為雙精度實數(shù) 在一般系統(tǒng)中,一個float型數(shù)據(jù)在內(nèi)存中占4個字節(jié)(32位),一個double型數(shù)據(jù)占8個字節(jié)(64位)。單精度實數(shù)提供7位
5、有效數(shù)字,雙精度實數(shù)提供1516位有效數(shù)字。,(4)字符變量CHAR,字符變量用來存放字符常量。注意只能存放1個字符。 字符變量的定義形式如下: char 變量名; 例如: char c1,c2; 它表示c1和c2為字符變量,各存放1個字符。可以用下面的語句對c1、c2賦值: c1=a;c2=b; 字符變量的長度是1字節(jié)(byte)即8位。這很適合于8051單片機,因為8051單片機每次可以處理8位數(shù)據(jù)。,變量的類型是位,位變量的值可以是1(true)或0(false)。 與8051硬件特性操作有關(guān)的位變量必須定位在8051單片機片內(nèi)存儲區(qū)(RAM)的可位尋址空間中。,3有符號/無符號問題說明
6、,(1)盡量使用無符號變量 (2)在編程時,為了書寫方便,經(jīng)常使用簡化的縮寫形式來定義變量的數(shù)據(jù)類型: #define uchar unsigned char #define uint unsigned int,3.1.3 數(shù)據(jù)存儲類型,數(shù)據(jù)時存放在51單片機的存儲器中的,因此要規(guī)定數(shù)據(jù)的存儲類型。P53 表3-4 常用:data、xdata、code 另外:bdata,(1)DATA區(qū),data區(qū)的尋址是最快的,所以應(yīng)該把經(jīng)常使用的變量放在data區(qū),但是data區(qū)的空間是有限的,data區(qū)除了包含程序變量外,還包含了堆棧和寄存器組。 data區(qū)聲明中的存儲類型標(biāo)式符為data,通常指片內(nèi)R
7、AM的低128字節(jié)的內(nèi)部數(shù)據(jù)存儲的變量,可直接尋址。 聲明舉例如下: unsigned char data system_status=0; unsigned int data unit_id2; char data inp_string16;,bdata實際是data中的位尋址區(qū),在這個區(qū)中聲明變量就可以進行位尋址。位變量的聲明對狀態(tài)寄存器來說是十分有用的,因為它可能僅僅需要某一位,而不是整個字節(jié)。 bdata區(qū)聲明中的存儲類型標(biāo)識符為bdata,指內(nèi)部可位尋址的16字節(jié)存儲區(qū)(20H到2FH),數(shù)據(jù)類型是可位尋址變量的數(shù)據(jù)類型。,(2) BDATA區(qū),以下是在BDATA區(qū)中聲明的位變量和使
8、用位變量的例子:,unsigned char bdata status_byte; unsigned int bdata status_word; unsigned long bdata status_dword; sbit stat_flag=status_byte4; if(status_word15) stat_flag=1;,(3)IDATA區(qū),idata區(qū)也可以存放使用比較頻繁的變量,使用寄存器作為指針進行尋址。idata區(qū)聲明中的存儲類型標(biāo)識符為idata,指內(nèi)部的256字節(jié)的存儲區(qū),但是只能間接尋址,速度比直接尋址慢。 聲明舉例如下: unsigned char idata sy
9、stem_status=0; unsigned int idata unit_id2; char idata inp_string16; float idata out_value;,pdata區(qū)和xdata區(qū)屬于外部數(shù)據(jù)存儲區(qū),外部數(shù)據(jù)區(qū)是可讀可寫的存儲區(qū),最多可以有64KB。 在這兩個區(qū),變量的聲明與在其他區(qū)的語法是一樣的,但pdata區(qū)只有256字節(jié)而xdata區(qū)可達65 536字節(jié)。,聲明舉例如下:,unsigned char xdata system_status=0; unsigned int pdata unit_id2 ; char xdata inp_string16 ; f
10、loat pdata out_value; 外部地址段中除了包含存儲器地址外,還包含I/O器件的地址。對外部器件尋址可以通過指針或C51提供的宏,使用宏對外部器件I/O口進行尋址更具可讀性。,(5)程序存儲區(qū)CODE,程序存儲區(qū)的數(shù)據(jù)是不可改變的,跳轉(zhuǎn)向量和狀態(tài)表對code段訪問和對xdata區(qū)訪問的時間是一樣的。編譯的時候要對程序存儲區(qū)中的對象進行初始化,否則就會產(chǎn)生錯誤。程序存儲區(qū)code聲明的標(biāo)識符為code,在C51語言編譯器中可以用code存儲區(qū)類型標(biāo)識符來訪問程序存儲區(qū)。下面是程序存儲區(qū)聲明的例子: unsigned char code a = 0 x00,0 x01,0 x02,
11、0 x03,0 x04,0 x05,0 x06,0 x07,0 x08,0 x09,0 x10,0 x11,0 x12,0 x13,0 x14,0 x15;,變量存儲類型定義舉例:,char data var1; bit bdata flags; float idata x,y,z; unsigned int pdata dimension; unsigned char xdata vector1044;,3.1.4 局部變量與全局變量,從變量的作用范圍來區(qū)分,變量可以被分為全局變量和局部變量; 某些變量在程序運行過程中是始終存在的-全局變量。 某些變量只是在進入某個函數(shù)時才開始存在-局部變量
12、。,1局部變量,局部變量是在某個函數(shù)中存在的變量,也可以稱為內(nèi)部變量,它只在該函數(shù)內(nèi)部有效。 局部變量可以分為動態(tài)局部變量和靜態(tài)局部變量,使用關(guān)鍵詞auto定義動態(tài)局部變量(auto可以省略),使用關(guān)鍵詞static定義靜態(tài)局部變量,例如: auto int a; static unsigned char j;,動態(tài)局部變量在程序執(zhí)行完畢后其存儲空間被釋放,而靜態(tài)局部變量在程序執(zhí)行完成后其存儲空間并不釋放,而且其值保持不變。 如果該函數(shù)再次被調(diào)用,則該函數(shù)初始化后其初始值為上次的數(shù)值。 動態(tài)局部變量和靜態(tài)局部變量的區(qū)別如下:,動態(tài)局部變量在函數(shù)被調(diào)用時分配存儲空間和初始化,每次函數(shù)調(diào)用時都需要
13、初始化;靜態(tài)局部變量在編譯程序時分配存儲空間和初始化,僅初始化一次。 動態(tài)局部變量存放在動態(tài)存儲區(qū),在每次退出所屬函數(shù)時釋放;靜態(tài)局部變量存放在靜態(tài)存儲區(qū),每次調(diào)用后函數(shù)不釋放,保持函數(shù)執(zhí)行完畢之后的數(shù)值到下一次調(diào)用。 如果在建立時動態(tài)局部變量不初始為一個不確定的數(shù),靜態(tài)局部變量不初始化,則它們的值為0或者是空字符。,2全局變量,全局變量是在整個源文件中都存在的變量,又稱為外部變量。全局變量的有效區(qū)間是從定義點開始到源文件結(jié)束,其中的所有函數(shù)都可以直接訪問該變量,如果定義點之前的函數(shù)需要訪問該變量,則需要使用extern關(guān)鍵詞對該變量進行聲明,如果全局變量聲明文件之外的源文件需要訪問該變量,也
14、需要使用extern關(guān)鍵詞進行聲明。,全局變量有以下特點:,全局變量是整個文件都可以訪問的變量,可以用于在函數(shù)之間共享大量的數(shù)據(jù),存在周期長,在程序編譯時就存在,如果兩個函數(shù)需要在不互相調(diào)用時共享數(shù)據(jù),則可以使用全局變量進行參數(shù)傳遞; C51語言程序的函數(shù)只支持一個函數(shù)返回值,如果一個函數(shù)需要返回多個值,除了使用指針外,還要使用全局變量; 使用全局變量進行參數(shù)傳遞可以減少從實際參數(shù)向形式參數(shù)傳遞時所必需的堆棧操作; 在一個文件中,如果某個函數(shù)的局部變量和全局變量同名,則在這個局部變量的作用范圍內(nèi)局部變量不起作用,全局變量起作用; 全局變量一直存在,占用了大量的內(nèi)存單元,并且加大了程序的耦合性,
15、不利于程序的移植或復(fù)用。,靜態(tài)局部變量的作用范圍僅僅是在定義的函數(shù)內(nèi),不能被其他的函數(shù)訪問,全局變量的作用范圍是整個程序,靜態(tài)全局變量的作用范圍是該變量定義的文件; 靜態(tài)局部變量是在函數(shù)內(nèi)部定義,全局變量是在所有函數(shù)外定義; 靜態(tài)局部變量僅僅在第1次調(diào)用時被初始化,再次調(diào)用時使用上次調(diào)用結(jié)束時的數(shù)值,全局變量在程序運行時建立,值為最近一條訪問該全局變量的語句執(zhí)行的結(jié)果。 另外,main函數(shù)雖然是.c文件的主文件,但也是一個函數(shù),在其內(nèi)部定義的變量也屬于局部變量。全局變量一般在.c文件的開始部分定義或在.h文件中定義,由.c文件引用。C51語言程序多使用全局變量傳遞參數(shù),因為這樣可以降低程序處理
16、的難度,加快程序執(zhí)行的速度,提高程序的時效性。,3.2 C51對單片機資源的控制,3.2.1 特殊功能寄存器的C51語言定義 3.2.2 絕對地址的訪問 3.2.3 位變量的C51語言定義,3.2.1 特殊功能寄存器的C51定義,21個特殊功能寄存器。兩種方式: 1使用關(guān)鍵字sfr定義 sfr 特功器名字=特功器地址; sfr SCON=0 x98; /*串口控制寄存器地址98H*/ sfr TMOD=0X89; /*定時器/計數(shù)器方式控制寄存器地址9H*/ 2通過頭文件訪問SFR #include /使用的單片機為Intel公司的MCS-51 void main(void) TL0=0 xb
17、0; TH0=0 x3c; TR0=1; /啟動定時器0 .,3SFR中位定義3種方式,(1)第1種方法 sbit 位名=特殊功能寄存器名位置; (2)第2種方法 sbit 位名=字節(jié)地址位置; (3)第3種方法 sbit 位名=位地址;,例: unsigned char bdata flag; sbit flag0=flag0; sfr P1=0 x90; sbit P1_0=P10; sbit P1_1=P11; sbit P1_6=P16; sbit P1_7=P17;,P60 例3-3 sbit型變量的定義 P60 例3-4 片內(nèi)I/O口及其位的定義,3.2.2 絕對地址的訪問,包括:
18、片內(nèi)RAM、片外RAM及I/O口??梢杂袃煞N方式:,用#include可使用其中聲明的宏來訪問絕對地址, DBYTE以字節(jié)形式對data區(qū)尋址; DWORD以字形式對data區(qū)尋址; XBYTE以字節(jié)形式對xdata區(qū)尋址; XWORD以字形式對xdata區(qū)尋址;,另外: CBYTE以字節(jié)形式對code區(qū)尋址; CWORD以字形式對code區(qū)尋址; PBYTE以字節(jié)形式對pdata區(qū)尋址; PWORD以字形式對pdata區(qū)尋址。,例3-5( P61 ),#include #define PA XBYTE0 xffec /將PA定義為外部I/O口,地址為0 xffec #define NRAM
19、DBYTE0 x40 /*將NRAM定義為片內(nèi)RAM,地址為40H,長度為8位*/ void main( ) PA=0 x3A;NRAM=0 x01; ,#include #define PORTA XBYTE0 xFFC0 /*將PORT定義為外部I/O口,地址為0 xFFC0,長度為8位*/ #define NRAM DBYTE0 x40 /*將NRAM定義為片內(nèi)RAM,地址為40H,長度為8位*/,例3-6(P62) data unsigned char x1 _at_ 0 x40; /*在data區(qū)定義字節(jié)變量x1,它的地址為40H*/ xdata unsigned int x2 _a
20、t_ 0 x2000; /*在xdata區(qū)定義字變量x2,它的地址為2000H*/ void main(void) x1=0 xff;x2=0 x1234H; . while(1); ,可以使用關(guān)鍵字_at_對指定的存儲器空間的絕對地址進行訪問。 一般格式如下: 【存儲類型】 數(shù)據(jù)類型符 變量名 _at_ 地址常數(shù);,3.2.3 位變量的C51語言定義,1位變量的C51語言定義 采用關(guān)鍵字bit進行定義。例如: bit direction_bit; /* 將direction_bit定義為位變量 */ bit lock_pointer; /* 將lock_pointer定義為位變量 */ bi
21、t display_invers; /* 將display_invers定義為位變量 */,2可位尋址對象,可位尋址對象指可以字節(jié)或位尋址的對象。該對象應(yīng)位于8051片內(nèi)可位尋址RAM區(qū)中,C51語言編譯器允許數(shù)據(jù)類型為idata的對象放入8051片內(nèi)可位尋址RAM區(qū)。 位變量的存儲類型只能是bdata。 在程序設(shè)計時,對于可位尋址的對象,即可以字節(jié)尋址也可以位尋址的變量,但其存儲類型只能是bdata。 使用時應(yīng)先說明字節(jié)變量的數(shù)據(jù)類型和存儲類型,然后可使用bit定義可獨立尋址訪問的對象位。例如:,bdata int ibase; /* ibase定義為bdata整型變量 */ bdata c
22、har bary4; /* bary定義為bdata字符型數(shù)組 */ sbit mybit0=ibase0; /* mybit0定義為ibase的第0位*/ sbit mybit15=ibase15; /* mybit15定義位ibase的第15位*/ sbit Ary07=bary07; /* Ary07定義為bary0的第7位*/ sbit Ary37=bary37; /*Ary37定義為bary3的第7位*/ Ary37=0; /* bary3的第7位賦值為0 */ bary3=a; /* 字節(jié)尋址:bary3賦值為a */ sbit定義要求基址對象的存儲類型為bdata,只有這樣其特殊
23、位定義(sbit)是合法的。 位置(操作符)后的最大值依賴于指定的基類型,對于char/uchar而言是07,對于int/uint而言是015,對于long/ulong而言是031。,3.3 C51的基本運算與流程控制,3.3.1 基本運算 3.3.2 選擇(分支)控制語句 3.3.3 循環(huán)結(jié)構(gòu)流程控制語句 3.3.4 break語句、continue語句、goto語句,3.3.1 基本運算(運算符),運算符是表示特定的算術(shù)或邏輯運算的符號,也稱操作符。 把需要進行運算的各個量通過運算符連接起來,便構(gòu)成表達式。 算術(shù)運算符、關(guān)系運算符、 邏輯運算符、位運算符、 賦值運算符、特殊運算符,算術(shù)運算
24、的操作符: + (加法運算符)、- (減法運算符) * (乘法運算符)、/ (除法運算符) (模運算或取余運算符) +為自增運算符 - -為自減運算符。,注意:/:結(jié)果的整數(shù)部分;%:結(jié)果的余數(shù)部分;-:除進行減法外,還可以進行取負操作。+:自增。表示操作數(shù)加1。X+ 等同于X=X+1。+X 表示先加1,再取值;X+表示先取值,再加1。 例3-8:自增和自減運算符的程序 #include void main( ) int x, y, z1, z2; x=10; y=21; z1=(x+)+(x+); printf(“x=%d, z1=%dn”, x, z1); z2=(+y)+(+y); pr
25、intf(“y=%d, z2=%dn”, y, z2); ,二、關(guān)系運算成立或不成立,主要用于比較操作數(shù)的大小關(guān)系。 包括: (大于)、= (大于等于)、= = (等于)、!= (不等于) 看關(guān)系是否成立。結(jié)果:0或1,例3-9 關(guān)系運算符運算的程序示例,#include void main( ) int a, b, c, d; a=-2.30; b=71=32; c=7!=0; d=-12=0; printf(“a=%d, b=%d, c=%d,d=%dn”, a, b, c, d); ,三、邏輯運算結(jié)果是真或假,進行邏輯運算的操作符。包括: a=!0 ; b=15 ,四、位運算,將兩個操作
26、數(shù)按二進制數(shù)展開,然后對應(yīng)位進行邏輯運算。包括: int n=2; b=an; a=c|b; ,例3-12 位運算程序示例,#include void main( ) int a, b,c; a=23; b=217; c=a ,五、賦值運算,變量名=表達式; 例如: a=(b=4)+(c=6); 該表達式的值為10,變量a的值為10。,復(fù)合賦值運算符:,賦值符號前加上其他運算符構(gòu)成復(fù)合運算符。C51語言提供以下10種復(fù)合運算符: +=,-=,*=,=,=,=,=,=,= 例如: a+=b; /等價于a=(a+b) x*=a+b; /等價于x=(x*(a+b) a /等價于a=(a4),算術(shù)運算
27、符、邏輯運算符、關(guān)系運算符、賦值運算符的優(yōu)先級,3.3.2 選擇(分支)控制語句,通過選擇結(jié)構(gòu),可以使計算機具有決策能力,從而使計算機能夠按照我們的意志在某個特定條件下完成相應(yīng)的操作,能夠“隨機應(yīng)變”。包括:if語句、switch語句,一、IF語句,if語句用來判定所給定的條件是否滿足,根據(jù)判定結(jié)果決定執(zhí)行給出的兩種操作之一。 if語句的基本結(jié)構(gòu)如下: if(表達式) 語句; 括號中的表達式成立時,程序執(zhí)行大括號內(nèi)的語句,否則程序跳過大括號中的語句部分而直接執(zhí)行下面其他語句。 C51語言提供3種形式的if語句:,形式一: IF(表達式)語句;,if(xy) max=x; min=y; ,形式二
28、: IF(表達式)語句1; ELSE 語句2;,if(xy) max=x; else min=y;,形式三:,if(表達式1)語句1; else if(表達式2)語句2; else if(表達式3)語句3; else if(表達式m)語句m; else 語句n; if(x1000) y=1; else if(x500) y=2; else if(x300) y=3; else if(x100) y=4; else y=5;,例3-13 分支編程示例,#include main ( ) int x,y; scanf(%d, ,例3-14:,#include void main( ) int a,
29、b; a=200; b=321; if(a=b) a+;b+; printf(a=%d,b=%dn,a,b); ,例3-15:,#include void main( ) int a,b; a=12;b=21; if(a=b) a+;b+; a-;b-; printf(a=%d,b=%dn,a,b); ,例3-16:,#include void main( ) int score; char grade; score=45; if(score=90) grade=A; else if(score=80) grade=B; else if(score=70) grade=C; else if(s
30、core=60) grade=D; else grade=E; printf(score=%d,grade=%cn,score,grade); ,二、SWITCH語句,switch語句是多分支選擇語句一般形式如下: switch(表達式) case 常量表達式1:語句1; break; case 常量表達式2:語句2; break; . case 常量表達式n:語句n; break; default:語句n+1; ,例3-17,3.3.3 循環(huán)結(jié)構(gòu)流程控制語句,四種形式: if goto while do-while for,一、基于IF和GOTO構(gòu)成的循環(huán),1、采用if和goto可以構(gòu)成“當(dāng)
31、型”循環(huán) loop: if(表達式) 語句; goto loop; 2、采用if和goto也可以構(gòu)成“直到型”循環(huán)程序 loop: 語句; if(表達式) goto loop; 3、goto語句為無條件轉(zhuǎn)向語句 goto 語句標(biāo)號;,二、WHILE,while(表達式) 語句; ,例:,#include void main( ) int i, s; i=100; s=0; while(i0) s=s+i; i=i-1; printf(“1+2+100=%dn”,s); 注意: 先判斷,后執(zhí)行; 如果循環(huán)體內(nèi)只有一個語句,可以不用 While循環(huán)體 后無分號;,三、DO-WHILE,do 語句;
32、 while (表達式);,例:,#include void main( ) int i, s; i=100;s=0; do s=s+i; i=i-1; while(i0); printf(“1+2+100=%dn”,s); 注意: 先執(zhí)行, 后判斷; 如果循環(huán)體內(nèi)只有一個語句,可以不用 循環(huán)體 后無分號; while(表達式)后的分號不能??;,四、FOR,for(表達式1;表達式2;表達式3) 語句; for(y=0;y=99;y=y+3) delay(33); px=px; ,例:,#include void main( ) int i, s; s=0; for(i=0;i=100;i+)
33、 s=s+i; printf(“1+2+100=%dn”,s); 注意: 3個表達式都是可選項,可以任意省略,但“;”不能省。 省1是不對循環(huán)變量賦初值; 省2是不判斷循環(huán)條件的真假; 省3是不對循環(huán)變量操作。 for( ; ;)表示無限循環(huán)。,無限循環(huán)的實現(xiàn):,(1)for(; ;) 代碼段; (2)while(1) 代碼段; (3)do 代碼段; while(1);,3.3.4 BREAK語句、CONTINUE語句、GOTO語句,在循環(huán)語句執(zhí)行過程中, 如果需要在滿足循環(huán)判定條件的情況下跳出代碼段,可以使用break或continue語句; 如果要從任意地方跳轉(zhuǎn)到代碼的某個地方,可以使用g
34、oto語句。,1、BREAK,break語句用于從循環(huán)代碼中退出,然后執(zhí)行循環(huán)語句之后的語句,不再進入循環(huán) 。形式: break; 注意:一個break只能跳出一層循環(huán),例:,#include void main( ) int i, s; i=0; s=0; while(1) s=s+iI; i+; if(i100) break; printf(“1+2+100=%dn”,s); ,2、CONTINUE,continue語句用于退出當(dāng)前循環(huán),不再執(zhí)行本輪循環(huán),程序代碼從下一輪循環(huán)開始執(zhí)行,直到判斷條件不滿足為止。 與break的區(qū)別是該語句不是退出整個循環(huán)。形式: continue;,例: #
35、include void main( ) char ch =a, B,c,D,e,F; int i=-1; while(i=a ,3、GOTO,goto是一個無條件轉(zhuǎn)移語句。當(dāng)執(zhí)行g(shù)oto語句時,將程序指針跳轉(zhuǎn)到goto給出的下一條代碼,基本格式如下: goto 標(biāo)號;,例: void main(void) unsigned char counter; int sum ; sum=0; sumadd: sum=sum+counter; counter+; if(counter101) goto sumadd; ,3.4 C51的數(shù)組與指針,C51語言的構(gòu)造數(shù)據(jù)類型主要有數(shù)組、指針和結(jié)構(gòu)等。在單
36、片機系統(tǒng)中,數(shù)組的應(yīng)用比較廣泛,指針則次之,結(jié)構(gòu)用的相對較少。這里我們只討論數(shù)組和指針。,3.4.1 數(shù)組,數(shù)組是同類型變量的一個有序集合。 數(shù)組用一個名字來標(biāo)識,稱為數(shù)組名。 數(shù)組中的每個變量稱為數(shù)組元素。 數(shù)組有一維、二維、三維和多維數(shù)組之分。C51語言中常用的一維、二維數(shù)組和字符數(shù)組。 數(shù)組中各元素的順序用下標(biāo)表示,下標(biāo)為N的元素可以表示為數(shù)組名N。改變 中的下標(biāo)就可以訪問數(shù)組中所有的元素。,1一維數(shù)組,類型說明符 數(shù)組名元素個數(shù); int demo110; 初始化: int a5=1,2,3,4,5; int b6=1,2,6;,例3-23:,2二維數(shù)組或多維數(shù)組,類型說明符 數(shù)組名行
37、數(shù)列數(shù); float demo234; /demo2 數(shù)組有3 行4 列共12 個實型元素 int a34= 1,2,3,4,5,6,7,8,9,10,11,12; /全部初始化,3字符數(shù)組,若一個數(shù)組的元素是字符型的,則該數(shù)組就是一個字符數(shù)組。例如: char a12=Chong Qing;/字符數(shù)組 char add36= weight,height,width;/字符串?dāng)?shù)組,4查表,#define uchar unsigned char uchar code tempt=32,34,36,37,39,41; /*數(shù)組,設(shè)置在EPROM中,長度為實際輸入的數(shù)值數(shù) */ uchar ftoc
38、(uchar degc) return temptdegc; void main( ) uchar x; x=ftoc(5);/* 得到與5相應(yīng)的華氏溫度值 */ 共陰極LED的顯示字符段碼表 char code SEG11=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;,3.5 C51函數(shù),函數(shù)是指能夠執(zhí)行特定功能和任務(wù)的程序代碼段。 一個完整的C51程序是由一個主函數(shù)和若干個其他函數(shù)組成。 主函數(shù)是main( )函數(shù)。有且只有一個main( )函數(shù)。,使用函數(shù)時注意:,函數(shù)數(shù)目不限制; main( )函數(shù)是主函數(shù),可
39、以調(diào)用其他函數(shù),而不允許被其他函數(shù)調(diào)用。 除主函數(shù)外,其他函數(shù)之間允許互相調(diào)用。,一、函數(shù)分類,可以從不同的角度分類: (1)有無返回值角度 (2)數(shù)據(jù)傳送角度 (3)函數(shù)定義角度,(1)有無返回值角度,無返回值函數(shù)、有返回值函數(shù) 無返回值函數(shù):執(zhí)行完成后不向主調(diào)函數(shù)返回函數(shù)值。類型說明符為:void 有返回值函數(shù):執(zhí)行完成后向主調(diào)函數(shù)返回一個執(zhí)行的結(jié)果返回值。,(2)數(shù)據(jù)傳送角度,有參函數(shù)和無參函數(shù)。 無參函數(shù):主調(diào)函數(shù)和被調(diào)函數(shù)之間不進行參數(shù)的傳遞。 有參函數(shù):主調(diào)函數(shù)和被調(diào)函數(shù)之間存在參數(shù)的傳遞。-形式參數(shù)和實際參數(shù),(3)函數(shù)定義角度,主函數(shù)、自定義函數(shù)、庫函數(shù) 自定義函數(shù):是用戶根據(jù)自己的需要而編寫的函數(shù)。從函數(shù)定義的形式上可以將其劃分無參函數(shù)、
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版自愿分居夫妻解除婚姻關(guān)系合同版B版
- 2024年度養(yǎng)雞場合作研究合同:養(yǎng)雞場養(yǎng)殖技術(shù)聯(lián)合研發(fā)協(xié)議3篇
- 2024年度辦公設(shè)備銷售與品牌推廣合作合同
- 2024年毛坯房出租合同模板
- 2024年度倉儲物流資源整合與優(yōu)化服務(wù)合同2篇
- 2024年度美容產(chǎn)品特許經(jīng)營合同3篇
- 2024年度醫(yī)療康復(fù)中心軟裝設(shè)計及醫(yī)療用品采購協(xié)議3篇
- 2024年度己方提供技術(shù)咨詢合同2篇
- 2024版人工智能研發(fā)與應(yīng)用分包合同3篇
- 2024年度房地產(chǎn)抵押合同變更及爭議解決協(xié)議3篇
- 《玉米合理密植技術(shù)》課件
- 《不穩(wěn)定型心絞痛》課件
- 江蘇省揚州市邗江中學(xué)2025屆物理高一第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測試題含解析
- 自媒體宣傳采購項目競爭性磋商招投標(biāo)書范本
- 新保密法知識測試題及答案
- 2023年民航東北空管局人員招聘考試真題
- 統(tǒng)編版(2024新版)七年級上冊歷史第二單元 夏商周時期:奴隸制王朝的更替和向封建社會的過渡 單元復(fù)習(xí)課件
- 德漢翻譯入門智慧樹知到期末考試答案章節(jié)答案2024年中國海洋大學(xué)
- 半自理全護理老人護理管理服務(wù)投標(biāo)方案
- §5-5-6圓孔的夫瑯和費衍射.ppt
- 制作拼音卡片-空心涂色A4版本
評論
0/150
提交評論