九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

《C語言編程與應(yīng)用》PPT課件.ppt

上傳人:w****2 文檔編號:14682985 上傳時間:2020-07-28 格式:PPT 頁數(shù):160 大?。?.99MB
收藏 版權(quán)申訴 舉報 下載
《C語言編程與應(yīng)用》PPT課件.ppt_第1頁
第1頁 / 共160頁
《C語言編程與應(yīng)用》PPT課件.ppt_第2頁
第2頁 / 共160頁
《C語言編程與應(yīng)用》PPT課件.ppt_第3頁
第3頁 / 共160頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《C語言編程與應(yīng)用》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《C語言編程與應(yīng)用》PPT課件.ppt(160頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、2020年7月28日4時48分,1,6.1 概 述 6.2 51單片機C語言編寫的一般方法 6.3 C51數(shù)據(jù)類型及在MCS-51中的存儲方式 6.4 C51語言的程序結(jié)構(gòu) 6.5 C語言在MCS-51單片機中的典型運用,第6章 C語言編程與應(yīng)用,2020年7月28日4時48分,2,6.1 概 述,傳統(tǒng)開發(fā)單片機系統(tǒng)主要用匯編語言編寫系統(tǒng)程序。匯編語言的缺點:可讀性和結(jié)構(gòu)較差,可移植性也不好,跨硬件平臺移植幾乎不可能。采用匯編語言編寫單片機應(yīng)用程序的周期長,測試和排錯比較困難,產(chǎn)品開發(fā)周期變長。 為了提高編寫系統(tǒng)和應(yīng)用程序的效率,改善程序的可讀性和可移植性,縮短產(chǎn)品開發(fā)周期,采用高級語言的開發(fā)

2、平臺來開發(fā)單片機系統(tǒng)已經(jīng)成為時尚和趨勢。 基于高級語言開發(fā)平臺進行單片機開發(fā),具有開發(fā)速度快、語言簡潔易讀、可移植性好、可進行結(jié)構(gòu)化程序設(shè)計和多人協(xié)同工作、可進行脫離硬件平臺的軟件仿真等優(yōu)點。實踐證明,采用高級語言開發(fā)單片機系統(tǒng)的效率要比用匯編語言的高幾倍甚至幾十倍。,2020年7月28日4時48分,3,單片機的高級語言包括:Basic語言、PL/M語言和C/C+語言。Basic語言主要應(yīng)用在MCS-51系列單片機上,效果不是很理想,現(xiàn)在已經(jīng)不再使用。PL/M語言對硬件的控制能力和代碼效率都很好,但局限于Intel公司的單片機系列,移植性差。 C/C+語言是目前單片機的主流編程語言。,2020

3、年7月28日4時48分,4,單片機C語言編譯器不僅把開發(fā)者的C語言編譯成8051可以識別的機器碼,更主要的是能夠自動安排程序存儲器的空間,分配8051內(nèi)部RAM與外部RAM的空間、自動安排堆棧位置。這些事情都是匯編語言開發(fā)者必須自己作的。C51編譯器還可以把不同函數(shù)的數(shù)據(jù)實行覆蓋有效利用片上有限的RAM 空間。 一般情況下只懂C語言不懂得單片機的指令集的開發(fā)者也能夠用C51編寫完美的單片機程序。所以開發(fā)者學(xué)習(xí)單片機而不懂C語言將在激烈的市場競爭中處于十分不利的地位。,2020年7月28日4時48分,5,1 單片機應(yīng)用系統(tǒng)開發(fā)的軟硬件環(huán)境構(gòu)成,補充:單片機應(yīng)用系統(tǒng)開發(fā)的軟硬件環(huán)境,當(dāng)用戶目標(biāo)系統(tǒng)

4、設(shè)計完成后,還需要應(yīng)用軟件支持,用戶目標(biāo)系統(tǒng)才能成為一個滿足用戶要求的單片機應(yīng)用系統(tǒng)。但該用戶目標(biāo)系統(tǒng)不具備自開發(fā)能力,需要借助于單片機仿真器(也稱單片機開發(fā)系統(tǒng))完成該項工作。,2020年7月28日4時48分,6,一個典型的單片機系統(tǒng)開發(fā)環(huán)境組成如圖所示。,單片機系統(tǒng)開發(fā)環(huán)境組成,2020年7月28日4時48分,7,2 單片機應(yīng)用系統(tǒng)開發(fā)工具選擇原則,全地址空間的仿真。 不占用任何用戶目標(biāo)系統(tǒng)的資源。 必須實現(xiàn)硬斷點,并且具有靈活的斷點管理功能。 硬件實現(xiàn)單步執(zhí)行功能。 可跟蹤用戶程序執(zhí)行。 可觀察用戶程序執(zhí)行過程中的變量和表達式。 可中止用戶程序的運行或用戶程序復(fù)位。 系統(tǒng)硬件電路的診斷與

5、檢查。 支持匯編和高級語言源程序級調(diào)試。,2020年7月28日4時48分,8,3 使用JTAG界面單片機仿真開發(fā)環(huán)境,JTAG仿真開發(fā)環(huán)境如圖所示。在JTAG單片機仿真開發(fā)環(huán)境中,JTAG適配器提供了計算機通信口到單片機JTAG口的透明轉(zhuǎn)換,并且不出借CPU和程序存儲器給應(yīng)用系統(tǒng),使得仿真更加貼近實際目標(biāo)系統(tǒng)。單片機內(nèi)部已集成了基于JTAG協(xié)議調(diào)試和下載程序。,2020年7月28日4時48分,9,在線編程目前有兩種實現(xiàn)方法:在系統(tǒng)編程(ISP)和在應(yīng)用編程(IAP)。ISP一般通過單片機專用的串行編程接口對單片機內(nèi)部的Flash存儲器進行編程,而IAP技術(shù)是從結(jié)構(gòu)上將Flash存儲器映射為兩個

6、存儲體,當(dāng)運行一個存儲體上的用戶程序時,可對另一個存儲體重新編程,之后將控制從一個存儲體轉(zhuǎn)向另一個。ISP的實現(xiàn)一般需要很少的外部電路輔助實現(xiàn),而IAP的實現(xiàn)更加靈活,通??衫脝纹瑱C的串行口接到計算機的RS232口,通過專門設(shè)計的固件程序?qū)?nèi)部的FLASH存儲器編程。,4 單片機的在線編程,2020年7月28日4時48分,10,6.2 51單片機C語言編寫的一般方法,Keel C51軟件是目前最流行開發(fā)8051系列單片機的軟件工具,這從近年來各單片機仿真機廠商紛紛宣布全面支持Keil C51即可看出。Keil C51提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的

7、完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(Vision3 IDE Integration Develop Entironment )將這些部份組合在一起。掌握這一軟件的使用對于使用8051系列單片機的愛好者來說是十分必要的,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強大的軟件仿真調(diào)試工具也會令開發(fā)者事半功倍。,用C語言編寫程序,離不開Keil C51軟件!,2020年7月28日4時48分,11,Vision3 IDE主要特性:,Vision3 IDE基于Windows的開發(fā)平臺,包含一個高效的編輯器、一個項目管理器和一個MAKE工具。Vision3 IDE支持所有的Keil C51工

8、具,包括 C 編譯器、宏匯編器、連接/定位器、目標(biāo)代碼到 HEX 的轉(zhuǎn)換器。,Vision3 IDE內(nèi)嵌多種符合當(dāng)前工業(yè)標(biāo)準(zhǔn)的開發(fā)工具,可以完成從工程建立、管理、編譯連接、目標(biāo)代碼的生成、軟件仿真、硬件仿真等完整的開發(fā)流程。,2020年7月28日4時48分,12, 集成開發(fā)環(huán)境, C51 編譯器和A51匯編器, LIB51庫管理器, BL51鏈接器/定位器, Vision3 軟件調(diào)試器, Vision3 IDE硬件調(diào)試器, RTX51 實時操作系統(tǒng),Vision3 IDE主要特性如下:,2020年7月28日4時48分,13,6.2.1 建立您的第一個KEILC51項目,安裝完keil軟件后,用

9、戶可以雙擊桌面“Vision3”運行圖標(biāo)進入IDE環(huán)境。,1. 建立工程文件,在項目開發(fā)中,并不是只有一個用C或匯編語言編寫的源程序就行了的,還要為項目選擇所用的CPU,Keil支持數(shù)百種CPU,而這些CPU的特性并不完全相同;還要確定編譯、匯編、連接的參數(shù),指定調(diào)試的方式,有一些項目還會有多個文件組成等。為了管理和使用方便,Keil使用工程(Project)這一概念,將上述參數(shù)設(shè)置和所需的所有文件都加在一個工程中,只能對工程而不能對單一的源程序進行編譯(匯編)和連接等操作。,2020年7月28日4時48分,14,(1) 點擊“ProjectNew Project.”菜單,出現(xiàn)一個對話框,選擇

10、工程要保存的路徑,輸入工程文件名。為了方便管理,通常我們將一個工程放在一個獨立文件夾下,如保存到exam_1文件夾,工程文件的名字為exam_1,如下圖所示,然后單擊保存按鈕。工程建立后,此工程名變?yōu)閑xam_l.uv2。,2020年7月28日4時48分,15,(2) 點擊“保存”按鈕后,出現(xiàn)下圖所示對話框,這個對話框要求選擇目標(biāo)CPU(即所用芯片的型號),Keil支持的CPU很多,Keil軟件的關(guān)鍵是程序代碼的編寫,而非用戶選擇什么硬件,我們選擇Atmel公司的89C52芯片。,2020年7月28日4時48分,16,點擊ATMEL前面的“+”號,展開該層,點擊其中的89C52。出現(xiàn)的界面上頁

11、圖所示,右邊【Description】欄里是對該型號單片機的基本說明,我們可以單擊其他型號單片機瀏覽一下其功能特點,然后再點擊“確定”按鈕,彈出將8051初始化代碼復(fù)制到項目中的詢問窗口,如下圖所示。,2020年7月28日4時48分,17,(3) 單擊“否”按鈕,出現(xiàn)下圖所示的窗口。如果需要重命名Target 1和Source Group 1,在左側(cè)Project Workspace區(qū)用鼠標(biāo)左鍵選中Target 1,再用鼠標(biāo)左鍵單擊Target 1,即可重新命名Target 1。用同樣的方法可以修改Source Group 1,這里對此不做修改。,2020年7月28日4時48分,18,到此為止

12、,我們還未建立好一個完整的工程,雖然工程名有了,但工程當(dāng)中還沒有源文件及代碼,接下來我們添加文件及代碼。,2020年7月28日4時48分,19,(4) 使用菜單“FileNew”或者點擊工具欄的新建文件按鈕,新建文件后窗口界面如圖2-6所示。,2020年7月28日4時48分,20,此時光標(biāo)在編輯窗口中閃爍,可以輸入用戶的應(yīng)用程序,但此時這個新建文件與我們剛才建立的工程還沒有直接的聯(lián)系,單擊保存,窗口界面如圖2-7所示,在【文件名(N)】編輯框中,輸入要保存的文件名,同時必須輸入正確的擴展名。注意,如果用C語言編寫程序,則擴展名必須為.c;如果用匯編語言編寫程序,則擴展名必須為.asm。這里的文

13、件名不一定要和工程名相同,用戶可以隨意填寫文件名,然后單擊【保存】按鈕。,2020年7月28日4時48分,21,(5) 回到編輯界面,單擊【Target 1】前面的“+”號,然后在【Source Group 1】選項上,單擊右鍵,彈出如下圖所示的菜單。然后選擇【Add Files to Group Source Group 1 】菜單項,對話框如圖2-9所示。,2020年7月28日4時48分,22,選中文件后的對話框,2020年7月28日4時48分,23,圖2-10 將文件加入工程后的屏幕窗口,選中【exam_1.c】,單擊【Add】按鈕,再單擊【Close】按鈕,然后我們再單擊左側(cè)【Sour

14、se Group 1】前面的“+”號,屏幕窗口如圖2-10所示,2020年7月28日4時48分,24,點亮一個二極管的控制系統(tǒng)硬件電路,2020年7月28日4時48分,25,(6) 在編輯窗口中輸入點亮一個發(fā)光二極管的C語言源程序: # include /52系列單片機頭文件 sbit led1=P10; /聲明單片機P1口的第一位 void main() led1=0;/*點亮LED發(fā)光二極管 while(1);/程序停止到這里 ,2020年7月28日4時48分,26,程序輸入完畢后保存,界面如下圖 。,2020年7月28日4時48分,27,程序輸入完畢后保存,界面如下圖 。通過以上(1)(

15、6)步我們學(xué)習(xí)了如何在Keil編譯環(huán)境下建立一個工程。,2020年7月28日4時48分,28,2.工程的設(shè)置,見實驗指導(dǎo)書中實驗一,2020年7月28日4時48分,29,3.軟件仿真調(diào)試,見實驗指導(dǎo)書中實驗一,2020年7月28日4時48分,30,編寫并調(diào)試讓二極管以間隔1s的時間亮滅閃爍的程序。,# include /52系列單片機頭文件 sbit led1=P10; /聲明單片機P1口的第一位 unsigned int i,j; /聲明無符號整型變量i,j void main() /主函數(shù) while(1) /大循環(huán) led1=0; /點亮LED發(fā)光二極管 for (i=1000;i0;i

16、-) /延時 for (j=110;j0;j-);/ led1=1;/關(guān)閉LED發(fā)光二極管 for (i=1000;i0;i-) for (j=110;j0;j-) ; ,2020年7月28日4時48分,31,再來看P1口控制流水燈的電路,2020年7月28日4時48分,32,如果我們要控制八個發(fā)光二極管先是二極管D1、D3、D5、D7亮,然后是二極管D2、D4、D6、D8亮,則程序為: # include /52系列單片機頭文件 unsigned int i,j; /聲明無符號整型變量i,j void main() /主函數(shù) while(1) /大循環(huán) P1=0 x55; /點亮LED發(fā)光二

17、極管 for (i=1000;i0;i-) /延時 for (j=110;j0;j-);/ P1=0 xAA;/關(guān)閉LED發(fā)光二極管 for (i=1000;i0;i-) /延時 for (j=110;j0;j-) ; ,2020年7月28日4時48分,33,6.3.2 C語言的標(biāo)識符和關(guān)鍵字,1標(biāo)識符 標(biāo)識符是用來標(biāo)識源程序中某個對象的名字,這些對象可以是語句、數(shù)據(jù)類型、函數(shù)、變量、數(shù)組等等。 例如: int count; /count為整型變量的標(biāo)識符 char name 20; /name為包含20個元素的數(shù)組的標(biāo)識符 C51的標(biāo)識符可以由字母、數(shù)字(09)和下劃線組成,最多可支持32個

18、字符。其中標(biāo)識符的第一個字符必須為字母或下劃線,例如count2是正確的,而2count則是錯誤的。通常以下劃線開頭的標(biāo)識符是編譯系統(tǒng)專用的,因此在編寫C語言源程序時一般不要使用以下劃線開頭的標(biāo)識符。而且C語言是區(qū)分大小寫的,name與NAME是兩個不同的標(biāo)識符。,2020年7月28日4時48分,34,6.3.2 C語言的標(biāo)識符和關(guān)鍵字,2關(guān)鍵字 關(guān)鍵字是編程語言保留的特殊標(biāo)識符,它們具有固定名稱和含義,在程序編寫中不允許標(biāo)識符與關(guān)鍵字相同。 如int、if、for等等。在Keil C51開發(fā)環(huán)境的文本編輯器中編寫C程序,系統(tǒng)會把關(guān)鍵字以不同顏色顯示。在C語言的程序編寫中不允許標(biāo)識符與關(guān)鍵字相

19、同。與其他計算機語言相比,C語言的關(guān)鍵字較少,ANSI C標(biāo)準(zhǔn)共規(guī)定了32個關(guān)鍵字,,2020年7月28日4時48分,35,6.3.2 C語言的標(biāo)識符和關(guān)鍵字,表6-1 ANSI C標(biāo)準(zhǔn)關(guān)鍵字,2020年7月28日4時48分,36,6.3.2 C語言的標(biāo)識符和關(guān)鍵字,續(xù)表6-1 ANSI C標(biāo)準(zhǔn)關(guān)鍵字,2020年7月28日4時48分,37,表6-2 Keil C51編譯器擴展的關(guān)鍵字,2020年7月28日4時48分,38,6.3.3 Keil C51 中的基本數(shù)據(jù)類型,Keil C51編譯器具體支持的數(shù)據(jù)類型有: 位型(bit) 、 無符號字符(unsigned char)、有符號字符(sin

20、ged char) 無符號整型(unsigned int ) 、 有符號整型(signed int ) 無符號長整型(unsigned long ) 、 有符號長整型(signed long ) 浮點型(float)和指針類型等。,2020年7月28日4時48分,39,6.3.3 Keil C51 中的基本數(shù)據(jù)類型,2020年7月28日4時48分,40,1char 字符類型 char 類型的長度是一個字節(jié),通常用于定義處理字符數(shù)據(jù)的變量或常量。分無符號字符類型unsigned char 和有符號字符類型signed char,默認值為signed char 類型。這很合適MCS-51單片機,因

21、為MCS-51單片機每次可處理8位數(shù)據(jù)。 unsigned char 類型用字節(jié)中所有的位來表示數(shù)值,所以可表達的數(shù)值范圍是0255。signed char 類型用字節(jié)中最高位字節(jié)表示數(shù)據(jù)的符號,“0”表示正數(shù),“1”表示負數(shù),負數(shù)用補碼表示。所能表示的數(shù)值范圍是-128+127。 2int 整型 int 整型長度為兩個字節(jié),用于存放一個雙字節(jié)數(shù)據(jù)。 分有符號整型數(shù)signed int和無符號整型數(shù)unsigned int,默認值為signed int 類型。,2020年7月28日4時48分,41,3long 長整型 long 長整型長度為四個字節(jié),用于存放一個四字節(jié)數(shù)據(jù)。 4float 浮點

22、型 浮點型變量(float): 浮點型變量為32位,占4個字節(jié),許多復(fù)雜的數(shù)學(xué)表達式都采用浮點變量數(shù)據(jù)類型。應(yīng)用符號位表示數(shù)的符號,用階碼和尾數(shù)表示數(shù)的大小。 5* 指針型 指針型本身就是一個變量,在這個變量中存放指向另一個數(shù)據(jù)的地址。 這個指針變量要占據(jù)一定的內(nèi)存單元,對不同的處理器長度也不盡相同,在C51 中它的長度一般為13 個字節(jié)。具體可參考相關(guān)C語言教程。,2020年7月28日4時48分,42,6bit 位變量 bit 位變量是C51 編譯器的一種擴充數(shù)據(jù)類型,利用它可定義一個位變量,但不能定義位指針,也不能定義位數(shù)組。它的值是一個二進制位,不是0 就是1。類似于一些高級語言中的Bo

23、olean類型中的True和False。 7sfr 特殊功能寄存器 sfr 也是一種擴充數(shù)據(jù)類型,占用一個內(nèi)存單元,值域為0255。 利用它可以訪問51單片機內(nèi)部的所有特殊功能寄存器。如用sfr P1 = 0 x90, 這一句定P1 為P1 端口在片內(nèi)的寄存器,在后面的語句中我們用以用P1 = 255(對P1 端口的所有引腳置高電平)之類的語句來操作特殊功能寄存器。,2020年7月28日4時48分,43,8sfr16 16 位特殊功能寄存器 sfr16 占用兩個內(nèi)存單元,值域為065535。 sfr16 和sfr 一樣用于操作特殊功能寄存器,所不同的是它用于操作占兩個字節(jié)的寄存器,可用于定時器

24、T0 和T1。 9sbit 可尋址位 sbit 同位是C51 中的一種擴充數(shù)據(jù)類型,利用它可以訪問芯片內(nèi)部的RAM 中的可尋址位或特殊功能寄存器中的可尋址位。 例如:sfr P1 = 0 x90; sfr P1_1=P11; sfr P1_1=0 x91;,2020年7月28日4時48分,44,8sfr16 16 位特殊功能寄存器 sfr16 占用兩個內(nèi)存單元,值域為065535。 sfr16 和sfr 一樣用于操作特殊功能寄存器,所不同的是它用于操作占兩個字節(jié)的寄存器,可用于定時器T0 和T1。 9sbit 可尋址位 sbit 同位是C51 中的一種擴充數(shù)據(jù)類型,利用它可以訪問芯片內(nèi)部的RA

25、M 中的可尋址位或特殊功能寄存器中的可尋址位。 例如:sfr P1 = 0 x90; sfr P1_1=P11; sfr P1_1=0 x91;,2020年7月28日4時48分,45,在8051單片機系統(tǒng)中,經(jīng)常要訪問特殊功能寄存器中的某些位,用關(guān)鍵字sbit定義可位尋址特殊功能寄存器的位尋址對象。定義方法有如下三種: (1 ) sbit位變量名=位地址 將位的絕對地址賦給位變量,位地址必須位于Ox80HxFFH之間。例如: sbit OV=0 xD2; sbit CY=0XD7;,2020年7月28日4時48分,46,( 2) sbit位變量名=特殊功能寄存器名位位置 當(dāng)可尋址位位于特殊功能

26、寄存器中時,可采用這種方法。位位置是一個07范圍內(nèi)的常數(shù)。例如: sfr SCON=0 x98; /*定義SCON*/ sbit RI= SCON0; /*定義SCON的各位*/ sbit TI=SCON1; sbit RB8= SCON2; shit TB8= SCON3; shit REN= SOON4; sbit SM2= SCON5; sbit SM1= SCON6; sbit SM0= SCON7;,2020年7月28日4時48分,47,( 3 ) sbit位變量名=字節(jié)地址位位置 這種方法是以一個常數(shù)(字節(jié)地址)作為基地址,該常數(shù)必須在0 x80H0 xFF范圍內(nèi)。位位置是一個07

27、范圍內(nèi)的常數(shù)。例如: sbit OV=0 xD02; sbit CY=0 xD07; 8051單片機中的特殊功能寄存器和特殊功能寄存器可尋址位,己被預(yù)先定義放在文件reg51.h或reg52.h中,在程序的開頭只需加上#include或#include即可。 另外,sbit還可以訪問8051單片機片內(nèi)20H2FH范圍內(nèi)的位對象。C51編譯器提供了一個bdata存儲器類型,允許將具有bdata類型的對象放入8051單片機片內(nèi)可位尋址區(qū)。例如:,2020年7月28日4時48分,48,int bdata bi_var1; /*在位尋址區(qū)定義一個整型變量bi_var1*/ char bdata bc_

28、array3; /*在位尋址區(qū)定義字符型數(shù)組整型變量bc_array */ sbit bi_var1_bit0=bi_var10; /*使用位變量bi_var1_bit0訪問bi_var1第0位*/ sbit bi_var1_ bit 15=bi_var115; /*使用位變量bi_var1_bit15訪問bi_var1第15位*/ sbit bc_array05= bc_array 05;/*使用位變量bc_array05訪問bc_array 0 第5位*/,2020年7月28日4時48分,49,6.3.4 變量的存儲種類和存儲器類型,變量是一種在程序執(zhí)行過程中,其數(shù)值不斷變化的量。同ANS

29、I C一樣,C51規(guī)定變量必須先定義后使用。C51對變量的進行定義的格式如下: 存儲種類 數(shù)據(jù)類型 存儲器類型 變量名表 其中,存儲種類和存儲器類型是可選項。,2020年7月28日4時48分,50,存儲種類是指變量在程序執(zhí)行過程中的作用范圍。變量的存儲種類有四種,分別為: 自動(auto) 外部(extern) 靜態(tài)(static) 寄存器(register),2020年7月28日4時48分,51,使用外部種類存儲符extern定義的變量稱為外部變量。在一個函數(shù)體內(nèi),要使用一個已在該函數(shù)體外或別的程序模塊文件中定義過的外部變量時,該變量在本函數(shù)體內(nèi)要用extern說明。,當(dāng)片內(nèi)RAM資源緊張時

30、,不建議將外部變量放在片內(nèi)RAM。,2020年7月28日4時48分,52,使用存儲種類說明符static定義的變量稱為靜態(tài)變量。靜態(tài)變量分為局部靜態(tài)變量和全局靜態(tài)變量。,局部靜態(tài)變量是在兩次函數(shù)調(diào)用之間仍能保持其值的局部變量。有些程序要求在多次調(diào)用之間仍然保持變量的值,使用自動變量無法作用到這一點。使用全局變量有時會帶來意外的副作用,這時可采用局部靜態(tài)變量。,2020年7月28日4時48分,53,使用存儲種類說明符register定義的變量稱為寄存器變量。8051訪問寄存器的速度最快,通常將使用頻率最高的那些變量定義為寄存器變量。C51編譯器能自動識別程序中使用頻率最高的變量,并自動將其作為寄

31、存器變量,用戶無需專門聲明。,2020年7月28日4時48分,54,2. 存儲器類型,定義變量時,除了說明存儲種類外,還允許說明變量的存儲器類型。存儲器類型和存儲種類是完全不同的概念,存儲器類型指明該變量所處的單片機的內(nèi)存空間。C51編譯器可識別以下存儲器類型,如下表所示。,2020年7月28日4時48分,55,2020年7月28日4時48分,56,圖6-14 MCS-51單片機存儲器結(jié)構(gòu)示意圖,2020年7月28日4時48分,57,如果在變量定義時省略了存儲器類型標(biāo)識符,C51編譯器會選擇默認的存儲器類型。默認的存儲器類型由SMALL、COMPACT和LARGE存儲模式指令決定。,2020年

32、7月28日4時48分,58,1)data區(qū) 對data區(qū)的尋址是最快的,所以應(yīng)該把使用頻率高的變量放在data區(qū),由于空間有限,必須注意使用data區(qū),data區(qū)除了包含程序變量外,還包含了堆棧和寄存器組data區(qū)。,在SMALL存儲模式下,未說明存儲器類型時,變量默認被定位在data區(qū)。,2020年7月28日4時48分,59,2)bdata區(qū) 當(dāng)在DATA區(qū)的位尋址區(qū)定義變量,這個變量就可進行位尋址,并且聲明位變量。這對狀態(tài)寄存器來說十分有用,因為它可以單獨使用變量的每一位,而不一定要用位變量名引用位變量。,3)idata區(qū) idata區(qū)也可以存放使用比較頻繁的變量,使用寄存器作為指針進行尋

33、址。在寄存器中設(shè)置8位地址進行間接尋址,與外部存儲器尋址比較,它的指令執(zhí)行周期和代碼長度都比較短。,2020年7月28日4時48分,60,4)pdata和xdata區(qū) 在這兩個區(qū)聲明變量和在其他區(qū)的語法是一樣的,pdata區(qū)只有256B,而xdata區(qū)可達65536B,5)code區(qū) code區(qū)即8051的程序代碼區(qū),所以代碼區(qū)的數(shù)據(jù)是不可改變的,8051的代碼區(qū)不可重寫。一般代碼區(qū)中可存放數(shù)據(jù)表,跳轉(zhuǎn)向量和狀態(tài)表,2020年7月28日4時48分,61,C51編譯器允許采用三種存儲模式:小編譯模式SMALL、緊湊編譯模式COMPACT、大編譯模式LARGE。,6.3.5 存儲模式,2020年7

34、月28日4時48分,62,一個變量的存儲器模式確定了未聲明存儲器類型的變量在內(nèi)存中的地址空間。在SMALL模式下,該變量在8051單片機的內(nèi)部RAM中;在COMPACT和LARGE模式下,該變量在8051單片機的外部RAM中。,建議在編寫源程序時,把存儲模式設(shè)定為SMALL,再在程序中把xdata、pdata和idata等類型變量進行專門聲明。,2020年7月28日4時48分,63,6.3.6 MCS-51特殊功能寄存器(SFR)的C51定義,MCS-51單片機中,除了程序計數(shù)器PC和4組工作寄存器組外,其它所有的寄存器均為特殊功能寄存器(SFR),分散在片內(nèi)RAM區(qū)的高128字節(jié)中,地址范圍

35、為80H0FFH。SFR中有11個寄存器具有位尋址能力。 為了能直接訪問這些SFR,Keil C51提供了一種自主形式的定義方法。特殊功能寄存器C51定義的一般語法格式如下: sfr sfr-name = int constant; “sfr”是定義語句的關(guān)鍵字,其后必須跟一個MCS-51單片機真實存在的特殊功能寄存器名,“=”后面必須是一個整型常數(shù),不允許帶有運算符的表達式,是特殊功能寄存器“sfr-name”的字節(jié)地址,這個常數(shù)值的范圍必須在SFR地址范圍內(nèi),位于0 x800 xFF。 例如: sfr SCON=0 x98; sfr TMOD=0 x89;,2020年7月28日4時48分,

36、64,6.3.3 Keil C51 中的基本數(shù)據(jù)類型,Keil C51編譯器具體支持的數(shù)據(jù)類型有: 位型(bit) 、 無符號字符(unsigned char)、有符號字符(singed char) 無符號整型(unsigned int ) 、 有符號整型(signed int ) 無符號長整型(unsigned long ) 、 有符號長整型(signed long ) 浮點型(float)和指針類型等。,2020年7月28日4時48分,65,6.3.4 變量的存儲種類和存儲器類型,變量是一種在程序執(zhí)行過程中,其數(shù)值不斷變化的量。同ANSI C一樣,C51規(guī)定變量必須先定義后使用。C51對變

37、量的進行定義的格式如下: 存儲種類 數(shù)據(jù)類型 存儲器類型 變量名表 其中,存儲種類和存儲器類型是可選項。,2020年7月28日4時48分,66,存儲種類是指變量在程序執(zhí)行過程中的作用范圍。變量的存儲種類有四種,分別為: 自動(auto) 外部(extern) 靜態(tài)(static) 寄存器(register),2020年7月28日4時48分,67,2020年7月28日4時48分,68,C51編譯器允許采用三種存儲模式:小編譯模式SMALL、緊湊編譯模式COMPACT、大編譯模式LARGE。,6.3.5 存儲模式,2020年7月28日4時48分,69,一個變量的存儲器模式確定了未聲明存儲器類型的變

38、量在內(nèi)存中的地址空間。在SMALL模式下,該變量在8051單片機的內(nèi)部RAM中;在COMPACT和LARGE模式下,該變量在8051單片機的外部RAM中。,建議在編寫源程序時,把存儲模式設(shè)定為SMALL,再在程序中把xdata、pdata和idata等類型變量進行專門聲明。,2020年7月28日4時48分,70,6.3.6 MCS-51特殊功能寄存器(SFR)的C51定義,MCS-51單片機中,除了程序計數(shù)器PC和4組工作寄存器組外,其它所有的寄存器均為特殊功能寄存器(SFR),分散在片內(nèi)RAM區(qū)的高128字節(jié)中,地址范圍為80H0FFH。SFR中有11個寄存器具有位尋址能力。 為了能直接訪問

39、這些SFR,Keil C51提供了一種自主形式的定義方法。特殊功能寄存器C51定義的一般語法格式如下: sfr sfr-name = int constant; “sfr”是定義語句的關(guān)鍵字,其后必須跟一個MCS-51單片機真實存在的特殊功能寄存器名,“=”后面必須是一個整型常數(shù),不允許帶有運算符的表達式,是特殊功能寄存器“sfr-name”的字節(jié)地址,這個常數(shù)值的范圍必須在SFR地址范圍內(nèi),位于0 x800 xFF。 例如: sfr SCON=0 x98; sfr TMOD=0 x89;,2020年7月28日4時48分,71,6.4 C51的運算符和表達式,C語言有豐富的運算符,絕大多數(shù)的操

40、作都可以通過運算符來處理。 運算符就是完成某種特定運算的符號,包括算術(shù)運算符、賦值運算符、邏輯運算符、關(guān)系運算符、位運算符、條件運算符等。 按照表達式中運算對象的個數(shù)又可將運算符分為單目運算符、雙目運算符和三目運算符。單目運算符只需要有一個運算對象,雙目運算符要求有兩個運算對象,三目運算符則要求有三個運算對象。 表達式是由運算符和運算對象所組成的具有特定含義的式子。運算符和表達式可以組成C語言程序的各種語句。,2020年7月28日4時48分,72,6.4.1 算術(shù)運算符,算術(shù)運算符包括以下幾種: + 加或取正值運算符 - 減或取負值運算符 * 乘運算符 / 除運算符 % 取余運算符 + 自增運

41、算符 - 自減運算符,2020年7月28日4時48分,73,加、減、乘法運算符合一般的算術(shù)運算規(guī)則。 除法運算則有些特殊,如果是兩個浮點數(shù)相除,其結(jié)果為浮點數(shù),如3.0/10.0所得值為0.3,而當(dāng)兩個整數(shù)相除時,所得值就是整數(shù),如7/3,值為2,舍去小數(shù)部分。 取余運算符也是進行除法運算,只是結(jié)果不是商而是余數(shù)。如8 % 5 = 3,即8除以5的余數(shù)是3 。 像別的語言一樣C的運算符也有優(yōu)先級和結(jié)合性,也可以用括號()來改變優(yōu)先級。,6.4.1 算術(shù)運算符,2020年7月28日4時48分,74,自增、自減運算符的作用是使變量的值加1或減1。 +i 先使i的值加1,然后再使用; -i 先使i的

42、值減1,然后再使用; i+ 使用完i的值以后,再使i的值加1; i- 使用完i的值以后,再使i的值減1。,6.4.1 算術(shù)運算符,2020年7月28日4時48分,75,例如:假設(shè)i=8, 則執(zhí)行j=+i時,i先加1變?yōu)?,然后把9賦給變量j,所以執(zhí)行結(jié)果為i=9,j=9。 而執(zhí)行j=i+時,先將i的值8賦給j,然后再使i的值加1,執(zhí)行結(jié)果為i=9,j=8。,6.4.1 算術(shù)運算符,2020年7月28日4時48分,76,例:void main() int i=8; int a,b,c,d,e,f; a=+i; b=-i; c=i+; d=i-; e=-i+; f=-i; while(1); ,6

43、.4.1 算術(shù)運算符,2020年7月28日4時48分,77,“=”就是賦值運算符,其功能是將一個數(shù)據(jù)賦給一個變量,如 a=8; b=5; c=a/b; a=b=6; 以上語句都是合法的。語句的執(zhí)行過程是先計算出右邊表達式的值,再將該值賦給左邊的變量。,6.4.2 賦值運算符,2020年7月28日4時48分,78,關(guān)系運算符的功能就是判斷兩個數(shù)的關(guān)系。 C語言有以下六種關(guān)系運算符: 大于 小于 大于等于 小于等于 測試等于 ! 測試不等于 關(guān)系運算符的優(yōu)先級低于算術(shù)運算符,高于賦值運算符。 六種關(guān)系運算符中前四種具有相同的優(yōu)先級,后兩種具有相同的優(yōu)先級,而且前四種的優(yōu)先級高于后兩種。 注意賦值運

44、算符“=”和測試等于“=” 關(guān)系運算符不一樣。,6.4.3 關(guān)系運算符,2020年7月28日4時48分,79,兩個表達式用關(guān)系運算符連接起來就構(gòu)成了關(guān)系表達式。關(guān)系表達式的值為邏輯值,即只有真(true)和假(false)兩種狀態(tài),在C語言中用1表示真,用0表示假。若關(guān)系表達式的條件成立,則表達式的值為真(1),否則為假(0)。,6.4.3 關(guān)系運算符,2020年7月28日4時48分,80,例 觀察關(guān)系運算符的用法和功能。 void main() int a,b,c,d,e,f; a=(56); b=(3=10); d=(10=9); e=(7=8); f=(7!=8); while(1);

45、,6.4.3 關(guān)系運算符,2020年7月28日4時48分,81,邏輯運算符的功能是通過邏輯運算求條件式的邏輯值。 C語言有以下三種邏輯運算符: a=(56) ,6.4.4 邏輯運算符,2020年7月28日4時48分,84,6.4.5 位運算符,位運算符的功能是對變量按位進行運算,但并不改變運算變量的值。C語言有以下六種位運算符: char x=0 xa6; i=0 x36; j=0 x98; a=i ,2020年7月28日4時48分,88,6.4.6 復(fù)合賦值運算符,復(fù)合賦值運算符是C語言的一種特色,它簡化了代碼的編寫。該類運算符的功能是將某個變量先與表達式進行指定的運算,再將運算結(jié)果賦予該變

46、量。 C語言有以下十種復(fù)合賦值運算符: += 加并賦值運算符 -= 減并賦值運算符 *= 乘并賦值運算符 /= 除并賦值運算符 %= 取余并賦值運算符 = 右移并賦值運算符 char x=0 xa6; i=0 x36, j=0 x98; a=0 x23, b=0 x34; a ,2020年7月28日4時48分,90,6.4.7 條件運算符,條件運算符是三目運算符,格式如下: 判斷結(jié)果=(判斷式)?結(jié)果1:結(jié)果2 其含義是先求判斷式的值,若為真,則判斷結(jié)果=結(jié)果1;若為假,則判斷結(jié)果=結(jié)果2。,2020年7月28日4時48分,91,6.4.7 條件運算符,例4-8 觀察條件運算符的用法和功能。

47、void main() char a,b,max; a=10; b=16; max=ab?a:b; while(1); ,執(zhí)行結(jié)果::max=16。,2020年7月28日4時48分,92,6.4.8 指針和地址運算符,在前面學(xué)習(xí)數(shù)據(jù)類型時,接觸過指針類型數(shù)據(jù),知道它是一種存放指向另一個數(shù)據(jù)的地址的變量類型。C語言中提供了兩個專門用于指針和地址的運算符: * 指針運算符(取內(nèi)容) a=10; m= ,2020年7月28日4時48分,94,作業(yè):第六章1、2、3、4 補充:P1 口的 P1.2 和 P1.3 各接一開關(guān) S1 、 S2 , .P1.4 、 P1.5 、 P1.6 和 P1.7 各接

48、一個發(fā)光二極管,如圖所示。由開關(guān) S1 和 S2 的不同狀態(tài),確定哪個發(fā)光二極管亮,真值表如下表所示:請編寫程序?qū)崿F(xiàn)上述功能。并用proteus仿真驗證。,2020年7月28日4時48分,95,C語言源程序由若干個函數(shù)單元組成,每一個函數(shù)都是完成某個特殊任務(wù)的子程序段。 一個C語言程序必須而且只能有一個名為main()的函數(shù)。它是一個特殊的函數(shù),也稱為該程序的主函數(shù),程序的執(zhí)行都是從main()函數(shù)開始的。 C語言程序一般具有如下結(jié)構(gòu): 預(yù)處理命令 #include 函數(shù)定義 char fun1(); float fun2(); 主函數(shù) main() 函數(shù)體 功能函數(shù)1 fun1() 功能函數(shù)

49、2 fun2() ,6.5 C51語言的程序設(shè)計,2020年7月28日4時48分,96,6.5.1 51程序結(jié)構(gòu),C 語言程序有順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu)。,2020年7月28日4時48分,97,6.5.1 51程序結(jié)構(gòu),循環(huán)結(jié)構(gòu)又分為“while”型循環(huán)結(jié)構(gòu)和“do-while” 型循 環(huán)結(jié)構(gòu),相應(yīng)的流程圖如下圖所示。,2020年7月28日4時48分,98,6.5.2 C51語言的語句,C51語言的語句是單片機執(zhí)行的操作命令,每條語句都 以分號結(jié)尾,需要注意的是,變量、函數(shù)的聲明部分也以 分號結(jié)尾,但不是語句。 C語言包括以下語句: 1.表達式語句 由一個表達式加上一個分號就構(gòu)

50、成了表達式語句。如: i=7; j=a=b; i+;,2020年7月28日4時48分,99,6.5.2 C51語言的語句,2.復(fù)合語句 用大括號“ ”將多條語句括起來就組成了復(fù)合語句,也稱為功能塊。復(fù)合語句中的每一條語句都必須以“;”結(jié)束,而不允許將“;”寫在“”外。復(fù)合語句不需要以“;”結(jié)束。C語言中將復(fù)合語句視為一條單語句,也就是說在語法上等同于一條單語句。對于一個函數(shù)而言,函數(shù)體就是一個復(fù)合語句。如: i=7; j=a=b; i+; ,2020年7月28日4時48分,100,6.5.2 C51語言的語句,3.空語句 空語句是僅由一個分號“;”組成的語句??照Z句什么也做,語句格式: ;,2

51、020年7月28日4時48分,101,6.5.2 C51語言的語句,4.函數(shù)調(diào)用語句 函數(shù)調(diào)用的一般形式加上分號就構(gòu)成了函數(shù)調(diào)用語句。 語句格式: 函數(shù)名(實際參數(shù)表); 執(zhí)行函數(shù)調(diào)用語句就是調(diào)用函數(shù)體并把實際參數(shù)賦予函 數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù)體中的語句。,2020年7月28日4時48分,102,6.5.2 C51語言的語句,5.控制語句 控制語句用于控制程序的流程,以實現(xiàn)程序的各種結(jié)構(gòu) 方式。C51的控制語句有以下幾類: (1) 選擇語句if if語句是C語言的一種基本的選擇控制語句,它有以下三 種形式:,2020年7月28日4時48分,103,6.5.2 C51語言的語句,

52、if(表達式) 語句序列; 其它語句 功能:如果表達式的值為真則執(zhí)行語句,否則不執(zhí)行語句。 流程圖如圖所示。,if分支結(jié)構(gòu)示意圖,2020年7月28日4時48分,104,例 仿真電路如下圖所示,試編程實現(xiàn):當(dāng)開關(guān)K閉合時上面四個發(fā)光二極管先亮,下面四個二極管后亮,當(dāng)開關(guān)K打開時僅下面四個發(fā)光二極管亮。,程序如下:# include sbit k=P34;void main()while(1) if(k=0) P1=0 xf0; P1=0 x0f; ,2020年7月28日4時48分,105,例 仿真電路如下圖所示,試編程實現(xiàn):當(dāng)開關(guān)K閉合時上面四個發(fā)光二極管先亮,下面四個二極管后亮,當(dāng)開關(guān)K打開

53、時僅下面四個發(fā)光二極管亮。,# include sbit k=P34;void main()while(1) if(k=0) P1=0 xf0; P1=0 x0f; ,2020年7月28日4時48分,106, if(表達式) 語句序列1; else 語句序列2; 其它語句 功能:如果表達式的值為真則執(zhí)行語句序列1,否則執(zhí)行語句序列2。,if-else分支結(jié)構(gòu)示意圖,2020年7月28日4時48分,107,例 仿真電路如下圖所示,試編程實現(xiàn):當(dāng)開關(guān)K閉合時8個發(fā)光二極管亮,K斷開時8個發(fā)光二極管滅。,程序如下:# include sbit k=P34;void main()while(1) if

54、(k=0) P1=0 x00; else P1=0 xff; ,2020年7月28日4時48分,108, if(表達式1)語句序列1; else if(表達式2)語句序列2; else if(表達式3)語句序列3; else if(表達式n)語句序列n; else 語句序列n+1;其它語句,if-else if分支結(jié)構(gòu)示意圖,2020年7月28日4時48分,109,例4-12假設(shè)從鍵盤輸入數(shù)據(jù)x,請編寫一程序,判斷x大于0,等于0,還是小于0;并輸出其判斷結(jié)果。,解:程序如下:#include void main()char x,y; scanf(“%d”,2020年7月28日4時48分,11

55、0,(2).switch語句switch語句是多分支選擇語句,也稱開關(guān)語句。一般格式如下:switch(表達式)case 常量表達式1:語句序列1;case 常量表達式2:語句序列2;case 常量表達式n:語句序列n;default :語句序列n+1;,2020年7月28日4時48分,111,每個case和default出現(xiàn)的順序不影響執(zhí)行結(jié)果,但每個常量表達式的值必須互不相同。該語句的執(zhí)行過程如下: 求switch后括號內(nèi)的表達式的值,并將其值與各case后的常量表達式值進行比較; 當(dāng)表達式的值與某個常量表達式相等時,則執(zhí)行該常量表達式后邊的語句序列; 接著執(zhí)行下一個常量表達式后邊的語句序

56、列,直到后邊所有的語句序列都執(zhí)行完(即執(zhí)行到語句序列n+1); 如果表達式的值與所有case后的常量表達式都不相等,則執(zhí)行default后面的語句序列。,2020年7月28日4時48分,112,但是我們通常只是需要當(dāng)某個常量表達式的值與switch后表達式的值相等時就執(zhí)行該case后的語句序列,并不希望程序一直執(zhí)行下去,直到語句序列n+1。要達到這一目的,只需要在每個語句序列的后邊加上“break”語句即可。格式如下:switch(表達式)case 常量表達式1:語句序列1;break;case 常量表達式2:語句序列2;break;case 常量表達式n:語句序列n;break;defaul

57、t :語句序列n+1;,2020年7月28日4時48分,113,switch分支結(jié)構(gòu)示意圖,2020年7月28日4時48分,114,例 仿真電路如下圖所示,試編程實現(xiàn):當(dāng)只有K1閉合時,LED1亮,只有K2閉合時,LED2亮,依此類推。,#include void main()unsigned char k;while(1)P1|=0 xf0; /P1做I/O口時為準(zhǔn)雙向口,/用作輸入時應(yīng)先寫“1”k=P1;k=k,2020年7月28日4時48分,115,3.for語句 for語句是一個很實用的計數(shù)循環(huán)語句。其格式如下: for (表達式1;表達式2;表達式3) 語句序列; /循環(huán)體 其中表達

58、式1通常為賦值表達式,用來確定循環(huán)結(jié)構(gòu)中控制循環(huán)次數(shù)的變量的初始值,實現(xiàn)循環(huán)控制變量的初始化。 表達式2通常為關(guān)系表達式或邏輯表達式,用來判斷循環(huán)是否繼續(xù)進行。 表達式3通常為表達式語句,用來描述循環(huán)控制變量的變化,最常見的是自增或自減表達式,實現(xiàn)對循環(huán)控制變量的修改。 當(dāng)循環(huán)條件滿足時就執(zhí)行循環(huán)體內(nèi)的語句序列。語句序列可以是簡單語句,也可以是復(fù)合語句。若只有一條語句,則可以省略。,2020年7月28日4時48分,116,for語句的執(zhí)行過程如下:1)計算表達式1的值,為循環(huán)控制變量賦初值。2)計算表達式2的值,如果為真則執(zhí)行循環(huán)體一次,否則退出循環(huán),執(zhí)行for循環(huán)后的語句。3)如果執(zhí)行了循環(huán)

59、體語句,則執(zhí)行循環(huán)體后,要計算表達式3的值,調(diào)整循環(huán)控制變量。然后回到第2步重復(fù)執(zhí)行,直到表達式2的值為假時,退出循環(huán)。,for (表達式1;表達式2;表達式3) 語句序列; /循環(huán)體,2020年7月28日4時48分,117,例 仿真電路如下圖所示,編程使圖中的發(fā)光二極管D1閃亮。,解:程序如下:#include #define uchar unsigned charsbit LED=P10;void main(void)uchar i;while(1)LED=0;for(i=0;i250;i+);LED=1;for(i=0;i250;i+);,2020年7月28日4時48分,118,例 仿真

60、電路如下圖所示,編程使圖中的發(fā)光二極管D1閃亮。,解:程序如下:#include #define uchar unsigned charsbit LED=P10;void main(void)uchar i;while(1)LED=0;for(i=0;i250;i+);LED=1;for(i=0;i250;i+);,2020年7月28日4時48分,119,例 仿真電路如下圖所示,編程使圖中的發(fā)光二極管D1閃亮。,解:程序如下:#include #define uchar unsigned charsbit LED=P10;void main(void)uchar i;while(1)LED=0

61、;for(i=0;i250;i+)for(j=0;j80;j+);LED=1;for(i=0;i250;i+)for(j=0;j80;j+);,2020年7月28日4時48分,120,例 仿真電路如下圖所示,編程使圖中的發(fā)光二極管LED1閃爍10次 。,解:程序如下:#include #define uint unsigned intsbit LED=P10;void main(void)uint i,j,k;for(k=10;k0;k-) LED=0; for(i=0;i100;i+) for(j=0;j1000;j+); LED=1; for(i=0;i100;i+) for(j=0;j1

62、000;j+); while(1);,2020年7月28日4時48分,121,注意:for語句中的三個表達式都可以省略,但是分隔符“;”不能省略。如for(;i=100,i+);for(; ; ); /循環(huán)無限次,2020年7月28日4時48分,122,(4).while 語句while語句while 語句是用來實現(xiàn)“當(dāng)型”循環(huán)的語句,格式為:while (條件表達式)語句序列; /循環(huán)體,當(dāng)型循環(huán)示意圖,條件表達式一般是關(guān)系表達式或邏輯表達式,也可以是其它表達式,執(zhí)行時先計算表達式的值,當(dāng)表達式的值為真(非0)時執(zhí)行循環(huán)體內(nèi)的語句序列,為假(0)時則退出循環(huán)。循環(huán)體可以是一條簡單語句,也可以

63、是由多條語句構(gòu)成的復(fù)合語句,此時要用括起來。如果沒有,則while語句的范圍只到while后的第一個分號處。 當(dāng)型循環(huán)可概括為“先判斷,后執(zhí)行”,當(dāng)型循環(huán)示意圖流程圖如右圖所示。循環(huán)次數(shù)需要根據(jù)循環(huán)條件(表達式的值)來判定,如果開始時循環(huán)條件就為假,則循環(huán)體一次也不執(zhí)行。,2020年7月28日4時48分,123,在之前所見到的例程中經(jīng)常會見到“while(1)”語句,該語句因為表達式為常數(shù)1,即永遠為真,不可能為假,所以該語句將循環(huán)無限次,除非在循環(huán)體中有退出語句(break)。,2020年7月28日4時48分,124,例 仿真電路如下圖所示,編程使圖中的發(fā)光二極管D1閃亮10次。用while

64、語句實現(xiàn)。,解:程序如下:#include #define uint unsigned intsbit LED=P10;void main(void)uint i,j,k;k=10;while(k0)LED=0; for(i=0;i100;i+) for(j=0;j1000;j+);LED=1; for(i=0;i100;i+) for(j=0;j1000;j+);k-;while(1);,2020年7月28日4時48分,125,.do-while 語句do-while 語句是用來實現(xiàn)“直到型”循環(huán)的語句,格式如下:do語句序列;while(表達式);,直到型循環(huán)示意圖,條件表達式一般是關(guān)系表

65、達式或邏輯表達式,也可以是其它表達式,執(zhí)行時先執(zhí)行循環(huán)體一次,再計算表達式的值,當(dāng)表達式的值為真(非0)時執(zhí)行循環(huán)體內(nèi)的語句序列,為假(0)時則退出循環(huán)。 直到型循環(huán)可概括為“先執(zhí)行,后判斷”,流程圖如右圖所示。無論循環(huán)條件是否滿足,循環(huán)體至少被執(zhí)行一次。,2020年7月28日4時48分,126,例 求自然數(shù)1200之和。 程序如下: main() int count=1,sum=0; /* 初始化*/ do sum=sum+count; count+; while (count=200); while(1); 程序執(zhí)行結(jié)果: sum=20100,2020年7月28日4時48分,127,6.5.3 數(shù)組與指針,1數(shù)組 數(shù)組是一個由同種類型的變量組成的集合,它保存在連續(xù)的存儲區(qū)域中,第一個元素保存

展開閱讀全文
溫馨提示:
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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!