




已閱讀5頁,還剩133頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1 08 53 單片機原理與接口技術(shù) 第5章MCS 51單片機C51程序設(shè)計 2 08 53 1 熟悉C51語法基礎(chǔ)和程序結(jié)構(gòu) 2 掌握C51結(jié)構(gòu)化程序設(shè)計 3 掌握C51對單片機硬件的訪問方法 4 掌握C51函數(shù)定義與調(diào)用 5 了解匯編語言和C51的混合編程 本章教學(xué)要求 3 08 53 5 1C51概述5 2C51語法基礎(chǔ)5 2 1標識符和關(guān)鍵字5 2 2數(shù)據(jù)類型5 2 3運算符和表達式5 2 4程序結(jié)構(gòu) 本章目錄 5 3C51對MCS 51單片機的訪問5 3 1存儲類型5 3 2存儲模式5 3 3對特殊功能寄存器的訪問5 3 4對存儲器和并行口的訪問5 3 5位地址訪問 4 08 53 5 4C51函數(shù)5 4 1函數(shù)的分類5 4 2函數(shù)的定義5 4 3函數(shù)的調(diào)用5 4 4對被調(diào)函數(shù)的說明5 4 5中斷函數(shù)5 5C51結(jié)構(gòu)化程序設(shè)計5 5 1順序結(jié)構(gòu)程序5 5 2選擇結(jié)構(gòu)程序 5 5 3循環(huán)結(jié)構(gòu)程序5 6C51程序設(shè)計實例5 6 1查表程序5 6 2單片機內(nèi) 外部資源應(yīng)用程序設(shè)計5 6 3C51語言和MCS 51匯編語言混合編程5 6 4編程優(yōu)化的概念習(xí)題與思考題 本章目錄 5 08 53 5 1C51概述 C語言是一種通用的程序設(shè)計語言 其代碼率高 數(shù)據(jù)類型及運算符豐富 位操作能力強 適用于各種應(yīng)用的程序設(shè)計 使用C語言進行單片機應(yīng)用系統(tǒng)開發(fā) 具有編程靈活 調(diào)試方便 目標代碼編譯效率高的特點 C語言也是目前使用最廣的單片機應(yīng)用系統(tǒng)編程語言 由C語言編程的單片機應(yīng)用程序 稱為單片機C語言程序 MCS 51系列單片機開發(fā)系統(tǒng)的編譯軟件可以對51單片機C語言源程序進行編譯 稱為C51編譯器 在C51編譯軟件中可進行51單片機C語言程序的調(diào)試 6 08 53 1 擴展了專門訪問MCS 51單片機硬件的數(shù)據(jù)類型 2 存儲類型按MCS 51單片機存儲空間分類 3 存儲模式遵循存儲空間選定編譯器模式 4 指針分為通用指針和存儲器指針 5 函數(shù)增加了中斷函數(shù)和再入函數(shù) 5 1C51概述 C51編譯器針對MCS 51單片機硬件在下列幾方面對ANSIC進行了擴展 7 08 53 使用具有C51編譯擴展功能的C語言進行MCS 51單片機應(yīng)用系統(tǒng)的開發(fā)編程 簡稱C51編程 C51編程具有以下特點 1 可管理內(nèi)部寄存器和存儲器的分配 編程時 無需考慮不同存儲器的尋址和數(shù)據(jù)類型等細節(jié)問題 2 程序由若干函數(shù)組成 具有良好的模塊化結(jié)構(gòu) 可移植性好 便于項目維護管理 3 有豐富的子程序庫可直接引用 從而大大減少用戶編程工作量 提高編程效率 4 與匯編語言交叉編程 用匯編語言編寫與硬件有關(guān)的程序 用C51編寫與硬件無關(guān)的運算程序 充分發(fā)揮兩種語言的長處 提高開發(fā)效率 5 1C51概述 8 08 53 C51編程和匯編語言編程過程一樣 單片機C語言源程序經(jīng)過編輯 編譯 連接后生成目標程序 BIN和 HEX 文件 然后運行即可 調(diào)試51單片機C語言程序可用KeilC51編譯器 注意 使用C51編程可以取代繁瑣的匯編語言編程 但仍需要了解MCS 51單片機的硬件結(jié)構(gòu) 所以對于單片機系統(tǒng)的開發(fā)應(yīng)采用匯編語言與C51混合編程的方法更為有效 5 1C51概述 9 08 53 5 2C51語法基礎(chǔ) 標識符用來標識源程序中某個對象的名字 這些對象可以是語句 數(shù)據(jù)類型 函數(shù) 變量 數(shù)組等 標識符由字符串 數(shù)字和下劃線等組成 應(yīng)該注意的是第一個字符必須是字母或下劃線 不能用數(shù)字開頭 如 1 a 是錯誤的 編譯時會有錯誤提示 在C51編譯器中 只支持標識符的前32位為有效標識 C51語言是區(qū)分大小寫的一種高級語言 如 a 1 和 A 1 是兩個完全不同的標識符 5 2 1標識符和關(guān)鍵字 標識符 10 08 53 C51中有些庫函數(shù)的標識符是以下劃線開頭的 所以一般不要以下劃線開頭命名用戶自定義標識符 標識符在命名時應(yīng)當簡單 含義清晰 這樣有助于閱讀理解程序 關(guān)鍵字則是編程語言保留的特殊標識符 它們具有固定的名稱和含義 在程序編寫中不允許將關(guān)鍵字另做他用 C51中的關(guān)鍵字除了有ANSIC標準的32個關(guān)鍵字外 還根據(jù)MCS 51單片機的特點擴展了相關(guān)的關(guān)鍵字 C51關(guān)鍵字如表5 1所示 在C51的文本編輯器中編寫C程序 系統(tǒng)可以把保留關(guān)鍵字以不同顏色顯示 如int關(guān)鍵字的默認顏色為天藍色 5 2 1標識符和關(guān)鍵字 關(guān)鍵字 11 08 53 5 2 1標識符和關(guān)鍵字 關(guān)鍵字列表 12 08 53 5 2 1標識符和關(guān)鍵字 關(guān)鍵字列表 13 08 53 5 2 1標識符和關(guān)鍵字 關(guān)鍵字列表 14 08 53 5 2 2數(shù)據(jù)類型 C51具有ANSIC的所有標準數(shù)據(jù)類型 其基本數(shù)據(jù)類型包括 char int short long float和double 對C51編譯器來說 short類型和int類型相同 double類型和float類型相同 C51的數(shù)據(jù)類型 15 08 53 除此之外 為了更加有利地利用MCS 51的結(jié)構(gòu) C51還增加了一些特殊的數(shù)據(jù)類型 包括bit sbit sfr sfr16 數(shù)據(jù)類型如表5 2所示 5 2 2數(shù)據(jù)類型 C51的數(shù)據(jù)類型 16 08 53 char類型的長度是1B 通常用于定義處理字符數(shù)據(jù)的變量或常量 unsignedchar類型用字節(jié)中所有的位表示數(shù)值 可以表達的數(shù)值范圍是0 255 signedchar類型用字節(jié)中最高位表示數(shù)據(jù)的符號 0表示正數(shù) 1表示負數(shù) 負數(shù)用補碼表示 能表示的數(shù)值范圍是 128 127 unsignedchar常用于處理ASCII字符或用于處理小于或等于255的整型數(shù) 1 char字符類型 5 2 2數(shù)據(jù)類型 char字符類型 17 08 53 2 int整型 int整型長度為2B 用于存放一個雙字節(jié)數(shù)據(jù) signedint表示的數(shù)值范圍是 32768 32767 字節(jié)中最高位表示數(shù)據(jù)的符號 0表示正數(shù) 1表示負數(shù) unsignedint表示的數(shù)值范圍是0 65535 5 2 2數(shù)據(jù)類型 int整型 18 08 53 long長整型長度為4B 用于存放一個四字節(jié)數(shù)據(jù) 分有符號long長整型signedlong和無符號long長整型unsignedlong 默認值為signedlong類型 signedint表示的數(shù)值范圍是 2147483648 2147483647 字節(jié)中最高位表示數(shù)據(jù)的符號 0表示正數(shù) 1表示負數(shù) unsignedlong表示的數(shù)值范圍是0 4294967295 3 long長整型 5 2 2數(shù)據(jù)類型 long長整型 19 08 53 4 float浮點型 float浮點型在十進制中具有7位有效數(shù)字 是符合IEEE 754標準 32 的單精度浮點型數(shù)據(jù) 占用4B 具有24位精度 5 2 2數(shù)據(jù)類型 float浮點型 20 08 53 5 指針型 指針型本身就是一個變量 在這個變量中存放著指向另一個數(shù)據(jù)的地址 這個指針變量要占據(jù)一定的內(nèi)存單元 對不同的處理器長度也不盡相同 在C51中它的長度一般為1 3個字節(jié) 5 2 2數(shù)據(jù)類型 指針型 21 08 53 bit位標量是C51編譯器的一種擴充數(shù)據(jù)類型 利用它可定義一個位標量 它的值是一個二進制位 不是0 就是1 類似一些高級語言中的boolean型數(shù)據(jù)的True和False 6 bit位標量 5 2 2數(shù)據(jù)類型 bit位標量 22 08 53 7 sfr特殊功能寄存器 sfr是一種C51擴充數(shù)據(jù)類型 占用一個內(nèi)存單元 值域為0 255 利用它可以訪問MCS 51單片機內(nèi)部的所有特殊功能寄存器 如用sfrP1 0 x90定義一個特殊功能寄存器變量 P1 0 x90是指51單片機的P1端口地址90H 變量P1即指51單片機的P1端口 在后面的語句中可以用P1 255 對P1端口的所有引腳置高電平 之類的語句操作特殊功能寄存器 5 2 2數(shù)據(jù)類型 sfr特殊功能寄存器 23 08 53 8 sfr1616位特殊功能寄存器 sfr16也是一種C51擴充數(shù)據(jù)類型 用于定義存在于MCS 51單片機內(nèi)部RAM的16位特殊功能寄存器 如定時器T0和T1 sfr16型數(shù)據(jù)占用2個內(nèi)存單元 取值范圍為0 65535 5 2 2數(shù)據(jù)類型 16位特殊功能寄存器 24 08 53 sbit也是一種C51擴充數(shù)據(jù)類型 利用它可以訪問芯片內(nèi)部RAM中的可尋址位或特殊功能寄存器中的可尋址位 定義方法有如下三種 1 sbit位變量名 位地址將位的絕對地址賦給位變量 位地址必須位于80H FFH 特殊功能寄存器的位地址 之間 2 sbit位變量名 特殊功能寄存器名 位位置當可尋址位位于特殊功能寄存器中時 可采用這種方法 位位置是一個0 7之間的常數(shù) 3 sbit位變量名 字節(jié)地址 位位置這種方法是以一個常數(shù) 字節(jié)地址 作為基地址 該常數(shù)必須在80H FFH 特殊功能寄存器的字節(jié)地址 之間 位位置是一個0 7之間的常數(shù) 9 sbit可尋址位 5 2 2數(shù)據(jù)類型 sbit可尋址位 25 08 53 MCS 51單片機中的特殊功能寄存器及其可尋址位 已被預(yù)先定義放在文件reg51 h中 在程序的開頭只需加上 include或 include即可 另外 bit還可訪問MCS 51單片機片內(nèi)20H 2FH范圍內(nèi)的位對象 C51編譯器提供了一個bdata存儲器類型 允許將具有bdata類型的對象放入MCS 51單片機片內(nèi)可位尋址區(qū) 5 2 2數(shù)據(jù)類型 reg51 h 26 08 53 sbit和bit的區(qū)別 sbit定義特殊功能寄存器中的可尋址位 而bit則定義了一個普通的位變量 一個函數(shù)中可包含bit類型的參數(shù) 函數(shù)返回值也可為bit類型 5 2 2數(shù)據(jù)類型 sbit和bit 27 08 53 5 2 3運算符和表達式 C51算術(shù)運算符有五種 加法運算符或正號 減法運算符或負號 乘法運算符 除法運算符 模 求余 運算符優(yōu)先級 先乘除 后加減 先括號內(nèi) 再括號外 結(jié)合性 自左至右方向 模運算即求余數(shù) 如 7 3 結(jié)果是7除以3所得余數(shù)1 1 C51的算術(shù)運算符 算術(shù)運算符 28 08 53 C51關(guān)系運算符有六種 大于 大于等于 相等 不相等優(yōu)先級 前四個高 后兩個 和 級別低 結(jié)合性 自左至右方向 關(guān)系表達式的結(jié)果是邏輯值 真 或 假 C51中以 1 代表真 0 代表假 2 C51關(guān)系運算符 5 2 3運算符和表達式 關(guān)系運算符 29 08 53 C51邏輯運算符有三種 邏輯與 邏輯或 邏輯非優(yōu)先級 邏輯非 最高 結(jié)合性 和 自左至右方向 自右至左方向 運算符的兩邊為關(guān)系表達式 邏輯表達式和關(guān)系表達式的值相同 以 0 代表假 以 1 代表真 3 C51邏輯運算符 5 2 3運算符和表達式 邏輯運算符 30 08 53 C51按位操作運算符有六種 按位與 位取反 按位或 位右移注 移位操作為補零移位 位運算符只能對整形和字符型運算 不能對實型數(shù)據(jù)運算 如 chara 0 x0f 表達式a a值為0 xf0 如 chara 0 x22 表達式a 2值為0 x88 即a值左移兩位 移位后空白位補0 位操作運算符 5 2 3運算符和表達式 4 C51位操作運算符 31 08 53 自增1 自減1自增 自減運算符可以在變量的前面或后面使用 如 i或 I 意為在使用i之前 先使i值加1或減1 如 i 或i 意為在使用變量i之后 再使i值加1或減1 例如 定義整型變量 inti 6 并有j i 則j值為7 i值也為7 而如有j i 則j值為6 i值為7 5 自增 自減運算符 5 2 3運算符和表達式 運算符 32 08 53 6 賦值運算符 賦值將 右邊的值賦給 左邊的變量 注 不是相等運算符 5 2 3運算符和表達式 賦值運算符 33 08 53 C51提供了十種復(fù)合賦值運算符 采用符合賦值運算的目的是為了簡化程序 提高C51程序的編譯效率 例 a b相當于a a b a b相當于a a b 7 復(fù)合賦值運算符 5 2 3運算符和表達式 復(fù)合賦值運算符 34 08 53 8 對指針操作的運算符 取地址運算符 指針運算符注意 與 的用法意義如下 與按位與運算符的差別 如果 為 與 運算 運算符的兩邊必須為變量或常量 如a c b 是取地址運算時 如a b 與指針定義時指針前的 的差別 如char pt 這里的 只表示pt為指針變量 不代表間址取內(nèi)容的運算 而c b 是將以b的內(nèi)容為地址的單元內(nèi)容送c變量 C51運算的優(yōu)先級 非 算術(shù)運算 關(guān)系運算 和 賦值運算 5 2 3運算符和表達式 指針操作的運算符 35 08 53 5 2 4程序結(jié)構(gòu) 與ANSIC一樣 C51的程序是一個函數(shù)定義的集合 可以由任意個函數(shù)構(gòu)成 其中必須有一個主函數(shù)main 程序的執(zhí)行是從主函數(shù)main 開始的 調(diào)用其他函數(shù)后返回主函數(shù)main 最后在主函數(shù)中結(jié)束整個程序 而不管函數(shù)的排列順序如何 函數(shù)定義的集合 36 08 53 全局變量說明 可被各函數(shù)引用 類型說明main 主函數(shù) 聲明部分語句部分 類型說明函數(shù)名1 形式參數(shù)表 函數(shù)1 聲明部分語句部分 類型說明函數(shù)名n 形式參數(shù)表 函數(shù)n 聲明部分語句部分 5 2 4程序結(jié)構(gòu) 程序的組成 37 08 53 5 3C51對MCS 51單片機的訪問 MCS 51單片機的存儲器分為片內(nèi)數(shù)據(jù)存儲器 特殊功能寄存器 片外數(shù)據(jù)存儲器 片內(nèi)程序存儲器和片外程序存儲器 在C51中訪問這些存儲器時 是通過定義不同存儲類型的變量 以說明該變量所訪問的存儲器位置 5 3 1存儲類型 C51訪問存儲器 38 08 53 1 data存儲類型data存儲類型變量可直接尋址片內(nèi)數(shù)據(jù)存儲區(qū)RAM 128字節(jié) 訪問速度快 2 bdata存儲類型bdata存儲類型變量可位尋址片內(nèi)數(shù)據(jù)存儲區(qū)RAM 16個字節(jié) 允許位與字節(jié)混合訪問 3 idata存儲類型idata存儲類型變量可間接尋址內(nèi)部數(shù)據(jù)存儲區(qū) 可訪問全部內(nèi)部地址空間 00 FFH 256字節(jié) 5 3 1存儲類型 定義存儲類型 39 08 53 4 pdata存儲類型pdata存儲類型變量可以分頁 256B 尋址由指令MOVX Ri訪問的片外RAM空間 5 xdata存儲類型xdata存儲類型變量可以尋址由指令MOVX DPTR訪問的64KB片外RAM空間 6 code存儲類型code存儲類型變量可以尋址由指令MOVC A DPTR訪問的64KB片內(nèi)外ROM空間 定義存儲類型 5 3 1存儲類型 40 08 53 5 3 2存儲模式 存儲模式?jīng)Q定了變量的默認存儲類型和參數(shù)傳遞區(qū) 變量定義不明確存儲類型時使用默認值 C51有三種存儲模式 SMALL LARGE和COMPACT 變量的存儲類型 41 08 53 5 3 2存儲模式 變量的存儲類型 42 08 53 數(shù)據(jù)存儲模式的設(shè)定有兩種方式 1 使用預(yù)處理命令設(shè)定數(shù)據(jù)存儲模式需在程序的第一句加預(yù)處理命令 如 pragmasmall 設(shè)定數(shù)據(jù)存儲模式為小編譯模式 pragmacompact 設(shè)定數(shù)據(jù)存儲模式為緊湊編譯模式 pragmalarge 設(shè)定數(shù)據(jù)存儲模式為大編譯模式 2 使用編譯控制命令設(shè)定數(shù)據(jù)存儲模式用C51編譯程序?qū)51源程序進行編譯時 使用編譯控制命令 格式如下 C51源程序名SMALLC51源程序名COMPACTC51源程序名LARGE 5 3 2存儲模式 存儲模式的設(shè)定 43 08 53 例如 C51源程序為file1 C 若使程序中的變量存儲類型和參數(shù)傳遞區(qū)限定在外部數(shù)據(jù)存儲區(qū) 即設(shè)定數(shù)據(jù)存儲模式為COMPACT 緊湊編譯模式 方法1 在程序的第一句加預(yù)處理命令 pragmacompact 方法2 用C51對file1 C進行編譯時 使用編譯控制命令 C51file1 CCOMPACT 5 3 2存儲模式 存儲模式的設(shè)定 44 08 53 5 3 2存儲模式 例5 1 變量和函數(shù)的存儲模式設(shè)置 pragmasmall 默認存儲類型為MCS 51直接尋址片內(nèi)RAM chardatai j k 在MCS 51片內(nèi)直接尋址RAM中定義了3個變量 默認為自動變量 chari j k 未指明存儲類型 由 pragmasmall決定 與前一句完全等價 intxdatam n 在MCS 51片外RAM中定義了兩個自動變量 staticcharm n 在MCS 51片內(nèi)直接尋址RAM中定義了兩個靜態(tài)變量 存儲模式舉例 45 08 53 unsignedcharxdataram 10 在MCS 51片外RAM中定義了大小為10B的數(shù)組變量 intfunc1 inti intj large 指定函數(shù)中變量是LARGE模式 return i j intfunc2 inti intj 未指明存儲模式 按默認的SMALL模式 return i j 5 3 2存儲模式 存儲模式舉例 46 08 53 5 3 3特殊功能寄存器的訪問 MCS 51系列單片機片內(nèi)有21個特殊功能寄存器 SFR 分散在片內(nèi)RAM區(qū)的0 x80 0 xFF地址范圍內(nèi) 對SFR的操作只能用直接尋址方式 為了能直接訪問這些特殊功能寄存器 C51提供了定義SFR的方法 這與ANSIC不兼容 只適用于MCS 51系列單片機 定義SFR的方法 47 08 53 sfr數(shù)據(jù)類型 用sfr定義特殊功能寄存器名的語法如下 Sfr特殊功能寄存器名 整型常量 例如 sfrPSW 0 xD0 定義程序狀態(tài)字PSW 因MCS 51單片機的PSW地址為D0H sfrTMOD 0 x89 定義定時 計數(shù)器方式控制寄存器TMOD 因MCS 51單片機的TMOD地址為89H sfrP1 0 x90 定義P1口 因MCS 51單片機的P1口地址為90H sfrSCON 0 x98 定義串口控制寄存器SCON 因MCS 51單片機的SCON地址為8H 5 3 3特殊功能寄存器的訪問 1 用sfr數(shù)據(jù)類型訪問特殊功能寄存器 48 08 53 2 用sbit數(shù)據(jù)類型訪問可位尋址的特殊功能寄存器中的位 MCS 51系列單片機片內(nèi)21個特殊功能寄存器 SFR 中有11個特殊功能寄存器是可位尋址的 訪問這些可位尋址的特殊功能寄存器中的位的方法可由關(guān)鍵字sbit定義特殊功能寄存器位尋址數(shù)據(jù)類型來實現(xiàn) 定義特殊功能寄存器位名的語法有下列三種 5 3 3特殊功能寄存器的訪問 sbit數(shù)據(jù)類型 49 08 53 sbit特殊功能寄存器位名 特殊功能寄存器名 整型常量其中 特殊功能寄存器名是已由sfr定義了的特殊功能寄存器名 整型常量是位可尋址特殊功能寄存器中的位 是一個0 7之間的常數(shù) sbit特殊功能寄存器位名 整型常量1 整型常量2其中 整型常量1是指可位尋址特殊功能寄存器的字節(jié)地址 在80H FFH之間 整型常量2是指該寄存器中的位 是一個0 7之間的常數(shù) sbit特殊功能寄存器位名 整型常量其中 整型常量是可位尋址特殊功能寄存器的絕對位地址 位于80H FFH之間 5 3 3特殊功能寄存器的訪問 定義方法 50 08 53 5 3 3特殊功能寄存器的訪問 sfrPSW 0 xD0 首先定義程序狀態(tài)字PSW 因MCS 51單片機的PSW地址為D0H sbitOV PSW 2 在前面定義了PSW后 OV位于PSW的第2位 sbitAC 0 xD0 6 D0H是程序狀態(tài)字PSW的字節(jié)地址 輔助進位標志位AC位于PSW的第6位 sbitRS0 0 xD0 3 工作寄存器組控制位RS0位于PSW的第3位 sbitCY 0 xD7 進位標志位Cy的絕對位地址為D7H 標準SFR在reg51 h reg52 h等頭文件中已經(jīng)被定義 只要用文件包含做出申明即可使用 實例 51 08 53 例5 2特殊功能寄存器的訪問 include reg51 h sbitP10 P1 0 定義P10為P1口第0位 即P1 0口 sbitP12 P1 2 定義P12為P1口第2位 即P1 2口 voidmain P10 1 置位P1 0口 P12 0 復(fù)位P1 2口 PSW 0 x08 程序狀態(tài)字置0 x08 5 3 3特殊功能寄存器的訪問 應(yīng)用實例 52 08 53 5 3 4存儲器和并行口的訪問 MCS 51單片機片內(nèi)有128個字節(jié)的RAM區(qū) 00H 7FH 可擴展片外64KB的ROM和RAM 有P0 P1 P2 P3四個8位雙向并行I O口 每個端口可以按字節(jié)輸入或輸出 也可以按位進行輸入或輸出 四個口共32根口線 使用C51編程時 片內(nèi) 外存儲器 片內(nèi)I O口與片外擴展I O口可以統(tǒng)一在頭文件中定義 也可以在程序中進行定義 一般在程序開始的位置 C51定義存儲器 并行口方法如下 在頭文件中定義 53 08 53 1 對存儲器使用絕對地址訪問 C51編譯器提供了一組宏定義用來對MCS 51系列單片機的CODE DATA PDATA和XDATA空間進行絕對地址訪問 函數(shù)原型如下 defineCBYTE unsignedcharvolatile 0 x50000L defineDBYTE unsignedcharvolatile 0 x40000L definePBYTE unsignedcharvolatile 0 x30000L defineXBYTE unsignedcharvolatile 0 x20000L defineCWORD unsignedintvolatile 0 x50000L defineDWORD unsignedintvolatile 0 x40000L definePWORD unsignedintvolatile 0 x30000L defineXWORD unsignedintvolatile 0 x20000L 這些函數(shù)原型放在absacc h文件中 5 3 4存儲器和并行口的訪問 絕對地址訪問 54 08 53 CBYTE以字節(jié)形式對CODE區(qū)尋址 DBYTE以字節(jié)形式對DATA區(qū)尋址 PBYTE以字節(jié)形式對PDATA區(qū)尋址 XBYTE以字節(jié)形式對XDATA區(qū)尋址 CWORD以字形式對CODE區(qū)尋址 DWORD以字形式對DATA區(qū)尋址 PWORD以字形式對PDATA區(qū)尋址 XWORD以字形式對XDATA區(qū)尋址 5 3 4存儲器和并行口的訪問 絕對地址訪問 55 08 53 例5 3使用絕對地址訪問存儲器 include include defineuintunsignedint defineucharunsignedcharvoidmain void uintui var1 ucharuc var1 ui var1 XWORD 0 x0000 訪問外部RAM的0000H 0001H地址的內(nèi)容 uc var1 XBYTE 0 x0002 訪問外部RAM的0002H地址的內(nèi)容 XWORD 0 x0000 0 xAABB 將0 xAABB送入外部RAM的0000H 0001H地址中 XBYTE 0 x0002 0 xAA 將0 xAA送入外部RAM的0002H地址中 for 5 3 4存儲器和并行口的訪問 絕對地址訪問 56 08 53 2 對存儲器使用指針訪問 采用指針的方法 可實現(xiàn)在C51程序中對任意指定的存儲器地址進行操作 例5 4使用指針訪問存儲器 defineucharunsignedchar defineuintunsignedintvoidtest memory void ucharidataivar1 定義一個指向idata存儲空間的變量 ucharxdata xdp 定義一個指向XDATA存儲器空間的指針 chardata dp 定義一個指向DATA存儲器空間的指針 5 3 4存儲器和并行口的訪問 指針訪問 57 08 53 ucharidata idp 定義一個指向IDATA存儲器空間的指針 xdp 0 x1000 XDATA指針賦值 指向XDATA存儲器地址1000H處 xdp 0 x5A 將數(shù)據(jù)5AH送到XDATA區(qū)的1000H單元 dp 0 x61 DATA指針賦值 指向DATA存儲器地址61H處 dp 0 x23 將數(shù)據(jù)23H送到DATA區(qū)的61H單元 idp 數(shù)據(jù)16H送到IDATA區(qū)的變量ivar1所在的地址單元中 等價于ivar1 0 x16 5 3 4存儲器和并行口的訪問 指針訪問 58 08 53 3 C51定義片內(nèi)I O口 單片機內(nèi)部并行口可用關(guān)鍵字sfr定義 I O口定義格式舉例 sfrP0 0 x80 定義P0口 地址80H sfrP1 0 x90 定義P1口 地址90H 5 3 4存儲器和并行口的訪問 sfr定義片內(nèi)I O 59 08 53 操作片內(nèi)I O口 例5 5操作片內(nèi)I O口sfrP1 0 x90 定義P1口 地址90H sfrP3 0 xB0 定義P3口 地址B0H sbitDIPswitch P1 4 P1口第4位 P1 4口 為DIP開關(guān)的輸入 sbitLEDgreen P3 5 P3口第5位 P3 5口 為LED的輸出 voidmain unsignedcharinval 0 for if DIPswitch 1 檢查P1 4口輸入是否為高 inval P1 P1口0 3位輸出與P3口的0 3位相或輸出 5 3 4存儲器和并行口的訪問 60 08 53 4 C51定義外部并行口 對片外擴展的I O口 則根據(jù)其硬件譯碼地址 將其看作片外數(shù)據(jù)存儲器的一個單元 使用 define語句進行定義 用指針定義 指針的定義在absacc h頭文件中 5 3 4存儲器和并行口的訪問 define語句定義片外I O 61 08 53 操作片外I O口 例5 6操作片外I O口 include absacc h definePAXBYTE 0 xffec 將PA定義為外部I O口 地址為0 xffec voidmain PA 0 x5A 將數(shù)據(jù)5AH寫入地址為0 xffec的存儲單元或I O端口 在頭文件或程序中對片內(nèi) 外I O口進行定義以后 在程序中就可以使用這些口了 定義口地址的目的是為了便于C51編譯器按MCS 51單片機系統(tǒng)的實際硬件結(jié)構(gòu)建立I O口變量名與其實際地址的聯(lián)系 以便程序員能用軟件模擬MCS 51單片機系統(tǒng)的硬件操作 5 3 4存儲器和并行口的訪問 62 08 53 5 3 5位地址訪問 C51編譯器支持bit數(shù)據(jù)類型 在C51程序中可以使用bit數(shù)據(jù)類型對位地址進行操作 C51對位變量的定義有3種方法 1 用bit關(guān)鍵字定義C51位變量2 通過指定函數(shù)中參數(shù)為bit類變量3 定義位尋址存儲區(qū)的位變量 位變量定義 63 08 53 5 3 5位地址訪問 1 用bit關(guān)鍵字定義C51位變量例如 bitlock 將lock定義為位變量 bitdirention 將direction定義為位變量 bitdisplay 將display定義為位變量 注意 不能定義位變量指針 也不能定義位變量數(shù)組 用bit定義位變量 64 08 53 例如 bitfun bita1 bita2 return a1 5 3 5位地址訪問 2 通過指定函數(shù)中參數(shù)為bit類變量 函數(shù)參數(shù)為位變量 65 08 53 位尋址存儲區(qū)的位變量定義 3 定義位尋址存儲區(qū)的位變量C51編譯器允許數(shù)據(jù)類型為bdata的變量放入片內(nèi)RAM可位尋址區(qū)中 例如 先定義變量的數(shù)據(jù)類型和存儲類型 然后使用sbit定義位變量 bdataintibdata ibdata定義為bdata整型變量 bdatacharcarry 5 carry定義為bdata字符數(shù)組 sbitmybit0 ibdata 0 mybit0定義為ibdata的第0位 sbitmybit15 ibdata 15 mybit15定義為ibdata的第15位 5 3 5位地址訪問 66 08 53 位尋址存儲區(qū)的位變量定義 sbitarrybit07 carry 0 7 arrybit07定義為carry 0 的第7位 sbitarrybit37 carry 3 7 arrybit37定義為carry 3 的第7位 arrybit37 0 carry 3 的第7位賦值為0 位尋址 carry 0 A carry 0 賦值為 A 字節(jié)尋址 位置 操作符 后的最大值取決于指定的基本數(shù)據(jù)類型 對于char而言是0 7 對于int而言是0 15 對于long而言是0 31 5 3 5位地址訪問 67 08 53 5 4C51函數(shù) C51程序是由一個個函數(shù)構(gòu)成的 在構(gòu)成C51程序的若干個函數(shù)中 必須有一個主函數(shù)main 主函數(shù)可根據(jù)需要來調(diào)用其它函數(shù) 同一個函數(shù)可以在不同的地方被調(diào)用 68 08 53 5 4 1函數(shù)的分類 從用戶使用角度劃分 函數(shù)分為庫函數(shù)和用戶自定義函數(shù) 庫函數(shù) 是編譯系統(tǒng)為用戶設(shè)計的一系列標準函數(shù) 用戶只需調(diào)用 而無需自己去編寫這些復(fù)雜的函數(shù) 在調(diào)用前要先使用 include包含命令包含和該函數(shù)有關(guān)的頭文件 然后才能調(diào)用 如前面所用到的頭文件reg51 h等 每一種頭文件中包括一系列函數(shù) 用戶自定義函數(shù) 是用戶根據(jù)任務(wù)編寫的函數(shù) 從用戶使用角度分類 69 08 53 從函數(shù)定義形式上可劃分為三種 無參函數(shù) 有參函數(shù)和空函數(shù) 無參函數(shù) 函數(shù)中無參數(shù)定義 該函數(shù)調(diào)用時無參數(shù)傳遞 有參函數(shù) 函數(shù)中定義形式參數(shù) 在調(diào)用函數(shù)時 實際參數(shù)值傳遞給形式參數(shù) 調(diào)用后返回結(jié)果給調(diào)用它的函數(shù)使用 空函數(shù) 函數(shù)中無參數(shù) 也無語句 該函數(shù)可以調(diào)用但沒有任何功能 該函數(shù)是為了開發(fā)程序時將一些非基本模塊的功能函數(shù)定義成空函數(shù) 先占好位置 以后再用編好的函數(shù)替換它 5 4 1函數(shù)的分類 從函數(shù)定義形式分類 70 08 53 5 4 2函數(shù)的定義 函數(shù)類型函數(shù)名 函數(shù)體語句 如果函數(shù)沒有返回值 可以將返回值類型設(shè)為void 函數(shù)以 開始 以 結(jié)束 1 無參函數(shù)的定義 無參函數(shù)定義 71 08 53 例5 7無參函數(shù)的定義與調(diào)用 includevoidfun1 printf ThisisaC51Program n voidmain fun1 5 4 2函數(shù)的定義 無參函數(shù)定義 72 08 53 2 有參函數(shù)的定義 函數(shù)類型函數(shù)名 形式參數(shù)表列 函數(shù)體語句return 返回形參名 其中形式參數(shù)表列的各項要用 隔開 通過return語句將需返回的值返回給調(diào)用函數(shù) 5 4 2函數(shù)的定義 有參函數(shù)定義 73 08 53 例5 8有參函數(shù)的定義與調(diào)用 voidfun2 inta intb intsum sum a b returnsum voidmain intx 123 y 456 sum sum fun2 x y 5 4 2函數(shù)的定義 有參函數(shù)定義 74 08 53 空函數(shù)定義 3 空函數(shù)的定義函數(shù)類型函數(shù)名 函數(shù)可以將返回值類型設(shè)為void 例5 9空函數(shù)的定義與調(diào)用 voidfun3 voidmain fun3 5 4 2函數(shù)的定義 75 08 53 5 4 3函數(shù)的調(diào)用 函數(shù)調(diào)用的一般形式為 函數(shù)名 實際參數(shù)表列 函數(shù)的調(diào)用方式有三種 1 把被調(diào)函數(shù)作為主調(diào)函數(shù)中的一個語句 例如fun1 2 把被調(diào)函數(shù)作為表達式的一個運算對象 例如sum 2 fun2 x y 3 把被調(diào)函數(shù)作為另一個函數(shù)的參數(shù) 例如printf sumis d n fun2 x y 函數(shù)調(diào)用形式 76 08 53 5 4 4對被調(diào)函數(shù)的說明 函數(shù)調(diào)用必須具有以下條件 1 被調(diào)用函數(shù)必須是已經(jīng)存在的函數(shù) 庫函數(shù)和用戶自定義函數(shù) 2 調(diào)用庫函數(shù)需要 include包含和該函數(shù)有關(guān)的頭文件 然后才能調(diào)用 3 調(diào)用用戶自定義函數(shù) 如果被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)之后 在主調(diào)函數(shù)前應(yīng)對被調(diào)函數(shù)作聲明 形式為 函數(shù)類型函數(shù)名 形參表列 函數(shù)調(diào)用條件 77 08 53 例5 10函數(shù)的定義與聲明voidmain 主函數(shù) intfun1 inta intb 函數(shù)聲明 intd u 3 v 2 d 2 fun1 u v intfun1 inta intb 函數(shù)定義 intc c a b return c 5 4 4對被調(diào)函數(shù)的說明 函數(shù)的定義與聲明 78 08 53 intfun1 inta intb intc c a b return c voidmain intd u 3 v 2 d 2 fun1 u v 5 4 4對被調(diào)函數(shù)的說明 函數(shù)的定義與聲明 上例中被調(diào)函數(shù)在主調(diào)函數(shù)之后 在主調(diào)函數(shù)一開始對被調(diào)函數(shù)進行了聲明 若被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)之前時 可以不對被調(diào)函數(shù)進行聲明 上例可修改為 79 08 53 5 4 5中斷函數(shù) 中斷服務(wù)程序在C51程序中是以中斷函數(shù)的形式出現(xiàn)的 中斷函數(shù)的格式為 void函數(shù)名 interruptnusingm 函數(shù)體語句 interrupt是中斷函數(shù)的關(guān)鍵字 n是中斷號 MCS 51的中斷號與中斷源的對應(yīng)關(guān)系如表5 5所示 using是指定中斷函數(shù)中選用工作寄存器組的關(guān)鍵字 m是0 3范圍的常數(shù) 若不用該選項 編譯器會自動選擇默認工作寄存器組 0組寄存器 中斷函數(shù)的格式 80 08 53 表5 5MCS 51中斷源和中斷的關(guān)系 void函數(shù)名 interruptnusingm 5 4 5中斷函數(shù) 中斷函數(shù)的中斷號 81 08 53 例 voidT0 srv void interrupt1using1 定時 計數(shù)器0中斷函數(shù) 定時 計數(shù)器0中斷服務(wù)程序 5 4 5中斷函數(shù) 中斷函數(shù)舉例 82 08 53 編寫中斷函數(shù)要點 1 中斷函數(shù)不能進行參數(shù)傳遞 2 中斷函數(shù)沒有返回值 應(yīng)定義為void型 3 禁止對中斷函數(shù)的直接調(diào)用 4 如果中斷函數(shù)調(diào)用了其他函數(shù) 被調(diào)函數(shù)與中斷函數(shù)使用相同的寄存器組 5 中斷函數(shù)最好寫在程序尾部 void函數(shù)名 interruptnusingm 5 4 5中斷函數(shù) 編寫中斷函數(shù)要點 83 08 53 5 5C51結(jié)構(gòu)化程序設(shè)計 C51程序是一種結(jié)構(gòu)化程序 由若干模塊組成 每個模塊中包含若干個基本結(jié)構(gòu) 而每個基本結(jié)構(gòu)中可以有若干條語句 基本結(jié)構(gòu)有三種 順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu) 三種結(jié)構(gòu)程序 84 08 53 順序結(jié)構(gòu)是一種最基本 最簡單的程序結(jié)構(gòu) 在這種結(jié)構(gòu)中 語句被依次逐條地順序執(zhí)行 例5 11一乘法程序 乘積放在外部RAM的0000H單元 voidmain unsignedlongxdata p 設(shè)定p是指向外部RAM區(qū)的unsignedlong指針 unsignedlongx 12345 y 67890 mum mum x y p 0 p指向外部RAM區(qū)0000H單元 p mum 乘積存入外部RAM區(qū)0000H單元 5 5 1順序結(jié)構(gòu)程序 順序結(jié)構(gòu) 85 08 53 5 5 2選擇結(jié)構(gòu)程序 用if語句可以構(gòu)成選擇結(jié)構(gòu) 它根據(jù)給定的條件進行判斷 以決定執(zhí)行某個分支程序段 語言的if語句有三種基本形式 1 單分支語句if 條件表達式 語句組 其語義是 如果條件表達式的值為真 則執(zhí)行其后的語句組 否則不執(zhí)行其后的語句組 單分支語句執(zhí)行過程可表示為圖5 1所示 單分支結(jié)構(gòu) 86 08 53 單分支結(jié)構(gòu)舉例 例5 12尋找兩個數(shù)中的大數(shù)輸出voidmain unsignedxdata p unsigneda 35 b 78 max max a if max b max b p 0 p指向外部RAM區(qū)0000H單元 p max 最大值存入外部RAM區(qū)0000H單元 5 5 2選擇結(jié)構(gòu)程序 87 08 53 2 雙分支語句if 條件表達式 語句組1 else語句組2 5 5 2選擇結(jié)構(gòu)程序 雙分支結(jié)構(gòu) 其語義是 如果條件表達式的值為真 則執(zhí)行語句組1 否則執(zhí)行語句組2 其執(zhí)行過程可表示為圖5 2所示 88 08 53 例5 13尋找兩個數(shù)中的大數(shù)輸出 include reg51 h voidmain unsignedxdata p unsigneda 35 b 78 max if a b max a elsemax b p 0 p指向外部RAM區(qū)0000H單元 p max 最大值存入外部RAM區(qū)0000H單元 5 5 2選擇結(jié)構(gòu)程序 雙分支結(jié)構(gòu)舉例 89 08 53 3 多分支語句當有多個分支選擇時 可采用if else if語句結(jié)構(gòu) 其一般形式為 if 條件表達式1 語句組1 elseif 條件表達式2 語句組2 elseif 條件表達式3 語句組3 elseif 條件表達式n 語句組n else語句m 5 5 2選擇結(jié)構(gòu)程序 多分支結(jié)構(gòu) 其語義是 依次判斷條件表達式的值 當出現(xiàn)某個條件表達式的值為真 非0 時 則執(zhí)行其對應(yīng)的語句組 然后跳到整個if語句之外繼續(xù)執(zhí)行程序 如果所有的表達式的值均為假 0 則執(zhí)行語句組m 然后繼續(xù)執(zhí)行后續(xù)程序 90 08 53 例5 14如圖5 3所示 單片機P1口的P1 0和P1 1各接一個開關(guān)K1 K2 P1 4 P1 5 P1 6和P1 7各接一只發(fā)光二極管 由K1和K2的不同狀態(tài)來確定哪個發(fā)光二極管被點亮 程序如下 5 5 2選擇結(jié)構(gòu)程序 多分支結(jié)構(gòu)舉例 91 08 53 include reg51 h voidmain chara a P1 a a 5 5 2選擇結(jié)構(gòu)程序 多分支結(jié)構(gòu)舉例 92 08 53 4 開關(guān)選擇switch語句 switch語句結(jié)構(gòu)的一般形式為 switch 表達式 case常量表達式1 語句組1 case常量表達式2 語句組2 case常量表達式n 語句組n default 語句組n 1 5 5 2選擇結(jié)構(gòu)程序 多分支結(jié)構(gòu) 其語義是 計算表達式的值 并逐個與其后的常量表達式值相比較 當表達式的值與某個常量表達式的值相等時 即執(zhí)行其后的語句組 然后繼續(xù)執(zhí)行后面所有的case語句 但不再進行判斷 如表達式的值與所有case后的常量表達式的值均不相等時 則執(zhí)行default后的語句 93 08 53 例5 15用switch語句完成例5 14任務(wù) 程序如下 includevoidmain chara a P1 a a 5 5 2選擇結(jié)構(gòu)程序 多分支結(jié)構(gòu)舉例 94 08 53 在使用switch語句時還應(yīng)注意以下幾點 1 在case后的各常量表達式的值不能相同 否則會出現(xiàn)錯誤 2 在case后 允許有多條語句 可以不用 括起來 3 各case和default子句的先后順序可以變動 而不會影響程序執(zhí)行結(jié)果 4 default子句可以省略不用 5 在每一case語句之后增加break語句 使每一次執(zhí)行之后均可跳出switch語句 這樣才能實現(xiàn)多分支結(jié)構(gòu) 5 5 2選擇結(jié)構(gòu)程序 使用switch語句 95 08 53 5 5 3循環(huán)結(jié)構(gòu)程序 循環(huán)結(jié)構(gòu)程序的其特點是 在給定條件成立時 反復(fù)執(zhí)行某程序段 直到條件不成立為止 給定的條件稱為循環(huán)條件 反復(fù)執(zhí)行的程序段稱為循環(huán)體 語言提供了多種循環(huán)語句 可以組成各種不同形式的循環(huán)結(jié)構(gòu) 語言提供的循環(huán)語句有 1 用while語句 2 用do while語句 3 用for語句 語言的循環(huán)語句 96 08 53 1 while循環(huán)語句 while循環(huán)語句的一般形式為 while 表達式 語句組其中表達式是循環(huán)條件 語句組為循環(huán)體 while語句的語義是 計算表達式的值 當值為真 非0 時 執(zhí)行循環(huán)體語句組 5 5 3循環(huán)結(jié)構(gòu)程序 while循環(huán)語句 97 08 53 例5 16前面的例5 15程序只能執(zhí)行一遍 用while語句使其無窮循環(huán)執(zhí)行 程序如下 includevoidmain chara while 1 循環(huán)條件表達式的值始終為1 無窮循環(huán) a P1 a a 5 5 3循環(huán)結(jié)構(gòu)程序 while循環(huán)語句 98 08 53 2 do while循環(huán)語句do while循環(huán)語句的一般形式為 do語句組while 表達式 5 5 3循環(huán)結(jié)構(gòu)程序 do while循環(huán)語句 這個循環(huán)與while循環(huán)的不同在于 先執(zhí)行循環(huán)體中的語句組 然后再判斷表達式的值是否為真 如果為真 非0 則繼續(xù)循環(huán) 如果為假 0 則終止循環(huán) 因此 do while循環(huán)至少要執(zhí)行一次循環(huán)體內(nèi)的語句組 do while循環(huán)語句流程圖如圖5 5所示 99 08 53 例5 17用do while語句實現(xiàn)例5 16 程序如下 includevoidmain chara do a P1 a a 循環(huán)條件表達式的值始終為1 無窮循環(huán) 5 5 3循環(huán)結(jié)構(gòu)程序 do while循環(huán)語句 100 08 53 for循環(huán)語句 3 for循環(huán)語句for語句使用最為靈活 它完全可以取代while語句 for循環(huán)語句的一般形式為 for 表達式1 表達式2 表達式3 語句組for循環(huán)語句的執(zhí)行過程如下 1 先求解表達式1 2 求解表達式2 若其值為真 非0 則執(zhí)行for語句中指定的語句組 然后執(zhí)行下面第3步 若其值為假 0 則轉(zhuǎn)到第5步 結(jié)束循環(huán) 3 求解表達式3 4 轉(zhuǎn)回上面第2步繼續(xù)執(zhí)行 5 循環(huán)結(jié)束 執(zhí)行for語句的下一個語句 5 5 3循環(huán)結(jié)構(gòu)程序 101 08 53 for循環(huán)語句 關(guān)于for循環(huán)語句的說明 for 表達式1 表達式2 表達式3 語句組 1 for循環(huán)中的 表達式1 循環(huán)變量初值 表達式2 循環(huán)條件 和 表達式3 循環(huán)變量增量 都是選擇項 可缺省 但 不能缺省 2 省略了 表達式1 循環(huán)變量初值 則不對循環(huán)控制變量賦初值 3 省略了 表達式2 循環(huán)條件 則不作其他處理時便成為死循環(huán) 4 省略了 表達式3 循環(huán)變量增量 則不對循環(huán)控制變量進行操作 這時可在語句組中加入修改循環(huán)控制變量的語句 5 表達式1 循環(huán)變量初值 和 表達式3 循環(huán)變量增量 可同時省略 結(jié)果如同前面第2 4兩種情況 6 3個表達式可同時省略 結(jié)果如前面第2 3 4三種情況的綜合效果 7 表達式2一般是關(guān)系表達式或邏輯表達式 但也可是數(shù)值表達式或字符表達式 只要其值非零 就執(zhí)行循環(huán)體語句組 5 5 3循環(huán)結(jié)構(gòu)程序 102 08 53 例5 18用for語句實現(xiàn)例5 16 include reg51 h voidmain chara for 無循環(huán)條件 無窮循環(huán) a P1 讀P1口的值 a a 5 5 3循環(huán)結(jié)構(gòu)程序 for循環(huán)語句舉例 103 08 53 4 break語句 break語句通常用在循環(huán)語句和開關(guān)語句中 當break用于開關(guān)語句switch中時 可使程序跳出switch而執(zhí)行switch以后的語句 當break語句用于do while for while循環(huán)語句中時 可使程序終止循環(huán)而執(zhí)行循環(huán)結(jié)構(gòu)后面的語句 通常break語句總是與if語句聯(lián)在一起 即滿足條件時便跳出循環(huán) 5 5 3循環(huán)結(jié)構(gòu)程序 break語句 104 08 53 continue語句 continue語句的作用是跳過循環(huán)體中剩余的語句而強行開始執(zhí)行下一次循環(huán) continue語句只用在for while do while等循環(huán)體中 continue語句常與if條件語句一起使用 用來加速循環(huán) 5 5 3循環(huán)結(jié)構(gòu)程序 5 continue語句 105 08 53 5 6C51程序設(shè)計實例 在許多單片機嵌入式應(yīng)用系統(tǒng)中 經(jīng)常采用查表法代替數(shù)學(xué)公式的計算 特別是對傳感器的非線性補償?shù)膱龊?使用查表法比采用復(fù)雜的曲線擬合效果更好 可以將預(yù)先計算好的數(shù)據(jù)隨程序裝入到EPROM的一塊指定區(qū)間 形成數(shù)據(jù)表 查表程序可以用數(shù)組實現(xiàn) 5 6 1查表程序 106 08 53 例5 19編寫一個將攝氏溫度轉(zhuǎn)換為華氏溫度的查表程序 已知攝氏
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 備考全程2025年中級經(jīng)濟師試題及答案
- 用氣用電安全教育
- 自考學(xué)前教育科學(xué)研究
- 中班繪本教案《微笑》
- 稿定設(shè)計自己做的
- 經(jīng)濟法概論考試中的關(guān)鍵試題和答案
- 園林設(shè)計景觀規(guī)劃
- 在校生實習(xí)經(jīng)歷及成果證明書(5篇)
- 水利水電工程重要定義試題及答案
- 經(jīng)濟法行行政管理試題及答案分享
- 資源與運營管理-第二次形考任務(wù)-國開-參考資料
- 2型糖尿病中西醫(yī)結(jié)合診療指南(2025年)解讀課件
- 2025-2030激活素A行業(yè)市場現(xiàn)狀供需分析及重點企業(yè)投資評估規(guī)劃分析研究報告
- 多尺度矢量數(shù)據(jù)融合-全面剖析
- 浙江大學(xué)專職輔導(dǎo)員招聘真題2024
- 2025-2030中國建筑鋼結(jié)構(gòu)行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 商業(yè)物業(yè)管理培訓(xùn)
- 《低鉀血癥病人護理》課件
- 少兒藝術(shù)培訓(xùn)合同協(xié)議書
- 消防水池防水合同
- 2025年供港活牛供宰與屠宰設(shè)備采購合同
評論
0/150
提交評論