第七课-C51语言的结构和特点课件_第1页
第七课-C51语言的结构和特点课件_第2页
第七课-C51语言的结构和特点课件_第3页
第七课-C51语言的结构和特点课件_第4页
第七课-C51语言的结构和特点课件_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机C51语言

C51特点C语言作为一种非常方便的结构化语言而得到广泛的支持,国内最通用的是KeilC51。C语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中移植过来。C提供了丰富的数据类型、很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加程序可读性和可维护性。与汇编语言相比,C语言的优点如下:对单片机的指令系统不要求了解,仅要求对8051的存贮器结构有初步了解;寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;程序有规范的结构,可分成不同的函数,这种方式可使程序结构化;具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;提供的库包含许多标准子程序,具有较强的数据处理能力;由于具有方便的模块化编程技术,使已编好程序可容易地移植。C51-1:C51基本结构怎样学习C51?//功能:控制八个信号灯闪烁程序#include<AT89X52.H> //定义了MCS-52单片机的特殊功能寄存器voiddelay(unsignedchari); //延时函数声明voidmain() //主函数{while(1){P1=0x00;//点亮八个LEDdelay(200);//延时

P1=0xff;//熄灭八个LEDdelay(200); //延时

}}//函数名:delay//函数功能:实现软件延时//形式参数:unsignedchari;voiddelay(unsignedchari) //延时函数,无符号字符型变量i为形式参数{unsignedcharj,k; //定义无符号字符型变量j和kfor(k=0;k<i;k++) //双重for循环语句实现软件延时

for(j=0;j<255;j++);}

C51的程序结构#include<reg51.h>voiddelay(){……;}voidmain(){delay();P0=0x33;}头文件(一个或若干个)主函数程序的入口

函数名固定,且与书写的位置无关有且仅有一个函数声明或定义库函数或用户自定义的函数可以有若干个C51程序大体上是若干函数的集合C程序基本结构一个C语言源程序是由一个或若干个函数组成,每一个函数完成相对独立的功能。每个C程序都必须有(且仅有)一个主函数main(),程序的执行总是从主函数开始,调用其他函数后返回主函数main(),不管函数的排列顺序如何,最后在主函数中结束整个程序。C51编程要点C语言程序中可以有预处理命令,预处理命令通常放在源程序的最前面。C语言程序使用“;”作为语句的结束符,一条语句可以多行书写,也可以一行书写多条语句。C语言区分大小写。用/**/或//注释。Main主函数名;void函数类型,空类型无返回值;()内为形参,{}内为函数体

C语言编程的三大要素数据数据类型、数据结构、存储类型运算算术运算、关系运算、逻辑运算、位操作控制顺序结构、选择结构、循环结构、函数C语言标识符

C语言中由字母、数字和下划线组成的字符序列称为标识符。用于在程序中给变量、符号常量、数组、函数、数据类型等操作对象“起名”。1.编译系统定义标识符由编译系统定义,具有固定名字和特定含义分为①关键字和②预定义标识符

2.用户自定义标识符

用于对用户使用的变量、数组、函数等操作对象进行命名。

C语言对标识符的规定

用户自定义标识符:由字母、数字和下划线构成,但必须以字母或下划线“_”开头,不能以数字开头不能含有除字母、数字和下划线“_”外的其他字符如:!、&、*等。标识符中大小写字母含义不同如:abc和Abc为不同的标识符关键字:必须用小写字母。不允许使用关键字为变量、数组、函数等操作对象命名。预定义标识符:允许用户对它们重新定义,当重新定义后将改变它们原来的含义。正确区分标识符正确区分哪些是合法标识符,哪些是不合法标识符。合法标识符中哪些是关键字,哪些是预定义标识符,哪些是用户自定义标识符。AbcP1_02xP1.0studentm+ya#b-4_1Whileintletx%yLEDdoπwtmCtrlswitchinclude

C51-2数据类型1.关键字

关键字是C51语言规定的一批标识符,在源程序中代表固定的含义,不能另作它用。

C51语言除了支持ANSI标准C语言中的关键字(见表4-1)外,还根据51系列单片机的结构特点扩展部分关键字,见表4-2。2.预定义标识符

预定义标识符是指C51语言提供的系统函数的名字(如printf、scanf)和预编译处理命令(如define、include)等。

C51语言语法允许用户把这类标识符另作它用,但将使这些标识符失去系统规定的原意。因此,为了避免误解,建议用户不要把预定义标识符另作它用。3、C51的数据数据类型长度值域

bit1bit0,1

unsignedchar8bit0~255

(signed)char8bit-128~127

unsignedint16bit0~65535

(signed)int16bit-32768~32767

unsignedlong32bit0~4294967295

(signed)long32bit-2147483648~2147483647

float32bit±1.7e-38~±3.40e+38(6位)

double64bit±1.7e-38~±3.40e+38(10位)*(一般指针)1~3字节存储空间地址3-1、C51的数据类型C51语言的数据类型C51数据类型数组类型结构体类型(struct)共用体类型(union)整型(int、short、long)字符型(char、unsignedchar)浮点型(float、double)枚举类型(enum)特殊功能寄存器类型(sfr和sfr16)位类型(bit和sbit)基本类型指针类型(*)空类型(void)构造类型1.char字符类型

char类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。 分无符号字符类型unsignedchar和有符号字符类型signedchar,默认值为signedchar类型。

字符型变量分为:[signed]

char和unsignedchar编译系统为其分配1Byte(字节)的存储空间(TurboC、VC++6.0和Keil中均分配1B的存储空间)表示的数值范围:[signed]

char:-128~127unsignedchar:0~255字符型变量定义形式:char

字符变量名[=初值];

例如:char

ch1,c1;

unsignedchar

c2=‘a’,c3=‘A’,c4=‘\307’;

例如:

inta,b;(指定变量a、b为整型)

charx,y;(指定变量x、y为字符型)

unsignedw,u;

(指定变量w、u为无符号整型)

unsignedcharc,d;

(指定变量c、d为无符号字符型)

2.int整型

int整型长度为两个字节,用于存放一个双字节数据。 分有符号int整型数signedint和无符号整型数unsignedint,默认值为signedint类型

根据值大小默认类型。整型常量后面加l或L,则认为是

longint型如:123L、0L、432l、0x100l整型常量后面加u或U,则认为是unsigned

int型如:0xF8A5U、0745u、-244u、-98U等3.long长整型

long长整型长度为四个字节,用于存放一个四字节数据。分有符号long长整型signedlong和无符号长整型unsignedlong,默认值为signedlong类型。

4.float浮点型

float浮点型在十进制中具有7位有效数字,是符合IEEE-754标准的单精度浮点型数据,占用四个字节。5.指针型

指针型本身就是一个变量,在这个变量中存放的是另一个数据的地址。这个指针变量要占据一定的内存单元,对不同的处理器长度也不尽相同。6.bit位变量

bit类型定义1个位变量,值为0或1.其存储器类型只能是bdata、data、idata,严格讲只能是:bdata

所有的bit变量都放在80C51内部存储区的可位寻址区,而该区域只有16字节长,所以在某个范围内只能声明最多128个位变量。bitflag; //定义一个位变量flagbitflag=1; //定义一个位变量flag并赋初值1对位变量定义的限制不能定义成一个指针,

如不能定义:bit*pointer;

不存在位数组

如不能定义:bitb_array[]

位变量定义时,存储类型只允许为data、bdata或者idata,如果将位变量的存贮类型定义成其它类型都将导致编译出错。7

sfr类型用于定义1个8位的特殊功能寄存器定义形式:

sfr

标识符=8位特殊功能寄存器在内部RAM中的实际地址;标识符可为汇编语言中的特殊功能寄存器名或自己任意命名如:sfrP0=0x80;sfrPSW=0xd0;sfrTMOD=0X89;8

sfr16类型用于定义1个16位的特殊功能寄存器定义形式:

sfr16

标识符=16位特殊功能寄存器的低字节地址;51子系列中只有DPTR为16位的特殊功能寄存器:由DPH和DPL组成,其地址分别为0x82和0x83,地址连续。

sfr16DPTR=0x82;/*地址为低字节单元的地址*/52子系列中T2可定义如下:sfr16T2=0xCC;T0和T1不能用sfr16进行定义:

sfr16T0=0x8A;/*错误,TL0和TH0地址不连续*/sfr16T1=0x8B;/*错误,TL1和TH1地址不连续*/9.sbit可寻址位

sbit是C51中的一种扩充数据类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。sbit类型定义bdata区或可位寻址特殊功能寄存器(字节地址的末位为0或8)中的位,值也为0或1.

如:sfrP1=0x90;sbitP1_0=P1^0;

或sbitP1_0=0x90^0;

或sbitP1_0=0x90;sbitEA=0xAF;sbitIT0=0x88;sbitP=0xD0;注:安装Keil软件后,在文件夹“C:\keil\c51\inc”中有一些头文件包含了有关特殊功能寄存器和相应位的定义。reg51.h头文件内容:/*BYTERegister*/sfrP0=0x80;sfrP1=0x90;sfrP2=0xA0;sfrP3=0xB0;sfrPSW=0xD0;sfrACC=0xE0;sfrB=0xF0;sfrSP=0x81;sfrDPL=0x82;sfrDPH=0x83;sfrPCON=0x87;sfrTCON=0x88;sfrTMOD=0x89;sfrTL0=0x8A;sfrTL1=0x8B;sfrTH0=0x8C;sfrTH1=0x8D;sfrIE=0xA8;sfrIP=0xB8;sfrSCON=0x98;sfrSBUF=0x99;/*BITRegister*//*PSW*/sbitCY=0xD7;sbitAC=0xD6;sbitF0=0xD5;sbitRS1=0xD4;sbitRS0=0xD3;sbitOV=0xD2;sbitP=0xD0;/*TCON*/sbitTF1=0x8F;sbitTR1=0x8E;sbitTF0=0x8D;sbitTR0=0x8C;sbitIE1=0x8B;sbitIT1=0x8A;sbitIE0=0x89;sbitIT0=0x88;/*IE*/sbitEA=0xAF;sbitES=0xAC;sbitET1=0xAB;sbitEX1=0xAA;sbitET0=0xA9;sbitEX0=0xA8;Reg51.h头文件内容(续)/*IP*/sbitPS=0xBC;sbitPT1=0xBB;sbitPX1=0xBA;sbitPT0=0xB9;sbitPX0=0xB8;/*P3*/sbitRD=0xB7;sbitWR=0xB6;sbitT1=0xB5;sbitT0=0xB4;sbitINT1=0xB3;sbitINT0=0xB2;sbitTXD=0xB1;sbitRXD=0xB0;/*SCON*/sbitSM0=0x9F;sbitSM1=0x9E;sbitSM2=0x9D;sbitREN=0x9C;sbitTB8=0x9B;sbitRB8=0x9A;sbitTI=0x99;sbitRI=0x98;总结:在编程时,如果只强调程序的运算速度而又不进行负数运算,最好采用无符号格式。无论何时,应尽可能地使用unsgnedchar、Bit类型,它们能被8051直接接受。C51-3常量和变量

符号常量用大写,变量用小写1、常量–又称为标量,常量的值在程序执行过程中不能改变,一般用一个标识符号代表一个常量,称为符号常量。1、使用#define语句定义符号常量例:#defineCONST60 #definePI3.14152、使用”code”关键字指定数据的存储位置为程序存储器C51中常量的定义:符号常量的作用域:定义这个符号常量的整个C文件

(1)整型常量又称为整数(可直接使用不用定义)。在C51语言中,整数可以用十进制、八进制和十六进制形式来表示。但C51中数据的输出形式只有十进制和十六进制两种。

(2)在C51语言中,还可以用一个“特别指定”的标识符来代替一个常量,称为符号常量。必须define先定义再使用例:#definePI3.14159

//定义符号常量PI=3.14159

用一个标识符来代表的常量称为符号常量符号常量事先必须用编译预处理命令define定义,define必须以“#”开头,且行尾没有“;”号.编译程序时首先由编译系统将符号常量替换为它所代表的常量,然后再进行编译.符号常量一般用大写字母表示,以区别于变量.例#include<reg51.h>#defineDISP

0x7fvoidmain(){P1=DISP;while(1);}使用符号常量的好处:

含义清楚、顾名知意。程序中需要改变常量的值时能做到“一改全改”。例#include<reg51.h>#include<stdio.h>#defineLEN10.5voidmain(){floatl,s;SCON=0x50;TMOD|=0X20;PCON|=0X80;TH1=TL1=0XFD;TI=1;TR1=1;l=2*3.14*LEN;s=3.14*LEN*LEN;printf("a=%f,b=%f\n",l,s);}2、变量有关概念在程序运行过程中,其值可以改变的量,称为变量,变量名用标识符表示。变量一般有变量名和变量值组成。变量名为RAM单元地址号,变量值为该单元中存放的内容。C规定程序中用到的变量必须“先定义后使用”系统为变量在内存(内部RAM和外部RAM)中分配存储单元,存储变量的值。编写程序时可以通过变量名来存、取变量值。

例如:unsignedint

xdatai,j;

unsignedchardatach1,ch2='A';必须使用合法的标识符作变量名不能使用关键字为变量命名变量名一般用小写,长度一般不超过8个字符,最长不得大于32个字符。变量名最好也能做到“顾名知意”变量定义的一般格式:数据类型[存储器类型]

变量名表[=初值];存储器类型指明变量所在存储器的区域情况C51根据单片机存储器的结构特点分为以下六种存储类型:1、data变量定义在片内RAM可直接寻址的低128B空间中。如:unsignedchardatach[5];2、idata变量定义在片内RAM可间接寻址的256B空间中。如:intidatax=10;3、bdata变量定义在片内RAM可位寻址的16B空间中(地址范围:0x200x2F)。如:intbdataflag;sbitflag0=flag^0;4、

xdata变量定义在片外RAM64KB空间中。如:floatxdataf[100];5、

pdata变量定义在片外RAM低256B空间中。如:floatpdatay;6、code变量定义在程序存储器64KB的空间中。如:#defineucharunsignedcharucharcodedisplay[]={0x7F,0xBF,0xDF,0xFE,0xF7};数据类型说明符[存储器类型]

变量名列表[=初值];例各种存储类型演示#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintvoidmain(){ ucharcodea=0xfd;/*在程序存储器定义变量a*/ uchardatab=0x78;/*在内部RAM低128B中定义变量b*/ ucharidatac=0xE9;/*在内部RAM256B中定义变量c*/ ucharbdatad=0x56;

/*在内部RAM20h~2fh空间定义变量d*/ uintxdatae=0xFE98;/*在外部RAM空间定义变量e*/ uintpdataf=0xE2;/*在外部RAM低256B空间定义变量f*/ for(;;);}变量的默认存储类型如果变量定义时没有明确指明其存储类型(data、idata、bdata、xdata、pdata、code),则编译器编译时根据工程项目的存储模式自动选择存储类型。三种存储模式:1、small小存储模式:变量默认分配在data区。2、compact紧凑存储模式:变量默认分配在pdata区。3、large大存储模式:变量默认分配在xdata区。如:unsignedint

i,j=1000;

unsignedcharch1,ch2='A';程序中可以通过预处理命令#pragma声明存储模式,没有明确声明时,系统隐含为small模式。存储模式举例:#pragmasmallchark1;/*k1存储类型为data*/intxdatam1;/*m1存储类型为xdata*/#pragmacompactchark2;/*k2存储类型为pdata*/intxdatam2;/*m2存储类型为xdata*/intfunc1(intx1,inty1)large{return(x1+y1);}/*x1、y1存储类型为xdata*/intfunc2(intx2,inty2){return(x2-y2);}/*x2、y2存储类型为data*/变量的初始化变量的初始化指在声明变量的同时对变量赋初值。例如:inta=5,b=10+2;doublex=23.568,y;charch1='a',ch2=66,ch3='\142';

表示声明变量并对变量存储单元赋值。第一条语句相当于:inta,b;a=5;b=12;错误的初始化:inta=3+b,b=5;

改为:

intb=5,a=3+b;floatm=n=23.16;改为:

floatm=23.16,n=23.16;C51运算符

1C语言运算符和表达式简介算术运算符和算术表达式赋值运算符和赋值表达式逗号运算符和逗号表达式逻辑运算符和逻辑表达式位运算符和位运算表达式条件运算符和条件表达式关系运算符和关系表达式其他运算符及其运算(指针、下标等)2运算符的有关概念作用:对运算对象完成规定的操作运算类型:按运算对象分:单目:只有一个操作对象,如:自增运算符(++)双目:有两个操作对象,如:乘(*),除(/)三目:有三个操作对象

只有一个:条件运算符(?:)按功能分:算术、赋值、关系、逻辑条件、逗号、位、其他3运算符的优先级和结合性优先级指各种运算符号的运算优先顺序例如:算术运算中先*/后+- a-b*c+d结合性指运算符和运算对象的结合方向分为:从左向右(左结合)和从右向左(右结合)例如:算术运算符为左结合

a-b+4

赋值运算符为右结合

a=b=5注:如果一个操作数两边的运算符优先级不同时,按优先级从高到低结合;如果一个操作数两边的运算符优先级相同时,按结合性处理。4各种运算符的表示+-*/%++--+-=+=-=*=/=%=&=|=^=>>=<<=><>=<===!=&&||!&|^~<<>>?:,&sizeof(数据类型标识符)类型种类算术运算符赋值运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符其他运算符5表达式的有关概念什么是表达式由运算符将运算对象连接成的式子,它描述了一个具体的求值运算过程。计算表达式的值按照运算符的运算规则求值求值时注意运算符的优先级和结合性例如:表达式:150+'b'*2-12.456b=(++a)-2a/=a*=(a=2)f=a>b>c--a||++b&&c++max=a>b?a:ba=3,a+=3,a*a 1/(float)a+66算术运算符和算术表达式算术运算符的优先级

()+-++--

*/%

+-

同级同级同级

单目双目

低没有乘方运算符,要计算a3要写作a*a*a的连乘,或用标准库函数pow(a,3)“/”的运算对象可为各种类型数据,但是当进行两个整数相除时,运算结果也是整数

“%”要求运算对象必须是整数,功能是求两个整数相除的余数,余数的符号与被除数的符号相同。例5/2=2

-5/2.0=-2.5例5%2=1

-5%2=-11%10=

1

5%1=

05.5%2

()7自增、自减运算符自增(++)、自减(--)都是单目运算符有前缀和后缀两种形式

前缀形式:先自增(自减)再引用;后缀形式:先引用再自增(自减);功能:

前缀形式

++a

等价于

a=a+1

--

a

等价于

a=a–1

后缀形式

a++等价于a=a+1

a--等价于a=a–1例如:当a=5时⑴++a表达式的值为6,且a=6⑵

a++

表达式的值为5,且a=6⑶b=++a

等价于

a=a+1;b=a表达式的值为6,且a=6,

b=6⑷b=a++

等价于

b=a;a=a+1表达式的值为5,且a=6,

b=5

说明:++

和-

-

的运算对象只能是变量,不能是常量或表达式。例如:

5++、(a+2)++

不合法。右结合性,结合方向为从右到左。例如:

–a++

等价于-(a++)而不等价

(-a)++

如果有多个运算符连续出现时,C编译系统尽可能多的从左到右将多个字符组合成一个运算符例如:

i+++j

等价于(i++)+j

-i+++-j

等价于-(i++)+(-j)

8关系运算符、逻辑运算符及其表达式无论是关系运算还是逻辑运算,其结果都会得到一个逻辑值。逻辑值只有两个,在很多高级语言中都用“真”和“假”来表示。由于没有专门的“逻辑值”,C51语言规定:当关系成立或逻辑运算结果为非零值(整数或负数)时为“真”,用“1”表示;否则为“假”,用“0”表示。关系运算符种类:<<===>=>!=结合方向:自左向右优先级别:<<=>>===!=优先级6(高)优先级7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)关系表达式的值:是逻辑值“真”或“假”,用1和0表示例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c//表达式值1//表达式值1//表达式值0//d=1//f=0(1)关系运算符与关系表达式(左结合)例若a=0;b=0.5;x=0.3;

则a<=x<=b的值为0例5>2>7>8在C中是允许的,值为0例inti=1,j=7,a;a=i+(j%4!=0);

则a=2例‘a’>0结果为‘A’>100结果为10关系运算注意(1)例注意区分“=”与“==”

inta=0,b=1;if(a=b)

printf(“aequaltob”);else

printf(“anotequaltob”);例应避免对实数作相等或不等的判断如1.0/3.0*3.0==1.0结果为可改写为:fabs(1.0/3.0*3.0-1.0)<1e-60关系运算注意(2)ab!a!ba&&ba||b真假真假假假真真逻辑运算符种类:!&&||逻辑运算真值表C语言中,运算量:

0表示“假”,非0表示“真”,

运算结果:0表示“假”,

1表示“真”,真假假假假假真真假假真真真假真真(2)逻辑运算符与逻辑表达式!(2)&&(11)||(12)高低例a<=x&&x<=b

a>b&&x>ya==b||x==y!a||a>b优先级:结合方向:!:从右向左&&:从左向右||:从左向右//(a<=x)&&(x<=b)//(a>b)&&(x>y)//(a==b)||(x==y)//(!a)||(a>b)逻辑运算符和表达式(2)注意:数学中常用的逻辑关系x≤a≤y,C51语言的正确写法为(x<=a)&&(a<=y)或x<=a&&a<=y!(2)&&(11)||(12)高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右例a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&2||8<4-!0‘c’&&‘d’值为1值为0值为1值为1值为1值为1//(5>3)&&2||(8<(4-(!0)))值为1逻辑运算符和表达式(3)短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符<>例a&&b&&c//只在a为真时,才判别b的值;只在a、b都为真时,才判别c的值例a||b||c//只在a为假时,才判别b的值;只在a、b都为假时,才判别c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//结果m=0,n=19赋值运算符和赋值表达式一般的赋值运算符(右结合)

=复合赋值运算符(右结合)

由一个二元运算符和赋值运算符共同构成

C语言共有十种复合赋值运算符:

+=-=*=/=%=

&=|=^=>>=<<=

赋值表达式:由赋值运算符将变量和一个表达式连接起来的式子。功能:将表达式的值存入变量对应的内存单元中表达式的值:为赋值运算符左边变量的值m=12b=(++a)-2m%=3+n等价于

m=m%(3+n)说明:赋值号左边必须是变量,右边可以是C语言任意合法的表达式例如:n=t+2<s合法

相当于:n=((t+2)<s)a+b=15不合法赋值运算符仅优先于“,”,且具有右结合性例如:

a=b=b*c>10等价于:a=(b=(

(b*c)>10)

)赋值号与数学中的等号含义不同例如:数学中a=b等价于b=aC语言中a=b不等价于b=a10位运算符和位运算~&^|<<>>位逻辑运算符移位运算符单目低于单目、算术运算符,高于其他运算符低于单目、算术和关系运算符,高于其他运算符位运算符的运算对象只能是整型数据或字符型数据,不能是实型数据运算对象一律按二进制补码参加运算,并按位进行运算位运算的结果是一个整型数据位运算符的运算规则假设ai和bi均是一个二进制位(bit)

运算对象逻辑运算结果aibiai&biai|biai^bi˜ai000001010111

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论