第5講單片機(jī)C語(yǔ)言程序設(shè)計(jì)(3)_第1頁(yè)
第5講單片機(jī)C語(yǔ)言程序設(shè)計(jì)(3)_第2頁(yè)
第5講單片機(jī)C語(yǔ)言程序設(shè)計(jì)(3)_第3頁(yè)
第5講單片機(jī)C語(yǔ)言程序設(shè)計(jì)(3)_第4頁(yè)
第5講單片機(jī)C語(yǔ)言程序設(shè)計(jì)(3)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)原理與應(yīng)用 滁州學(xué)院滁州學(xué)院計(jì)算機(jī)與信息工程學(xué)院計(jì)算機(jī)與信息工程學(xué)院于紅利于紅利12一、一、C51C51語(yǔ)言的基本運(yùn)算與流程控制語(yǔ)句語(yǔ)言的基本運(yùn)算與流程控制語(yǔ)句二、二、C51C51語(yǔ)言的構(gòu)造函數(shù)類(lèi)型語(yǔ)言的構(gòu)造函數(shù)類(lèi)型三、三、C51C51語(yǔ)言設(shè)計(jì)的其他問(wèn)題語(yǔ)言設(shè)計(jì)的其他問(wèn)題 第五講第五講 單片機(jī)單片機(jī)C語(yǔ)言程序設(shè)計(jì)(語(yǔ)言程序設(shè)計(jì)(3) 3教 學(xué) 目 標(biāo)掌握:掌握:C51語(yǔ)言的基本運(yùn)算與流程控制語(yǔ)句語(yǔ)言的基本運(yùn)算與流程控制語(yǔ)句 理解:理解:C51語(yǔ)言的基本結(jié)構(gòu)與構(gòu)造數(shù)據(jù)類(lèi)型語(yǔ)言的基本結(jié)構(gòu)與構(gòu)造數(shù)據(jù)類(lèi)型了解:了解:C51語(yǔ)言程序設(shè)計(jì)的其他問(wèn)題語(yǔ)言程序設(shè)計(jì)的其他問(wèn)題41、C51的基本運(yùn)算一、一、

2、C51語(yǔ)言的基本運(yùn)算與控制語(yǔ)句語(yǔ)言的基本運(yùn)算與控制語(yǔ)句 與標(biāo)準(zhǔn)C語(yǔ)言類(lèi)似,C51的基本運(yùn)算包括算術(shù)運(yùn)算、關(guān)系運(yùn)算、邏輯運(yùn)算、位運(yùn)算和幅值運(yùn)算及表達(dá)式等。(1)算術(shù)運(yùn)算符C51中支持的算術(shù)運(yùn)算符有:運(yùn)算符號(hào)運(yùn)算符號(hào)功能功能+加或取正值運(yùn)算符加或取正值運(yùn)算符-減或取負(fù)值運(yùn)算符減或取負(fù)值運(yùn)算符*乘運(yùn)算符乘運(yùn)算符/除運(yùn)算符除運(yùn)算符%取余運(yùn)算符取余運(yùn)算符+自增加運(yùn)算符自增加運(yùn)算符-自減運(yùn)算符自減運(yùn)算符注:注: 若相除兩個(gè)數(shù)為浮點(diǎn)數(shù),則結(jié)果也為浮點(diǎn)數(shù),若相除的兩個(gè)數(shù)為整數(shù),則結(jié)果也為整數(shù)。如25.0/20.0=1.25,而25/20=1。 對(duì)于取余運(yùn)算,則要求參加運(yùn)算的兩個(gè)數(shù)必須為整數(shù),如:5%3=2。5

3、關(guān)系運(yùn)算用于比較兩個(gè)數(shù)的大小,關(guān)系表達(dá)式的值為邏輯值0,1之一。運(yùn)算符號(hào)運(yùn)算符號(hào)功能功能小于小于大于大于=大于等于大于等于=等于等于!=不等于不等于(2) 關(guān)系運(yùn)算符C51中有6種關(guān)系運(yùn)算符:C51有3種邏輯運(yùn)算符:|(邏輯或)、&(邏輯與)、!(邏輯非)(3) 邏輯運(yùn)算符 邏輯運(yùn)算符則用于求條件式的邏輯值,用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)的式子就是邏輯表達(dá)式。注:C51中位運(yùn)算符只能對(duì)整和字符型數(shù)據(jù)操作,不能對(duì)浮點(diǎn)數(shù)進(jìn)行操作。 位運(yùn)算是按位對(duì)變量進(jìn)行運(yùn)算,并不改變參與運(yùn)算的變量的值。(4)位運(yùn)算符運(yùn)算符號(hào)運(yùn)算符號(hào)功能功能&按位與按位與| 按位或按位或按位異或按位異或!

4、按位取反按位取反位右移位右移 (5)賦值運(yùn)算符 在C51中,賦值運(yùn)算符“=”,將一個(gè)數(shù)據(jù)的值賦給一個(gè)變量。 變量=表達(dá)式; 執(zhí)行時(shí)先計(jì)算出右邊表達(dá)式的值,然后賦給左邊的變量。例如: x=8+9; /*將8+9的值賦紿變量x*/ 賦值符號(hào)前加上其他運(yùn)算符構(gòu)成符合運(yùn)算符號(hào),如下: 賦值運(yùn)算中,若賦值運(yùn)算中,若“=”兩側(cè)數(shù)據(jù)類(lèi)型不一致,系統(tǒng)自動(dòng)將右側(cè)表達(dá)式換成左側(cè)類(lèi)型。兩側(cè)數(shù)據(jù)類(lèi)型不一致,系統(tǒng)自動(dòng)將右側(cè)表達(dá)式換成左側(cè)類(lèi)型。81、C51的基本結(jié)構(gòu)(1)順序結(jié)構(gòu) 順序結(jié)構(gòu)是最基本、最簡(jiǎn)單的結(jié)構(gòu),在這種結(jié)構(gòu)中,程序由低地址到高地址依次執(zhí)行,如圖給出順序結(jié)構(gòu)流程圖,程序先執(zhí)行A操作,然后再執(zhí)行B操作。AB順

5、序結(jié)構(gòu)流程圖二、C51程序基本結(jié)構(gòu)與構(gòu)造函數(shù)類(lèi)型【例1】計(jì)算半徑為r的圓面積、球體積。# include # define PI 3.1415926Void main( ) float r,s,v; scanf(“%f”,&r); S=PI*r*r; V=4.0/3.0*r*r*r; Printf(“圓面積:%f”,s); Printf(“球體積:%f”,v);10 分支結(jié)構(gòu)可使程序根據(jù)不同的情況,選擇執(zhí)行不同的分支,在選擇結(jié)構(gòu)中,程序先都對(duì)一個(gè)條件進(jìn)行判斷。當(dāng)條件成立,即條件語(yǔ)句為“真”時(shí),執(zhí)行一個(gè)分支,當(dāng)條件不成立時(shí),即條件語(yǔ)句為“假”時(shí),執(zhí)行另一個(gè)分支,如圖4.4。分支結(jié)構(gòu)語(yǔ)句有

6、if和switch兩種。(2)分支結(jié)構(gòu)條件條件P語(yǔ)句語(yǔ)句A語(yǔ)句語(yǔ)句B成立成立不成不成立立 在在C51中,實(shí)現(xiàn)選擇結(jié)構(gòu)的語(yǔ)句為中,實(shí)現(xiàn)選擇結(jié)構(gòu)的語(yǔ)句為if/else,if/else if語(yǔ)句。另外在語(yǔ)句。另外在C51中中還支持多分支結(jié)構(gòu),多分支結(jié)構(gòu)既可以通過(guò)還支持多分支結(jié)構(gòu),多分支結(jié)構(gòu)既可以通過(guò)if和和else if語(yǔ)句嵌套實(shí)現(xiàn),可用語(yǔ)句嵌套實(shí)現(xiàn),可用swith/case語(yǔ)句實(shí)現(xiàn)。語(yǔ)句實(shí)現(xiàn)。 if 語(yǔ)句if 語(yǔ)句的幾種形式:if 形式、ifelse形式、多選擇if語(yǔ)句形式。(1) if (表達(dá)式)語(yǔ)句; 若表達(dá)式為真,則運(yùn)行if語(yǔ)句,否則,接著執(zhí)行。(2) if (表達(dá)式)語(yǔ)句1; else 語(yǔ)

7、句2;例如:輸入一個(gè)整數(shù),判斷是奇數(shù)還是偶數(shù)。(3) if (表達(dá)式)語(yǔ)句1; else if 語(yǔ)句2; 例2 計(jì)算如下分段函數(shù)。# include int main(void) double x, y; printf(Enter x:); scanf(%lf, &x); printf(f(%.2f) = %.2fn, x, y); return 0; switch 語(yǔ)句switch(表達(dá)式) case 常量表達(dá)式1:語(yǔ)句段1; case 常量表達(dá)式2:語(yǔ)句段2; . case 常量表達(dá)式n:語(yǔ)句段n; default : 語(yǔ)句段n+1;14 在程序處理過(guò)程中,有時(shí)需在程序處理過(guò)程中,

8、有時(shí)需要某一段程序重復(fù)執(zhí)行多次,這要某一段程序重復(fù)執(zhí)行多次,這時(shí)就需要循環(huán)結(jié)構(gòu)來(lái)實(shí)現(xiàn),循環(huán)時(shí)就需要循環(huán)結(jié)構(gòu)來(lái)實(shí)現(xiàn),循環(huán)結(jié)構(gòu)就是能夠使程序段重復(fù)執(zhí)行結(jié)構(gòu)就是能夠使程序段重復(fù)執(zhí)行的結(jié)構(gòu)。循環(huán)結(jié)構(gòu)又分為兩種:的結(jié)構(gòu)。循環(huán)結(jié)構(gòu)又分為兩種:當(dāng)(當(dāng)(while)型循環(huán)結(jié)構(gòu)和直到)型循環(huán)結(jié)構(gòu)和直到(do.while)型循環(huán)結(jié)構(gòu)。)型循環(huán)結(jié)構(gòu)。(1)當(dāng)型循環(huán)結(jié)構(gòu))當(dāng)型循環(huán)結(jié)構(gòu) 當(dāng)型循環(huán)結(jié)構(gòu)如右圖,當(dāng)條當(dāng)型循環(huán)結(jié)構(gòu)如右圖,當(dāng)條件件P成立成立(“真真”)時(shí),重復(fù)執(zhí)行語(yǔ)時(shí),重復(fù)執(zhí)行語(yǔ)句句A,當(dāng)條件不成立,當(dāng)條件不成立(“假假”)時(shí)才時(shí)才停止重復(fù),執(zhí)行后面的程序。停止重復(fù),執(zhí)行后面的程序。(3)循環(huán)結(jié)構(gòu)條件條件P語(yǔ)句

9、語(yǔ)句A成立成立不成立不成立當(dāng)型循環(huán)結(jié)構(gòu) 15(2)直到型循環(huán)結(jié)構(gòu) 直到型循環(huán)結(jié)構(gòu)如右圖,先執(zhí)行語(yǔ)句A,再判斷條件P,當(dāng)條件成立(為“真”)時(shí),再重復(fù)執(zhí)行語(yǔ)句A,直到條件不成立(為“假”)時(shí)才停止重復(fù),執(zhí)行后面的程序。條件條件P語(yǔ)句語(yǔ)句A成立成立不 成不 成立立直到型循環(huán)結(jié)構(gòu)此外,循環(huán)結(jié)構(gòu)的語(yǔ)句還有:for、goto等?!纠?】編程序用dowhile語(yǔ)句,求2+4+6+100的和。# include Void main( ) int k=2,s=0; do s=s+k; k=k+2; while (k=100); printf(“2+4+100=%d”,s);172. C51構(gòu)造數(shù)據(jù)類(lèi)型1 數(shù)組

10、一一維數(shù)組一一維數(shù)組一維數(shù)組只有一個(gè)下標(biāo),定義的形式如下: 數(shù)據(jù)類(lèi)型說(shuō)明符 數(shù)組名常量表達(dá)式=初值,初值數(shù)組中各元素類(lèi)型數(shù)組的標(biāo)識(shí)符數(shù)組長(zhǎng)度,元素個(gè)數(shù)給數(shù)組元素賦初值例如:下面是定義數(shù)組的兩個(gè)例子。 unsigned char x5; unsigned int y3=1,2,3; 定義了一個(gè)無(wú)符號(hào)字符數(shù)組,數(shù)組名為x,數(shù)組中的元素個(gè)數(shù)為5。 定義了一個(gè)無(wú)符號(hào)整型數(shù)組,數(shù)組名為y,數(shù)組中元素個(gè)數(shù)為3,定義的同時(shí)給數(shù)組中的三個(gè)元素賦初值,賦初值分別為1、2、3。注意:C51語(yǔ)言中數(shù)組的下標(biāo)是從0開(kāi)始的,的5個(gè)元素分別是:x0 x4。的3個(gè)元素分別是:y0=1;y1=2;y2=3。C51規(guī)定在引用數(shù)

11、組時(shí),只能逐個(gè)引用數(shù)組中的各個(gè)元素,而不能一次引用整個(gè)數(shù)組。但如果是字符數(shù)組則可以一次引用整個(gè)數(shù)組。 18Fibonacci數(shù)列在數(shù)學(xué)和計(jì)算機(jī)算法中十分有用。Fibonacci數(shù)列是這樣的一組數(shù):第一個(gè)數(shù)字為0,第二個(gè)數(shù)字為1,之后每一個(gè)數(shù)字都是前兩個(gè)數(shù)字之和。設(shè)計(jì)時(shí)通過(guò)數(shù)組存放Fibonacci數(shù)列,從第三項(xiàng)開(kāi)始可通過(guò)累加的方法計(jì)算得到。程序如下:#include /包含特殊功能寄存器庫(kù)#include /包含I/O函數(shù)庫(kù)main()int fib20,i;fib0=0;fib1=1;for (i=2;i20;i+) fibi=fibi-2+fibi-1;for (i=0;i20;i+)例例

12、4 用數(shù)組計(jì)算并輸出Fibonacci數(shù)列的前20項(xiàng)。19if (i%5= =0) printf(“n”);printf(“%6d”,fibi);while(1);程序執(zhí)行結(jié)果:0 1 1 2 35 8 13 21 3455 89 144 233 377610987 15972584 414820例如:char string110;char string220;上面定義了兩個(gè)字符數(shù)組,分別定義了10個(gè)元素和20個(gè)元素。 用來(lái)存放字符數(shù)據(jù)的數(shù)組稱(chēng)為字符數(shù)組,是一種常用的數(shù)組。在C51語(yǔ)言中,字符數(shù)組用于存放一組字符或字符串,字符串以“0”作為結(jié)束符,只存放一般字符的字符數(shù)組的賦值與使用和一般的數(shù)

13、組完全相同2字符數(shù)組字符數(shù)組213指針變量的定義指針變量的定義指針變量的定義與一般變量的定義類(lèi)似,定義的一般形式為:數(shù)據(jù)類(lèi)型說(shuō)明符數(shù)據(jù)類(lèi)型說(shuō)明符 存儲(chǔ)器類(lèi)型存儲(chǔ)器類(lèi)型 *指針變量名;指針變量名;下面是幾個(gè)指針變量定義的例子:int * p1; /*定義一個(gè)指向整型變量的指針變量p1*/char * p2; /*定義一個(gè)指向字符變量的指針變量p2*/char data * p3; /*定義一個(gè)指向字符變量的指針變量p3,該指針訪(fǎng)問(wèn)的數(shù)據(jù)在片內(nèi)數(shù)據(jù)存儲(chǔ)器中,該指針在內(nèi)存中占一個(gè)字節(jié)*/float xdata * p4; /*定義一個(gè)指向字符變量的指針變量p4,該指針訪(fǎng)問(wèn)的數(shù)據(jù)在片外數(shù)據(jù)存儲(chǔ)器中,該

14、指針在內(nèi)存中占兩個(gè)字節(jié)*/指針變量所指向的變量類(lèi)型可選項(xiàng),是C5l編譯器的一種擴(kuò)展。若帶此選項(xiàng),指針被定義為基于存儲(chǔ)器的指針。否則定義為一般指針,這兩種指針的區(qū)別在于它們占的存儲(chǔ)字節(jié)不同。 224指針變量的引用指針變量的引用 指針變量是存放另一變量地址的特殊變量,指針變量只能存放地址。指針變量使用時(shí)注意兩個(gè)運(yùn)算符:&和*。其中:“&”是取地址運(yùn)算符,“*”是指針運(yùn)算符。通過(guò)“&”取地址運(yùn)算符可以把一個(gè)變量的地址送給指針變量,使指針變量指向該變量;通過(guò)“*”指針運(yùn)算符可以實(shí)現(xiàn)通過(guò)指針變量訪(fǎng)問(wèn)它所指向的變量的值。 指針變量經(jīng)過(guò)定義之后可以象其他基本類(lèi)型變量一樣引用。例如:i

15、nt x,* px,* py; /*變量及指針變量定義*/px=&x; /*將變量x的地址賦給指針變量px,使px指向變量x*/* px=5; /*等價(jià)于x=5*/py=px; /*將指針變量px中的地址賦給指針變量py,使py也指向x*/23#include /包含特殊功能寄存器庫(kù)#include /包含I/O函數(shù)庫(kù)extern serial_initial();main()int x,y;int * p,* p1,* p2;serial_initial();printf(“input x and y:n”);scanf(“%d%d”,&x,&y);p1=&x

16、;p2=&y;if (xy) p=p1;p1=p2;p2=p;printf(“max=%d,min=%dn”,*p1,*p2);while(1);程序執(zhí)行結(jié)果:input x and y:4 8max=8,min=4例例5 輸入兩個(gè)整數(shù)x與y,經(jīng)比較后按大小順序輸出。 幾類(lèi)重要的庫(kù)函數(shù)幾類(lèi)重要的庫(kù)函數(shù) 專(zhuān)用寄存器包文件reg51.h(reg52.h): 絕對(duì)地址包含文件absacc.h: 動(dòng)態(tài)內(nèi)存分配函數(shù),位于stdlib.h文件中。 緩沖區(qū)處理函數(shù),位于string.h文件中,包括復(fù)制、移動(dòng)、比較 等函數(shù),這樣便于對(duì)緩沖區(qū)進(jìn)行處理。 輸入/輸出流函數(shù),位于stdio.h文件中,流函數(shù)通過(guò)51單片機(jī)的 串口或用戶(hù)定義的I/O讀寫(xiě)數(shù)據(jù),默認(rèn)為51單片機(jī)的串口。三、三、C51C51語(yǔ)言設(shè)計(jì)的其他問(wèn)題語(yǔ)言設(shè)計(jì)的其他問(wèn)題小 結(jié)25C51C51語(yǔ)言設(shè)計(jì)的其他問(wèn)題語(yǔ)言設(shè)計(jì)的其他問(wèn)題C51C51語(yǔ)言的構(gòu)造函數(shù)類(lèi)型語(yǔ)言的構(gòu)造函數(shù)類(lèi)型C51C51語(yǔ)言的基本運(yùn)算與流程控制語(yǔ)句語(yǔ)言的基本運(yùn)算與流程控制語(yǔ)句作

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論