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

下載本文檔

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

文檔簡介

1、3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計2教學(xué)目的教學(xué)目的q熟悉熟悉C51的程序結(jié)構(gòu)的程序結(jié)構(gòu)q掌握掌握C51的數(shù)據(jù)類型、存儲類型及函數(shù)等概念的數(shù)據(jù)類型、存儲類型及函數(shù)等概念q了解了解C51與標(biāo)準(zhǔn)與標(biāo)準(zhǔn)C的不同之處的不同之處q熟悉熟悉C51的開發(fā)工具的開發(fā)工具Keil C51邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計3本章內(nèi)容本章內(nèi)容qC51的程序結(jié)構(gòu)的程序結(jié)構(gòu)q數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式q運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制qC51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型

2、qC51實例分析及混合編程實例分析及混合編程qKeil C51簡介簡介.1 51的程序結(jié)構(gòu)的程序結(jié)構(gòu) q與匯編語言相比,與匯編語言相比,C51在功能、結(jié)構(gòu)性、可讀性、在功能、結(jié)構(gòu)性、可讀性、可維護(hù)性及可移植性上有明顯的優(yōu)勢可維護(hù)性及可移植性上有明顯的優(yōu)勢 。qC51程序結(jié)構(gòu)與一般程序結(jié)構(gòu)與一般C語言沒有差別。語言沒有差別。邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計5qC51的特點:的特點:q1C51在吸取了匯編語言精華的基礎(chǔ)上又有所改進(jìn) q2C51繼承和發(fā)揚了高級語言的長處 q3C51的可移植性好 q4生成的代碼質(zhì)量高,在代碼效率方面可以和匯編語言相媲美 51的程序結(jié)構(gòu)的程

3、序結(jié)構(gòu)3.15151的程序結(jié)構(gòu)的程序結(jié)構(gòu) 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計6qC51程序的結(jié)構(gòu)程序的結(jié)構(gòu)q一個C51程序大體上是一個函數(shù)定義的集合,在這個集合中僅有一個名為main的函數(shù)(主函數(shù))。 q函數(shù)定義由類型、函數(shù)名、參數(shù)表和函數(shù)體四部分組成。q函數(shù)的一般格式如下: 類型 函數(shù)名(參數(shù)表) 參數(shù)說明; 數(shù)據(jù)說明部分; 執(zhí)行語句部分; 51的程序結(jié)構(gòu)的程序結(jié)構(gòu)3.15151的程序結(jié)構(gòu)的程序結(jié)構(gòu) 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計7q編寫編寫C51 程序時應(yīng)注意以下幾點:程序時應(yīng)注意以下幾點:q1.一個C51程序總是從main函數(shù)開

4、始執(zhí)行的,而不論main函數(shù)在整個程序中的位置如何。q2C語言程序的書寫格式十分自由。一條語句可以寫成一行,也可以寫成幾行,還可以在一行內(nèi)寫多條語句。但每條語句都必須以分號“;”作為結(jié)束符。q3C語言對大小字母敏感,C語言編譯器編譯程序時對同一個字母的大小寫作為不同的變量來處理。q4可以用/*/對C程序中的任何部分作注釋。程序加上必要的注釋,可增加程序的可讀性。51的程序結(jié)構(gòu)的程序結(jié)構(gòu)3.15151的程序結(jié)構(gòu)的程序結(jié)構(gòu) .2 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式 q數(shù)據(jù)類型數(shù)據(jù)類型q常量和變量常量和變量qC51的存儲類型及存儲模式的存儲類型及存儲模式q特殊功能寄存器、并行接

5、口及位變量的定義特殊功能寄存器、并行接口及位變量的定義邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計9q數(shù)據(jù)類型數(shù)據(jù)類型 可分為基本數(shù)據(jù)類型和構(gòu)造數(shù)據(jù)類型。構(gòu)造數(shù)據(jù)類型由基本數(shù)據(jù)類型構(gòu)造而成。qC51的數(shù)據(jù)類型分類如下所示: 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式3.2 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式 charintlongfloatdoublearraystructunionenum字符型()整型()基本類型長整型()浮點型()雙精度浮點型()數(shù)據(jù)類型數(shù)組類型()結(jié)構(gòu)體類型()構(gòu)造類型共用體()枚舉()指針類型空類型邵陽學(xué)院邵陽學(xué)院

6、3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計10C51C51編譯器能識別的數(shù)據(jù)類型編譯器能識別的數(shù)據(jù)類型數(shù) 據(jù) 類 型長 度大 小unsigned char1B0255char1B-128+127unsigned int2B065535int2B-32768+32767unsigned long4B04294967295long4B-2147483648+2147483647float4B1.175494E-383.402823E+38*1B3B對象的地址bit位0或1sfr1B0255sfr162B065535sbit位0或1邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計1

7、1q常量和變量常量和變量 C語言中的數(shù)據(jù)有常量、變量之分。 常量在程序運行的過程中,其值不能改變的量稱為常量。C語言支持4種常量:整數(shù)常量、浮點數(shù)常量、枚舉量常量、字符常量。 變量在程序執(zhí)行過程中,其值能不斷變化的量。使用一個變量之前必須進(jìn)行定義,用一個標(biāo)識符作為變量名并指出它的數(shù)據(jù)類型和存儲類型,以便編譯系統(tǒng)為它分配相應(yīng)的存儲單元。 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式3.2 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計12 存儲種類存儲種類是指變量在程序執(zhí)行過程中的作用范圍。是指變量在程序執(zhí)行過

8、程中的作用范圍。 變量的存儲種類有四種,分別為:變量的存儲種類有四種,分別為: 自動(自動(auto) 外部外部 (extern) 靜態(tài)(靜態(tài)(static) 寄存器(寄存器(register)C51C51中變量定義的格式如下:中變量定義的格式如下: 存儲種類存儲種類 數(shù)據(jù)類型數(shù)據(jù)類型 存儲器類型存儲器類型 變量名表變量名表 其中,其中,存儲種類存儲種類和和存儲器類型存儲器類型是可選項。是可選項。 例如:例如: static char data var; static char data var; 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計13qC51的存儲類型及存儲模式的

9、存儲類型及存儲模式 51系列單片機的存儲器采用哈佛結(jié)構(gòu)。即其程序存儲器和數(shù)據(jù)存儲器分開,并有各自的尋址機構(gòu)和尋址方式。以AT89C52為例,其具體結(jié)構(gòu)如圖3.1所示。數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式3.2 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計14 AT89C52AT89C52單片機在物理上有四個存儲空間:單片機在物理上有四個存儲空間:q1片內(nèi)程序存儲器空間8KBq2片外程序存儲器空間64KBq3片內(nèi)數(shù)據(jù)存儲器空間256Bq4片外數(shù)據(jù)存儲器空間64KBAT89C52AT89C52單片機在單

10、片機在邏輯邏輯上有三個存儲空間:上有三個存儲空間:q1片內(nèi)、片外程序存儲器空間64KBq2片內(nèi)數(shù)據(jù)存儲器空間256B q3片外數(shù)據(jù)存儲器空間64KB數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式3.2 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計15qC51的存儲類型及存儲模式的存儲類型及存儲模式 C51C51在定義變量、常量時,將通過不同的存儲在定義變量、常量時,將通過不同的存儲類型將它們定位在不同的存儲區(qū)中。存儲類型與類型將它們定位在不同的存儲區(qū)中。存儲類型與AT89C52AT89C52單片機實際存儲空間

11、的對應(yīng)關(guān)系如表所列。單片機實際存儲空間的對應(yīng)關(guān)系如表所列。數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式3.2 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計16存儲器類型描 述data直接尋址的片內(nèi)數(shù)據(jù)存儲器低128B,訪問速度最快bdata可位尋址的片內(nèi)數(shù)據(jù)存儲器(地址20H2FH共16B)允許位和字節(jié)混合訪問idata間接尋址片內(nèi)數(shù)據(jù)存儲器256B。允許訪問片內(nèi)全部地址pdata分頁尋址片外數(shù)據(jù)存儲器256B,使用指令MOVX Rn訪問,需要2個指令周期xdata尋址片外數(shù)據(jù)存儲器64KB,使用指令MOV

12、X DPTR訪問code尋址程序存儲器區(qū)64KB,使用指令MOVC A+DPTR訪問邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計17存儲模式存儲模式 C51編譯器允許采用三種存儲模式:小編譯模式編譯器允許采用三種存儲模式:小編譯模式SMALL、緊湊編譯模式緊湊編譯模式COMPACT、大編譯模式、大編譯模式LARGE。 一個變量的存儲器模式確定了未聲明存儲器類型的變量在一個變量的存儲器模式確定了未聲明存儲器類型的變量在內(nèi)存中的地址空間。在內(nèi)存中的地址空間。在SMALL模式下,該變量在模式下,該變量在80C51單片機單片機的內(nèi)部的內(nèi)部RAM中;在中;在COMPACT和和LARGE

13、模式下,該變量在模式下,該變量在80C51單片機的外部單片機的外部RAM中。中。 建議在編寫源程序時,把存儲模式設(shè)定為建議在編寫源程序時,把存儲模式設(shè)定為SMALL,再在,再在程序中把程序中把xdata、pdata和和idata等類型變量進(jìn)行專門聲明。等類型變量進(jìn)行專門聲明。 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計18q特殊功能寄存器的定義特殊功能寄存器的定義 AT89C52單片機中除了程序計數(shù)器PC和4組通用寄存器組(R0R7)之外,其他所有寄存器均稱為特殊功能寄存器(SFR),它們分散在片內(nèi)RAM區(qū)的高128B中,它們只能采用直接尋址方式訪問。 為了能直接訪問這些S

14、FR,C51擴充了類型說明符sfr、sfr16、sbit。利用它們可在C語言源程序中直接對AT89C52單片機的特殊功能寄存器進(jìn)行定義。定義方法如下:sfr 特殊功能寄存器名=地址常數(shù)sfr16特殊功能寄存器名=地址常數(shù)例如: sfr P0 = 0 x80; sfr16 DPTR= 0 x82;/即DPTR低8位地址為0 x82,高8位為0 x83 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式3.2 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計19q并行接口的定義并行接口的定義 AT89C52單片機內(nèi)部有4

15、個8位并行口,即SFR中的P0-P3。這些內(nèi)部并行口既可進(jìn)行字節(jié)尋址,也可進(jìn)行位尋址。 除了內(nèi)部4個并行口之外,AT89C52單片機還可以在片外擴展硬件I/O口,這些I/O口大多只能進(jìn)行字節(jié)尋址。 AT89C52單片機沒有專用的I/O指令,它的口地址是和數(shù)據(jù)存儲器統(tǒng)一編址的。即把一個口看作是數(shù)據(jù)存儲器的一個單元。程序采用訪問數(shù)據(jù)存儲器的指令來訪問I/O口。數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式3.2 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計20q位變量的定義位變量的定義q1.定義位變量的語法如下:

16、bit check_bit ;/*將變量check_bit定義為位變量*/q2.函數(shù)可包含類型為bit的參數(shù),也可將其作為返回值。q3 .可位尋址對象的定義和訪問(分兩步)例如 :bdata char temp; /先把temp 定義為char類型 sbit temp3=temp3;/再把temp3為temp的第3位 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式3.2 數(shù)據(jù)類型、存儲類型及存儲模式數(shù)據(jù)類型、存儲類型及存儲模式 3.3 運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 qC51的運算符的運算符qC51的函數(shù)的函數(shù)qC51的流程控制語句的流程控制語句邵陽學(xué)院邵陽學(xué)院

17、3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計22qC51的運算符的運算符q1.C51的賦值運算符和算術(shù)運算符(+、-、*、/、%)q2.C51的關(guān)系運算符(、=、=、=、!=)q3.C51邏輯運算符(|、&、?。﹒4.C51位操作運算符(、|、&、 )q5.自增減運算q6.復(fù)合運算符(10種)運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計23qC51的函數(shù)的函數(shù) 函數(shù)是C語言中的一種基本模塊,一個C語言程序就是由若干個模塊化的函數(shù)所構(gòu)成的。q 1.函數(shù)的分類 從用戶

18、使用角度劃分,函數(shù)分為標(biāo)準(zhǔn)庫函數(shù)和用戶自定義函數(shù)。 用戶自定義函數(shù)是指用戶根據(jù)任務(wù)自己編寫的函數(shù)。從函數(shù)定義的形式上可劃分為三種形式:無參數(shù)函數(shù)、有參數(shù)函數(shù)和空函數(shù)。 運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計24qC51的函數(shù)的函數(shù)q 2.函數(shù)的定義 無參數(shù)函數(shù)的定義返回值類型 函數(shù)名() 函數(shù)體語句 有參數(shù)函數(shù)的定義返回值類型 函數(shù)名(形式參數(shù)列表) 形式參數(shù)類型說明 函數(shù)體語句 空函數(shù)的定義返回值類型 函數(shù)名() 運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序

19、流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計25qC51的函數(shù)的函數(shù)q 3.函數(shù)的參數(shù)和返回值 形式參數(shù)和實際參數(shù)形參:定義函數(shù)時,位于函數(shù)名后面圓括號中的變量名稱為“形式參數(shù)”。實參:調(diào)用函數(shù)時,主調(diào)用函數(shù)名后面括號中的表達(dá)式稱為“實際參數(shù)”。 參數(shù)的返回值通過函數(shù)調(diào)用使主調(diào)用函數(shù)獲得一個確定的值,這就是函數(shù)的返回值。函數(shù)的返回值是通過return語句獲得的。運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C

20、語言程序設(shè)計語言程序設(shè)計26qC51的函數(shù)的函數(shù)q 4.函數(shù)的調(diào)用 調(diào)用的形式為:函數(shù)名(實際參數(shù)表列); 函數(shù)的調(diào)用方式有三種:1.函數(shù)調(diào)用語句:即把被調(diào)用函數(shù)名作為調(diào)用函數(shù)的一個語句,如func( ) 2.被調(diào)用函數(shù)作為表達(dá)式的運算對象:如x=2*func(a,b) 3.被調(diào)用函數(shù)作為另一個函數(shù)的實際參數(shù):如x=min(a,func(a,b); 運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計27qC51的函數(shù)的函數(shù)q 5.對被調(diào)用函數(shù)的說明在調(diào)用一個函數(shù)之前,應(yīng)對

21、該函數(shù)的類型進(jìn)行說明,即“先說明,后調(diào)用”。被調(diào)用函數(shù)必須是已經(jīng)存在的函數(shù)(庫函數(shù)或用戶自定義函數(shù))。q6.函數(shù)變量的存儲方式 函數(shù)變量按其有效作用范圍可劃分為局部變量和全局變量。 變量按其存儲方式可分為四種存儲種類,分別是自動變量(auto)、外部變量(extern)、靜態(tài)變量(static)和寄存器變量(register),這些存儲種類與變量的關(guān)系為:內(nèi)部變量可定義為自動變量、靜態(tài)變量或寄存器變量,外部變量可定義為全局變量或靜態(tài)變量。 運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程

22、序設(shè)計語言程序設(shè)計28qC51的流程控制語句的流程控制語句 C語言有三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)。運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 順序結(jié)構(gòu)流程圖順序結(jié)構(gòu)流程圖 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計29qC51的流程控制語句的流程控制語句運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 選擇結(jié)構(gòu)流程圖選擇結(jié)構(gòu)流程圖 其中選擇結(jié)構(gòu)又派生出串行多分支結(jié)構(gòu)和并行多分支結(jié)構(gòu),邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計

23、語言程序設(shè)計30qC51的流程控制語句的流程控制語句運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 循環(huán)結(jié)構(gòu)流程圖循環(huán)結(jié)構(gòu)流程圖 循環(huán)結(jié)構(gòu)又分為“while”型循環(huán)結(jié)構(gòu)和“do while”型循環(huán)結(jié)構(gòu)。邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計31qC51的流程控制語句的流程控制語句 q1.1.選擇語句選擇語句ififC語言提供了語言提供了3種形式的種形式的if語句:語句:(1)if (條件表達(dá)式條件表達(dá)式) 語句;語句;(2)if (條件表達(dá)式條件表達(dá)式) 語句語句1; else 語句語句2;(3)if (條

24、件表達(dá)式條件表達(dá)式1) 語句語句1; else if (條件表達(dá)式條件表達(dá)式2) 語句語句2; else if (條件表達(dá)式條件表達(dá)式3) 語句語句3; else if (條件表達(dá)式條件表達(dá)式m) 語句語句m; else 語句語句n; 運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計32qC51的流程控制語句的流程控制語句 q2. 2. switch/case語句語句 該語句形式如下:switch (表達(dá)式) case 常量表達(dá)式1: 語句1; break; case

25、常量表達(dá)式2: 語句2; break; case 常量表達(dá)式n: 語句n; break; default : 語句n+1; 運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計33qC51的流程控制語句的流程控制語句 q3. 3. 循環(huán)語句循環(huán)語句 while語句語句一般形式為:一般形式為:while (條件表達(dá)式條件表達(dá)式) 語句;語句; /*循環(huán)體循環(huán)體*/ do while 語句語句一般形式如下:一般形式如下:do 語句;語句; /*循環(huán)體循環(huán)體*/ while (條

26、件表達(dá)式條件表達(dá)式);運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計34qC51的流程控制語句的流程控制語句 q3. 3. 循環(huán)語句 for語句一般形式如下:for (初值設(shè)定表達(dá)式;循環(huán)條件表達(dá)式;更新表達(dá)式) 語句; /*循環(huán)體*/運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制3.3運算符、函數(shù)及程序流程控制運算符、函數(shù)及程序流程控制 3.4 C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型q數(shù)組數(shù)組q結(jié)構(gòu)結(jié)構(gòu)q聯(lián)合聯(lián)合q枚舉枚舉q指針指針邵陽學(xué)院邵陽學(xué)院3 單片機的單片

27、機的C語言程序設(shè)計語言程序設(shè)計36q數(shù)組數(shù)組q一維數(shù)組 一維數(shù)組的定義方式類型說明符 數(shù)組名整型表達(dá)式 初始化 int arry10=1,1,1,1,2,2,2,3,4,5q二維數(shù)組 二維數(shù)組的定義方式類型說明符 數(shù)組名常量表達(dá)式 常量表達(dá)式 二維數(shù)組的初始化 int arry22=1,2,3,4C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型3.4 C51C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計37q結(jié)構(gòu)結(jié)構(gòu)q結(jié)構(gòu)的定義 結(jié)構(gòu)是結(jié)構(gòu)是一種數(shù)據(jù)類型,通常定義結(jié)構(gòu)數(shù)據(jù)類型后再用它去定義相關(guān)變量。定義結(jié)構(gòu)類型的方法如下: struct 結(jié)構(gòu)名 結(jié)構(gòu)成員說明

28、;結(jié)構(gòu)成員說明的格式為:類型標(biāo)識符 成員名;q用結(jié)構(gòu)類型去定義變量的方法有三種:先定義結(jié)構(gòu)類型再定義類型為該結(jié)構(gòu)的變量 定義結(jié)構(gòu)類型的同時,定義該結(jié)構(gòu)的變量 直接定義結(jié)構(gòu)類型變量 q結(jié)構(gòu)變量的引用引用的方式為:結(jié)構(gòu)變量名.成員名 C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型3.4 C51C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計38q聯(lián)合聯(lián)合 又稱為共用體。它也是C語言中的一種構(gòu)造數(shù)據(jù)類型。在一個聯(lián)合中可以包含多個不同類型的數(shù)據(jù)元素。其定義格式為:union 聯(lián)合類型名 類型說明符 變量名; ; 聯(lián)合與結(jié)構(gòu)的區(qū)別在于:聯(lián)合所包含的各個成員只能分時共享

29、同一存儲空間。定義聯(lián)合類型變量的方法類似于定義結(jié)構(gòu)變量,同樣有三種。引用聯(lián)合成員的一般格式為:聯(lián)合變量名.聯(lián)合元素 或:聯(lián)合變量名-聯(lián)合元素C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型3.4 C51C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計39q枚舉枚舉 枚舉數(shù)據(jù)類型是一個有名字的某些整數(shù)型常量的集合。這些整數(shù)型常量是該類型變量可取的所有的合法值。枚舉定義應(yīng)當(dāng)列出該類型變量的可取值。定義枚舉類型變量的一般格式為:enum 枚舉名 枚舉值表列 變量表列; enum weekday 1,2,3,4,5,6,7 x1,x2;C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類

30、型3.4 C51C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計40q指針指針 指針是C語言的一個重要概念,也是特色之一。使用指針可以有效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu),直接處理內(nèi)存地址,而且可以更有效地使用數(shù)組。 q指針的概念 變量的指針就是變量的地址 q指針變量的定義指針變量定義的一般形式如下:類型標(biāo)示符 *指針變量名q指針變量的引用 通過舉例說明。應(yīng)注意的是:“*”在指針變量定義時和在指針運算時所代表的含義是不同的。qC51的指針類型C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型3.4 C51C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的

31、C語言程序設(shè)計語言程序設(shè)計41q指針指針 qC51的指針類型 C51編譯器支持“基于存儲器”的指針和“一般”指針兩種類型。 基于存儲器的指針:在編譯時一般被“行內(nèi)”編碼,無須庫調(diào)用。即指針?biāo)傅膶ο笏诘拇鎯臻g由定義時C源代碼中的存儲類型決定。該指針只占用1-2個字節(jié)。 一般指針:包含3個字節(jié)。其中2個字節(jié)偏移量(即指針的地址)和1個字節(jié)存儲器類型。為了表示這種指針必須用長整數(shù)來定義存儲類型。C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型3.4 C51C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計42q指針指針 q基于存儲器的指針 該指針不但指出了指針本

32、身的存儲類型(缺省時由編譯時的存儲模式?jīng)Q定),而且還明確的指出了指針?biāo)赶虻膶ο笞兞康拇鎯︻愋停ú荒苋笔。;诖鎯ζ鞯闹羔橀L度短,速度快,但因為它所指的對象變量有確定的存儲器空間,所以這類指針缺乏兼容性。q一般指針定義指針時若未明確指明指針?biāo)笇ο笞兞康拇鎯︻愋?,則該指針為一般指針。定義一般指針的方法與標(biāo)準(zhǔn)C語言相同。C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型3.4 C51C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計43q指針指針 對比一般指針和基于存儲器的指針,可得出以下結(jié)論:q基于存儲器的指針長度短,運行速度快。而一般指針由于其所指對象變量的存

33、儲器空間位置只有在運行期間才能確定,編譯器在編譯期間無法優(yōu)化存儲方式,必須生成一般代碼以保證能對任意空間的對象進(jìn)行存取,所以一般指針?biāo)a(chǎn)生的代碼運行速度較慢。q一般指針可用于存取任何變量而不必考慮變量在AT89C52存儲器空間的位置,函數(shù)可利用一般指針來存取位于任何存儲空間的數(shù)據(jù)。因此一般指針的兼容性較好。而基于存儲器的指針?biāo)傅膶ο笥写_定的存儲器空間,因此缺乏兼容性。C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型3.4 C51C51的構(gòu)造數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型3.5 C51實例分析及混合編程實例分析及混合編程qC51實例分析實例分析q混合編程混合編程邵陽學(xué)院邵陽學(xué)院3 單片機的單片機的C語言程序設(shè)計語言程序設(shè)計45qC51實例分析實例分析 設(shè)計一個程序來實現(xiàn)以下功能:設(shè)計一個廣告燈程序,硬件連線圖如下。 C51實例分析及混合編程實例分析及混合編程3.5 C51C51實例分析及混合編程實例分析及混合編程XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.

溫馨提示

  • 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

提交評論