




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
單片機應用技術(shù)
(C語言版)
第4章C51程序設(shè)計入門12/17/20221單片機應用技術(shù)
(C語言版)
第4章C51程序設(shè)計入第4章單片機C語言及程序設(shè)計4.1C51的基本數(shù)據(jù)類型4.2C51變量的存儲區(qū)域4.3C51的運算符4.4數(shù)組4.5指針4.6結(jié)構(gòu)4.7C51程序設(shè)計4.8函數(shù)的定義與調(diào)用目錄12/17/20222第4章單片機C語言及程序設(shè)計4.1C51的基本數(shù)據(jù)類本章內(nèi)容完全是結(jié)合單片機來講解,也就是補充C語言在單片機方面的概念、數(shù)據(jù)定義和函數(shù)定義等。 通過本章學習,使讀者能夠比較順利地編寫C51程序。
12/17/20223本章內(nèi)容完全是結(jié)合單片機來講解,也就是補充C語言“C51”概念:把“單片機C語言”稱為“C51”,也稱為“KeilC”。用C51編寫單片機程序,與用ANSIC編寫程序的不同之處是,需要根據(jù)單片機存儲器結(jié)構(gòu)及內(nèi)部資源,定義相應的數(shù)據(jù)類型和變量。
其它的語法規(guī)定、程序結(jié)構(gòu)及程序設(shè)計方法,都與ANSIC相同。1、C51概述12/17/20224“C51”概念:把“單片機C語言”稱為“C51”2、C語言編程的優(yōu)勢
在編程方面,使用C51較匯編語言有諸多優(yōu)勢: 1)編程容易 2)容易實現(xiàn)復雜的數(shù)值計算 3)容易閱讀與交流 4)容易調(diào)試與維護程序 5)容易實現(xiàn)模塊化開發(fā) 6)程序可移植性好12/17/202252、C語言編程的優(yōu)勢 在編程方面,使用C51較匯編
用匯編語言編寫程序時,必須考慮其存儲器的結(jié)構(gòu),尤其要考慮其片內(nèi)數(shù)據(jù)存儲器、特殊功能寄存器是否正確合理的使用,以及按照實際地址端口數(shù)據(jù)的處理。
12/17/20226 用匯編語言編寫程序時,必須考慮其存儲器的結(jié)構(gòu),尤其要考慮3、C51擴展的關(guān)鍵字 由于單片機在結(jié)構(gòu)及編程上的特殊要求,C51有自己的特殊關(guān)鍵字,稱之為C51擴展的關(guān)鍵字,下面給出常用的C51擴展的關(guān)鍵字。 _at_ bdata bit code data idata interrupt pdata reentrant sbit sfr sfr16 xdata 這些關(guān)鍵字在后面會陸續(xù)接觸到,此處先不給出它們的含義。12/17/202273、C51擴展的關(guān)鍵字 由于單片機在結(jié)構(gòu)及編程上的特4.1C51基本數(shù)據(jù)類型1、數(shù)據(jù)類型:數(shù)據(jù)的不同格式。2、數(shù)據(jù)類型分類:基本型(表4.1)、構(gòu)造類型(數(shù)組、結(jié)構(gòu)體、共同體、枚舉)、指針類型和空類型12/17/202284.1C51基本數(shù)據(jù)類型1、數(shù)據(jù)類型:數(shù)據(jù)的不同格式。1在計算機中不能隨意給一個變量賦任意的值,因為變量在單片機的內(nèi)存中要占空間的,變量不同,所占的空間不同。為了合理利用單片機的內(nèi)存空間,在編程時要設(shè)定合適的數(shù)據(jù)類型。12/17/20229在計算機中不能隨意給一個變量賦任意的值,因為變量在12/17/20221012/17/202210補充:C51特殊功能寄存器與位變量的定義(P82)主要內(nèi)容1、8位特殊功能寄存器的定義2、16位特殊功能寄存器的定義3、sbit型位變量的定義4、bit型位變量的定義12/17/202211補充:C51特殊功能寄存器與位變量的定義(P82)主要內(nèi)容1、8位特殊功能寄存器的定義
定義的一般格式為:
sfr 特殊功能寄存器名=地址常數(shù)
地址常數(shù)范圍:0x80~0xff。 特殊功能寄存器定義例子(見reg51.h、reg52.h等文件): sfr P0=0x80; //定義P0寄存器 sfr P1=0x90; //定義P1口寄存器 sfr PSW=0xd0; //定義PSW sfr IE=0xa8; //定義IE
12/17/2022121、8位特殊功能寄存器的定義 定義的一般格式為:122、16位特殊功能寄存器的定義
定義的一般格式為:
sfr16特殊功能寄存器名=地址常數(shù) 地址常數(shù)范圍:0x80~0xff。 例如(見reg51.h、reg52.h等文件): sfr16DPTR=0x82; sfr16T2=0xcc; //含TL2和TH212/17/2022132、16位特殊功能寄存器的定義 定義的一般格式為:1
幾點說明:
1)定義特殊功能寄存器中的地址必須在0x80~0xff范圍內(nèi)。 2)定義特殊功能寄存器,必須放在函數(shù)外面作為全局變量。 3)用sfr或sfr16每次只能定義一個特殊功能寄存器。 4)用sfr或sfr16定義的是絕對定位的變量(因為名字是與確定地址對應的),具有特定的意義,在應用時不能像一般變量那樣隨便使用。12/17/202214 幾點說明:12/17/2022143、sbit型位變量的定義
特殊功能寄存器的位聲明一般格式為:
sbit 位變量名=位地址表達式
這里的位地址表達式有三種形式:
直接位地址 特殊功能寄存器名帶位號 字節(jié)地址帶位號12/17/2022153、sbit型位變量的定義 特殊功能寄存器的位聲明12
a、用直接位地址定義位變量
定義特殊功能寄存器的位。例如: sbit P0_0=0x80; sbit P1_1=0x91; sbit RS0=0xd3; //定義PSW的第3位 sbit ET0=0xa9; //定義IE的第1位12/17/202216 a、用直接位地址定義位變量12/17/202216
b、特殊功能寄存器名帶位號定義
定義格式為:
sbit 位變量名=特殊功能寄存器名^位號常數(shù) 這里的位號常數(shù)為0~7。例如: sbit P0_3=P0^3; sbit P1_4=P1^4; sbit OV=PSW^2; //定義PSW的第2位 sbit ES=IE^4; //定義IE的第4位12/17/202217 b、特殊功能寄存器名帶位號定義12/17/202217
c、寄存器地址帶位號定義位變量
定義格式為:
sbit 位變量名=特殊功能寄存器地址^位號常數(shù) 這里的位號常數(shù)同上,為0~7。例如: sbit P0_6=0x80^6; sbit P1_7=0x90^7; sbit OV=0xd0^2; //定義PSW的第2位 sbit ES=0xa8^4; //定義IE的第4位12/17/202218 c、寄存器地址帶位號定義位變量12/17/202218
d、幾點說明 1)用sbit定義的位變量,必須能夠按位操作,而不能夠?qū)o位操作功能的位定義位變量。 2)用sbit定義位變量,必須放在函數(shù)外面作為全局位變量,而不能在函數(shù)內(nèi)部定義。 3)用sbit每次只能定義一個位變量。 4)用sbit定義的是一種絕對定位的位變量(因為名字是與確定位地址對應的),具有特定的意義,不能隨便使用。12/17/202219 d、幾點說明12/17/2022194、bit型位變量的定義
常說的位變量指的就是bit型位變量。C51的bit型位變量定義的一般格式為:
[存儲類型]bit 位變量名1[=初值][,位變量名2[=初值]][,…]
bit位變量被保存在RAM中的位尋址區(qū)域 例如: bit flag_run=0;
staticbit send_bit;12/17/2022204、bit型位變量的定義 常說的位變量指的就是bit型
數(shù)據(jù)類型轉(zhuǎn)換(p56)
1)自動轉(zhuǎn)換
把賦值號右邊的類型轉(zhuǎn)換成左邊的類型。 A:實型賦予整型 B:整型賦予實型 C:字符型賦予整型 D:整型賦予字符型
12/17/202221 數(shù)據(jù)類型轉(zhuǎn)換(p56)12/17/2022212)強制轉(zhuǎn)換 像ANSIC一樣,通過強制類型轉(zhuǎn)換的方式進行轉(zhuǎn)換。如: unsigned int b; float c;
b=(int)c;12/17/2022222)強制轉(zhuǎn)換12/17/2022224.2C51變量存儲區(qū)域1、C51變量的定義2、C51變量的存儲類型3、C51變量的存儲區(qū)域4、C51變量定義舉例5、C51變量的存儲模式12/17/2022234.2C51變量存儲區(qū)域1、C51變量的定義12/171、C51變量的定義
C51變量定義的一般格式為:
[存儲類型] 數(shù)據(jù)類型 [存儲區(qū)域]變量名1[=初值][,變量名2[=初值]][,…]或
[存儲類型] [存儲區(qū)域] 數(shù)據(jù)類型變量名1[=初值][,變量名2[=初值]][,…]
staticunsignedchardatai=0;
12/17/2022241、C51變量的定義 C51變量定義的一般格式為:122、C51變量的存儲類型
按照ANSIC,C語言的變量有4種存儲類型:(P71) 動態(tài)存儲(auto) 靜態(tài)存儲(static) 全局存儲(extern) 寄存器存儲(register)12/17/2022252、C51變量的存儲類型 12/17/202225
(1)動態(tài)變量
動態(tài)(存儲)變量:用auto定義的為動態(tài)變量,也叫自動變量。
作用范圍:在定義它的函數(shù)內(nèi)或復合語句內(nèi)部。執(zhí)行時,分配存儲空間,結(jié)束時釋放存儲空間。 定義變量時,auto可以省略12/17/202226 (1)動態(tài)變量12/17/202226
(2)靜態(tài)變量
靜態(tài)(存儲)變量:用static定義的為靜態(tài)變量。函數(shù)退出時,變量的值不消失。分為靜態(tài)局部和靜態(tài)全局變量。
靜態(tài)局部變量:在函數(shù)體內(nèi)定義
靜態(tài)全局變量:在函數(shù)體外部定義
若非必要,不要多用靜態(tài)變量12/17/202227 (2)靜態(tài)變量12/17/202227
(3)外部變量
外部(存儲)變量:用extern聲明的變量為外部變量,是在其它文件定義過的全局變量。 用extern聲明后,便可以在所聲明的文件中使用。
12/17/202228 (3)外部變量12/17/202228 補充:函數(shù)的定義:函數(shù)功能的確立,包括制定函數(shù)名、函數(shù)值類型、形參及其類型、函數(shù)體等,是一個完整的、獨立的函數(shù)單位。 函數(shù)的聲明:把函數(shù)的名字、函數(shù)類型以及形參類型、個數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時系統(tǒng)按此進行對照檢查。12/17/202229 補充:12/17/202229#include<stdio.h>voidmain(){
intmax(int,int);//對被調(diào)函數(shù)的聲明
intA=13,B=3;定義外部變量 printf(“%d\n”,max(A,B));}intmax(intx,inty)//定義子函數(shù){ intz; z=x>y?x:y; return(z);}12/17/202230#include<stdio.h>12/17/202230
(4)寄存器變量
寄存器(存儲)變量:用register定義的變量為寄存器變量。
寄存器變量存放在CPU的寄存器中,這種變量處理速度快,但數(shù)目少。
C51中的寄存器變量:C51的編譯器在編譯時,能夠自動識別程序中使用頻率高的變量,并將其安排為寄存器變量,用戶不用專門聲明,對C51無實際意義。12/17/202231 (4)寄存器變量12/17/2022313、C51變量的存儲區(qū)域(P57)
變量的存儲區(qū)屬性是單片機擴展的概念,非常重要,它涉及到6個新的關(guān)鍵字。
MCS-51單片機有四個存儲空間,分成三類,它們是片內(nèi)RAM、片外RAM和ROM。
12/17/2022323、C51變量的存儲區(qū)域(P57) 變量的存儲區(qū)屬性是12/17/20223312/17/2022334、C51變量定義舉例 1)定義存儲在data區(qū)域的動態(tài)unsignedchar變量:
unsignedchardatasec=0,min=0,hou=0; 2)定義存儲在data區(qū)域的靜態(tài)unsignedchar變量:staticunsignedchardatascan_code=0xfe;
3)定義存儲在data區(qū)域的靜態(tài)unsignedint變量:
staticunsignedintdatad; 12/17/2022344、C51變量定義舉例 1)定義存儲在data區(qū)域的動 4)定義存儲在bdata區(qū)域的動態(tài)unsignedchar變量:
unsignedcharbdataoperate,operate1;
5)定義存儲在idata區(qū)域的動態(tài)unsignedchar數(shù)組:
unsignedcharidatatemp[20]; 6)定義在pdata區(qū)域的動態(tài)有符號int數(shù)組:
intpdatasend_data[30];
12/17/202235 4)定義存儲在bdata區(qū)域的動態(tài)unsignedch 7)定義存儲在xdata區(qū)域的動態(tài)unsignedint數(shù)組:
unsignedintxdatareceiv_buf[50]; 8)定義存儲在code區(qū)域的unsignedchar數(shù)組:
unsignedcharcodea[10]= {0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};
//定義共陰極數(shù)碼管段碼數(shù)組12/17/202236 7)定義存儲在xdata區(qū)域的動態(tài)unsignedint5、C51變量的存儲模式(P58)
存儲模式:如果在定義變量時缺省了存儲區(qū),則編譯器會自動選擇默認的存儲區(qū)域,也就是存儲模式。
存儲模式分為三種:小模式(small)、緊湊模式(compact)和大模式(large)。編譯模式由編譯控制命令決定。
存儲模式(編譯模式)決定了變量的默認存儲區(qū)域和參數(shù)的傳遞方法。12/17/2022375、C51變量的存儲模式(P58) 存儲模式:如果在定
(1)small模式
在small模式下,變量的默認存儲區(qū)域是“data”、“idata”,并且堆棧也安排在該區(qū)域中。
small模式的特點:存儲容量小,但速度快。
默認存儲模式:如果文件或函數(shù)未指明存儲模式,則編譯器按small模式處理。12/17/202238 (1)small模式12/17/202238
(2)compact模式
在compact模式下,變量的默認存儲區(qū)域是“pdata”,最大變量數(shù)為256字節(jié),并且堆棧也安排在該區(qū)域中。
compact模式的其特點:是存儲容量較small模式大,速度較small模式稍慢,但比large模式要快。12/17/202239(2)compact模式12/17/202239
(3)large模式
在large模式下,變量的默認存儲區(qū)域是“xdata”,最大變量數(shù)可達64KB。
large模式的特點:存儲容量大,速度慢12/17/202240 (3)large模式12/17/202240
默認存儲模式:如果文件或函數(shù)未指明存儲模式,則編譯器按small模式處理。
存儲模式控制命令:“#pragmasmall(或compact、large)”應放在文件的開始。
12/17/202241 12/17/2022414.3C51的運算符12/17/2022424.3C51的運算符12/17/202242思考題1:10/3=?10/3.0=?10/3.00=?12/17/202243思考題1:12/17/202243思考題2:j++;j--;++j;--j;例:charc=1;chara;求:(1)a=c++;后,a,c值是多少?(2)a=++c;后,a,c值是多少?12/17/202244思考題2:12/17/2022441||1=?4||5=?12/17/2022451||1=?12/17/20224512/17/20224612/17/202246復合運算符:a+=b;x*=a+b;
復合運算的表達方式有利于提高編譯效率,產(chǎn)生質(zhì)量較高的目標代碼。但可讀性相對較差。12/17/202247復合運算符:復合運算的表達方式有利于提高編譯效率4.4數(shù)組1、數(shù)組:同一類型變量的有序組合。注:數(shù)組和普通變量一樣,要先定義再使用。2、定義方式:數(shù)據(jù)類型數(shù)組名[常量表達式]unsignedinta[10];4.4.1一維數(shù)組12/17/2022484.4數(shù)組1、數(shù)組:同一類型變量的有序組合。4.4.13、賦值方式:數(shù)據(jù)類型[存儲區(qū)域]數(shù)組名[常量表達式]={常量表達式};unsignedcharb[2]={1,2};unsignedcharcodetable[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};12/17/2022493、賦值方式:12/17/2022494.4.2字符數(shù)組1、字符數(shù)組:基本類型為字符類型的數(shù)組。用來存放字符的。2、定義:方法同一般數(shù)組。如:chara[5]={‘h’,’e’,’l’,’l’,’o’};for(i=0;i<5;i++)printf(“%c”,a[i]);12/17/2022504.4.2字符數(shù)組1、字符數(shù)組:基本類型為字符類型的數(shù)組3、字符串:在C語言中,將字符串作為字符數(shù)組來處理的。
用字符串常量來使字符數(shù)組初始化:chara[]={“hello”};或:chara[]=“hello”;問:在內(nèi)存中怎么存儲的?12/17/2022513、字符串:在C語言中,將字符串作為字符數(shù)組來處理的。問:在注:C語言規(guī)定以’\0’作為字符串結(jié)束的標志,在程序中依靠檢測的位置來判定字符串是否結(jié)束。
chara[]={“hello”}; i=0; while(a[i]!=‘\0’) { write_data(a[i]); i++; }12/17/202252注:C語言規(guī)定以’\0’作為字符串結(jié)束的標志,在程序4.5指針主要內(nèi)容4.5.1指針概念4.5.2指針變量的定義、賦值與引用4.5.3KeilC51的指針類型12/17/2022534.5指針主要內(nèi)容12/17/202253指針:對于一個存儲單元來講,單元的地址即為指針。指針變量:存放指針的變量,用來指向另一個變量。區(qū)別:一個指針是指一個地址,是一個常量;一個指針變量可以被賦予不同的指針(地址),是一個變量。4.5.1指針概念12/17/202254指針:對于一個存儲單元來講,單元的地址即為指針。4.5.1
4.5.2指針的定義、賦值與引用1、定義其格式為:
[存儲類型]數(shù)據(jù)類型*指針名1[,*指針名2][,…]例如:
char*cpt;//定義了一個指針變量cpt,它所指向的是一個字符型的數(shù)據(jù)?;蚨xcpt為指向字符型變量的指針變量
指針說明符12/17/202255 4.5.2指針的定義、賦值與引用指針說明符12/17/2、賦值(指針變量使用前必須賦值)指針變量只能賦予地址。intc;int*p=&c;(int*p;p=&c;)12/17/2022562、賦值(指針變量使用前必須賦值)12/17/2022563、指針變量的引用注意:指針變量的定義和引用中*的意義不同!!在指針變量定義中:*是類型說明符,說明其后的變量是指針類型在指針變量的引用中:*是運算符,(取內(nèi)容)int*p=&a,inta,c;c=*p;12/17/2022573、指針變量的引用12/17/2022574.7C51的程序設(shè)計4.7.1C51程序結(jié)構(gòu)常用C51的頭文件:reg51.h(定義特殊功能寄存器等);math.h(數(shù)學函數(shù));
ctype.h(字符函數(shù));
stdio.h(一般IO函數(shù));
stdlib.h(標準函數(shù));
absacc.h(絕對地址訪問);
string.h(串函數(shù))…….func1(){
局部變量定義<程序體>}……funcN(){
局部變量定義<程序體>}main(){
局部變量定義<程序體>
}
包含<頭文件>
函數(shù)聲明全局變量、參數(shù)定義12/17/2022584.7C51的程序設(shè)計常用C51的頭文件:reg51.#include<reg51.h>sbitLED1=P3^2;//定義SFR中引腳的“位”sbitLED2=P3^3;sbitLED3=P3^4;voiddelayms(unsignedintx);//毫秒延時函數(shù)
voidmain(void)//主程序{while(1)//非0為真,此為無限循環(huán){LED1=0;LED2=1;LED3=1;delayms(1000);LED1=1;LED2=0;LED3=1;delayms(1000);LED1=1;LED2=1;LED3=0;delayms(1000);}}
voiddelayms(unsignedintx)//毫秒延時函數(shù){unsignedcharj;while(x--)//非0,為真,即x=0時退出循環(huán){for(j=0;j<123;j++){;}}}包含文件
全程變量、參數(shù)定義函數(shù)聲明主函數(shù)子函數(shù)12/17/202259#include<reg51.h>包含文件主函數(shù)子函數(shù)14.7.2C51流程控制1.選擇語句ifif(表達式){語句;}例:if(p1!=0){c=30;}if(條件表達式){語句1;}else{語句2;}例:if(a==b){a++;}else{a--;}當a等于b時,a=a+1,否則a=a-1if(表達式1){語句1;}elseif(表達式2){語句2;}elseif(表達式3){語句3;}……elseif(表達式m){語句m;}else{語句n;}注:語句中為單一語句,可以不用花括弧。12/17/2022604.7.2C51流程控制1.選擇語句ifif(表達式)if(表達式1){if()語句1;else()語句2;}
else
{if()語句1;else()語句2;}嵌套12/17/202261if(表達式1)嵌套12/17/202261if(k1==0) { num++; if(num==10) num=0; }舉例:12/17/202262if(k1==0)舉例:12/17/20226switch(表達式){
case常量表達式1:{語句1;}break;case常量表達式2:{語句2;}break;case常量表達式3:{語句3;}break;……case常量表達式n:{語句n;}break;
default:{語句n+1;}}2.switch/case語句也不是必須的12/17/202263switch(表達式)2.switch/case語句也不3.while語句while(條件表達式真){
語句;}while(P0!=0){x=P0;}先判斷后循環(huán)例非零為真12/17/2022643.while語句while(條件表達式真)while(補充:(a)while(1){;}//無限循環(huán)(b)while(1){...break;}//退出大循環(huán)(c)...while(1);//停止(等待)12/17/202265補充:12/17/202265do{
語句;}while(條件表達式真);intsum=0,i=0;do{
i++;sum=sum+i;}while(i<=10)先循環(huán)后判斷例12/17/202266dointsum=0,i=0;先循環(huán)例12/17/204.for語句for([初值設(shè)定表達式];[循環(huán)條件表達式];[條件更新表達式]){循環(huán)語句;}例:inti,sum=0;for(i=0;i<=10;i++){sum=sum+i;}12/17/2022674.for語句for([初值設(shè)定表達式];[循環(huán)條件表達補充:for嵌套for(;;){ for(;;){;}}延時unsignedinti,j;for(i=1000;i>0;i--){ for(j=110;j>0;j--);}外層是多少,延時大約多少ms12/17/202268補充:延時外層是多少,延時大約多少ms12/17/20226本課程不是專門學習C語言的課程,相關(guān)c語言的系統(tǒng)知識請同學們自行復(學)習。12/17/202269本課程不是專門學習C語言的課程,12/17/2022694.8函數(shù)的定義與調(diào)用主要內(nèi)容4.8.1函數(shù)4.8.3C51中調(diào)用匯編4.8.4預處理命令4.8.5頭文件12/17/2022704.8函數(shù)的定義與調(diào)用主要內(nèi)容12/17/202270
C51函數(shù)定義的一般格式如下: 函數(shù)類型函數(shù)名(形參表) { 局部變量定義 執(zhí)行語句 }12/17/202271 C51函數(shù)定義的一般格式如下:12/17/202271延時若干ms的子函數(shù):voiddelay(usignedintz){ usignedintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}子函數(shù)的調(diào)用:delay(500);12/17/202272延時若干ms的子函數(shù):12/17/202272主函數(shù):voidmain(){
}12/17/202273主函數(shù):12/17/202273注:1、{}里也可以什么不寫,為空函數(shù)。2、調(diào)用函數(shù)時,多個參數(shù)要用逗號隔開,且每個實參的類型、位置與形參一一對應。3、調(diào)用的函數(shù)是無參函數(shù)時,后面的括號不能省。4、帶參數(shù)的函數(shù)聲明時,必須將參數(shù)類型寫上,類型后面的變量名可有可無。5、主函數(shù)不能被其他函數(shù)調(diào)用。12/17/202274注:12/17/2022744.8.4預處理命令預處理:在進行編譯的第一遍掃描之前所做的工作。(1)宏定義:#defineM(y)
y*y+3*y#defineuint
unsignedint#defineuchar
unsignedchar12/17/2022754.8.4預處理命令預處理:在進行編譯的第一遍掃描之前所注:1、宏名一般用大寫字母表示,以區(qū)別于一般的變量。2、使用宏名替代一無規(guī)律字符串,宏名易記住,且當需要改變某一常量時,只需改#define命令行,一改全改。
#definePI3.14159263、宏定義不是C語句,不必在行末加分號。4、宏定義命令寫在文件的開頭,函數(shù)之前。有效范圍為定義命令之后到本源文件結(jié)束。12/17/202276注:12/17/202276(2)文件包含:將另外的文件包含到本文件中。
#include“文件名”說明:1、一個#include命令只能指定一個被包含文件,若要包含n個文件,要用n個#include命令。2、文件名可以用<>或“”3、后面不加分號。12/17/202277(2)文件包含:將另外的文件包含到本文件中。12/17/204.8.5頭文件1、頭文件作用:對所使用的引腳進行定義以及對同名的驅(qū)動函數(shù)中的自定義函數(shù)作出聲明,等。如:reg51.h,reg52.h,math.h,ctype.h,stdio.h,stdlib.h,intrins.h等。12/17/2022784.8.5頭文件1、頭文件作用:對所使用的引腳進行定義以2、定義頭文件(LED.h):#ifndef_LED_H_#define_LED_H_#endif單獨存盤3、另外的文件中引用頭文件:#include“LED.h”說明:(1)頭文件定義完后,另寫一個與頭文件同名的驅(qū)動程序(LED.c)(2)在頭文件中也可以把所聲明的函數(shù)程序一起寫入,這樣不用再寫驅(qū)動程序了。(P89、P92)12/17/2022792、定義頭文件(LED.h):3、另外的文件中引用頭文件:1本章小結(jié) 本章首先認識了單片機C語言的優(yōu)勢及其與ANSIC的區(qū)別。
其次介紹了C51的數(shù)據(jù)類型及存儲區(qū)域。 接下來詳細討論了C51變量的定義、位變量的定義、特殊功能寄存器的定義、指針的定義、引用等。 然后討論了C51函數(shù)的定義,調(diào)用等。12/17/202280本章小結(jié) 本章首先認識了單片機C語言的優(yōu)勢及其與ANSI本章小結(jié)(續(xù)) 本章是用單片機C語言進行程序設(shè)計的基礎(chǔ)(非C語言基礎(chǔ)),必須要掌握好本章的內(nèi)容,才能夠比較順利地編寫單片機C語言程序,成為單片機程序設(shè)計的高手,進而成為單片機應用的高手。12/17/202281本章小結(jié)(續(xù)) 本章是用單片機C語言進行程序設(shè)計的基礎(chǔ)(非12/17/20228212/17/202282單片機應用技術(shù)
(C語言版)
第4章C51程序設(shè)計入門12/17/202283單片機應用技術(shù)
(C語言版)
第4章C51程序設(shè)計入第4章單片機C語言及程序設(shè)計4.1C51的基本數(shù)據(jù)類型4.2C51變量的存儲區(qū)域4.3C51的運算符4.4數(shù)組4.5指針4.6結(jié)構(gòu)4.7C51程序設(shè)計4.8函數(shù)的定義與調(diào)用目錄12/17/202284第4章單片機C語言及程序設(shè)計4.1C51的基本數(shù)據(jù)類本章內(nèi)容完全是結(jié)合單片機來講解,也就是補充C語言在單片機方面的概念、數(shù)據(jù)定義和函數(shù)定義等。 通過本章學習,使讀者能夠比較順利地編寫C51程序。
12/17/202285本章內(nèi)容完全是結(jié)合單片機來講解,也就是補充C語言“C51”概念:把“單片機C語言”稱為“C51”,也稱為“KeilC”。用C51編寫單片機程序,與用ANSIC編寫程序的不同之處是,需要根據(jù)單片機存儲器結(jié)構(gòu)及內(nèi)部資源,定義相應的數(shù)據(jù)類型和變量。
其它的語法規(guī)定、程序結(jié)構(gòu)及程序設(shè)計方法,都與ANSIC相同。1、C51概述12/17/202286“C51”概念:把“單片機C語言”稱為“C51”2、C語言編程的優(yōu)勢
在編程方面,使用C51較匯編語言有諸多優(yōu)勢: 1)編程容易 2)容易實現(xiàn)復雜的數(shù)值計算 3)容易閱讀與交流 4)容易調(diào)試與維護程序 5)容易實現(xiàn)模塊化開發(fā) 6)程序可移植性好12/17/2022872、C語言編程的優(yōu)勢 在編程方面,使用C51較匯編
用匯編語言編寫程序時,必須考慮其存儲器的結(jié)構(gòu),尤其要考慮其片內(nèi)數(shù)據(jù)存儲器、特殊功能寄存器是否正確合理的使用,以及按照實際地址端口數(shù)據(jù)的處理。
12/17/202288 用匯編語言編寫程序時,必須考慮其存儲器的結(jié)構(gòu),尤其要考慮3、C51擴展的關(guān)鍵字 由于單片機在結(jié)構(gòu)及編程上的特殊要求,C51有自己的特殊關(guān)鍵字,稱之為C51擴展的關(guān)鍵字,下面給出常用的C51擴展的關(guān)鍵字。 _at_ bdata bit code data idata interrupt pdata reentrant sbit sfr sfr16 xdata 這些關(guān)鍵字在后面會陸續(xù)接觸到,此處先不給出它們的含義。12/17/2022893、C51擴展的關(guān)鍵字 由于單片機在結(jié)構(gòu)及編程上的特4.1C51基本數(shù)據(jù)類型1、數(shù)據(jù)類型:數(shù)據(jù)的不同格式。2、數(shù)據(jù)類型分類:基本型(表4.1)、構(gòu)造類型(數(shù)組、結(jié)構(gòu)體、共同體、枚舉)、指針類型和空類型12/17/2022904.1C51基本數(shù)據(jù)類型1、數(shù)據(jù)類型:數(shù)據(jù)的不同格式。1在計算機中不能隨意給一個變量賦任意的值,因為變量在單片機的內(nèi)存中要占空間的,變量不同,所占的空間不同。為了合理利用單片機的內(nèi)存空間,在編程時要設(shè)定合適的數(shù)據(jù)類型。12/17/202291在計算機中不能隨意給一個變量賦任意的值,因為變量在12/17/20229212/17/202210補充:C51特殊功能寄存器與位變量的定義(P82)主要內(nèi)容1、8位特殊功能寄存器的定義2、16位特殊功能寄存器的定義3、sbit型位變量的定義4、bit型位變量的定義12/17/202293補充:C51特殊功能寄存器與位變量的定義(P82)主要內(nèi)容1、8位特殊功能寄存器的定義
定義的一般格式為:
sfr 特殊功能寄存器名=地址常數(shù)
地址常數(shù)范圍:0x80~0xff。 特殊功能寄存器定義例子(見reg51.h、reg52.h等文件): sfr P0=0x80; //定義P0寄存器 sfr P1=0x90; //定義P1口寄存器 sfr PSW=0xd0; //定義PSW sfr IE=0xa8; //定義IE
12/17/2022941、8位特殊功能寄存器的定義 定義的一般格式為:122、16位特殊功能寄存器的定義
定義的一般格式為:
sfr16特殊功能寄存器名=地址常數(shù) 地址常數(shù)范圍:0x80~0xff。 例如(見reg51.h、reg52.h等文件): sfr16DPTR=0x82; sfr16T2=0xcc; //含TL2和TH212/17/2022952、16位特殊功能寄存器的定義 定義的一般格式為:1
幾點說明:
1)定義特殊功能寄存器中的地址必須在0x80~0xff范圍內(nèi)。 2)定義特殊功能寄存器,必須放在函數(shù)外面作為全局變量。 3)用sfr或sfr16每次只能定義一個特殊功能寄存器。 4)用sfr或sfr16定義的是絕對定位的變量(因為名字是與確定地址對應的),具有特定的意義,在應用時不能像一般變量那樣隨便使用。12/17/202296 幾點說明:12/17/2022143、sbit型位變量的定義
特殊功能寄存器的位聲明一般格式為:
sbit 位變量名=位地址表達式
這里的位地址表達式有三種形式:
直接位地址 特殊功能寄存器名帶位號 字節(jié)地址帶位號12/17/2022973、sbit型位變量的定義 特殊功能寄存器的位聲明12
a、用直接位地址定義位變量
定義特殊功能寄存器的位。例如: sbit P0_0=0x80; sbit P1_1=0x91; sbit RS0=0xd3; //定義PSW的第3位 sbit ET0=0xa9; //定義IE的第1位12/17/202298 a、用直接位地址定義位變量12/17/202216
b、特殊功能寄存器名帶位號定義
定義格式為:
sbit 位變量名=特殊功能寄存器名^位號常數(shù) 這里的位號常數(shù)為0~7。例如: sbit P0_3=P0^3; sbit P1_4=P1^4; sbit OV=PSW^2; //定義PSW的第2位 sbit ES=IE^4; //定義IE的第4位12/17/202299 b、特殊功能寄存器名帶位號定義12/17/202217
c、寄存器地址帶位號定義位變量
定義格式為:
sbit 位變量名=特殊功能寄存器地址^位號常數(shù) 這里的位號常數(shù)同上,為0~7。例如: sbit P0_6=0x80^6; sbit P1_7=0x90^7; sbit OV=0xd0^2; //定義PSW的第2位 sbit ES=0xa8^4; //定義IE的第4位12/17/2022100 c、寄存器地址帶位號定義位變量12/17/202218
d、幾點說明 1)用sbit定義的位變量,必須能夠按位操作,而不能夠?qū)o位操作功能的位定義位變量。 2)用sbit定義位變量,必須放在函數(shù)外面作為全局位變量,而不能在函數(shù)內(nèi)部定義。 3)用sbit每次只能定義一個位變量。 4)用sbit定義的是一種絕對定位的位變量(因為名字是與確定位地址對應的),具有特定的意義,不能隨便使用。12/17/2022101 d、幾點說明12/17/2022194、bit型位變量的定義
常說的位變量指的就是bit型位變量。C51的bit型位變量定義的一般格式為:
[存儲類型]bit 位變量名1[=初值][,位變量名2[=初值]][,…]
bit位變量被保存在RAM中的位尋址區(qū)域 例如: bit flag_run=0;
staticbit send_bit;12/17/20221024、bit型位變量的定義 常說的位變量指的就是bit型
數(shù)據(jù)類型轉(zhuǎn)換(p56)
1)自動轉(zhuǎn)換
把賦值號右邊的類型轉(zhuǎn)換成左邊的類型。 A:實型賦予整型 B:整型賦予實型 C:字符型賦予整型 D:整型賦予字符型
12/17/2022103 數(shù)據(jù)類型轉(zhuǎn)換(p56)12/17/2022212)強制轉(zhuǎn)換 像ANSIC一樣,通過強制類型轉(zhuǎn)換的方式進行轉(zhuǎn)換。如: unsigned int b; float c;
b=(int)c;12/17/20221042)強制轉(zhuǎn)換12/17/2022224.2C51變量存儲區(qū)域1、C51變量的定義2、C51變量的存儲類型3、C51變量的存儲區(qū)域4、C51變量定義舉例5、C51變量的存儲模式12/17/20221054.2C51變量存儲區(qū)域1、C51變量的定義12/171、C51變量的定義
C51變量定義的一般格式為:
[存儲類型] 數(shù)據(jù)類型 [存儲區(qū)域]變量名1[=初值][,變量名2[=初值]][,…]或
[存儲類型] [存儲區(qū)域] 數(shù)據(jù)類型變量名1[=初值][,變量名2[=初值]][,…]
staticunsignedchardatai=0;
12/17/20221061、C51變量的定義 C51變量定義的一般格式為:122、C51變量的存儲類型
按照ANSIC,C語言的變量有4種存儲類型:(P71) 動態(tài)存儲(auto) 靜態(tài)存儲(static) 全局存儲(extern) 寄存器存儲(register)12/17/20221072、C51變量的存儲類型 12/17/202225
(1)動態(tài)變量
動態(tài)(存儲)變量:用auto定義的為動態(tài)變量,也叫自動變量。
作用范圍:在定義它的函數(shù)內(nèi)或復合語句內(nèi)部。執(zhí)行時,分配存儲空間,結(jié)束時釋放存儲空間。 定義變量時,auto可以省略12/17/2022108 (1)動態(tài)變量12/17/202226
(2)靜態(tài)變量
靜態(tài)(存儲)變量:用static定義的為靜態(tài)變量。函數(shù)退出時,變量的值不消失。分為靜態(tài)局部和靜態(tài)全局變量。
靜態(tài)局部變量:在函數(shù)體內(nèi)定義
靜態(tài)全局變量:在函數(shù)體外部定義
若非必要,不要多用靜態(tài)變量12/17/2022109 (2)靜態(tài)變量12/17/202227
(3)外部變量
外部(存儲)變量:用extern聲明的變量為外部變量,是在其它文件定義過的全局變量。 用extern聲明后,便可以在所聲明的文件中使用。
12/17/2022110 (3)外部變量12/17/202228 補充:函數(shù)的定義:函數(shù)功能的確立,包括制定函數(shù)名、函數(shù)值類型、形參及其類型、函數(shù)體等,是一個完整的、獨立的函數(shù)單位。 函數(shù)的聲明:把函數(shù)的名字、函數(shù)類型以及形參類型、個數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時系統(tǒng)按此進行對照檢查。12/17/2022111 補充:12/17/202229#include<stdio.h>voidmain(){
intmax(int,int);//對被調(diào)函數(shù)的聲明
intA=13,B=3;定義外部變量 printf(“%d\n”,max(A,B));}intmax(intx,inty)//定義子函數(shù){ intz; z=x>y?x:y; return(z);}12/17/2022112#include<stdio.h>12/17/202230
(4)寄存器變量
寄存器(存儲)變量:用register定義的變量為寄存器變量。
寄存器變量存放在CPU的寄存器中,這種變量處理速度快,但數(shù)目少。
C51中的寄存器變量:C51的編譯器在編譯時,能夠自動識別程序中使用頻率高的變量,并將其安排為寄存器變量,用戶不用專門聲明,對C51無實際意義。12/17/2022113 (4)寄存器變量12/17/2022313、C51變量的存儲區(qū)域(P57)
變量的存儲區(qū)屬性是單片機擴展的概念,非常重要,它涉及到6個新的關(guān)鍵字。
MCS-51單片機有四個存儲空間,分成三類,它們是片內(nèi)RAM、片外RAM和ROM。
12/17/20221143、C51變量的存儲區(qū)域(P57) 變量的存儲區(qū)屬性是12/17/202211512/17/2022334、C51變量定義舉例 1)定義存儲在data區(qū)域的動態(tài)unsignedchar變量:
unsignedchardatasec=0,min=0,hou=0; 2)定義存儲在data區(qū)域的靜態(tài)unsignedchar變量:staticunsignedchardatascan_code=0xfe;
3)定義存儲在data區(qū)域的靜態(tài)unsignedint變量:
staticunsignedintdatad; 12/17/20221164、C51變量定義舉例 1)定義存儲在data區(qū)域的動 4)定義存儲在bdata區(qū)域的動態(tài)unsignedchar變量:
unsignedcharbdataoperate,operate1;
5)定義存儲在idata區(qū)域的動態(tài)unsignedchar數(shù)組:
unsignedcharidatatemp[20]; 6)定義在pdata區(qū)域的動態(tài)有符號int數(shù)組:
intpdatasend_data[30];
12/17/2022117 4)定義存儲在bdata區(qū)域的動態(tài)unsignedch 7)定義存儲在xdata區(qū)域的動態(tài)unsignedint數(shù)組:
unsignedintxdatareceiv_buf[50]; 8)定義存儲在code區(qū)域的unsignedchar數(shù)組:
unsignedcharcodea[10]= {0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};
//定義共陰極數(shù)碼管段碼數(shù)組12/17/2022118 7)定義存儲在xdata區(qū)域的動態(tài)unsignedint5、C51變量的存儲模式(P58)
存儲模式:如果在定義變量時缺省了存儲區(qū),則編譯器會自動選擇默認的存儲區(qū)域,也就是存儲模式。
存儲模式分為三種:小模式(small)、緊湊模式(compact)和大模式(large)。編譯模式由編譯控制命令決定。
存儲模式(編譯模式)決定了變量的默認存儲區(qū)域和參數(shù)的傳遞方法。12/17/20221195、C51變量的存儲模式(P58) 存儲模式:如果在定
(1)small模式
在small模式下,變量的默認存儲區(qū)域是“data”、“idata”,并且堆棧也安排在該區(qū)域中。
small模式的特點:存儲容量小,但速度快。
默認存儲模式:如果文件或函數(shù)未指明存儲模式,則編譯器按small模式處理。12/17/2022120 (1)small模式12/17/202238
(2)compact模式
在compact模式下,變量的默認存儲區(qū)域是“pdata”,最大變量數(shù)為256字節(jié),并且堆棧也安排在該區(qū)域中。
compact模式的其特點:是存儲容量較small模式大,速度較small模式稍慢,但比large模式要快。12/17/2022121(2)compact模式12/17/202239
(3)large模式
在large模式下,變量的默認存儲區(qū)域是“xdata”,最大變量數(shù)可達64KB。
large模式的特點:存儲容量大,速度慢12/17/2022122 (3)large模式12/17/202240
默認存儲模式:如果文件或函數(shù)未指明存儲模式,則編譯器按small模式處理。
存儲模式控制命令:“#pragmasmall(或compact、large)”應放在文件的開始。
12/17/2022123 12/17/2022414.3C51的運算符12/17/20221244.3C51的運算符12/17/202242思考題1:10/3=?10/3.0=?10/3.00=?12/17/2022125思考題1:12/17/202243思考題2:j++;j--;++j;--j;例:charc=1;chara;求:(1)a=c++;后,a,c值是多少?(2)a=++c;后,a,c值是多少?12/17/2022126思考題2:12/17/2022441||1=?4||5=?12/17/20221271||1=?12/17/20224512/17/202212812/17/202246復合運算符:a+=b;x*=a+b;
復合運算的表達方式有利于提高編譯效率,產(chǎn)生質(zhì)量較高的目標代碼。但可讀性相對較差。12/17/2022129復合運算符:復合運算的表達方式有利于提高編譯效率4.4數(shù)組1、數(shù)組:同一類型變量的有序組合。注:數(shù)組和普通變量一樣,要先定義再使用。2、定義方式:數(shù)據(jù)類型數(shù)組名[常量表達式]unsignedinta[10];4.4.1一維數(shù)組12/17/20221304.4數(shù)組1、數(shù)組:同一類型變量的有序組合。4.4.13、賦值方式:數(shù)據(jù)類型[存儲區(qū)域]數(shù)組名[常量表達式]={常量表達式};unsignedcharb[2]={1,2};unsignedcharcodetable[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};12/17/20221313、賦值方式:12/17/2022494.4.2字符數(shù)組1、字符數(shù)組:基本類型為字符類型的數(shù)組。用來存放字符的。2、定義:方法同一般數(shù)組。如:chara[5]={‘h’,’e’,’l’,’l’,’o’};for(i=0;i<5;i++)printf(“%c”,a[i]);12/17/20221324.4.2字符數(shù)組1、字符數(shù)組:基本類型為字符類型的數(shù)組3、字符串:在C語言中,將字符串作為字符數(shù)組來處理的。
用字符串常量來使字符數(shù)組初始化:chara[]={“hello”};或:chara[]=“hello”;問:在內(nèi)存中怎么存儲的?12/17/20221333、字符串:在C語言中,將字符串作為字符數(shù)組來處理的。問:在注:C語言規(guī)定以’\0’作為字符串結(jié)束的標志,在程序中依靠檢測的位置來判定字符串是否結(jié)束。
chara[]={“hello”}; i=0; while(a[i]!=‘\0’) { write_data(a[i]); i++; }12/17/2022134注:C語言規(guī)定以’\0’作為字符串結(jié)束的標志,在程序4.5指針主要內(nèi)容4.5.1指針概念4.5.2指針變量的定義、賦值與引用4.5.3KeilC51的指針類型12/17/20221354.5指針主要內(nèi)容12/17/202253指針:對于一個存儲單元來講,單元的地址即為指針。指針變量:存放指針的變量,用來指向另一個變量。區(qū)別:一個指針是指一個地址,是一個常量;一個指針變量可以被賦予不同的指針(地址),是一個變量。4.5.1指針概念12/17/2022136指針:對于一個存儲單元來講,單元的地址即為指針。4.5.1
4.5.2指針的定義、賦值與引用1、定義其格式為:
[存儲類型]數(shù)據(jù)類型*指針名1[,*指針名2][,…]例如:
char*cpt;//定義了一個指針變量cpt,它所指向的是一個字符型的數(shù)據(jù)?;蚨xcpt為指向字符型變量的指針變量
指針說明符12/17/2022137 4.5.2指針的定義、賦值與引用指針說明符12/17/2、賦值(指針變量使用前必須賦值)指針變量只能賦予地址。intc;int*p=&c;(int*p;p=&c;)12/17/20221382、賦值(指針變量使用前必須賦值)12/17/2022563、指針變量的引用注意:指針變量的定義和引用中*的意義不同??!在指針變量定義中:*是類型說明符,說明其后的變量是指針類型在指針變量的引用中:*是運算符,(取內(nèi)容)int*p=&a,inta,c;c=*p;12/17/20221393、指針變量的引用12/17/2022574.7C51的程序設(shè)計4.7.1C51程序結(jié)構(gòu)常用C51的頭文件:reg51.h(定義特殊功能寄存器等);math.h(數(shù)學函數(shù));
ctype.h(字符函數(shù));
stdio.h(一般IO函數(shù));
stdlib.h(標準函數(shù));
absacc.h(絕對地址訪問);
string.h(串函數(shù))…….func1(){
局部變量定義<程序體>}……funcN(){
局部變量定義<程序體>}main(){
局部變量定義<程序體>
}
包含<頭文件>
函數(shù)聲明全局變量、參數(shù)定義12/17/20221404.7C51的程序設(shè)計常用C51的頭文件:reg51.#include<reg51.h>sbitLED1=P3^2;//定義SFR中引腳的“位”sbitLED2=P3^3;sbitLED3=P3^4;voiddelayms(unsignedintx);//毫秒延時函數(shù)
voidmain(void)//主程序{while(1)//非0為真,此為無限循環(huán){LED1=0;LED2=1;LED3=1;delayms(1000);LED1=1;LED2=0;LED3=1;delayms(1000);LED1=1;LED2=1;LED3=0;delayms(1000);}}
voiddelayms(unsignedintx)//毫秒延時函數(shù){unsignedcharj;while(x--)//非0,為真,即x=0時退出循環(huán){for(j=0;j<123;j++){;}}}包含文件
全程變量、參數(shù)定義函數(shù)聲明主函數(shù)子函數(shù)12/17/2022141#include<reg51.h>包含文件主函數(shù)子函數(shù)14.7.2C51流程控制1.選擇語句ifif(表達式){語句;}例:if(p1!=0){c=30;}if(條件表達式){語句1;}else{語句2;}例:if(a==b){a++;}else{a--;}當a等于b時,a=a+1,否則a=a-1if(表達式1){語句1;}elseif(表達式2){語句2;}elseif(表達式3){語句3;}……elseif(表達式m){語句m;}else{語句n;}注:語句中為單一語句,可以不用花括弧。12/17/20221424.7.2C51流程控制1.選擇語句ifif(表達式)if(表達式1){if()語句1;else()語句2;}
else
{if()語句1;else()語句2;}嵌套12/17/2022143if(表達式1)嵌套12/17/202261if(k1==0) { num++; if(num==10) num=0; }舉例:12/17/2022144if(k1==0)舉例:12/17/20226switch(表達式){
case常量表達式1:{語句1;}break;case常量表達式2:{語句2;}break;case常量表達式3:{語句3;}break;……case常量表達式n:{語句n;}break;
default:{語句n+1;}}2.switch/case語句也不是必須的12/17/2022145switch(表達式)2.switch/cas
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)計工程協(xié)議合同協(xié)議
- 購買鐵柵門合同協(xié)議
- 貴港離婚協(xié)議書范本
- 購土地定金合同協(xié)議
- 購房充值協(xié)議書模板
- 貸款房公證協(xié)議書模板
- 計件制工人勞動合同協(xié)議
- 超市商品買賣合同協(xié)議
- Android大廠面試題及答案
- 2025年考研英語歷年真題及答案
- 低空空域經(jīng)濟中高技能人才的培養(yǎng)路徑與市場分析
- 2025年北京市朝陽區(qū)九年級初三一模語文試卷(含答案)
- 全友家居導購員銷售流程及常用銷售話術(shù)
- 2025年建筑施工安全管理人員安全生產(chǎn)考試題庫
- 十萬頭生態(tài)養(yǎng)豬場項目可行性報告
- 2025年安全評價師職業(yè)資格考試真題回顧與模擬試題
- 2025年陜西省高考適應性檢測(三)語文試題及參考答案
- 銅火法冶煉的智能化改造與應用
- 氟化工藝作業(yè)課件
- 2025年4月12日烏魯木齊市人才引進面試真題及答案解析
- 大學高數(shù)函數(shù)試題及答案
評論
0/150
提交評論