C51语言程序设计基础.ppt

上传人:tia****nde 文档编号:8953589 上传时间:2020-04-02 格式:PPT 页数:77 大小:627.50KB
返回 下载 相关 举报
C51语言程序设计基础.ppt_第1页
第1页 / 共77页
C51语言程序设计基础.ppt_第2页
第2页 / 共77页
C51语言程序设计基础.ppt_第3页
第3页 / 共77页
点击查看更多>>
资源描述
第3章单片机C51语言设计基础 3 1C51的数据3 2C51对单片机主要资源的控制3 3C51的基本运算与流程控制3 4C51的数组与指针3 5C51函数3 6C51的预处理命令 3 1C51的数据 3 1 1数据类型3 1 2常量与变量3 1 3数据存储类型3 1 4局部变量与全局变量 3 1 1数据类型 3 1 2常量与变量 1 常量C51语言中的常量是不接受程序修改的固定值 常量可以是任意数据类型 C51中的常量有整型常量 实型常量 字符型常量 字符串常量符号常量等 2 实型常量 在整型常量后加一个字母 L 或 l 表示该数位长整型 例如23L 0Xfd4l等 如果需要的是负值 则必须将负号 放置于常量表达式的最前面 例如 0 x56 9等 实型常量又称浮点常量 是一个十进制表示的符号实数 实型常量的值包括整数部分 尾数部分和指数部分 实型常量的形式如下 digits digits E digits 一些实型常量的示例如下 15 75 1 575E1 1575E 3 0 0025 2 5e 3 25E 4 3 字符型常量 字符型常量是指用一对单引号括起来的一个字符 如 a 9 等 字符常量中的单引号只起定界作用并不表示字符本身 在C51语言中 字符是按其对应的ASCII码值来存储的 1个字符占1个字节 字符串常量是指用一对双引号括起来的一串字符 双引号只起定界作用 如 China 123456 等 5 符号常量 C51语言中允许将程序中的常量定义为一个标识符 称为符号常量 符号常量一般使用大写英文字母表示 以区别于一般用小写字母表示的变量 符号常量在使用前必须先定义 定义的形式是 define标识符常量 definePI3 1415926 2 变量 变量的定义 数据类型变量名 inti j k unsignedcharsi unsignedintui doublebalance profit loss C51中常用的 bit char int 1 整型变量 INT 16位数据 有符号 signedint 32768 32767无符号 unsignedint0 655350 x1234存储形式 3 实型变量 2 长整型变量 longint 长整型变量长度是32位 占用4个字节 byte 其他方面和整型变量 int 相似 分为单精度 float 型和双精度 double 型 其定义形式为 floatx y 指定x y为单精度实数doublez 指定z为双精度实数在一般系统中 一个float型数据在内存中占4个字节 32位 一个double型数据占8个字节 64位 单精度实数提供7位有效数字 双精度实数提供15 16位有效数字 4 字符变量CHAR 字符变量用来存放字符常量 注意只能存放1个字符 字符变量的定义形式如下 char变量名 例如 charc1 c2 它表示c1和c2为字符变量 各存放1个字符 可以用下面的语句对c1 c2赋值 c1 a c2 b 字符变量的长度是1字节 byte 即8位 这很适合于8051单片机 因为8051单片机每次可以处理8位数据 变量的类型是位 位变量的值可以是1 true 或0 false 与8051硬件特性操作有关的位变量必须定位在8051单片机片内存储区 RAM 的可位寻址空间中 3 有符号 无符号问题说明 1 尽量使用无符号变量 2 在编程时 为了书写方便 经常使用简化的缩写形式来定义变量的数据类型 defineucharunsignedchar defineuintunsignedint 3 1 3数据存储类型 数据时存放在51单片机的存储器中的 因此要规定数据的存储类型 P53表3 4常用 data xdata code另外 bdata 1 DATA区 data区的寻址是最快的 所以应该把经常使用的变量放在data区 但是data区的空间是有限的 data区除了包含程序变量外 还包含了堆栈和寄存器组 data区声明中的存储类型标式符为data 通常指片内RAM的低128字节的内部数据存储的变量 可直接寻址 声明举例如下 unsignedchardatasystem status 0 unsignedintdataunit id 2 chardatainp string 16 bdata实际是data中的位寻址区 在这个区中声明变量就可以进行位寻址 位变量的声明对状态寄存器来说是十分有用的 因为它可能仅仅需要某一位 而不是整个字节 bdata区声明中的存储类型标识符为bdata 指内部可位寻址的16字节存储区 20H到2FH 数据类型是可位寻址变量的数据类型 2 BDATA区 以下是在BDATA区中声明的位变量和使用位变量的例子 unsignedcharbdatastatus byte unsignedintbdatastatus word unsignedlongbdatastatus dword sbitstat flag status byte 4 if status word 15 stat flag 1 3 IDATA区 idata区也可以存放使用比较频繁的变量 使用寄存器作为指针进行寻址 idata区声明中的存储类型标识符为idata 指内部的256字节的存储区 但是只能间接寻址 速度比直接寻址慢 声明举例如下 unsignedcharidatasystem status 0 unsignedintidataunit id 2 charidatainp string 16 floatidataout value pdata区和xdata区属于外部数据存储区 外部数据区是可读可写的存储区 最多可以有64KB 在这两个区 变量的声明与在其他区的语法是一样的 但pdata区只有256字节而xdata区可达65536字节 声明举例如下 unsignedcharxdatasystem status 0 unsignedintpdataunit id 2 charxdatainp string 16 floatpdataout value 外部地址段中除了包含存储器地址外 还包含I O器件的地址 对外部器件寻址可以通过指针或C51提供的宏 使用宏对外部器件I O口进行寻址更具可读性 5 程序存储区CODE 程序存储区的数据是不可改变的 跳转向量和状态表对code段访问和对xdata区访问的时间是一样的 编译的时候要对程序存储区中的对象进行初始化 否则就会产生错误 程序存储区code声明的标识符为code 在C51语言编译器中可以用code存储区类型标识符来访问程序存储区 下面是程序存储区声明的例子 unsignedcharcodea 0 x00 0 x01 0 x02 0 x03 0 x04 0 x05 0 x06 0 x07 0 x08 0 x09 0 x10 0 x11 0 x12 0 x13 0 x14 0 x15 变量存储类型定义举例 chardatavar1 bitbdataflags floatidatax y z unsignedintpdatadimension unsignedcharxdatavector 10 4 4 3 1 4局部变量与全局变量 从变量的作用范围来区分 变量可以被分为全局变量和局部变量 某些变量在程序运行过程中是始终存在的 全局变量 某些变量只是在进入某个函数时才开始存在 局部变量 1 局部变量 局部变量是在某个函数中存在的变量 也可以称为内部变量 它只在该函数内部有效 局部变量可以分为动态局部变量和静态局部变量 使用关键词auto定义动态局部变量 auto可以省略 使用关键词static定义静态局部变量 例如 autointa staticunsignedcharj 动态局部变量在程序执行完毕后其存储空间被释放 而静态局部变量在程序执行完成后其存储空间并不释放 而且其值保持不变 如果该函数再次被调用 则该函数初始化后其初始值为上次的数值 动态局部变量和静态局部变量的区别如下 动态局部变量在函数被调用时分配存储空间和初始化 每次函数调用时都需要初始化 静态局部变量在编译程序时分配存储空间和初始化 仅初始化一次 动态局部变量存放在动态存储区 在每次退出所属函数时释放 静态局部变量存放在静态存储区 每次调用后函数不释放 保持函数执行完毕之后的数值到下一次调用 如果在建立时动态局部变量不初始为一个不确定的数 静态局部变量不初始化 则它们的值为0或者是空字符 2 全局变量 全局变量是在整个源文件中都存在的变量 又称为外部变量 全局变量的有效区间是从定义点开始到源文件结束 其中的所有函数都可以直接访问该变量 如果定义点之前的函数需要访问该变量 则需要使用extern关键词对该变量进行声明 如果全局变量声明文件之外的源文件需要访问该变量 也需要使用extern关键词进行声明 全局变量有以下特点 全局变量是整个文件都可以访问的变量 可以用于在函数之间共享大量的数据 存在周期长 在程序编译时就存在 如果两个函数需要在不互相调用时共享数据 则可以使用全局变量进行参数传递 C51语言程序的函数只支持一个函数返回值 如果一个函数需要返回多个值 除了使用指针外 还要使用全局变量 使用全局变量进行参数传递可以减少从实际参数向形式参数传递时所必需的堆栈操作 在一个文件中 如果某个函数的局部变量和全局变量同名 则在这个局部变量的作用范围内局部变量不起作用 全局变量起作用 全局变量一直存在 占用了大量的内存单元 并且加大了程序的耦合性 不利于程序的移植或复用 静态局部变量的作用范围仅仅是在定义的函数内 不能被其他的函数访问 全局变量的作用范围是整个程序 静态全局变量的作用范围是该变量定义的文件 静态局部变量是在函数内部定义 全局变量是在所有函数外定义 静态局部变量仅仅在第1次调用时被初始化 再次调用时使用上次调用结束时的数值 全局变量在程序运行时建立 值为最近一条访问该全局变量的语句执行的结果 另外 main函数虽然是 c文件的主文件 但也是一个函数 在其内部定义的变量也属于局部变量 全局变量一般在 c文件的开始部分定义或在 h文件中定义 由 c文件引用 C51语言程序多使用全局变量传递参数 因为这样可以降低程序处理的难度 加快程序执行的速度 提高程序的时效性 3 2C51对单片机资源的控制 3 2 1特殊功能寄存器的C51语言定义3 2 2绝对地址的访问3 2 3位变量的C51语言定义 3 2 1特殊功能寄存器的C51定义 21个特殊功能寄存器 两种方式 1 使用关键字sfr定义sfr特功器名字 特功器地址 sfrSCON 0 x98 串口控制寄存器地址98H sfrTMOD 0X89 定时器 计数器方式控制寄存器地址9H 2 通过头文件访问SFR include 使用的单片机为Intel公司的MCS 51voidmain void TL0 0 xb0 TH0 0 x3c TR0 1 启动定时器0 3 SFR中位定义 3种方式 1 第1种方法sbit位名 特殊功能寄存器名 位置 2 第2种方法sbit位名 字节地址 位置 3 第3种方法sbit位名 位地址 例 unsignedcharbdataflag sbitflag0 flag 0 sfrP1 0 x90 sbitP1 0 P1 0 sbitP1 1 P1 1 sbitP1 6 P1 6 sbitP1 7 P1 7 P60例3 3sbit型变量的定义P60例3 4片内I O口及其位的定义 3 2 2绝对地址的访问 包括 片内RAM 片外RAM及I O口 可以有两种方式 用 include可使用其中声明的宏来访问绝对地址 DBYTE以字节形式对data区寻址 DWORD以字形式对data区寻址 XBYTE以字节形式对xdata区寻址 XWORD以字形式对xdata区寻址 另外 CBYTE以字节形式对code区寻址 CWORD以字形式对code区寻址 PBYTE以字节形式对pdata区寻址 PWORD以字形式对pdata区寻址 例3 5 P61 include definePAXBYTE 0 xffec 将PA定义为外部I O口 地址为0 xffec defineNRAMDBYTE 0 x40 将NRAM定义为片内RAM 地址为40H 长度为8位 voidmain PA 0 x3A NRAM 0 x01 include definePORTAXBYTE 0 xFFC0 将PORT定义为外部I O口 地址为0 xFFC0 长度为8位 defineNRAMDBYTE 0 x40 将NRAM定义为片内RAM 地址为40H 长度为8位 例3 6 P62 dataunsignedcharx1 at 0 x40 在data区定义字节变量x1 它的地址为40H xdataunsignedintx2 at 0 x2000 在xdata区定义字变量x2 它的地址为2000H voidmain void x1 0 xff x2 0 x1234H while 1 可以使用关键字 at 对指定的存储器空间的绝对地址进行访问 一般格式如下 存储类型 数据类型符变量名 at 地址常数 3 2 3位变量的C51语言定义 1 位变量的C51语言定义采用关键字bit进行定义 例如 bitdirection bit 将direction bit定义为位变量 bitlock pointer 将lock pointer定义为位变量 bitdisplay invers 将display invers定义为位变量 2 可位寻址对象 可位寻址对象指可以字节或位寻址的对象 该对象应位于8051片内可位寻址RAM区中 C51语言编译器允许数据类型为idata的对象放入8051片内可位寻址RAM区 位变量的存储类型只能是bdata 在程序设计时 对于可位寻址的对象 即可以字节寻址也可以位寻址的变量 但其存储类型只能是bdata 使用时应先说明字节变量的数据类型和存储类型 然后可使用bit定义可独立寻址访问的对象位 例如 bdataintibase ibase定义为bdata整型变量 bdatacharbary 4 bary定义为bdata字符型数组 sbitmybit0 ibase 0 mybit0定义为ibase的第0位 sbitmybit15 ibase 15 mybit15定义位ibase的第15位 sbitAry07 bary 0 7 Ary07定义为bary 0 的第7位 sbitAry37 bary 3 7 Ary37定义为bary 3 的第7位 Ary37 0 bary 3 的第7位赋值为0 bary 3 a 字节寻址 bary 3 赋值为 a sbit定义要求基址对象的存储类型为bdata 只有这样其特殊位定义 sbit 是合法的 位置 操作符 后的最大值依赖于指定的基类型 对于char uchar而言是0 7 对于int uint而言是0 15 对于long ulong而言是0 31 3 3C51的基本运算与流程控制 3 3 1基本运算3 3 2选择 分支 控制语句3 3 3循环结构流程控制语句3 3 4break语句 continue语句 goto语句 3 3 1基本运算 运算符 运算符是表示特定的算术或逻辑运算的符号 也称操作符 把需要进行运算的各个量通过运算符连接起来 便构成表达式 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 特殊运算符 算术运算的操作符 加法运算符 减法运算符 乘法运算符 除法运算符 模运算或取余运算符 为自增运算符 为自减运算符 注意 结果的整数部分 结果的余数部分 除进行减法外 还可以进行取负操作 自增 表示操作数加1 X 等同于X X 1 X表示先加1 再取值 X 表示先取值 再加1 例3 8 自增和自减运算符的程序 includevoidmain intx y z1 z2 x 10 y 21 z1 x x printf x d z1 d n x z1 z2 y y printf y d z2 d n y z2 二 关系运算 成立或不成立 主要用于比较操作数的大小关系 包括 大于 大于等于 等于 不等于 看关系是否成立 结果 0或1 例3 9关系运算符运算的程序示例 includevoidmain inta b c d a 2 3 0 b 71 32 c 7 0 d 12 0 printf a d b d c d d d n a b c d 三 逻辑运算 结果是真或假 进行逻辑运算的操作符 包括 逻辑与 逻辑或 逻辑非 看结果是否为真 结果 0或1 例3 10逻辑运算的程序示例 includevoidmain inta b c d e a 0 b 15 四 位运算 将两个操作数按二进制数展开 然后对应位进行逻辑运算 包括 按位与 按位或 按位异或 按位取反 位右移 位运算的操作对象只能是整型和字符型数据 这些位运算和汇编语言中的位操作指令十分类似 位操作指令是单片机的重要特点 所以位运算在C51语言控制类程序设计中的应用比较普遍 例3 11位运算程序示例将A值循环右移2位 main unsignedchara 0 xc3 b c intn 2 b a n a c b 例3 12位运算程序示例 includevoidmain inta b c a 23 b 217 c a 五 赋值运算 变量名 表达式 例如 a b 4 c 6 该表达式的值为10 变量a的值为10 复合赋值运算符 赋值符号前加上其他运算符构成复合运算符 C51语言提供以下10种复合运算符 例如 a b 等价于a a b x a b 等价于x x a b a 等价于a a 4 算术运算符 逻辑运算符 关系运算符 赋值运算符的优先级 3 3 2选择 分支 控制语句 通过选择结构 可以使计算机具有决策能力 从而使计算机能够按照我们的意志在某个特定条件下完成相应的操作 能够 随机应变 包括 if语句 switch语句 一 IF语句 if语句用来判定所给定的条件是否满足 根据判定结果决定执行给出的两种操作之一 if语句的基本结构如下 if 表达式 语句 括号中的表达式成立时 程序执行大括号内的语句 否则程序跳过大括号中的语句部分而直接执行下面其他语句 C51语言提供3种形式的if语句 形式一 IF 表达式 语句 if x y max x min y 形式二 IF 表达式 语句1 ELSE 语句2 if x y max x else min y 形式三 if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 elseif 表达式m 语句m else 语句n if x 1000 y 1 elseif x 500 y 2 elseif x 300 y 3 elseif x 100 y 4 else y 5 例3 13分支编程示例 includemain intx y scanf d 例3 14 includevoidmain inta b a 200 b 321 if a b a b printf a d b d n a b 例3 15 includevoidmain inta b a 12 b 21 if a b a b a b printf a d b d n a b 例3 16 includevoidmain intscore chargrade score 45 if score 90 grade A elseif score 80 grade B elseif score 70 grade C elseif score 60 grade D elsegrade E printf score d grade c n score grade 二 SWITCH语句 switch语句是多分支选择语句一般形式如下 switch 表达式 case常量表达式1 语句1 break case常量表达式2 语句2 break case常量表达式n 语句n break default 语句n 1 例3 17 3 3 3循环结构流程控制语句 四种形式 ifgotowhiledo whilefor 一 基于IF和GOTO构成的循环 1 采用if和goto可以构成 当型 循环loop if 表达式 语句 gotoloop 2 采用if和goto也可以构成 直到型 循环程序loop 语句 if 表达式 gotoloop 3 goto语句为无条件转向语句goto语句标号 二 WHILE while 表达式 语句 例 includevoidmain inti s i 100 s 0 while i 0 s s i i i 1 printf 1 2 100 d n s 注意 先判断 后执行 如果循环体内只有一个语句 可以不用 While循环体 后无分号 三 DO WHILE do 语句 while 表达式 例 includevoidmain inti s i 100 s 0 do s s i i i 1 while i 0 printf 1 2 100 d n s 注意 先执行 后判断 如果循环体内只有一个语句 可以不用 循环体 后无分号 while 表达式 后的分号不能省 四 FOR for 表达式1 表达式2 表达式3 语句 for y 0 y 99 y y 3 delay 33 px px 例 includevoidmain inti s s 0 for i 0 i 100 i s s i printf 1 2 100 d n s 注意 3个表达式都是可选项 可以任意省略 但 不能省 省1是不对循环变量赋初值 省2是不判断循环条件的真假 省3是不对循环变量操作 for 表示无限循环 无限循环的实现 1 for 代码段 2 while 1 代码段 3 do 代码段 while 1 3 3 4BREAK语句 CONTINUE语句 GOTO语句 在循环语句执行过程中 如果需要在满足循环判定条件的情况下跳出代码段 可以使用break或continue语句 如果要从任意地方跳转到代码的某个地方 可以使用goto语句 1 BREAK break语句用于从循环代码中退出 然后执行循环语句之后的语句 不再进入循环 形式 break 注意 一个break只能跳出一层循环 例 includevoidmain inti s i 0 s 0 while 1 s s iI i if i 100 break printf 1 2 100 d n s 2 CONTINUE continue语句用于退出当前循环 不再执行本轮循环 程序代码从下一轮循环开始执行 直到判断条件不满足为止 与break的区别是该语句不是退出整个循环 形式 continue 例 includevoidmain charch a B c D e F inti 1 while i a 3 GOTO goto是一个无条件转移语句 当执行goto语句时 将程序指针跳转到goto给出的下一条代码 基本格式如下 goto标号 例 voidmain void unsignedcharcounter intsum sum 0 sumadd sum sum counter counter if counter 101 gotosumadd 3 4C51的数组与指针 C51语言的构造数据类型主要有数组 指针和结构等 在单片机系统中 数组的应用比较广泛 指针则次之 结构用的相对较少 这里我们只讨论数组和指针 3 4 1数组 数组是同类型变量的一个有序集合 数组用一个名字来标识 称为数组名 数组中的每个变量称为数组元素 数组有一维 二维 三维和多维数组之分 C51语言中常用的一维 二维数组和字符数组 数组中各元素的顺序用下标表示 下标为N的元素可以表示为数组名 N 改变 中的下标就可以访问数组中所有的元素 1 一维数组 类型说明符数组名 元素个数 intdemo1 10 初始化 inta 5 1 2 3 4 5 intb 6 1 2 6 例3 23 2 二维数组或多维数组 类型说明符数组名 行数 列数 floatdemo2 3 4 demo2数组有3行4列共12个实型元素inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 全部初始化 3 字符数组 若一个数组的元素是字符型的 则该数组就是一个字符数组 例如 chara 12 ChongQing 字符数组charadd 3 6 weight height width 字符串数组 4 查表 defineucharunsignedcharucharcodetempt 32 34 36 37 39 41 数组 设置在EPROM中 长度为实际输入的数值数 ucharftoc uchardegc returntempt degc voidmain ucharx x ftoc 5 得到与5 相应的华氏温度值 共阴极LED的显示字符段码表charcodeSEG 11 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 3 5C51函数 函数是指能够执行特定功能和任务的程序代码段 一个完整的C51程序是由一个主函数和若干个其他函数组成 主函数是main 函数 有且只有一个main 函数 使用函数时注意 函数数目不限制 main 函数是主函数 可以调用其他函数 而不允许被其他函数调用 除主函数外 其他函数之间允许互相调用 一 函数分类 可以从不同的角度分类 1 有无返回值角度 2 数据传送角度 3 函数定义角度 1 有无返回值角度 无返回值函数 有返回值函数无返回值函数 执行完成后不向主调函数返回函数值 类型说明符为 void有返回值函数 执行完成后向主调函数返回一个执行的结果 返回值 2 数据传送角度 有参函数和无参函数 无参函数 主调函数和被调函数之间不进行参数的传递 有参函数 主调函数和被调函数之间存在参数的传递 形式参数和实际参数 3 函数定义角度 主函数 自定义函数 库函数自定义函数 是用户根据自己的需要而编写的函数 从函数定义的形式上可以将其划分无参函数 有参函数和空函数 无参函数 有参函数 空函数 二 函数定义 有参函数和无参函数定义 1 无参函数的定义方法 P60无参函数的定义形式为 返回值类型标识符函数名 函数体 无参函数一般不带返回值 因此函数返回值类型标识符可以省略 2 有参函数的定义方法有参函数的定义形式为 P61返回值类型标识符函数名 形式参数列表 形式参数说明 函数体 函数定义举例 includeintmax x1 x2 intx1 x2 if x1 x2 returnx1 elsereturnx2 voidmain intx1 17 x2 9 printf x1 d x2 d x1 x2 printf max x1 x2 d n max x1 x2 在程序中定义函数应注意 1 可将形参类型说明放在形参列表中 如 intmax intx1 intx2 2 函数位置与声明3 5 2中断函数函数类型函数名interruptnusingn 3 6C51的预处理命令 C51语言中提供了各种预处理命令 其作用类似于汇编程序中的伪指令 预处理命令通常只进行一些符号的处理 并不执行具体的硬件操作 C51的预处理命令包括文件包含命令 宏定义指令条件编译指令 预处理命令前要加一个 3 6 1文件包含 include或 include 文件名 include myfile h 引用自定义文件myfile include 引用库函数文件stdio include 引用寄存器文件 defineMATH FILE c keil inc math1 h 宏定义自定义文件MATH FILE includeMATH FILE 引用自定义文件MATH FILE 例 文件包含指令的程序示例 include include myfile1 h voidmain inti sum 0 for i 0 i 20 i sum sum fun i printf sum d n sum 其中myfile1 h文件的内容如下 intfun inti intmu1 mu1 i i returnmu1 在使用 INCLUDE命令时 应注意以下几点 include命令出现在程序中的位置 决定了被包含的文件就从此处引入源文件 一个 include命令只能指定一个被包含文件 如果程序中需要包含多个文件则需要使用多个包含命令 采用格式时 在头文件目录中查找指定文件 采用 文件名 格式时 在当前目录中查找指定文件 include命令末尾不需要分号 结束 include命令只能调入ASCII文本文件 3 6 2宏定义指令 1 简单的宏定义简单的宏定义格式为 define宏替换名宏替换体3 6 3条件编译1 if型格式如下 if常量表达式代码1 else代码2 endif
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!