官术网_书友最值得收藏!

  • 單片機原理及應用
  • 趙旭輝 楊靈主編
  • 3614字
  • 2021-09-27 12:50:14

2.2 常用語句與函數(shù)

1.常用語句

課件 C51語言中程序的基本語法

視頻 C51語言中程序的基本語法

C51語言中最常用語句有賦值語句、條件語句和循環(huán)語句。C51語言中規(guī)定每條語句結束后都必須以分號結尾

1)賦值語句

賦值語句最為常見,出現(xiàn)的頻率最多,其實質就是由賦值表達式加上一個分號構成的。如a=3;t=a;等等。必須要注意的是,賦值表達式里出現(xiàn)的變量,一定是預先定義過的,C51語言要求變量是“先定義,后使用”。另外,賦值語句中,賦值符號右側常量(或表達式結果)的數(shù)據(jù)類型必須與賦值號左側的變量類型匹配,否則會出現(xiàn)語法錯誤。

2)條件語句

條件語句是用來判斷所給定的條件是否滿足,并根據(jù)判定的結果來決定執(zhí)行哪一個操作的語句。

C51語言中條件判斷主要使用的是if語句,if語句有3種表現(xiàn)形式。

這個語句表示的含意是:如果X>5,那就打印輸出“X大于5”這句話;否則,跳過中間的語句塊向下執(zhí)行,什么也不輸出。

這種形式就是典型的分支判斷,其含義是當X>5時,打印輸出“X大于5”這句話;否則,會打印輸出“X不大于5”這句話。

這是if語句的嵌套形式,適用于需要分支判斷較多的情況。其意義是哪一個表達式成立就執(zhí)行其對應的語句塊。如果都不成立,就什么也不執(zhí)行。使用中需要注意,else語句只與最接近的if語句成對關聯(lián)(也要注意大括號的影響范圍)。另外,如果語句塊中只有一條語句,則可以省略語句塊兩側的大括號。

上面例程中,首先判斷X的值是否大于或等于5,如果成立,則打印輸出“X大于或等于5”后,不再執(zhí)行下面的判斷語句,完成整個if判斷;如果給定的值不大于5,則會執(zhí)行緊接著下來的else分支語句,這里又包含了一個if判斷,此時再次判斷X的值是否大于或等于3,如果成立,則打印輸出“X在3與5之間”后,不再執(zhí)行其他語句,完成整個if判斷;如果給定X的值也不大于3,則再向下執(zhí)行緊接著的else分支語句,這里再次包含了一個if判斷,此時判斷X的值是否大于或等于1,如果成立,則打印輸出“X在1與3之間”后,不再執(zhí)行其他語句,結束整個if判斷;如果X小于1,則直接執(zhí)行下面的else分支語句,直接打印輸出“X小于1”并結束整個if判斷。通過示例我們看到if嵌套執(zhí)行的過程就是一個多次判斷、逐步縮小范圍的過程。

在日常使用中,還經(jīng)常使用switch語句來完成這類多路分支的判斷,switch語句的用法如下所示:

switch語句特別適合多路分支的判斷處理,當有多種選擇的可能存在時,使用switch會比使用if以及if的嵌套更方便。執(zhí)行時,首先計算表達式的值,然后與每一個case里的常量相比較,如果符合,就接著執(zhí)行這個case語句中的語句體,然后執(zhí)行break跳出整個switch。如果沒有break語句,那么在執(zhí)行完符合常量值的那個語句體后,會接著執(zhí)行下面case中的語句,直到switch結束,這點請初學者務必注意。

上面例程中,首先對傳入的變量grade進行判斷,判斷其值是否為'A',若為A則打印輸出“85~100”字樣,然后結束switch語句;如果不是A,則順序向下執(zhí)行,依次判斷是否為'B',如果是B,則打印輸出“70~84”字樣后結束switch語句。以此類推,如果也不是B,則繼續(xù)向下判斷'C'和'D'兩種情況。如果全部case語句中沒有滿足項,則執(zhí)行default語句,打印輸出“error”字樣后結束switch語句。

3)循環(huán)語句

循環(huán)語句也是經(jīng)常用的語句之一。通過循環(huán)語句能夠利用計算機高速處理的特性,重復執(zhí)行某些代碼,以完成大量有規(guī)則的重復性運算。特別地,在C51程序中,在主函數(shù)內一定有一個無限循環(huán)來保證程序從加電開始一直在運行。

C51語言中的循環(huán)語句有多種,平時使用最多是while循環(huán)和for循環(huán)。下面分別說明。

(1)while循環(huán)。while語句用來實現(xiàn)“當型”循環(huán)結構。其語法形式如下:

其含義是當表達式結果為真時,會一直執(zhí)行該循環(huán)體語句塊,直到表達式不能繼續(xù)成立為止。

上述程序的含意是:通過while循環(huán)實現(xiàn)從0一直累加到100的功能。

注意,這里i++的含義。sum=sum+i++這一語句可以分解為以下兩個語句:

sum=sum+i;

i=i+1;

請讀者試一試,如何求出100以內奇數(shù)或偶數(shù)的和呢?

(2)for循環(huán)。for循環(huán)是C51中使用最為靈活的循環(huán),不僅可以用于循環(huán)次數(shù)確定的情況,也可以用于循環(huán)次數(shù)不確定的情況,基本上可以替代while循環(huán)。其語法形式如下:

它的執(zhí)行過程是這樣的:先計算表達式1,接著計算表達式2,判斷表達式2是否成立,如果成立,則開始執(zhí)行循環(huán)體語句塊,再接著執(zhí)行表達式3;然后再次計算表達式2看其是否成立,如果表達式2依然成立,再次執(zhí)行循環(huán)體語句塊,接著又是執(zhí)行表達式3;如此循環(huán)往復,直到表達式2不再成立為止。也有人將for循環(huán)的形式寫為for(循環(huán)變量賦初值;循環(huán)條件判斷;循環(huán)變量變化){循環(huán)體語句},這樣可能會更容易理解一些。

上述程序是使用for循環(huán)實現(xiàn)0~100的累加計算。與使用while循環(huán)的程序相比,顯然可讀性更強,書寫也更加簡單、方便。

注意這里由于循環(huán)變量i已經(jīng)賦了初值,所以在for循環(huán)中,表達式1也可以省略,但表達式1后面的分號不能省略。另外,如果循環(huán)體只有一個語句,則循環(huán)體外的大括號也可以省略。于是上述的循環(huán)可以簡寫為

不論是while循環(huán)還是for循環(huán),在循環(huán)條件的判斷中都會檢測一個變量,這個變量在循環(huán)中是按一定規(guī)律變化的,通過這個變量的取值變化可以控制循環(huán)的執(zhí)行次數(shù)以及何時退出循環(huán)。這個變量稱為循環(huán)變量,循環(huán)變量每次改變的幅度就是循環(huán)的步長。如上面的示例中,變量i就是循環(huán)變量,循環(huán)變量的步長是1。

2.函數(shù)

課件 C51中的函數(shù)

視頻 C51中的函數(shù)

C51的程序都是由若干個函數(shù)構成的。

1)main函數(shù)

一個C51的程序通常由一個主函數(shù)“main()”和若干個子函數(shù)構成。每一個子函數(shù)完成一個特定的功能。由主函數(shù)“main()”調用其他子函數(shù),其他子函數(shù)之間也可以相互調用。但是一個C51程序中只能有一個主函數(shù)。

C51程序的執(zhí)行都是從main()函數(shù)開始,調用其他函數(shù)后流程返回到main()函數(shù),在main()函數(shù)中結束整個程序的運行。main()函數(shù)是系統(tǒng)自己調用的。

除了main()函數(shù)之外,所有的函數(shù)都是平行的,即在定義函數(shù)時是互相獨立的,一個函數(shù)不能從屬于任何一個函數(shù)。函數(shù)彼此間可以互相調用,但不能調用main()函數(shù)。而main()函數(shù)可以調用任何函數(shù)。

2)自定義函數(shù)

除主函數(shù)外,C51程序中的函數(shù)主要有兩種:一種是系統(tǒng)提供給用戶的標準庫函數(shù),另一種是用戶自定義出來的函數(shù)。使用標準庫函數(shù)需要事先在程序的頭部以聲明的方式將庫包含進來,如程序開頭寫的#include <intrins.h>就屬于這種包含。用戶自定義的函數(shù)通常用來解決更為具體的問題。用戶自定義函數(shù)有兩種形式:一種是有參數(shù)的函數(shù),另一種是無參數(shù)的函數(shù)。

用戶自定義函數(shù)的一般形式如下:

下面以常用的延時函數(shù)為例,請讀者注意觀察兩種自定義函數(shù)的寫法。

無參數(shù)函數(shù)

有參數(shù)函數(shù)

函數(shù)調用的一般形式如下:

注意一點,在主函數(shù)中調用自定義函數(shù),如果該函數(shù)的定義是寫在主函數(shù)(或調用函數(shù))的后面,需要在主函數(shù)(調用函數(shù))之前,進行該函數(shù)的聲明。如果函數(shù)的定義是寫在主函數(shù)(調用函數(shù))的前面,則無須聲明。在函數(shù)聲明中應當保證與函數(shù)定義時的首部寫法一致,即函數(shù)類型、函數(shù)名、參數(shù)個數(shù)、參數(shù)類型、參數(shù)順序必須一致。為簡便起見,可以不寫形參變量名,只寫形參變量的類型就可以了。

函數(shù)聲明的一般形式為:

如上面聲明的兩個delay()函數(shù),其聲明、調用和定義形式如下:

3.C51程序的基本結構

C51中程序的寫法十分簡單,主要由3部分構成,其程序的基本框架如圖2-3所示。

第一部分總是頭文件包含語句,所有的C51程序第一句基本都是這一句。如果有其他頭文件需要包括進來,可以依次向下寫。

第二部分是程序中需要使用的全局變量和一些函數(shù)的聲明

最后是主函數(shù)main( )以及其他函數(shù)的書寫。

圖2-3 C51程序的基本框架

基本上所有的C51語言程序都由上面3部分構成。下面以點亮一個發(fā)光二極管的小程序來具體說明C51程序的寫法。

在寫程序之前,首先簡要地介紹一下硬件電路配置情況:在單片機的P1口第0號引腳上接了一個發(fā)光二極管。現(xiàn)在通過程序控制,使這個發(fā)光二極管點亮。電路原理圖如圖2-4所示。

圖2-4 點亮一個發(fā)光二極管電路原理圖

在圖2-4中發(fā)光二極管的一端連接著電源,另一端連接著單片機的P1口第0號引腳。注意51單片機在初始加電時,所有的I/O口默認都是輸出高電平的。因此要想使發(fā)光二極管點亮,只需將P1口的第0號引腳改為低電平即可。按照這個思路和前面的介紹,編寫C51語言程序代碼如下:

從上面的程序中可以看出,C51語言程序在寫法上的幾個特點:

(1)每個程序的第一句,必須將單片機的頭文件包含進來,且不用分號結尾。

(2)每個正常語句(特殊除外)必須以分號結尾。

(3)函數(shù)體或語句體需要用{}包圍起來。

(4)在主函數(shù)中,要使用無限循環(huán)(死循環(huán)),使程序一直運行下去。這是C51程序與普通C語言程序最大的不同,普通的C語言程序要盡量避免死循環(huán),而單片機系統(tǒng)需要程序始終運行,所以必須要有無限循環(huán)。

(5)在每個語句的后面,可以使用“//”對該語句添加注釋。使用“/*”和“*/”可以將一段程序變?yōu)樽⑨屨Z句。注釋語句不能被執(zhí)行。

有關C51語言的知識還有很多,但是上面介紹的內容已經(jīng)足夠初學者使用了。如果對于C51語言感興趣,喜歡深入研究,可以參考一些有關C語言的書籍進行學習。在本書的后面也會對涉及的其他C51語言中的相關知識進行介紹。

主站蜘蛛池模板: 汝州市| 萝北县| 怀来县| 大竹县| 化隆| 蚌埠市| 湖北省| 化州市| 自治县| 内黄县| 建阳市| 肇源县| 永平县| 克什克腾旗| 深圳市| 海盐县| 报价| 江永县| 萍乡市| 通化市| 疏勒县| 双桥区| 高碑店市| 大名县| 漳浦县| 东明县| 福贡县| 鸡泽县| 都安| 水富县| 江西省| 许昌市| 墨脱县| 司法| 怀仁县| 崇明县| 涡阳县| 龙海市| 京山县| 大新县| 海南省|