第3章_C51語言編程基礎(chǔ)_第1頁
第3章_C51語言編程基礎(chǔ)_第2頁
第3章_C51語言編程基礎(chǔ)_第3頁
第3章_C51語言編程基礎(chǔ)_第4頁
第3章_C51語言編程基礎(chǔ)_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、.第第3 3章章 C51C51語言編程基礎(chǔ)語言編程基礎(chǔ).1 1)機器語言)機器語言定義:處理器能直接執(zhí)行的二進(jìn)制代碼定義:處理器能直接執(zhí)行的二進(jìn)制代碼特點:效率高、但不易于使用特點:效率高、但不易于使用10110110 00000000 10110101 00000000ADD AADD A,#19#193.1 3.1 編程語言編程語言Keil C51Keil C51簡介簡介1、編程語言、編程語言2 2)匯編語言)匯編語言 定義:以助記符的形式表示機器語言定義:以助記符的形式表示機器語言 特點:速度快、體積小、但依賴于硬件體系特點:速度快、體積小、但依賴于硬件體系.3)高級語言)高級語言獨立于

2、機器、面向過程的、接近于人的自然語言。獨立于機器、面向過程的、接近于人的自然語言。語言:語言:FORTRAN、C語言語言特點:與硬件無關(guān)、易于交流和使用、運行效率低特點:與硬件無關(guān)、易于交流和使用、運行效率低X = X + 1;X = X + 1;編譯器編譯器鏈接器鏈接器X = X + 1;程序員程序員高級語言程序高級語言程序機器碼機器碼單片機如何執(zhí)行程序指令?單片機如何執(zhí)行程序指令?.Keil C51Keil C51語言是在標(biāo)準(zhǔn)語言是在標(biāo)準(zhǔn)C C的基礎(chǔ)上,針對的基礎(chǔ)上,針對5151單片機的硬件特點進(jìn)行單片機的硬件特點進(jìn)行擴展,并向擴展,并向5151單片機上移植的高效、簡潔的實用高級語言。單片

3、機上移植的高效、簡潔的實用高級語言。 與匯編語言相比的特點:與匯編語言相比的特點:(1)可讀性好)可讀性好。(2)可模塊化開發(fā)。)可模塊化開發(fā)。(3)可移植性好。)可移植性好。(4)生成的代碼效率較低。)生成的代碼效率較低。2 2、Keil C51Keil C51語言簡介語言簡介對于對于5151單片機,目前廣泛使用的是單片機,目前廣泛使用的是Keil C51Keil C51語言,簡稱語言,簡稱C51C51語言。語言。.3 3、C51C51與標(biāo)準(zhǔn)與標(biāo)準(zhǔn)C C的區(qū)別的區(qū)別(1 1)庫函數(shù)的不同。庫函數(shù)的不同。例如庫函數(shù)例如庫函數(shù)printfprintf和和scanfscanf,在標(biāo)準(zhǔn),在標(biāo)準(zhǔn)C C

4、中,這中,這兩個函數(shù)通常用于屏幕打印和接收字符,而在兩個函數(shù)通常用于屏幕打印和接收字符,而在Keil C51Keil C51中,主要中,主要用于串行口數(shù)據(jù)的收發(fā)。用于串行口數(shù)據(jù)的收發(fā)。(3 3)C51C51的變量存儲模式與標(biāo)準(zhǔn)的變量存儲模式與標(biāo)準(zhǔn)C C中的變量存儲模式不一樣。中的變量存儲模式不一樣。標(biāo)準(zhǔn)標(biāo)準(zhǔn)C C是在通用計算機中只有一個程序和數(shù)據(jù)統(tǒng)一尋址的內(nèi)存空間。是在通用計算機中只有一個程序和數(shù)據(jù)統(tǒng)一尋址的內(nèi)存空間。 5151單片機存儲區(qū)可分為內(nèi)部數(shù)據(jù)存儲區(qū)、外部數(shù)據(jù)存儲區(qū)以及程序單片機存儲區(qū)可分為內(nèi)部數(shù)據(jù)存儲區(qū)、外部數(shù)據(jù)存儲區(qū)以及程序存儲區(qū)。存儲區(qū)。(4 4)標(biāo)準(zhǔn)標(biāo)準(zhǔn)C C語言沒有處理單片

5、機中斷的方法。語言沒有處理單片機中斷的方法。C51C51中有專門處理中斷的中斷函數(shù)。中有專門處理中斷的中斷函數(shù)。(2 2)數(shù)據(jù)類型有一定的區(qū)別。數(shù)據(jù)類型有一定的區(qū)別。在標(biāo)準(zhǔn)在標(biāo)準(zhǔn)C C的基礎(chǔ)上又?jǐn)U展了的基礎(chǔ)上又?jǐn)U展了4 4種類型。種類型。.(5 5)頭文件的不同。頭文件的不同。5151頭文件把單片機內(nèi)部的硬件資源如定時器、中斷、頭文件把單片機內(nèi)部的硬件資源如定時器、中斷、I/OI/O等所相等所相應(yīng)的功能寄存器寫入頭文件內(nèi)。應(yīng)的功能寄存器寫入頭文件內(nèi)。(6 6)程序結(jié)構(gòu)的差異。程序結(jié)構(gòu)的差異。由于由于5151單片機硬件資源有限,編譯系統(tǒng)不允許太多的程序嵌套。單片機硬件資源有限,編譯系統(tǒng)不允許太多

6、的程序嵌套。其次,其次,C51C51語言不支持標(biāo)準(zhǔn)語言不支持標(biāo)準(zhǔn)C C的遞歸特性。的遞歸特性。 4 4、Keil C51Keil C51的開發(fā)工具的開發(fā)工具Keil Vision3Keil Vision3Keil Vision3Keil Vision3是德國是德國Keil softwareKeil software公司開發(fā)的公司開發(fā)的C51C51語言開發(fā)軟件。語言開發(fā)軟件。這個軟件集成了文件編輯處理、編譯鏈接等功能。這個軟件集成了文件編輯處理、編譯鏈接等功能。.3.2 C513.2 C51語言程序設(shè)計基礎(chǔ)語言程序設(shè)計基礎(chǔ)1 1、數(shù)據(jù)類型與存儲類型、數(shù)據(jù)類型與存儲類型1 1)數(shù)數(shù)據(jù)據(jù)類類型型.2

7、)C51擴展的數(shù)據(jù)類型(擴展的數(shù)據(jù)類型(4種擴展的數(shù)據(jù)類型)種擴展的數(shù)據(jù)類型)(1 1)位變量)位變量bitbit bit bit的值可以是的值可以是1 1(truetrue),或),或0 0(falsefalse)。)。 bit bit 變量名;變量名;格式:格式:例如:例如:bit flag;bit flag;flag = 0flag = 0;.(2 2)特殊功能寄存器)特殊功能寄存器sfrsfr 地址單元地址單元80HFFH80HFFH之間的片內(nèi)數(shù)據(jù)存儲區(qū);之間的片內(nèi)數(shù)據(jù)存儲區(qū); “sfr” sfr” 數(shù)據(jù)類型占用一個內(nèi)存單元;數(shù)據(jù)類型占用一個內(nèi)存單元; 利用它可以訪問利用它可以訪問51

8、51單片機內(nèi)部的所有特殊功能寄存器。單片機內(nèi)部的所有特殊功能寄存器。sfr P1 = 0 x90sfr P1 = 0 x90; /定義了定義了P1P1為片內(nèi)的為片內(nèi)的P1P1口寄存器;口寄存器;P1 = 0 xffP1 = 0 xff; /把把P1P1口的所有輸出引腳設(shè)置為高電平??诘乃休敵鲆_設(shè)置為高電平。例如:例如:sfr sfr 寄存器變量名寄存器變量名 = = 字節(jié)地址常數(shù);字節(jié)地址常數(shù);格式:格式:.sfr SBUF = 0 x99sfr SBUF = 0 x99;習(xí)題:習(xí)題: 往串行發(fā)送數(shù)據(jù)緩沖寄存器往串行發(fā)送數(shù)據(jù)緩沖寄存器SBUF寫入寫入80SBUF = 80SBUF = 80

9、;習(xí)題:習(xí)題: 從從P0口寄存器讀取數(shù)據(jù),存放到任意一個變量口寄存器讀取數(shù)據(jù),存放到任意一個變量X。sfr P0 = 0 x80sfr P0 = 0 x80;int xint x; x = P0 x = P0;.例如:例如:(3 3)特殊功能寄存器)特殊功能寄存器sfr16sfr16“sfr16sfr16”數(shù)據(jù)類型占兩個內(nèi)存單元;數(shù)據(jù)類型占兩個內(nèi)存單元;用于操作占兩個字節(jié)的特殊功能寄存器。用于操作占兩個字節(jié)的特殊功能寄存器。sfr16 DPTR = 0 x82sfr16 DPTR = 0 x82;/定義了片內(nèi)定義了片內(nèi)1616位數(shù)據(jù)指針寄存器位數(shù)據(jù)指針寄存器DPTRDPTR, /低低8 8位字

10、節(jié)地址為位字節(jié)地址為82H82H, /高高8 8位字節(jié)地址為位字節(jié)地址為83H83H。DPTR=0 x1234;DPTR=0 x1234;sfr16 sfr16 寄存器變量名寄存器變量名 = = 字節(jié)地址常數(shù);字節(jié)地址常數(shù);格式:格式:字節(jié)地址為字節(jié)地址為82H、83H存放的數(shù)據(jù)分別是多少?存放的數(shù)據(jù)分別是多少?.(4 4)特殊功能位)特殊功能位 sbitsbit 片內(nèi)特殊功能寄存器的可尋址位。片內(nèi)特殊功能寄存器的可尋址位?!啊薄啊鼻笆翘厥夤δ芗拇嫫鞯拿郑磺笆翘厥夤δ芗拇嫫鞯拿?;“”的后面數(shù)字是特殊功能寄存器可尋址位在寄存器中的位置,的后面數(shù)字是特殊功能寄存器可尋址位在寄存器中的位置,取值

11、必須是取值必須是0-70-7。 sbit sbit 位變量名位變量名 = = 特殊功能寄存器特殊功能寄存器 位位置;位位置;格式:格式:sfr PSW = 0 xd0sfr PSW = 0 xd0; /定義定義PSWPSW寄存器地址為寄存器地址為0 xd00 xd0sbit FO = PSW 5 sbit FO = PSW 5 ;/定義定義F0F0位為位為PSW.5PSW.5F0 = 0;F0 = 0;例如:例如:.習(xí)題:片內(nèi)習(xí)題:片內(nèi)I/OI/O口口P1P1口的口的P1.0P1.0尋址位置成高電平尋址位置成高電平 sfr sfr P1 = 0 x90 P1 = 0 x90; sbit P1_

12、0 = P10sbit P1_0 = P10; P1_0 = 1P1_0 = 1;習(xí)題:習(xí)題: 從從P2口的口的P2.7讀取數(shù)據(jù),存放到任意一個位變量讀取數(shù)據(jù),存放到任意一個位變量X。 sfr sfr P2 = 0 xA0 P2 = 0 xA0; sbit P2_7 = P27sbit P2_7 = P27; bit xbit x; x = P2_7x = P2_7; .sbitsbit 位變量名位變量名 = = 位地址常數(shù);位地址常數(shù); sbit CY = 0 xD7sbit CY = 0 xD7; / /* * CY CY位地址為位地址為0 xD70 xD7* */ /sbit OV =

13、0 xD2sbit OV = 0 xD2; / /* * OV OV位地址為位地址為0 xD20 xD2* */ /ifif(CY = = 1CY = = 1) 例如:例如:格式:格式:.習(xí)題:片內(nèi)習(xí)題:片內(nèi)I/OI/O口口P1P1口的口的P1.0P1.0尋址位置成低電平尋址位置成低電平sbit P1_0 = 0 x90sbit P1_0 = 0 x90;P1_0 = 0P1_0 = 0;在頭文件在頭文件AT89X51.hAT89X51.h中定義了常用的特殊功能寄存器和可尋址位。中定義了常用的特殊功能寄存器和可尋址位。#include #include sfr sfr P1 = 0 x90 P

14、1 = 0 x90; sbit P1_0 = 0 x90sbit P1_0 = 0 x90; 兩者區(qū)別?兩者區(qū)別? 6.3 3)數(shù)據(jù)存儲類型)數(shù)據(jù)存儲類型數(shù)據(jù)存儲類型是指數(shù)據(jù)存放在數(shù)據(jù)存儲類型是指數(shù)據(jù)存放在5151單片機的哪一個存儲器空間。單片機的哪一個存儲器空間。.bdatadataidatapdataxdatacode.(1 1)DATADATA區(qū)。區(qū)。 DATADATA區(qū)指片內(nèi)區(qū)指片內(nèi)RAMRAM的低的低128128字節(jié)的空間,可直接尋址;字節(jié)的空間,可直接尋址; 尋址是最快的,應(yīng)該把經(jīng)常使用的變量放在尋址是最快的,應(yīng)該把經(jīng)常使用的變量放在DATADATA區(qū)。區(qū)。unsigned cha

15、r unsigned char datadata system_status=0; system_status=0;unsigned int unsigned int datadata unit_id8; unit_id8;例如:例如:格式:格式: 數(shù)據(jù)類型數(shù)據(jù)類型【存儲類型】【存儲類型】變量名;變量名;.(2 2)BDATABDATA區(qū)。區(qū)。 BDATABDATA區(qū)是內(nèi)部區(qū)是內(nèi)部RAMRAM可位尋址的可位尋址的1616字節(jié)存儲區(qū)(字節(jié)地址為字節(jié)存儲區(qū)(字節(jié)地址為20H20H 2FH2FH)中的)中的128128個位。個位。 在這個區(qū)中聲明變量就可進(jìn)行位尋址。在這個區(qū)中聲明變量就可進(jìn)行位尋址。

16、例如:例如:unsigned char bdata status_byte;unsigned int bdata status_word;sbit stat_flag= status_byte4;if( status_word15 ) stat_flag=1; .(3 3)IDATAIDATA區(qū)。區(qū)。 IDATAIDATA區(qū)是片內(nèi)區(qū)是片內(nèi)RAMRAM的的0-2560-256字節(jié)的存儲區(qū),只能間接尋址,字節(jié)的存儲區(qū),只能間接尋址, 速度比直接尋址慢。速度比直接尋址慢。unsigned char idata system_status=0;float idata value; 例如:例如:.(4

17、4)PDATAPDATA區(qū)和區(qū)和XDATAXDATA區(qū)。區(qū)。 PDATAPDATA區(qū)和區(qū)和XDATAXDATA區(qū)位于片外存儲區(qū);區(qū)位于片外存儲區(qū); PDATAPDATA區(qū)指的是外部數(shù)據(jù)存儲區(qū)區(qū)指的是外部數(shù)據(jù)存儲區(qū)02560256字節(jié)。字節(jié)。 XDATAXDATA區(qū)指的是外部數(shù)據(jù)區(qū)區(qū)指的是外部數(shù)據(jù)區(qū)64KB64KB內(nèi)的任何地址。內(nèi)的任何地址。unsigned char xdata system_status=0;unsigned int pdata unit_id8;例如:例如:.(5 5)程序存儲區(qū))程序存儲區(qū)CODECODE。 CODECODE區(qū)是程序存儲區(qū),儲存的數(shù)據(jù)是不可改變的。區(qū)是程序

18、存儲區(qū),儲存的數(shù)據(jù)是不可改變的。unsigned char unsigned char codecode a9 a9 =0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08;=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08;例如:例如:.4 4)數(shù)據(jù)存儲器模式)數(shù)據(jù)存儲器模式C51C51編譯器設(shè)定的存儲器模式:編譯器設(shè)定的存儲器模式: SMALLSMALL、COMPACTCOMPACT和和LARGELARGE三種模式。三種模式。若聲明若聲明 char var1char var1;在

19、在SMALLSMALL模式下,模式下, var1var1被定位在被定位在datadata存儲區(qū);存儲區(qū);在在COMPACTCOMPACT模式下,模式下, var1var1被定位在被定位在idataidata存儲區(qū);存儲區(qū);在在LARGELARGE模式下,模式下, var1var1被定位在被定位在xdataxdata存儲區(qū)中。存儲區(qū)中。.2 2、C51C51語言的絕對地址訪問語言的絕對地址訪問C51C51語言提供了兩種比較常用的訪問絕對地址的方法,語言提供了兩種比較常用的訪問絕對地址的方法,對片內(nèi)對片內(nèi)RAMRAM、片外、片外RAMRAM及及I/OI/O進(jìn)行訪問。進(jìn)行訪問。絕對地址絕對地址.1)

20、絕對宏)絕對宏C51編譯器提供了一組宏定義對編譯器提供了一組宏定義對code、data、pdata和和xdata空間空間進(jìn)行絕對尋址。這組宏定義放在進(jìn)行絕對尋址。這組宏定義放在absacc.h頭文件中:頭文件中:CBYTE 以字節(jié)形式對以字節(jié)形式對code區(qū)尋址;區(qū)尋址;CWORD 以字形式對以字形式對code區(qū)尋址;區(qū)尋址;DBYTE 以字節(jié)形式對以字節(jié)形式對data區(qū)尋址;區(qū)尋址;DWORD 以字形式對以字形式對data區(qū)尋址;區(qū)尋址;XBYTE 以字節(jié)形式對以字節(jié)形式對xdata區(qū)尋址;區(qū)尋址;XWORD 以字形式對以字形式對xdata區(qū)尋址;區(qū)尋址;PBYTE 以字節(jié)形式對以字節(jié)形式對

21、pdata區(qū)尋址;區(qū)尋址;PWORD 以字形式對以字形式對pdata區(qū)尋址。區(qū)尋址。#define #define 變量名變量名 絕對宏絕對宏 字節(jié)地址字節(jié)地址 格式格式絕對宏絕對宏.【例】片內(nèi)【例】片內(nèi)RAMRAM、片外、片外RAMRAM定義的程序如下:定義的程序如下:#include#include#define PORTE XBYTE0 xFFC0 #define PORTE XBYTE0 xFFC0 / /* *將將PORTEPORTE定義為外部定義為外部I/OI/O, 地址為地址為0 xFFC00 xFFC0* */ /#define NRAM DBYTE0 x40 #define

22、NRAM DBYTE0 x40 / /* *將將NRAMNRAM定義為片內(nèi)定義為片內(nèi)RAMRAM, 地址為地址為0 x400 x40* */ /main( )main( ) PORTE=0 x3D; PORTE=0 x3D; NRAM=0 x01;NRAM=0 x01; / /* *數(shù)據(jù)數(shù)據(jù)3DH3DH寫入地址寫入地址0 xFFC00 xFFC0的外部的外部I/O I/O PORTE PORTE * */ / /* *將數(shù)據(jù)將數(shù)據(jù)01H01H寫入片內(nèi)寫入片內(nèi)RAMRAM的的40H40H單元單元* */ /.習(xí)題習(xí)題 使用絕對宏將片內(nèi)使用絕對宏將片內(nèi)RAM 20HRAM 20H的字節(jié)地址單元全部

23、置的字節(jié)地址單元全部置1 1。#include#include#define M DBYTE0 x0020 #define M DBYTE0 x0020 / /* *將將M M定義為外部定義為外部RAMRAM, 地址為地址為0 x00200 x0020* */ /main( )main( ) M=0 xff; M=0 xff; .習(xí)題:習(xí)題: 使用絕對宏讀取片外使用絕對宏讀取片外RAM F000HRAM F000H字節(jié)地址單元的內(nèi)容。字節(jié)地址單元的內(nèi)容。#include#include#define WRAM XBYTE0 xF000 #define WRAM XBYTE0 xF000 mai

24、n( )main( ) char x char x; x = WRAM;x = WRAM; 7.2 2)_at_at_關(guān)鍵字關(guān)鍵字使用關(guān)鍵字使用關(guān)鍵字_at_at_可對指定的存儲器空間的絕對地址進(jìn)行訪問??蓪χ付ǖ拇鎯ζ骺臻g的絕對地址進(jìn)行訪問。格式:格式: 存儲類型存儲類型 數(shù)據(jù)類型數(shù)據(jù)類型 變量名變量名 _at_ _at_ 地址常數(shù);地址常數(shù);地址常數(shù):指定變量的絕對地址,位于存儲器空間之內(nèi);地址常數(shù):指定變量的絕對地址,位于存儲器空間之內(nèi);使用使用_at_at_定義的變量必須為全局變量。定義的變量必須為全局變量。.【例】使用關(guān)鍵字【例】使用關(guān)鍵字_at_at_實現(xiàn)絕對地址的訪問。實現(xiàn)絕對地

25、址的訪問。data unsigned char y1 _at_ 0 x50; /data unsigned char y1 _at_ 0 x50; /* *在在data data 區(qū)定義字節(jié)變量區(qū)定義字節(jié)變量 y1y1,地址為,地址為50H50H* */ /xdata unsigned int y2 _at_ 0 x4000; /xdata unsigned int y2 _at_ 0 x4000; /* *在在xdataxdata區(qū)定義字變量區(qū)定義字變量 y2y2,地址為,地址為4000H4000H* */ /void main(void)void main(void) y1=0 xff;

26、y1=0 xff; y2=0 x1234; y2=0 x1234; while(1); while(1); .習(xí)題:使用習(xí)題:使用關(guān)鍵字關(guān)鍵字_at_at_讀取片內(nèi)讀取片內(nèi)RAM 60HRAM 60H單元的內(nèi)容。單元的內(nèi)容。data unsigned char M _at_ 0 x60;data unsigned char M _at_ 0 x60;void main(void)void main(void) unsigned char y ; unsigned char y ; y=M y=M; .【例】【例】使用關(guān)鍵字使用關(guān)鍵字_at_at_將片外將片外RAM 2000HRAM 2000H

27、開始的連續(xù)開始的連續(xù)2020個字節(jié)單元清個字節(jié)單元清0 0。void main(void)void main(void) unsigned char i; unsigned char i; for(i=0; i20; i+) for(i=0; i20; i+) bufferi=0 bufferi=0; xdata unsigned char buffer20 _at_ 0 x2000;xdata unsigned char buffer20 _at_ 0 x2000;.data unsigned char buffer8 _at_ 0 x40;data unsigned char buffer

28、8 _at_ 0 x40;void main(void)void main(void) unsigned char j ; unsigned char j ; for(j=0; j8; j+) for(j=0; j y; R = x y;.3 3)邏輯運算符)邏輯運算符邏輯表達(dá)式邏輯表達(dá)式int x=0;int x=0;int y=1;int y=1;int R;int R;R = x & y;R = x & y;.4)位運算符)位運算符01001000 01001000 & & 11111111 1111111100001000 00001000 2 2010

29、01001 01001001 | | 11111111 11111111.01001000 01001000 & & 00110111 0011011101000000 01000000 | | 11111111 1111111100001000 00001000 y ) max=x; if( xy ) max=x; 比較變量比較變量x x和變量和變量y y,如果,如果xyxy,則把,則把 x x 賦給變量賦給變量maxmax。習(xí)題:比較變量習(xí)題:比較變量x x和變量和變量y y,如果,如果x x和和y y相等,則把相等,則把0 0賦給變量賦給變量maxmax。if( x =

30、= y ) max=0; if( x = = y ) max=0; .格式:格式:if(if(表達(dá)式表達(dá)式) ) 語句語句1 1; else else 語句語句2 2; .if (xy) max=x; else max=y; 比較變量比較變量x x和變量和變量y y, 如果如果xyxy, 則把則把 x x 賦給變量賦給變量maxmax;否則把否則把 y y 賦給變量賦給變量maxmax。.習(xí)題:比較變量習(xí)題:比較變量x x和變量和變量y y,把二者最小值賦給變量,把二者最小值賦給變量minmin;if (xy) min=y; else min=x; .習(xí)題:如果變量習(xí)題:如果變量x x滿足關(guān)系

31、滿足關(guān)系10 x2010 x10)&(x10)&(x20)) ) y=1 y=1; else else y=0; y=0; 9.void main( )void main( ) sfr P2=0 xA0 sfr P2=0 xA0; sfr P1=0 x90sfr P1=0 x90; sbit P24=P24sbit P24=P24; sbit P10=P10sbit P10=P10; 習(xí)題:如果讀取習(xí)題:如果讀取P2P2口的口的P2.4P2.4位為位為1 1,則把,則把P1P1口的口的P1.0P1.0置成置成0 0。 if(P24=1) if(P24=1) P10=0 P10=

32、0; .if(if(表達(dá)式表達(dá)式1) 1) 語句語句1 1;else if (else if (表達(dá)式表達(dá)式2) 2) 語句語句2 2; else if(else if(表達(dá)式表達(dá)式n) n) 語句語句n n;else else 語句語句n+1n+1;多分支多分支ifif語句語句0表達(dá)式表達(dá)式1 表達(dá)式表達(dá)式2 表達(dá)式表達(dá)式n語句語句n+100語句語句n 語句語句2 語句語句1 非非0 非非0 非非0 .當(dāng)成績當(dāng)成績9090時,時, 輸出輸出verygoodverygood,當(dāng)當(dāng)8080成績成績9090時,時, 輸出輸出goodgood, 當(dāng)當(dāng)6060成績成績8080時,時, 輸出輸出pass

33、pass,當(dāng)成績當(dāng)成績60=90) printf(“very good);if (score=90) printf(“very good);else if (score=80) printf(“good);else if (score=80) printf(“good); else if (score=60) printf(“pass); else if (score=60) printf(“pass); else printf(“fail); else printf(“fail);.多分支多分支switchswitch語句語句switch (switch (表達(dá)式表達(dá)式1) 1) case

34、case 常量表達(dá)式常量表達(dá)式1 1: 語句語句1 1; break break; case case 常量表達(dá)式常量表達(dá)式2 2: 語句語句2 2; break break; case case 常量表達(dá)式常量表達(dá)式n n: 語句語句n n; break break; defaultdefault: 語句語句n+1n+1; 格式:格式:.switchswitch表達(dá)式表達(dá)式1 1語句語句1 1語句語句2 2語句語句n n語句語句n+1n+1式式1 1式式2 2式式n ndefaultdefaultcasecase .switch ( key ) switch ( key ) case 1ca

35、se 1: y=1y=1; breakbreak; case 2case 2: y=2; breaky=2; break;case 3case 3: y=4y=4; breakbreak; defaultdefault: ; ; 在單片機程序設(shè)計中,常用在單片機程序設(shè)計中,常用switchswitch語句作為鍵盤中按鍵的判別。語句作為鍵盤中按鍵的判別。當(dāng)按下鍵的鍵號變量當(dāng)按下鍵的鍵號變量key=1key=1,則變量,則變量y=1y=1; 鍵號變量鍵號變量key=2key=2,則變量,則變量y=2y=2; 鍵號變量鍵號變量key=4key=4,則變量,則變量y=3y=3; 沒有按下鍵,沒有按下鍵

36、, 則變量則變量y y不變。不變。.key=2;key=2;switch ( key ) switch ( key ) case 1case 1: y=1y=1; case 2case 2: y=2; y=2; case 3case 3: y=4y=4; defaultdefault: ; ; 習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?.2 2)循環(huán)結(jié)構(gòu)控制語句)循環(huán)結(jié)構(gòu)控制語句whilewhile(表達(dá)式)(表達(dá)式) 循環(huán)體;循環(huán)體; 格式:格式:表達(dá)式表達(dá)式循環(huán)體循環(huán)體假假(0)真真(非非0)先判斷表達(dá)式,先判斷表達(dá)式,后執(zhí)行循環(huán)體。后執(zhí)行循環(huán)體。whilewhile語句

37、語句.main()main() int i=0; int i=0; int r; int r; while while(i3i3) i+ i+ ; y=i; y=i; i+i+執(zhí)行幾次?執(zhí)行幾次?y =y =?r = 3r = 3習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?.main()main() int i=3; int i=3; int r; int r; while while(i6i6) i+ i+ ; y=i; y=i; y =y =?習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?.dodo 循環(huán)體;循環(huán)體; whilewhile(表達(dá)式);(表達(dá)式)

38、;格式:格式:表達(dá)式表達(dá)式循環(huán)體循環(huán)體假假(0)真真(非非0);不可省略!不可省略!切記!切記!先執(zhí)行循環(huán)體,先執(zhí)行循環(huán)體,后判斷表達(dá)式。后判斷表達(dá)式。do-whiledo-while語句語句.main()main() int i=0; int i=0; int y; int y; do do i+ i+; while (i3); while (i3); y=i; y=i; i+i+執(zhí)行幾次?執(zhí)行幾次?y =y =?習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?.main()main() int i=0; int i=0; int y=0; int y=0; do do i+ i

39、+; y= y + i;y= y + i; while (y20); while (y20); 習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?.forfor(表達(dá)式(表達(dá)式1 1;表達(dá)式;表達(dá)式2 2;表達(dá)式;表達(dá)式3 3) 語句;語句; 格式:格式:forfor語句語句.main()main() int i, y; int i, y; y=0; y=0; for(i=1;i4;i+) for(i=1;i4;i+) y = y + i y = y + i; y = y = ?習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?.main()main() int i, y;

40、 int i, y; y=1; y=1; for( i=2; i6 ; i+ ) for( i=2; i6 ; i+ ) y = y + i y = y + i; y = y = ?習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?.3 3)breakbreak語句和語句和continuecontinue語句語句breakbreak功能:功能: 跳出跳出switchswitch結(jié)構(gòu);結(jié)構(gòu); 在循環(huán)語句中在循環(huán)語句中, ,終止并跳出本層循環(huán)。終止并跳出本層循環(huán)。continuecontinue功能:功能: 結(jié)束本次循環(huán),跳過本層循環(huán)體中尚未執(zhí)行的語句,結(jié)束本次循環(huán),跳過本層循環(huán)體中尚未

41、執(zhí)行的語句, 執(zhí)行循環(huán)體的判斷。執(zhí)行循環(huán)體的判斷。.#define PI 3.1415main( ) int r; float area; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); 計算計算r=1r=1到到r=10r=10的圓面積,直到面積大于的圓面積,直到面積大于100100時停止。時停止。運行結(jié)果:運行結(jié)果:r=1,area=3.14r=2,area=12.57r=3,area=28.27r=4,area=50.26r=5,area=78.54結(jié)束整個結(jié)束整個for循環(huán)循環(huán).把把100100200200之間不能被之間不能被3

42、3整除的數(shù)輸出整除的數(shù)輸出 。main( )main( ) int n; int n; for(n=100;n=200;n+) for(n=100;n=200;n+) if(n%3= =0) if(n%3= =0) continue;continue; printf(“%d ,n); printf(“%d ,n); 結(jié)束本次循環(huán)結(jié)束本次循環(huán),循環(huán)體的剩余語句被忽略循環(huán)體的剩余語句被忽略,執(zhí)行表達(dá)式執(zhí)行表達(dá)式3,進(jìn)入下一循環(huán)。,進(jìn)入下一循環(huán)。.main( ) int n; for(n=100;n=200;n+) if(n%3=0) break; printf(“%d ,n); 習(xí)題:讀程序執(zhí)行的

43、結(jié)果?習(xí)題:讀程序執(zhí)行的結(jié)果?.習(xí)題:循環(huán)檢測習(xí)題:循環(huán)檢測P1.0P1.0引腳,只有檢測引腳,只有檢測P1.0P1.0為低電平時,循環(huán)結(jié)束。為低電平時,循環(huán)結(jié)束。sfr P1=0 x90;sbit P10=P10;main( ) while(1) if(P10=0) break; .5 5、數(shù)組、數(shù)組數(shù)組是用來存儲一組相同數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)。數(shù)組是用來存儲一組相同數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)。一維數(shù)組格式:一維數(shù)組格式:數(shù)據(jù)類型數(shù)據(jù)類型變量名變量名 N ;int a 10;int a5 = 1, 2, 3, 4, 5 int a5 = 1, 2, 3, 4, 5 ;初始化:初始化:char b 10;.求下列數(shù)組的和。求下列數(shù)組的和。int a5 = 1, 2, 3, 4, 5 int a5 =

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論