第5講單片機C語言程序設計(3)_第1頁
第5講單片機C語言程序設計(3)_第2頁
第5講單片機C語言程序設計(3)_第3頁
第5講單片機C語言程序設計(3)_第4頁
第5講單片機C語言程序設計(3)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機原理與應用 滁州學院滁州學院計算機與信息工程學院計算機與信息工程學院于紅利于紅利12一、一、C51C51語言的基本運算與流程控制語句語言的基本運算與流程控制語句二、二、C51C51語言的構造函數(shù)類型語言的構造函數(shù)類型三、三、C51C51語言設計的其他問題語言設計的其他問題 第五講第五講 單片機單片機C語言程序設計(語言程序設計(3) 3教 學 目 標掌握:掌握:C51語言的基本運算與流程控制語句語言的基本運算與流程控制語句 理解:理解:C51語言的基本結構與構造數(shù)據(jù)類型語言的基本結構與構造數(shù)據(jù)類型了解:了解:C51語言程序設計的其他問題語言程序設計的其他問題41、C51的基本運算一、一、

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

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

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

5、序結構流程圖二、C51程序基本結構與構造函數(shù)類型【例1】計算半徑為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 分支結構可使程序根據(jù)不同的情況,選擇執(zhí)行不同的分支,在選擇結構中,程序先都對一個條件進行判斷。當條件成立,即條件語句為“真”時,執(zhí)行一個分支,當條件不成立時,即條件語句為“假”時,執(zhí)行另一個分支,如圖4.4。分支結構語句有

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

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

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

9、語句A成立成立不成立不成立當型循環(huán)結構 15(2)直到型循環(huán)結構 直到型循環(huán)結構如右圖,先執(zhí)行語句A,再判斷條件P,當條件成立(為“真”)時,再重復執(zhí)行語句A,直到條件不成立(為“假”)時才停止重復,執(zhí)行后面的程序。條件條件P語句語句A成立成立不 成不 成立立直到型循環(huán)結構此外,循環(huán)結構的語句還有:for、goto等。【例3】編程序用dowhile語句,求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構造數(shù)據(jù)類型1 數(shù)組

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

11、組時,只能逐個引用數(shù)組中的各個元素,而不能一次引用整個數(shù)組。但如果是字符數(shù)組則可以一次引用整個數(shù)組。 18Fibonacci數(shù)列在數(shù)學和計算機算法中十分有用。Fibonacci數(shù)列是這樣的一組數(shù):第一個數(shù)字為0,第二個數(shù)字為1,之后每一個數(shù)字都是前兩個數(shù)字之和。設計時通過數(shù)組存放Fibonacci數(shù)列,從第三項開始可通過累加的方法計算得到。程序如下:#include /包含特殊功能寄存器庫#include /包含I/O函數(shù)庫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ù)組計算并輸出Fibonacci數(shù)列的前20項。19if (i%5= =0) printf(“n”);printf(“%6d”,fibi);while(1);程序執(zhí)行結果:0 1 1 2 35 8 13 21 3455 89 144 233 377610987 15972584 414820例如:char string110;char string220;上面定義了兩個字符數(shù)組,分別定義了10個元素和20個元素。 用來存放字符數(shù)據(jù)的數(shù)組稱為字符數(shù)組,是一種常用的數(shù)組。在C51語言中,字符數(shù)組用于存放一組字符或字符串,字符串以“0”作為結束符,只存放一般字符的字符數(shù)組的賦值與使用和一般的數(shù)

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

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

15、nt x,* px,* py; /*變量及指針變量定義*/px=&x; /*將變量x的地址賦給指針變量px,使px指向變量x*/* px=5; /*等價于x=5*/py=px; /*將指針變量px中的地址賦給指針變量py,使py也指向x*/23#include /包含特殊功能寄存器庫#include /包含I/O函數(shù)庫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í)行結果:input x and y:4 8max=8,min=4例例5 輸入兩個整數(shù)x與y,經(jīng)比較后按大小順序輸出。 幾類重要的庫函數(shù)幾類重要的庫函數(shù) 專用寄存器包文件reg51.h(reg52.h): 絕對地址包含文件absacc.h: 動態(tài)內存分配函數(shù),位于stdlib.h文件中。 緩沖區(qū)處理函數(shù),位于string.h文件中,包括復制、移動、比較 等函數(shù),這樣便于對緩沖區(qū)進行處理。 輸入/輸出流函數(shù),位于stdio.h文件中,流函數(shù)通過51單片機的 串口或用戶定義的I/O讀寫數(shù)據(jù),默認為51單片機的串口。三、三、C51C51語言設計的其他問題語言設計的其他問題小 結25C51C51語言設計的其他問題語言設計的其他問題C51C51語言的構造函數(shù)類型語言的構造函數(shù)類型C51C51語言的基本運算與流程控制語句語言的基本運算與流程控制語句作

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論