單片機(jī)學(xué)習(xí)總結(jié)——軟件_第1頁
單片機(jī)學(xué)習(xí)總結(jié)——軟件_第2頁
單片機(jī)學(xué)習(xí)總結(jié)——軟件_第3頁
單片機(jī)學(xué)習(xí)總結(jié)——軟件_第4頁
單片機(jī)學(xué)習(xí)總結(jié)——軟件_第5頁
已閱讀5頁,還剩112頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 單片機(jī)單片機(jī)C51語言程序設(shè)計語言程序設(shè)計 學(xué)習(xí)目的學(xué)習(xí)目的 了解單片機(jī)C語言; 掌握C51數(shù)據(jù)類型; 掌握 C51的運(yùn)算符; 掌握C51流程控制語句; 掌握C51的數(shù)組; 掌握C51的指針; 掌握C51的函數(shù)。單片機(jī)單片機(jī)C51語言程序設(shè)計語言程序設(shè)計 1.了解了解C51編程結(jié)構(gòu)編程結(jié)構(gòu)1.任務(wù)要求任務(wù)要求(1)掌握C51編程結(jié)構(gòu);(2)了解C51編程基本部分;(3)了解C51編程書寫格式;(4)掌握程序結(jié)構(gòu)特點(diǎn)。2.任務(wù)描述任務(wù)描述 下面通過一個程序簡單來了解C51編程的結(jié)構(gòu)和書寫格式。 任務(wù)實(shí)現(xiàn)任務(wù)實(shí)現(xiàn)-C51編程結(jié)構(gòu)編程結(jié)構(gòu)#include /*C語言的預(yù)編譯處理指令,包含51單片機(jī)

2、寄存器定義的頭文件*/void main(void) /*主函數(shù),第一個void表示無需返回值,第二個void表示沒有參數(shù)傳遞*/ /每個函數(shù)必須以花括號開始“” P2=0 x00; /P2=0000 0000B,即賦值語句 /*每個函數(shù)必須以花括號開始“”結(jié)束,而且花括號必須成對*/說明:以下有4點(diǎn) 程序結(jié)構(gòu)特點(diǎn)程序結(jié)構(gòu)特點(diǎn) (1)“文件包含”處理 程序的第一行是一個“文件包含”處理,其含義是指一個文件內(nèi)容將被另外一個文件全部包含了。由于單片機(jī)不認(rèn)識端口“P1 ”,要想使單片機(jī)認(rèn)識“P1”,就必須給“P1”作一個定義。這種定義已經(jīng)由KeilC51完成,無須用戶再定義,但是編程時必須將這種定義

3、“包含”進(jìn)去,才能使單片機(jī)認(rèn)識“P1”等各種寄存器的名字。注意: #include 預(yù)處理指令是以#號開頭的代碼行。#號必須是該行第一個字符,#后是指令關(guān)鍵字。在關(guān)鍵字和#號之間允許存在任意空白字符(也可以沒有)。整行語句構(gòu)成了一條預(yù)處理指令,該指令將在編譯器進(jìn)行編譯之前對源代碼進(jìn)行轉(zhuǎn)換(keil進(jìn)行轉(zhuǎn)換,無需人工操作)。(2)主函數(shù)main() main()函數(shù)被稱為主函數(shù),每一個C語言程序必須有且只能有一個主函數(shù)一個主函數(shù),函數(shù)后面一定要有一對花括號“ ”,程序?qū)懺诨ɡㄌ柪锩娴摹?“”花括號必須成對出現(xiàn),位置不限,可跟函數(shù)名后,也可另起一行,多個花括號可以同行書寫,也可逐行書寫,為層次分明

4、,增加可讀性,同一層的“”花括號對齊,采用逐層縮進(jìn)方式書寫。 (3)語句結(jié)束標(biāo)志 C語言程序一行可以書寫多條語句,但每個語句必須以“;”結(jié)尾,一個語句也可以多行書寫。 (4)注釋 C語言程序設(shè)計中的注釋只是為了提高程序的可讀性,在編譯時,注釋內(nèi)容不會被執(zhí)行。C語言的注釋有兩種: 一種是采用/*/表示; 另一種采用“/”表示。 二者的區(qū)別是二者的區(qū)別是:前一種可以注釋多行內(nèi)容,后一種只能注釋一行內(nèi)容。 2.相關(guān)知識相關(guān)知識1.C51程序開發(fā)概述程序開發(fā)概述 單片機(jī)的C語言采用C51編譯器(簡稱C51)。由C51產(chǎn)生的目標(biāo)代碼短、運(yùn)行速度高、所需存儲空間小、符合C語言的ANSI標(biāo)準(zhǔn),生成的代碼遵循

5、Intel目標(biāo)文件格式,而且可與A51匯編語言目標(biāo)代碼混和使用。C51的優(yōu)點(diǎn): 采用C51進(jìn)行程序設(shè)計,編譯器能自動完成變量的存儲單元的分配。2.C51程序結(jié)構(gòu)程序結(jié)構(gòu) 與普通的C語言程序類似,C51程序是由若干模塊化的函數(shù)構(gòu)成。主程序( main() )可以根據(jù)需要用來調(diào)用函數(shù)。當(dāng)函數(shù)執(zhí)行完畢時,就發(fā)出返回(return)指令,而主程序main()后面的指令來恢復(fù)主程序流的執(zhí)行。同一個函數(shù)可以在不同的地方被調(diào)用,并且函數(shù)可以重復(fù)使用。C語言程序的擴(kuò)展名為“.c”,如“XM4-1.c”。 一個一個C程序的執(zhí)行總是從程序的執(zhí)行總是從main( )函數(shù)開始函數(shù)開始,調(diào)用其他函調(diào)用其他函數(shù)后返回到數(shù)

6、后返回到main( )中,最后在主函數(shù)中,最后在主函數(shù)main( )中結(jié)束整個中結(jié)束整個C程程序的運(yùn)行。序的運(yùn)行。 3.標(biāo)識符與關(guān)鍵字標(biāo)識符與關(guān)鍵字 (1)標(biāo)識符 C語言規(guī)定:語言規(guī)定: 標(biāo)識符只能是字母(AZ,a z)、下劃線“”和數(shù)字(0 9)組成的字符串,并要求首字符是字母或下劃線,不能是數(shù)字。例如,可以使用x、y作為變量的標(biāo)識符,使用delay()作為函數(shù)的標(biāo)識符。 字母的大小寫是有區(qū)別的,如max和MAX是兩個完全不同的標(biāo)識符。(2)關(guān)鍵字:關(guān)鍵字是一種已被系統(tǒng)使用過的具有特定含義的標(biāo)識符。用戶不得再用關(guān)鍵字給變量等命名用戶不得再用關(guān)鍵字給變量等命名。C語言關(guān)鍵字分為如下三類: 類型

7、說明符:用來定義變量、函數(shù)或其他數(shù)據(jù)結(jié)構(gòu)的類型,如unsigned char、int 、long等。 語句定義符:用來標(biāo)識一個語句功能,如條件判斷語句“if”、“while”等。 預(yù)處理命令字:表示預(yù)處理命令的關(guān)鍵字,如程序開頭的“include”。 由ANSI C標(biāo)準(zhǔn)定義了32個關(guān)鍵字,如表3-1所示。表3-1 ANSI C語言的關(guān)鍵字 另外51單片機(jī)還擴(kuò)展了相應(yīng)的關(guān)鍵字。表3-2為Keil C51編譯器擴(kuò)展的關(guān)鍵字。表3-2 Keil C51編譯器擴(kuò)展關(guān)鍵字例如:sfr P1=0 x90;/*定義地址為“0 x90”的特殊功能寄存器名字為“P1”,對P1的操作也就是對地址為0 x90的寄存

8、器操作*/。(格式:sfr特殊功能寄存器名=地址常數(shù))sbit S=P20;/位定義S為P2.0(P2口的第0位)。(格式:sbit 位變量名=特殊功能寄存器名位位置)。 3.認(rèn)識認(rèn)識 C51的數(shù)據(jù)類型的數(shù)據(jù)類型學(xué)習(xí)目的學(xué)習(xí)目的 (1)掌握C語言的數(shù)據(jù)類型; (2)掌握C51數(shù)據(jù)的存儲類型; (3)掌握80C51硬件結(jié)構(gòu)的C51定義。學(xué)習(xí)重點(diǎn)和難點(diǎn)學(xué)習(xí)重點(diǎn)和難點(diǎn) (1)掌握C語言的數(shù)據(jù)類型; (2)掌握C51數(shù)據(jù)的存儲類型; (3)掌握80C51硬件結(jié)構(gòu)的C51定義。 3.1.用不同數(shù)據(jù)類型控制用不同數(shù)據(jù)類型控制P2口的口的8位位LED閃爍閃爍1.任務(wù)要求任務(wù)要求(1)了解字符型數(shù)據(jù)類型應(yīng)用;

9、(2)了解整型數(shù)據(jù)類型應(yīng)用;(3)掌握延時程序編寫。2.任務(wù)描述任務(wù)描述 用不同數(shù)據(jù)類型控制P2口的8位LED閃爍。使用無符號字符型數(shù)據(jù)和無符號整型數(shù)據(jù)來設(shè)計兩個不同的延時時間,來控制LED0LED3和LED4LED7閃爍,可以看出兩組燈閃爍時間是不一樣的。3.任務(wù)實(shí)現(xiàn)任務(wù)實(shí)現(xiàn) (1)程序設(shè)計 先建立文件夾“XM10-1”,然后建立“XM10-1”工程項(xiàng)目,最后建立源程序文件“XM10-1.c”,輸入如下源程序:#include /包含單片機(jī)寄存器的頭文件/*函數(shù)功能:用字符型數(shù)據(jù)字符型數(shù)據(jù)延時一段短短時間*/void delay60(void) unsigned char i,j; /*定義

10、無符號字符型數(shù)據(jù)*/ for(i=0;i200;i+) for(j=0;j100;j+) ; /什么也不做,等待一個機(jī)器周期/*函數(shù)功能:用整型數(shù)據(jù)整型數(shù)據(jù)延時一段長時間*/void delay150(void) /*兩個void意思分別為無需返回值,沒有參數(shù)傳遞*/ unsigned int i; /*定義無符號整型數(shù)據(jù)整型數(shù)據(jù),最大取值范圍65535*/ for(i=0;i50000;i+) /做50000次空循環(huán) ; /什么也不做,等待一個機(jī)器周期/*數(shù)功能:主函數(shù) (C語言規(guī)定必須有1個主函數(shù))*/void main(void) while(1) /無限循環(huán) P2=0 xf0; /P2

11、=1111 0000B,LED0LED3燈亮 delay60(); /延時一段短時間 P2=0 xff; /P2=1111 1111B, LED0LED3燈滅 delay60(); /延時一段短時間 P2=0 x0f; /P2=0000 1111B,LED4LED7燈亮 delay150(); /延時一段長時間 P2=0 xff; /P2=1111 1111B, LED0LED3燈滅 delay150(); /延時一段長時間 3.2相關(guān)知識相關(guān)知識1.數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)據(jù)的不同格式叫數(shù)據(jù)類型。C語言中常用的數(shù)據(jù)類型有整型、字符整型、字符型、實(shí)型、指針型、空類型型、實(shí)型、指針型、空類型。 根據(jù)

12、變量在程序執(zhí)行中是否發(fā)生變化,還可將數(shù)據(jù)類型分為常量和變量兩種。1)常量與變量 在程序運(yùn)行過程中,其值不能被改變的量稱為常量常量。常量區(qū)分為不同的類型,如10,0,-4為整型常量,2.6、-3.15為實(shí)型常量,a,d為字符常量。 在程序執(zhí)行中,其值可以改變的量稱為變量變量,變量標(biāo)識符常用小寫字小寫字母母來表示,變量必須先定義后使用,一般放在程序開頭部分。 2)整型數(shù)據(jù) 整型數(shù)據(jù)包括整型常量和整型變量。 (1)整型常量)整型常量 整型常量就是整型常數(shù)。在C語言中,整型常量可用以下三種形式表示:十進(jìn)制整數(shù)。用09表示,如321, -106等。 八進(jìn)制整數(shù)。以0開頭的數(shù)是八進(jìn)制數(shù),用07表示。如02

13、15表示八進(jìn)制數(shù)215,即等于十進(jìn)制數(shù)141。 十六進(jìn)制整數(shù)。以0 x開頭的數(shù)是十六進(jìn)制數(shù),用09和AF表示。如0 xFF,代表十六進(jìn)制數(shù)FF,等于十進(jìn)制數(shù)255。 (2)整型變量整型變量 整型變量可分為基本型和無符號型,基本型類型說明符為int,在內(nèi)存中占2個字節(jié);無符號型類型說明符為unsigned,同樣在內(nèi)存中占2個字節(jié)。 KeilC51軟件編譯器支持的數(shù)據(jù)類型如表3-3所示。表3-3 C51的數(shù)據(jù)類型C規(guī)定 在程序中所使用的變量都必須在程序中定義,整型變量定義形式整型變量定義形式: 類型說明符類型說明符 變量標(biāo)識符變量標(biāo)識符1,變量標(biāo)識符,變量標(biāo)識符2,例如: int a,b;/指定變

14、量a、b為整型,各變量名之間用逗號相隔 unsigned short c,d;/ 指定變量c、d為無符號短整型 long e,f; / 指定變量e、f為長整型(3)實(shí)型數(shù)據(jù)實(shí)型數(shù)據(jù)有兩種表示形式:(本書沒有用到,不介紹本書沒有用到,不介紹)(4)字符型數(shù)據(jù) 字符型數(shù)據(jù)包括字符型常量和字符型變量字符型常量和字符型變量。 字符型常量 字符常量是用單引號括起來的一個字符。如a,x,d,?,等都是字符常量。字符型常量常用作顯示說明。 字符型變量字符型變量 字符型變量用來存放字符常量,只能放一個字符,其說明符是“char”,長度是1個字節(jié),定義形式為: charx,y;/*它表示x和y為字符型變量,在內(nèi)

15、存中各占一個字節(jié)*/ unsigned char 與signed char型數(shù)據(jù)的區(qū)別是有無符號位, unsigned無符號位的數(shù)值范圍是0255; signed 有符號位的數(shù)值范圍是-128127。 字符串常量字符串常量 字符串常量是一對雙引號雙引號括起來的字符序列。例如: “Welcome to China.”;/ 是字符串常量 a;/是字符常量 (5)指針型數(shù)據(jù))指針型數(shù)據(jù) 有時在程序中圍繞變量的地址展開操作,這就引入“指針”的概念。變量的地址稱為變量的指針,指針即是地址。指針即是地址。(6)位類型數(shù)據(jù) 位類型數(shù)據(jù)是C51編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可以定義一個位變量,但不能定義位指

16、針,也不能定義位數(shù)組。該類型數(shù)據(jù)取值為“0”或“1” (7)空類型數(shù)據(jù) C語言經(jīng)常使用函數(shù),當(dāng)函數(shù)被調(diào)用完后,無需返回一個函數(shù)值,這個函數(shù)值稱為空類型數(shù)據(jù),例如:/*函數(shù)功能:用整型型數(shù)據(jù)延時一段長時間*/void delay( ) /*用“void”說明該函數(shù)為“空類型”即無返回值, void的字面意思是“無類型” */ unsigned int i; /*定義無符號整數(shù),最大取值范圍65535*/ for(i=0;i50000;i+) /做50000次空循環(huán) ; /什么也不做,等待一個機(jī)器周期 (8)變量賦值 程序中常需要對一些變量預(yù)先賦值。C語言允許在定義變量的同時給變量賦值。如:int

17、 a=3; /* 指定a為整型變量,值為3*/float f=3.56;/* 指定f為實(shí)型變量,值為3.56 */char c=a; /* 指定c為字符變量,值為a */ 也可以使被定義的變量的一部分賦值。如: int a,b,c=5;表示指定a、b、c為整型變量,只對c賦值,c的值為5。2.C51數(shù)據(jù)的存儲類型數(shù)據(jù)的存儲類型 C51是面向80C51系列單片機(jī)的程序設(shè)計語言,應(yīng)用程序中使用的任何數(shù)據(jù)(變量和常數(shù))必須以一定的存儲類型定位于單片機(jī)相應(yīng)的存儲區(qū)域中。C51編譯器支持的存儲類型如表3-4所示。表3-4 C51的存儲類型與8051存儲空間的對應(yīng)關(guān)系 對于80C51系列單片機(jī)來說,訪問片

18、內(nèi)的RAM比訪問片外的RAM的速度要快得多,所以對于經(jīng)常使用的變量應(yīng)該置于片內(nèi)RAM,即用bdata、data、idata來定義;對于不常使用的變量或規(guī)模較大的變量應(yīng)該置于片外RAM中,即用pdata、xdata來定義。例如:(1)bit bdata my_flag; /*位變量my_flag被定義為bdata存儲類型,C51編譯器將把該變量定義在80C51片內(nèi)數(shù)據(jù)存儲區(qū)(RAM)中的位尋址區(qū)(地址:20H2FH) */(2) char data var0; /*字符變量var0被定義為data存儲類型,C51編譯器將把該變量定位在80C51片內(nèi)數(shù)據(jù)存儲區(qū)中。(3) float idata x

19、,y,z; /*浮點(diǎn)變量x、y、z被定義為idata存儲類型,C51編譯器將把該變量定位在80C51片內(nèi)數(shù)據(jù)區(qū),并只能用間接尋址的方式進(jìn)行訪問*/(4) unsigned int pdata temp ; /*無符號整型變量temp被定義為pdata存儲類型,C51譯器將把該變量定位在80C51片外數(shù)據(jù)存儲區(qū)(片外RAM) */(5) unsigned char xdata array34; /*無符號字符二維數(shù)組 unsigned char array34被定義為xdata存儲類型,C51編譯器將其定位在片外數(shù)據(jù)存儲區(qū)(片外RAM),并占據(jù)3x4=12字節(jié)存儲空間,用于存放該數(shù)組變量*/ 如

20、果用戶不對變量的存儲類型進(jìn)行定義,C51的編譯器采用默認(rèn)的存儲類型。默認(rèn)的存儲類型由編譯命令中存儲模式指令限制。C51支持的存儲模式如表3-5所示。 表3-5 C51存儲模式例如:char var ; /*在 small模式中,var定位data存儲區(qū)*/ /*在 compact模式中,var定位pdata存儲區(qū)*/ /*在 large模式中,var定位xdata存儲區(qū)*/ 在keil C51uVision 4平臺下,設(shè)置存儲模式的界面如圖3-3所示。3.4.80C51硬件結(jié)構(gòu)的硬件結(jié)構(gòu)的C51定義定義 C51是適合于80C51單片機(jī)的C語言。它對標(biāo)準(zhǔn)C語言進(jìn)行擴(kuò)展,從而具有對80C51單片機(jī)

21、硬件結(jié)構(gòu)的良好支持與操作能力。 特殊功能寄存器的定義 80C51單片機(jī)內(nèi)部RAM的80HFFH區(qū)域有21個特殊功能寄存器,為了對它們能夠直接訪問,C51編譯器利用擴(kuò)充的關(guān)鍵字SFR和SFR16對這些特殊功能寄存器進(jìn)行定義。SFR的定義方法: sfr 特殊功能寄存器名特殊功能寄存器名=地址常數(shù)地址常數(shù) 例如:sfr P0= 0 x80; /* 定義P0口,地址為0 x80*/ 4.認(rèn)識認(rèn)識 C51的運(yùn)算符的運(yùn)算符學(xué)習(xí)目的學(xué)習(xí)目的 (1)掌握算術(shù)運(yùn)算符、關(guān)系表達(dá)式及優(yōu)先級; (2)掌握關(guān)系運(yùn)算符、關(guān)系表達(dá)式及優(yōu)先級; (3)掌握邏輯運(yùn)算符和邏輯表達(dá)式及優(yōu)先級; (4)掌握C51位操作及其表達(dá)式。

22、4.1分別用分別用P2、P3口顯示口顯示“加減加減”運(yùn)算結(jié)果運(yùn)算結(jié)果1.任務(wù)要求任務(wù)要求(1)了解“加” 、“減”運(yùn)算及編程;(2)掌握十進(jìn)制數(shù)、十六進(jìn)制數(shù)、二進(jìn)制數(shù)轉(zhuǎn)換;(3)掌握無符號字符型定義。2.任務(wù)描述任務(wù)描述 分別用P2、P3口顯示“加減”運(yùn)算結(jié)果。把兩個數(shù)進(jìn)行“加減”運(yùn)算,即設(shè)“52+48”和“52-48”,把“加”運(yùn)算運(yùn)算結(jié)果送P2口顯示出來,把“減”運(yùn)算結(jié)果送P3口顯示出來。3.任務(wù)實(shí)現(xiàn)任務(wù)實(shí)現(xiàn) (1)分析 設(shè)置兩個無符號字符型變量a和b,分別賦值十進(jìn)制數(shù)52和48,然后進(jìn)行a+b和a-b運(yùn)算,并把運(yùn)算結(jié)果分別送P2、P3口顯示。 (2)程序設(shè)計 先建立文件夾“XM11-1”

23、,然后建立“XM11-1”工程項(xiàng)目,最后建立源程序文件“XM11-1.c”,輸入如下源程序:#include /包含單片機(jī)寄存器的頭文件void main(void) unsigned char a,b; /定義無符號字符型,最大值255 a=52; /a賦值為52 b=48; /b賦值為48 P2=a+b; /*P2=52+48=100=64H=01100100B,結(jié)果為P2.7、P2.4、P2.3、P2.1、P2.0接的LED燈亮*/ P3=a-b; /P3=52-48=4=00000100B,結(jié)果為P3.7、P3.6、P3.5、P3.4、P3.3、P3.1、P3.0接的LED燈亮 Whi

24、le(1)/無限循環(huán) ; /空操作(3)用Proteus軟件仿真 效果圖如圖3-4所示。 4.2.用用P1口顯示邏輯口顯示邏輯“與或與或”運(yùn)算結(jié)果運(yùn)算結(jié)果1.任務(wù)要求任務(wù)要求(1)掌握“與”、“或”運(yùn)算及編程;(2)掌握延時程序編程。 2.任務(wù)描述任務(wù)描述 用P1口顯示邏輯“與或”運(yùn)算結(jié)果。把“(60 x0f)&(80 xa)”和“(60 x0f)|(80 xa)” 運(yùn)算結(jié)果送P1口循環(huán)顯示出來。3.任務(wù)實(shí)現(xiàn)任務(wù)實(shí)現(xiàn) (1)分析 把“(60 x0f)&(80 xa)”進(jìn)行“與”運(yùn)算,即“(60 x0f)&(80 xa)”=0&1=0(60 x0f 為假即0, 80 xa 為真即1),結(jié)果送P1

25、口使得8只LED全亮,然后調(diào)延時;再把“(60 x0f)|(80 xa)”進(jìn)行“或”運(yùn)算,即“(60 x0f)|(80 xa)+0 xfe” =0|1+0 xfe=1+0 xfe=0 xff,結(jié)果送P1口使得8只LED全滅,然后調(diào)延時。(2)程序設(shè)計輸入如下源程序:#include /包含單片機(jī)寄存器的頭文件void delay(void) unsigned int i; for(i=0;i50000;i+) ; void main(void) while(1) /無限循環(huán) P1=(60 x0f)&(80 xa); /*運(yùn)算結(jié)果送 P1=0000 0000B,LED0LED7燈亮*/ dela

26、y(); /延時 P1=(60 x0f)|(80 xa) +(0 xfe); /*運(yùn)算結(jié)果送 P1=1111 1111B,LED0LED7燈滅*/ delay(); /延時 (3)用Proteus軟件仿真 經(jīng)過Keil軟件編譯通過后,在ProteusISIS編輯環(huán)境中繪制仿真電路圖,將編譯好的“XM11-2.hex”文件加載到AT89C51里,然后啟動仿真,就可以看到用P1口顯示邏輯“與或”運(yùn)算結(jié)果,效果圖如圖3-5所示。圖3-5用P1口顯示邏輯“與或”運(yùn)算結(jié)果 4.3.分別用分別用P2、P3口顯示位口顯示位“與或與或”運(yùn)算結(jié)果運(yùn)算結(jié)果1.任務(wù)要求任務(wù)要求(1)掌握位位“與”、位位“或”運(yùn)算及

27、編程;(2)掌握十六進(jìn)制數(shù)、二進(jìn)制數(shù)轉(zhuǎn)換。 2.任務(wù)描述任務(wù)描述 分別用P2、P3口顯示位“與或”運(yùn)算結(jié)果。把兩個數(shù)十六進(jìn)制數(shù)進(jìn)行位“與或”運(yùn)算,即設(shè)“0 x52&0 x48”和“0 x52|0 x48”,把位“與”運(yùn)算結(jié)果送P2口顯示出來,把位“或”運(yùn)算結(jié)果送P3口顯示出來。3.任務(wù)實(shí)現(xiàn)任務(wù)實(shí)現(xiàn)(1)分析:設(shè)兩個十六進(jìn)制數(shù)進(jìn)行位“與”運(yùn)算即“0 x52&0 x48=01010010&01001000=01000000”,把運(yùn)算結(jié)果送P2口顯示出來,把數(shù)“0 x52|0 x48=01010010&01001000=01011010”運(yùn)算結(jié)果送P3口顯示出來。(2)程序設(shè)計先建立文件夾“XM11

28、-3”,然后建立“XM11-3”工程項(xiàng)目,最后建立源程序文件“XM11-3.c”,輸入如下源程序:#include /包含單片機(jī)寄存器的頭文件void main(void) P2=0 x52&0 x48;/*P2=01010010&01001000=01000000B,結(jié)果為P2.7、P2.5、P2.4、P2.3、P2.2、P2.1、P2.0接的LED燈亮*/ P3=0 x52|0 x48;/*P3=01010010&01001000=01011010B,結(jié)果為P3.7、P3.5、P3.2、P3.0、接的LED燈亮*/While(1); /無限循環(huán) ; /空操作 4.4用用P1口顯示口顯示“左

29、右移左右移”運(yùn)算結(jié)果運(yùn)算結(jié)果1.任務(wù)要求任務(wù)要求(1)掌握“右移”、“左移”運(yùn)算及編程;(2)掌握二進(jìn)制數(shù)移位;(3)掌握無限循環(huán)編程。 2.任務(wù)描述任務(wù)描述 用P1口顯示“左右移”運(yùn)算結(jié)果。把數(shù)“0 xaa”進(jìn)行“”左移1位運(yùn)算,即“0 xaa1”,把運(yùn)算結(jié)果送P1口顯示出來,調(diào)延時,再把P1左移1位運(yùn)算送顯示;然后再把剛剛左移2位的數(shù)進(jìn)行右移2位運(yùn)算,分別把運(yùn)算結(jié)果送P1口顯示出來。3.任務(wù)實(shí)現(xiàn)任務(wù)實(shí)現(xiàn)(1)分析 設(shè)一個十六進(jìn)制數(shù)“0 xaa”,即10101010B,進(jìn)行左移1位運(yùn)算。 “10101010B01010100”,規(guī)則為高位丟掉,低位添0,把運(yùn)算結(jié)果送P1口顯示,再進(jìn)行左移1位

30、運(yùn)算“0101010010101000”,把運(yùn)算結(jié)果送P1口顯示即LED6、LED4、LED2、LED1、LED0亮,其他LED7、LED5、LED3滅。然后再把這個數(shù)據(jù)進(jìn)行右移2位運(yùn)算,即“101010000101010000101010”,再把運(yùn)算結(jié)果送P1口顯示即LED7、LED6、LED4、LED2、LED0亮,其他LED5、LED3、LED1滅。(2)程序設(shè)計 先建立文件夾“XM11-4”,然后建立“XM11-4”工程項(xiàng)目,最后建立源程序文件“XM11-4.c”,輸入如下源程序:#include /包含單片機(jī)寄存器的頭文件void delay(void) /*兩個void意思分別為無

31、需返回值,沒有參數(shù)傳遞*/ unsigned int i; /定義無符號整數(shù),最大取值范圍65535 for(i=0;i50000;i+) /做50000次空循環(huán) ; /什么也不做,等待一個機(jī)器周期void main(void) while(1) /無限循環(huán) P1=0 xaa1; /*運(yùn)算結(jié)果送P1=01010100B,LED7、LED5、LED3、LED1、LED0亮,其他LED6、LED4、LED2滅*/ delay(); /延時 P1= P11; /*結(jié)果送P1=01010100B,再把運(yùn)算結(jié)果送P1口顯示即LED7、LED5、LED3、LED1、LED0亮,其他LED6、LED4、LE

32、D2滅*/ delay(); /延時 P1= P11; /*結(jié)果送P1=00101010B,再把運(yùn)算結(jié)果送P1口顯示即LED7、LED6、LED4、LED2、LED0亮,其他LED5、LED3、LED1滅*/ delay(); /延時 4.5相關(guān)知識相關(guān)知識 1.算術(shù)運(yùn)算符、關(guān)系表達(dá)式及優(yōu)先級算術(shù)運(yùn)算符、關(guān)系表達(dá)式及優(yōu)先級(1)算術(shù)運(yùn)算符 運(yùn)算符運(yùn)算符 意義意義實(shí)例(設(shè)實(shí)例(設(shè)x=11,y=3)加法運(yùn)算符加法運(yùn)算符z=x+y;/z=14減法運(yùn)算符減法運(yùn)算符z=x-y;/z=8*乘法運(yùn)算符乘法運(yùn)算符z=x*y;/z=33除法運(yùn)算符除法運(yùn)算符z=xy;/z=3%模(求余)運(yùn)算符模(求余)運(yùn)算符z=

33、x%y;/z=2優(yōu)先級:算術(shù)運(yùn)算符中取負(fù)運(yùn)算的優(yōu)先級最高,其次是乘法、除法和取余,加法和減法的優(yōu)先級最低。也可以采用括號來改變優(yōu)先級的順序。例如: a+b/c; 該表達(dá)式中,除號優(yōu)先級高于加號,故先運(yùn)算b/c所得結(jié)果,之后再與a相加。(a+b)*(c-d)-e; 該表達(dá)式中,括號優(yōu)先級最高,其次是“*”,最后是減號。故先運(yùn)算(a+b)和(c-d),然后再將二者結(jié)果相乘,最后與e相減。 運(yùn)算符運(yùn)算符 意義意義實(shí)例(設(shè)實(shí)例(設(shè)x=3)x +先用先用x的值,再讓的值,再讓x加加1y=x +;/y=3,x=4+x先讓先讓x加加1,再用,再用x的值的值y=+x;/y=4,x=4x-先用先用x的值,再讓的

34、值,再讓x減減1y=x-;/y=3,x=2-x先讓先讓x減減1,再用,再用x的值的值y=-x;/y=2,x=2(2)自增減運(yùn)算符自增減運(yùn)算符的作用是使變量值自動加1或減1。2.關(guān)系運(yùn)算符、關(guān)系表達(dá)式及優(yōu)先級關(guān)系運(yùn)算符、關(guān)系表達(dá)式及優(yōu)先級(1)C51提供六種關(guān)系運(yùn)算符運(yùn)算符運(yùn)算符意義意義實(shí)例(設(shè)實(shí)例(設(shè)a=2,b=3)小于ab;/返回值1大于ab;/返回值0= 小于等于a=b;/返回值1= 大于等于a=b;/返回值0= 等于a=b;/返回值0!=不等于a!=b;/返回值1(2)關(guān)系運(yùn)算符的優(yōu)先級、=的優(yōu)先級相同,兩種=、!=相同;前4種優(yōu)先級高于后兩種。關(guān)系運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符。關(guān)系運(yùn)算

35、符的優(yōu)先級高于賦值運(yùn)算符。例如: ca+b 等效于 c(a+b); ab!=c 等效于(ab)!=c a=bc 等效于a=(bc)(3)關(guān)系運(yùn)算符的結(jié)合性為左結(jié)合例如: a=4,b=3,c=1 ,則 f=abc,則ab的值為1,1c的值為0,故f=0。3.邏輯運(yùn)算符和邏輯表達(dá)式及優(yōu)先級邏輯運(yùn)算符和邏輯表達(dá)式及優(yōu)先級(1)C51提供3種邏輯運(yùn)算符運(yùn)算符運(yùn)算符意義意義實(shí)例(設(shè)實(shí)例(設(shè)a=2,b=3)& 邏輯 “與”a&b;/返回值1|邏輯“或”a|b;/返回值1!邏輯“非”!a;/返回值0(2)邏輯運(yùn)算符的優(yōu)先級 在邏輯運(yùn)算中,邏輯非的優(yōu)先級最高,且高于算術(shù)運(yùn)算符;邏輯或的優(yōu)先級最低,低于關(guān)系運(yùn)算

36、符,但高于賦值運(yùn)算符。4.C51位操作及其表達(dá)式位操作及其表達(dá)式C51提供提供6種位運(yùn)算符:種位運(yùn)算符: & 位與; | 位或; 位異或; 位取反; 右移; 除按位取反運(yùn)算符“”以外,以上位操作運(yùn)算符都是雙目運(yùn)算符,及要求運(yùn)算符兩側(cè)各有一個運(yùn)算對象。(1)“按位與”運(yùn)算符“&” 運(yùn)算規(guī)則運(yùn)算規(guī)則:參與運(yùn)算的兩個運(yùn)算對象,若兩者相應(yīng)的位都為1,則該位結(jié)果為1,否則為0,即:0&0=0、 0&1=0、 1&0=0、 1&1=1 例如:a=45h=0100 0101b,b=0deh=1101 1110b,則表達(dá)式c=a&b=44h 主要用途:清零。用0去和需要清零的位按位與運(yùn)算。取指定位。(2)“按

37、位或”運(yùn)算符“|” 運(yùn)算規(guī)則:參與運(yùn)算的兩個運(yùn)算對象,若兩者相應(yīng)的位中有一位為1,則該位結(jié)果為1,否則為0,即: 0|0=0、 0|1=1、 1|0=1、 1|1=1例如:a=30h=00110000b,b=0fh=00001111b,則表達(dá)式c=a|b=3fh 主要用途是將一個數(shù)的某些位置1,則需要將這些位和1按位或,其余的位和0進(jìn)行按位或運(yùn)算則不變。(3)“異或”運(yùn)算符“” 運(yùn)算規(guī)則:參與運(yùn)算的兩個運(yùn)算對象,若兩者相應(yīng)的位相同,則結(jié)果為0;若兩則相應(yīng)的位相異,結(jié)果為1,即: 00=0、 01=1、 10=1、 11=0 例如:a=0a5h,b=3dh, 則表達(dá)式c=ab=98h 主要用途:

38、 特定位翻轉(zhuǎn)。 不用臨時變量交換兩數(shù)的至。(4)“位取反”運(yùn)算符“” “”是一個單目運(yùn)算符,用來對一個二進(jìn)制數(shù)按位取反,即0變1,1變0。(5)位左移和位右移運(yùn)算符“” 位左移、位右移運(yùn)算符“”,用來將一個二進(jìn)制位的全部左移或右移若干位;移位后,空白位補(bǔ)0,而溢出的位舍棄。 例如: a=15h, 則 a=a2=05h(6) 賦值和復(fù)合賦值運(yùn)算符 符號稱為賦值運(yùn)算符,其作用是將一個數(shù)據(jù)的值賦予一個變量。賦值表達(dá)式的值 就是被賦值變量的值。 在賦值運(yùn)算符的前面加上其他運(yùn)算符就可以構(gòu)成復(fù)合賦值運(yùn)算符。在C51中共有10種 復(fù)合運(yùn)算符,這10種賦值運(yùn)算符均為雙目運(yùn)算符。即:+=, -=, *=, /=

39、, %=, =, &=, |=, =, =。采用這種復(fù)合賦值運(yùn)算的目的,是為了簡化程序,提高C程序編譯效率。如:a+=b相當(dāng)于a=a+b a%=b相當(dāng)于a=a%b(7)其他運(yùn)算符(共有其他運(yùn)算符(共有7個)個) :數(shù)組的下標(biāo)。 ( ):括號。 . :結(jié)構(gòu)/聯(lián)合變量指針成員。& :取內(nèi)容。 ? : 三目運(yùn)算符。,:逗號運(yùn)算符。Sizeof: sizeof運(yùn)算符用于在程序中測試某一數(shù)據(jù)類型占用多少字節(jié)。小結(jié):小結(jié): (1)算術(shù)運(yùn)算符、關(guān)系表達(dá)式及優(yōu)先級; (2)關(guān)系運(yùn)算符、關(guān)系表達(dá)式及優(yōu)先級; (3)邏輯運(yùn)算符和邏輯表達(dá)式及優(yōu)先級; (4)C51位操作及其表達(dá)式。 5.認(rèn)識認(rèn)識C51流程控制語句流

40、程控制語句學(xué)習(xí)目的學(xué)習(xí)目的(1)掌握C51的順序結(jié)構(gòu); (2)掌握C51的選擇結(jié)構(gòu);(3)掌握C51的循環(huán)結(jié)構(gòu)。學(xué)習(xí)重點(diǎn)和難點(diǎn)學(xué)習(xí)重點(diǎn)和難點(diǎn)(1)掌握)掌握“if”語句功能及編程;語句功能及編程;(2)掌握)掌握“switch”語句功能及編程;語句功能及編程;(3)掌握)掌握“while”語句功能及編程。語句功能及編程。 5.1任務(wù)描述任務(wù)描述 用按鍵S控制P1口8只LED顯示狀態(tài)。P3.0接一個按鍵S,P1口接8只LED。設(shè)計一個程序?qū)崿F(xiàn)以下功能:S按下第1次,LED1發(fā)光;S按下第2次,LED1、LED2發(fā)光;S按下第3次,LED1、LED2、LED3發(fā)光 S按下第 8次,LED1LED8

41、都發(fā)光;S按下第9次,LED1發(fā)光;S按下第10次,LED1、LED2發(fā)光依次循環(huán)。 3.任務(wù)實(shí)現(xiàn)任務(wù)實(shí)現(xiàn)(1)分析:先設(shè)置一個變量i,當(dāng)i=1時,LED1發(fā)光;當(dāng)i=2時,LED1、LED2發(fā)光;當(dāng)i=3時,LED1、LED2、LED3發(fā)光;當(dāng)i=8時,LED1LED8都發(fā)光。由“switch”語句根據(jù)i的值來實(shí)現(xiàn)LED發(fā)光。i值的改變可以通過按鍵S來控制,每按下S按鍵一次,i自增1,當(dāng)增加到9時,將其值重新置為1。(2)程序設(shè)計 先建立文件夾“XM12-1”,然后建立“XM12-1”工程項(xiàng)目,最后建立源程序文件“XM12-1.c”,輸入如下源程序:#include /頭文件sbit S=P

42、30; /定義按鍵S接入P3.0引腳/*函數(shù)功能:延時約150ms*/void delay(void) unsigned char i,j; for(i=0;i200;i+) for(j=0;j250;j+) ;void main(void) unsigned char i ; i=0 ; /i初始化 while(1) /無限循環(huán) if(S=0) /判斷S按鍵是否被按下,如果S=0被按下 delay(); /150ms延時,消除鍵盤抖動 if(S=0) /*再判斷S按鍵是否被按下,如果S=0確被按下*/ i+; /i自增1 if(i=9) /如果i=9,將其值重新置為1 i=1 ; switc

43、h(i)/使用多分支語句 case 1:P1=0 xfe; /LED1發(fā)光 break; /退出switch語句 case 2:P1=0 xfc; / LED1、LED2發(fā)光 break; /退出switch語句 case 3:P1=0 xf8; break; /退出switch語句 case 4:P1=0 xf0; break; /退出switch語句 case 5:P1=0 xe0; break; /退出switch語句 case 6:P1=0 xc0; break; /退出switch語句 case 7:P1=0 x80; break; /退出switch語句 case 8:P1=0 x

44、00; break; /退出switch語句/ LED1LED8發(fā)光 defauit: /默認(rèn)值,關(guān)閉所有LED P1=0 xff; 5.3.用用for語句實(shí)現(xiàn)蜂鳴器發(fā)出語句實(shí)現(xiàn)蜂鳴器發(fā)出1KHz音頻音頻1.任務(wù)要求任務(wù)要求(1)掌握“for”語句功能及編程;(2)掌握延時時間的估算方法;(3)掌握“while”語句功能及編程。 2.任務(wù)描述任務(wù)描述 設(shè)計一個用for語句實(shí)現(xiàn)蜂鳴器發(fā)出1KHz音頻的程序。要求為:(1)發(fā)出頻率為1KHz音頻;(2)蜂鳴器接到P1.0引腳上。3.任務(wù)實(shí)現(xiàn)任務(wù)實(shí)現(xiàn)(1)分析 設(shè)單片機(jī)晶振頻率為12MHz,則機(jī)器周期為1s。只要讓單片機(jī)的P1.0引腳的電平信號每隔音

45、頻的半個周期取反一次即可發(fā)出1KHz音頻。音頻的周期為T=1/1000Hz=0.001s,即1000s,半個周期為1000s/2=500s,即在P1.0引腳上每500s取反一次即可發(fā)出1KHz音頻。而延時500s需要消耗機(jī)器周期數(shù)N=500s /3=167,即延時每循環(huán)167次,就可讓P1.0引腳上取反一次就可以得到1KHz音頻。(2)程序設(shè)計如下源程序:#include/包含單片機(jī)寄存器的頭文件sbit sound=P10; /將 sound 位定義為 PI. 0 引腳/*函數(shù)功能:延時以形成約lKHz音頻*/void delay1000Hz(void)unsigned char i; fo

46、r(i=0;i167;i+);/*函數(shù)功能:主函數(shù) */void main(void)while(1) /無限循環(huán) sound =0; /P1. 0引腳輸出低電平 delay1000Hz;/延時以形成半個周期 sound =1; /PI. 0引腳輸出髙電平 delay1000Hz(); /延時以形成約周期lKHz音頻 小結(jié):小結(jié):消耗機(jī)器周期數(shù)的計算(近似值):(1)一重循環(huán) for(i=0;in;i+) / n必須為無符號字符型數(shù)據(jù) ; 消耗機(jī)器周期數(shù)為: N=3n 式中:N為消耗機(jī)器周期數(shù);n為需要設(shè)置的循環(huán)次數(shù)(n必須為無符號字符型數(shù)據(jù))。(2)二重循環(huán) for(i=0;in;i+) /

47、 n必須為無符號字符型數(shù)據(jù) for(i=0;im;i+) / m必須為無符號字符型數(shù)據(jù) ; 消耗機(jī)器周期數(shù)為: N=3nm 5.4.用用while語句實(shí)現(xiàn)語句實(shí)現(xiàn)P1口口8只只LED顯示狀態(tài)顯示狀態(tài)1.任務(wù)要求任務(wù)要求(1)掌握“while”語句功能及編程;(2)掌握延時程序編寫。 2.任務(wù)描述任務(wù)描述 設(shè)計一個用while語句實(shí)現(xiàn)P1口8只LED顯示狀態(tài)的程序。要求為: (1)P1口接8只發(fā)光二極管,低電平點(diǎn)亮;(2)點(diǎn)亮發(fā)光二極管間隔為150ms;(3)顯示99種狀態(tài)。3.任務(wù)實(shí)現(xiàn)任務(wù)實(shí)現(xiàn) (1)分析 設(shè)計一個用while語句實(shí)現(xiàn)P1口8只LED顯示狀態(tài)的程序,根據(jù)要求在while語句循環(huán)

48、中設(shè)置一個變量i,當(dāng)i小于0 x64(十進(jìn)制數(shù)100)時,將i的值送P1口顯示,并i自增1,當(dāng)i等于0 x64時,就跳出while循環(huán)。 (2)程序設(shè)計 如下源程序:#include /包含單片機(jī)寄存器的頭文件/*函數(shù)功能:延時約150ms */void delay(void)unsigned char i, j;for (i=0;i200;i+) for(j=0;j250;j+); /*函數(shù)功能:主函數(shù)*/ void main(void)unsigned char i; while(1) /無限循環(huán)i=0; /將i置為0,即初始化 while(i0 x64) /i小于100時執(zhí)行循環(huán)體P1=

49、i; /將i值送P1 口顯示 Delay(); /調(diào)延時 i+; /i 自增 1 5.5用用dowhile 語句實(shí)現(xiàn)語句實(shí)現(xiàn)P1口口8只只LED顯示狀態(tài)顯示狀態(tài)1.任務(wù)要求任務(wù)要求 (1)掌握“dowhile”語句功能及編程;(2)掌握延時時間的估算方法; ( 3)掌握延時程序編寫。 2.任務(wù)描述任務(wù)描述 設(shè)計一個用dowhile語句實(shí)現(xiàn)P1口8只LED顯示狀態(tài)的程序。要求為:(1)P1口接8只發(fā)光二極管,低電平點(diǎn)亮;(2)點(diǎn)亮發(fā)光二極管間隔為150ms;(3)點(diǎn)亮次序?yàn)?,LED1發(fā)光; LED1、LED2發(fā)光; LED1、LED2、LED3發(fā)光LED1LED8都發(fā)光; LED1發(fā)光; LED

50、1、LED2發(fā)光依次循環(huán)。3.任務(wù)實(shí)現(xiàn)任務(wù)實(shí)現(xiàn)(1)分析 只要在循環(huán)體中按照點(diǎn)亮次序依次點(diǎn)亮,再將循環(huán)條件設(shè)置為死循環(huán)即可。點(diǎn)亮LED的控制碼:LED1發(fā)光控制碼為0 xfe;LED1、LED2發(fā)光控制碼為0 xfc; LED1、LED2、LED3發(fā)光控制碼為0 xf8LED1LED8都發(fā)光的控制碼為0 x00; LED1發(fā)光的控制碼為0 xfe;LED1、LED2發(fā)光的控制碼為0 xfc依次循環(huán)。(2)程序設(shè)計如下:#include/包含單片機(jī)寄存器的頭文件void delay (void) /此程序延時約150msunsigned char i,j; for(i=0;i200;i+) fo

51、r(j=0;jy) max=x; else max=y; 例如:if (salary1000) index=0.4;else if (salary800)index=0. 3;else if (salary600) index=0. 2; else if (salary400)index=0. 1;elseindex=0;說明:if語句的嵌套,在if語句中又含一個或多個if語句,這種情況稱為if語句的嵌套。(2)開關(guān)語句 if語句比較適合于從兩者之間選擇。當(dāng)要實(shí)現(xiàn)從多種選一時,采用switchcase多分支開關(guān)語句,可使程序變得更為簡潔。一般形式:Switch (表達(dá)式) Case 常量表達(dá)式

52、1:語句1; break; /*如果常量表達(dá)式1滿足,則執(zhí)行語句1,使用break跳出switch結(jié)構(gòu)*/ Case 常量表達(dá)式2:語句2; break; /同上 : Case 常量表達(dá)式n:語句n; break; /同上 default:語句n+1; /*條件都不滿足時,執(zhí)行語句n +1*/ 注意:注意:對于Switch語句,需要注意兩點(diǎn):一是常量表達(dá)式的值必須是整型或字符型;二是最好使用“break”。 4.C51的循環(huán)結(jié)構(gòu)的循環(huán)結(jié)構(gòu) 循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的3種基本結(jié)構(gòu)之一,因此掌握循環(huán)結(jié)構(gòu)的概念是程序設(shè)計,尤其是C程序設(shè)計最基本的要求。 在C51語言中,實(shí)現(xiàn)循環(huán)的語句主要有3種。(1

53、)While語句的一般形式 While(表達(dá)式)(表達(dá)式) 語句;語句; /*循環(huán)體循環(huán)體*/ While語句的語義是:計算表達(dá)式的值,當(dāng)值為真(非0)時,執(zhí)行循環(huán)體語句,否則,跳出循環(huán)體,執(zhí)行后續(xù)操作。使用while語句應(yīng)注意以下幾點(diǎn)注意以下幾點(diǎn): While語句中的表達(dá)式一般是關(guān)系表達(dá)式或邏輯表達(dá)式,只要表達(dá)式的值為真(非0)即可繼續(xù)循環(huán)。 循環(huán)體如包含一個以上的語句,則必須用“”括起來,組成復(fù)合語句。 While循環(huán)體中,應(yīng)有讓循環(huán)最終能結(jié)束的語句,否則將造成死循環(huán)。 實(shí)例:用while求1到10的和,程序如下:void main(void) unsigned char i,sum ;

54、sum=0; i=1; while(i=10) sum=sum+i i+; P0=sum;/將結(jié)果送P0口顯示 (2)dowhile 語句的一般形式 do 語句語句; /*循環(huán)體循環(huán)體*/ while (表達(dá)式表達(dá)式); dowhile 語句的執(zhí)行過程如下:首先執(zhí)行循環(huán)體語句一次,再判斷表達(dá)式的值。如果表達(dá)式的值為真(非0值),則重復(fù)執(zhí)行循環(huán)體語句,直到表達(dá)式的值變?yōu)榧伲?值)時循環(huán)結(jié)束。 對于這種結(jié)構(gòu),在任何條件下,循環(huán)體語句至少會被執(zhí)行一次。注意:do是C語言關(guān)鍵字,必須和while聯(lián)合使用; while(表達(dá)式)后的分號“;”不能少,它表示整個循環(huán)語句的結(jié)束。實(shí)例:用dowhile求1到

55、10的和,程序如下: void main(void) unsigned char i,sum ; sum=0; i=1; do sum=sum+i ; /*注意 不能省,否則跳不出循環(huán)體*/ i+; while(i=10); /分號“;”不能少 P0=sum;/將結(jié)果送P0口顯示 (3)for 語句的一般形式 for (表達(dá)式1; 表達(dá)式2; 表達(dá)式3) 語句; /*循環(huán)體*/ for循環(huán)語句結(jié)構(gòu)可使程序按指定的次數(shù)重復(fù)執(zhí)行一個語句或一組語句。 for循環(huán)語句的執(zhí)行過程如下: 首先計算表達(dá)式1(表達(dá)式1實(shí)際上是賦初值),然后計算表達(dá)式2,若表達(dá)式2為真,則執(zhí)行循環(huán)體;否則退出for循環(huán),執(zhí)行f

56、or后面的語句。如果執(zhí)行了循環(huán)體,每執(zhí)行循環(huán)體一次,都計算表達(dá)式3,然后再重新計算表達(dá)式2,以此類推,直至表達(dá)式2為假,退出循環(huán)。 實(shí)例:用for循環(huán)語句求1到10的和,程序如下:void main(void) unsigned char i,sum ; sum=0; for(i=1;i=10;i+) sum=sum+i ; P0=sum;/將結(jié)果送P0口顯示小結(jié):小結(jié):(1)C51的順序結(jié)構(gòu); (2)C51的選擇結(jié)構(gòu);(3)C51的循環(huán)結(jié)構(gòu)。課后練習(xí)課后練習(xí) 22、23、24、25 6.認(rèn)識認(rèn)識C51的數(shù)組的數(shù)組學(xué)習(xí)目的學(xué)習(xí)目的(1)掌握一維、二維數(shù)組;(2)掌握字符數(shù)組。 6.1用數(shù)組實(shí)現(xiàn)

57、用數(shù)組實(shí)現(xiàn)P1口口8只只LED顯示狀態(tài)顯示狀態(tài)1.任務(wù)要求任務(wù)要求(1)掌握“for”語句功能及編程;(2)掌握無符號字符型數(shù)組功能及編程;(3)掌握“while”語句功能及編程。 2.任務(wù)描述任務(wù)描述 設(shè)計一個程序用無符號字符型數(shù)組實(shí)現(xiàn)以下功能:一變量i,當(dāng)i=1時,LED1發(fā)光(被點(diǎn)亮);當(dāng)i=2時,LED1、LED2發(fā)光;當(dāng)i=3時,LED1、LED2、LED3發(fā)光;當(dāng)i=8時,LED1LED8都發(fā)光,當(dāng)i=9時,LED1LED8都熄滅,當(dāng)i=1時,LED1發(fā)光依次循環(huán)。3.任務(wù)實(shí)現(xiàn)任務(wù)實(shí)現(xiàn)(1)分析 用無符號字符型數(shù)組來實(shí)現(xiàn),大大簡化了程序設(shè)計和節(jié)約了存儲器空間,關(guān)鍵字為“code”,

58、其定義如下:unsigned char code Tab=0 xfe,0 xfc,0 xf8,0 xf0,0 xe0,0 xc0,0 x80,0 x00,0 xff;/*定義無符號字符型數(shù)組,數(shù)組元素為點(diǎn)亮LED狀態(tài)控制碼*/(2)程序設(shè)計 如下源程序: 6.2相關(guān)知識相關(guān)知識1.概述概述 在程序設(shè)計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類型數(shù)據(jù)元素的集合稱為數(shù)組數(shù)組。 因此按數(shù)組元素的類型不同,數(shù)組又可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組等。2.一維數(shù)組一維數(shù)組(1)一維數(shù)組的定義方式 類型說明符類型說明符 數(shù)組名數(shù)組名 整型常量表達(dá)式整型常量

59、表達(dá)式;例如: int a10;/*定義整型數(shù)組a,它有a0a9共10個元素,每個元素都是整型變量*/說明: 數(shù)組名的命名規(guī)則和變量名相同,遵循標(biāo)識符命名規(guī)則; 數(shù)組名后是用方括號括方括號括起來的常量表達(dá)式,不能用圓括??; 常量表達(dá)式表示元素的個數(shù),即數(shù)組的長度。例如在int a10中,10表示a數(shù)組有10個數(shù)據(jù)元素,下標(biāo)從0開始,這10個元素是:a0, a1, a2, a3, a4, a5, a6, a7, a8, a9。 常量表達(dá)式中可以包括常量和符號常量,不能包含變量。也就是說,C51不允許對數(shù)組的大小作動態(tài)定義,即數(shù)組大小不依賴于程序運(yùn)行過程中變量的值;(2)一維數(shù)組的初始化 對數(shù)組元

60、素的初始化可以用以下方法實(shí)現(xiàn): 在定義數(shù)組時對數(shù)組元素賦予初值。 例如:int a10=0,1,2,3,4,5,6,7,8,9; 將數(shù)組元素的初值依次放在一對花括弧內(nèi)。經(jīng)過上面的定義和初始化之后,a0=0, a1=1, a2=2, a3=3, a4=4, a5=5, a6=6, a7=7, a8=8, a9=9。 可以只給一部分元素賦值。 例如:int a10=0,1,2,3,4; 定義a數(shù)組有10個元素,但花括弧內(nèi)只提供五個初值,這表示只給前五個元素賦初值,后面的五個元素值為0。 在對全部數(shù)組元素賦初值時,可以不指定數(shù)組的長度。 例如: int a5=1,2,3,4,5; 也可以寫成: in

溫馨提示

  • 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

提交評論