




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 单片机C51语言设计基础,3.1 C51的数据 3.2 C51对单片机主要资源的控制 3.3 C51的基本运算与流程控制 3.4 C51的数组与指针 3.5 C51函数 3.6 C51的预处理命令,3.1 C51的数据,3.1.1 数据类型 3.1.2 常量与变量 3.1.3 数据存储类型 3.1.4 局部变量与全局变量,3.1.1 数据类型,3.1.2 常量与变量,1常量 C51语言中的常量是不接受程序修改的固定值,常量可以是任意数据类型。 C51中的常量有整型常量、实型常量、字符型常量、字符串常量符号常量等。,(2)实型常量,在整型常量后加一个字母“L”或“l”,表示该数位长整型。
2、例如23L、0Xfd4l等。 如果需要的是负值,则必须将负号“-”放置于常量表达式的最前面,例如-0 x56、-9等。,实型常量又称浮点常量,是一个十进制表示的符号实数。实型常量的值包括整数部分、尾数部分和指数部分。实型常量的形式如下: digits.digitsE+/-digits 一些实型常量的示例如下: 15.75、1.575E1、1575E-3、 -0.0025、-2.5e-3、25E-4。,(3)字符型常量,字符型常量是指用一对单引号括起来的一个字符。如a、9、!等。字符常量中的单引号只起定界作用并不表示字符本身。 在C51语言中,字符是按其对应的ASCII码值来存储的,1个字符占1
3、个字节,字符串常量是指用一对双引号括起来的一串字符,双引号只起定界作用,如China、123456等。,(5)符号常量,C51语言中允许将程序中的常量定义为一个标识符,称为符号常量。 符号常量一般使用大写英文字母表示,以区别于一般用小写字母表示的变量。 符号常量在使用前必须先定义,定义的形式是: #define 标识符 常量 #define PI 3.1415926,2变量,变量的定义: 数据类型 变量名; int i,j,k; unsigned char si; unsigned int ui; double balance,profit,loss; C51中常用的:bit、char、int
4、,(1)整型变量(INT) 16位数据,有符号:signed int -32 76832 767 无符号:unsigned int 065 535 0 x1234存储形式,(3)实型变量,(2)长整型变量(long int) 长整型变量长度是32位,占用4个字节(byte),其他方面和整型变量(int)相似。,分为单精度(float)型和双精度(double)型。 其定义形式为: float x,y; /指定x,y为单精度实数 double z; /指定z为双精度实数 在一般系统中,一个float型数据在内存中占4个字节(32位),一个double型数据占8个字节(64位)。单精度实数提供7位
5、有效数字,双精度实数提供1516位有效数字。,(4)字符变量CHAR,字符变量用来存放字符常量。注意只能存放1个字符。 字符变量的定义形式如下: char 变量名; 例如: char c1,c2; 它表示c1和c2为字符变量,各存放1个字符。可以用下面的语句对c1、c2赋值: c1=a;c2=b; 字符变量的长度是1字节(byte)即8位。这很适合于8051单片机,因为8051单片机每次可以处理8位数据。,变量的类型是位,位变量的值可以是1(true)或0(false)。 与8051硬件特性操作有关的位变量必须定位在8051单片机片内存储区(RAM)的可位寻址空间中。,3有符号/无符号问题说明
6、,(1)尽量使用无符号变量 (2)在编程时,为了书写方便,经常使用简化的缩写形式来定义变量的数据类型: #define uchar unsigned char #define uint unsigned int,3.1.3 数据存储类型,数据时存放在51单片机的存储器中的,因此要规定数据的存储类型。P53 表3-4 常用:data、xdata、code 另外:bdata,(1)DATA区,data区的寻址是最快的,所以应该把经常使用的变量放在data区,但是data区的空间是有限的,data区除了包含程序变量外,还包含了堆栈和寄存器组。 data区声明中的存储类型标式符为data,通常指片内R
7、AM的低128字节的内部数据存储的变量,可直接寻址。 声明举例如下: unsigned char data system_status=0; unsigned int data unit_id2; char data inp_string16;,bdata实际是data中的位寻址区,在这个区中声明变量就可以进行位寻址。位变量的声明对状态寄存器来说是十分有用的,因为它可能仅仅需要某一位,而不是整个字节。 bdata区声明中的存储类型标识符为bdata,指内部可位寻址的16字节存储区(20H到2FH),数据类型是可位寻址变量的数据类型。,(2) BDATA区,以下是在BDATA区中声明的位变量和使
8、用位变量的例子:,unsigned char bdata status_byte; unsigned int bdata status_word; unsigned long bdata status_dword; sbit stat_flag=status_byte4; if(status_word15) stat_flag=1;,(3)IDATA区,idata区也可以存放使用比较频繁的变量,使用寄存器作为指针进行寻址。idata区声明中的存储类型标识符为idata,指内部的256字节的存储区,但是只能间接寻址,速度比直接寻址慢。 声明举例如下: unsigned char idata sy
9、stem_status=0; unsigned int idata unit_id2; char idata inp_string16; float idata out_value;,pdata区和xdata区属于外部数据存储区,外部数据区是可读可写的存储区,最多可以有64KB。 在这两个区,变量的声明与在其他区的语法是一样的,但pdata区只有256字节而xdata区可达65 536字节。,声明举例如下:,unsigned char xdata system_status=0; unsigned int pdata unit_id2 ; char xdata inp_string16 ; f
10、loat pdata out_value; 外部地址段中除了包含存储器地址外,还包含I/O器件的地址。对外部器件寻址可以通过指针或C51提供的宏,使用宏对外部器件I/O口进行寻址更具可读性。,(5)程序存储区CODE,程序存储区的数据是不可改变的,跳转向量和状态表对code段访问和对xdata区访问的时间是一样的。编译的时候要对程序存储区中的对象进行初始化,否则就会产生错误。程序存储区code声明的标识符为code,在C51语言编译器中可以用code存储区类型标识符来访问程序存储区。下面是程序存储区声明的例子: unsigned char code a = 0 x00,0 x01,0 x02,
11、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;,变量存储类型定义举例:,char data var1; bit bdata flags; float idata x,y,z; unsigned int pdata dimension; unsigned char xdata vector1044;,3.1.4 局部变量与全局变量,从变量的作用范围来区分,变量可以被分为全局变量和局部变量; 某些变量在程序运行过程中是始终存在的-全局变量。 某些变量只是在进入某个函数时才开始存在-局部变量
12、。,1局部变量,局部变量是在某个函数中存在的变量,也可以称为内部变量,它只在该函数内部有效。 局部变量可以分为动态局部变量和静态局部变量,使用关键词auto定义动态局部变量(auto可以省略),使用关键词static定义静态局部变量,例如: auto int a; static unsigned char j;,动态局部变量在程序执行完毕后其存储空间被释放,而静态局部变量在程序执行完成后其存储空间并不释放,而且其值保持不变。 如果该函数再次被调用,则该函数初始化后其初始值为上次的数值。 动态局部变量和静态局部变量的区别如下:,动态局部变量在函数被调用时分配存储空间和初始化,每次函数调用时都需要
13、初始化;静态局部变量在编译程序时分配存储空间和初始化,仅初始化一次。 动态局部变量存放在动态存储区,在每次退出所属函数时释放;静态局部变量存放在静态存储区,每次调用后函数不释放,保持函数执行完毕之后的数值到下一次调用。 如果在建立时动态局部变量不初始为一个不确定的数,静态局部变量不初始化,则它们的值为0或者是空字符。,2全局变量,全局变量是在整个源文件中都存在的变量,又称为外部变量。全局变量的有效区间是从定义点开始到源文件结束,其中的所有函数都可以直接访问该变量,如果定义点之前的函数需要访问该变量,则需要使用extern关键词对该变量进行声明,如果全局变量声明文件之外的源文件需要访问该变量,也
14、需要使用extern关键词进行声明。,全局变量有以下特点:,全局变量是整个文件都可以访问的变量,可以用于在函数之间共享大量的数据,存在周期长,在程序编译时就存在,如果两个函数需要在不互相调用时共享数据,则可以使用全局变量进行参数传递; C51语言程序的函数只支持一个函数返回值,如果一个函数需要返回多个值,除了使用指针外,还要使用全局变量; 使用全局变量进行参数传递可以减少从实际参数向形式参数传递时所必需的堆栈操作; 在一个文件中,如果某个函数的局部变量和全局变量同名,则在这个局部变量的作用范围内局部变量不起作用,全局变量起作用; 全局变量一直存在,占用了大量的内存单元,并且加大了程序的耦合性,
15、不利于程序的移植或复用。,静态局部变量的作用范围仅仅是在定义的函数内,不能被其他的函数访问,全局变量的作用范围是整个程序,静态全局变量的作用范围是该变量定义的文件; 静态局部变量是在函数内部定义,全局变量是在所有函数外定义; 静态局部变量仅仅在第1次调用时被初始化,再次调用时使用上次调用结束时的数值,全局变量在程序运行时建立,值为最近一条访问该全局变量的语句执行的结果。 另外,main函数虽然是.c文件的主文件,但也是一个函数,在其内部定义的变量也属于局部变量。全局变量一般在.c文件的开始部分定义或在.h文件中定义,由.c文件引用。C51语言程序多使用全局变量传递参数,因为这样可以降低程序处理
16、的难度,加快程序执行的速度,提高程序的时效性。,3.2 C51对单片机资源的控制,3.2.1 特殊功能寄存器的C51语言定义 3.2.2 绝对地址的访问 3.2.3 位变量的C51语言定义,3.2.1 特殊功能寄存器的C51定义,21个特殊功能寄存器。两种方式: 1使用关键字sfr定义 sfr 特功器名字=特功器地址; sfr SCON=0 x98; /*串口控制寄存器地址98H*/ sfr TMOD=0X89; /*定时器/计数器方式控制寄存器地址9H*/ 2通过头文件访问SFR #include /使用的单片机为Intel公司的MCS-51 void main(void) TL0=0 xb
17、0; TH0=0 x3c; TR0=1; /启动定时器0 .,3SFR中位定义3种方式,(1)第1种方法 sbit 位名=特殊功能寄存器名位置; (2)第2种方法 sbit 位名=字节地址位置; (3)第3种方法 sbit 位名=位地址;,例: unsigned char bdata flag; sbit flag0=flag0; sfr P1=0 x90; sbit P1_0=P10; sbit P1_1=P11; sbit P1_6=P16; sbit P1_7=P17;,P60 例3-3 sbit型变量的定义 P60 例3-4 片内I/O口及其位的定义,3.2.2 绝对地址的访问,包括:
18、片内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 #define PA XBYTE0 xffec /将PA定义为外部I/O口,地址为0 xffec #define NRAM
19、DBYTE0 x40 /*将NRAM定义为片内RAM,地址为40H,长度为8位*/ void main( ) PA=0 x3A;NRAM=0 x01; ,#include #define PORTA XBYTE0 xFFC0 /*将PORT定义为外部I/O口,地址为0 xFFC0,长度为8位*/ #define NRAM DBYTE0 x40 /*将NRAM定义为片内RAM,地址为40H,长度为8位*/,例3-6(P62) data unsigned char x1 _at_ 0 x40; /*在data区定义字节变量x1,它的地址为40H*/ xdata unsigned int x2 _a
20、t_ 0 x2000; /*在xdata区定义字变量x2,它的地址为2000H*/ void main(void) x1=0 xff;x2=0 x1234H; . while(1); ,可以使用关键字_at_对指定的存储器空间的绝对地址进行访问。 一般格式如下: 【存储类型】 数据类型符 变量名 _at_ 地址常数;,3.2.3 位变量的C51语言定义,1位变量的C51语言定义 采用关键字bit进行定义。例如: bit direction_bit; /* 将direction_bit定义为位变量 */ bit lock_pointer; /* 将lock_pointer定义为位变量 */ bi
21、t display_invers; /* 将display_invers定义为位变量 */,2可位寻址对象,可位寻址对象指可以字节或位寻址的对象。该对象应位于8051片内可位寻址RAM区中,C51语言编译器允许数据类型为idata的对象放入8051片内可位寻址RAM区。 位变量的存储类型只能是bdata。 在程序设计时,对于可位寻址的对象,即可以字节寻址也可以位寻址的变量,但其存储类型只能是bdata。 使用时应先说明字节变量的数据类型和存储类型,然后可使用bit定义可独立寻址访问的对象位。例如:,bdata int ibase; /* ibase定义为bdata整型变量 */ bdata c
22、har bary4; /* bary定义为bdata字符型数组 */ sbit mybit0=ibase0; /* mybit0定义为ibase的第0位*/ sbit mybit15=ibase15; /* mybit15定义位ibase的第15位*/ sbit Ary07=bary07; /* Ary07定义为bary0的第7位*/ sbit Ary37=bary37; /*Ary37定义为bary3的第7位*/ Ary37=0; /* bary3的第7位赋值为0 */ bary3=a; /* 字节寻址:bary3赋值为a */ sbit定义要求基址对象的存储类型为bdata,只有这样其特殊
23、位定义(sbit)是合法的。 位置(操作符)后的最大值依赖于指定的基类型,对于char/uchar而言是07,对于int/uint而言是015,对于long/ulong而言是031。,3.3 C51的基本运算与流程控制,3.3.1 基本运算 3.3.2 选择(分支)控制语句 3.3.3 循环结构流程控制语句 3.3.4 break语句、continue语句、goto语句,3.3.1 基本运算(运算符),运算符是表示特定的算术或逻辑运算的符号,也称操作符。 把需要进行运算的各个量通过运算符连接起来,便构成表达式。 算术运算符、关系运算符、 逻辑运算符、位运算符、 赋值运算符、特殊运算符,算术运算
24、的操作符: + (加法运算符)、- (减法运算符) * (乘法运算符)、/ (除法运算符) (模运算或取余运算符) +为自增运算符 - -为自减运算符。,注意:/:结果的整数部分;%:结果的余数部分;-:除进行减法外,还可以进行取负操作。+:自增。表示操作数加1。X+ 等同于X=X+1。+X 表示先加1,再取值;X+表示先取值,再加1。 例3-8:自增和自减运算符的程序 #include void main( ) int x, y, z1, z2; x=10; y=21; z1=(x+)+(x+); printf(“x=%d, z1=%dn”, x, z1); z2=(+y)+(+y); pr
25、intf(“y=%d, z2=%dn”, y, z2); ,二、关系运算成立或不成立,主要用于比较操作数的大小关系。 包括: (大于)、= (大于等于)、= = (等于)、!= (不等于) 看关系是否成立。结果:0或1,例3-9 关系运算符运算的程序示例,#include void main( ) int a, b, c, d; a=-2.30; b=71=32; c=7!=0; d=-12=0; printf(“a=%d, b=%d, c=%d,d=%dn”, a, b, c, d); ,三、逻辑运算结果是真或假,进行逻辑运算的操作符。包括: a=!0 ; b=15 ,四、位运算,将两个操作
26、数按二进制数展开,然后对应位进行逻辑运算。包括: int n=2; b=an; a=c|b; ,例3-12 位运算程序示例,#include void main( ) int a, 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=(a4),算术运算
27、符、逻辑运算符、关系运算符、赋值运算符的优先级,3.3.2 选择(分支)控制语句,通过选择结构,可以使计算机具有决策能力,从而使计算机能够按照我们的意志在某个特定条件下完成相应的操作,能够“随机应变”。包括:if语句、switch语句,一、IF语句,if语句用来判定所给定的条件是否满足,根据判定结果决定执行给出的两种操作之一。 if语句的基本结构如下: if(表达式) 语句; 括号中的表达式成立时,程序执行大括号内的语句,否则程序跳过大括号中的语句部分而直接执行下面其他语句。 C51语言提供3种形式的if语句:,形式一: IF(表达式)语句;,if(xy) max=x; min=y; ,形式二
28、: IF(表达式)语句1; ELSE 语句2;,if(xy) max=x; else min=y;,形式三:,if(表达式1)语句1; else if(表达式2)语句2; else if(表达式3)语句3; else if(表达式m)语句m; else 语句n; if(x1000) y=1; else if(x500) y=2; else if(x300) y=3; else if(x100) y=4; else y=5;,例3-13 分支编程示例,#include main ( ) int x,y; scanf(%d, ,例3-14:,#include void main( ) int a,
29、b; a=200; b=321; if(a=b) a+;b+; printf(a=%d,b=%dn,a,b); ,例3-15:,#include void main( ) int a,b; a=12;b=21; if(a=b) a+;b+; a-;b-; printf(a=%d,b=%dn,a,b); ,例3-16:,#include void main( ) int score; char grade; score=45; if(score=90) grade=A; else if(score=80) grade=B; else if(score=70) grade=C; else if(s
30、core=60) grade=D; else grade=E; printf(score=%d,grade=%cn,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 循环结构流程控制语句,四种形式: if goto while do-while for,一、基于IF和GOTO构成的循环,1、采用if和goto可以构成“当
31、型”循环 loop: if(表达式) 语句; goto loop; 2、采用if和goto也可以构成“直到型”循环程序 loop: 语句; if(表达式) goto loop; 3、goto语句为无条件转向语句 goto 语句标号;,二、WHILE,while(表达式) 语句; ,例:,#include void main( ) int i, s; i=100; s=0; while(i0) s=s+i; i=i-1; printf(“1+2+100=%dn”,s); 注意: 先判断,后执行; 如果循环体内只有一个语句,可以不用 While循环体 后无分号;,三、DO-WHILE,do 语句;
32、 while (表达式);,例:,#include void main( ) int i, s; i=100;s=0; do s=s+i; i=i-1; while(i0); printf(“1+2+100=%dn”,s); 注意: 先执行, 后判断; 如果循环体内只有一个语句,可以不用 循环体 后无分号; while(表达式)后的分号不能省;,四、FOR,for(表达式1;表达式2;表达式3) 语句; for(y=0;y=99;y=y+3) delay(33); px=px; ,例:,#include void main( ) int i, s; s=0; for(i=0;i=100;i+)
33、 s=s+i; printf(“1+2+100=%dn”,s); 注意: 3个表达式都是可选项,可以任意省略,但“;”不能省。 省1是不对循环变量赋初值; 省2是不判断循环条件的真假; 省3是不对循环变量操作。 for( ; ;)表示无限循环。,无限循环的实现:,(1)for(; ;) 代码段; (2)while(1) 代码段; (3)do 代码段; while(1);,3.3.4 BREAK语句、CONTINUE语句、GOTO语句,在循环语句执行过程中, 如果需要在满足循环判定条件的情况下跳出代码段,可以使用break或continue语句; 如果要从任意地方跳转到代码的某个地方,可以使用g
34、oto语句。,1、BREAK,break语句用于从循环代码中退出,然后执行循环语句之后的语句,不再进入循环 。形式: break; 注意:一个break只能跳出一层循环,例:,#include void main( ) int i, s; i=0; s=0; while(1) s=s+iI; i+; if(i100) break; printf(“1+2+100=%dn”,s); ,2、CONTINUE,continue语句用于退出当前循环,不再执行本轮循环,程序代码从下一轮循环开始执行,直到判断条件不满足为止。 与break的区别是该语句不是退出整个循环。形式: continue;,例: #
35、include void main( ) char ch =a, B,c,D,e,F; int i=-1; while(i=a ,3、GOTO,goto是一个无条件转移语句。当执行goto语句时,将程序指针跳转到goto给出的下一条代码,基本格式如下: goto 标号;,例: void main(void) unsigned char counter; int sum ; sum=0; sumadd: sum=sum+counter; counter+; if(counter101) goto sumadd; ,3.4 C51的数组与指针,C51语言的构造数据类型主要有数组、指针和结构等。在单
36、片机系统中,数组的应用比较广泛,指针则次之,结构用的相对较少。这里我们只讨论数组和指针。,3.4.1 数组,数组是同类型变量的一个有序集合。 数组用一个名字来标识,称为数组名。 数组中的每个变量称为数组元素。 数组有一维、二维、三维和多维数组之分。C51语言中常用的一维、二维数组和字符数组。 数组中各元素的顺序用下标表示,下标为N的元素可以表示为数组名N。改变 中的下标就可以访问数组中所有的元素。,1一维数组,类型说明符 数组名元素个数; int demo110; 初始化: int a5=1,2,3,4,5; int b6=1,2,6;,例3-23:,2二维数组或多维数组,类型说明符 数组名行
37、数列数; float demo234; /demo2 数组有3 行4 列共12 个实型元素 int a34= 1,2,3,4,5,6,7,8,9,10,11,12; /全部初始化,3字符数组,若一个数组的元素是字符型的,则该数组就是一个字符数组。例如: char a12=Chong Qing;/字符数组 char add36= weight,height,width;/字符串数组,4查表,#define uchar unsigned char uchar code tempt=32,34,36,37,39,41; /*数组,设置在EPROM中,长度为实际输入的数值数 */ uchar ftoc
38、(uchar degc) return temptdegc; void main( ) uchar x; x=ftoc(5);/* 得到与5相应的华氏温度值 */ 共阴极LED的显示字符段码表 char code SEG11=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;,3.5 C51函数,函数是指能够执行特定功能和任务的程序代码段。 一个完整的C51程序是由一个主函数和若干个其他函数组成。 主函数是main( )函数。有且只有一个main( )函数。,使用函数时注意:,函数数目不限制; main( )函数是主函数,可
39、以调用其他函数,而不允许被其他函数调用。 除主函数外,其他函数之间允许互相调用。,一、函数分类,可以从不同的角度分类: (1)有无返回值角度 (2)数据传送角度 (3)函数定义角度,(1)有无返回值角度,无返回值函数、有返回值函数 无返回值函数:执行完成后不向主调函数返回函数值。类型说明符为:void 有返回值函数:执行完成后向主调函数返回一个执行的结果返回值。,(2)数据传送角度,有参函数和无参函数。 无参函数:主调函数和被调函数之间不进行参数的传递。 有参函数:主调函数和被调函数之间存在参数的传递。-形式参数和实际参数,(3)函数定义角度,主函数、自定义函数、库函数 自定义函数:是用户根据自己的需要而编写的函数。从函数定义的形式上可以将其划分无参函数、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度钢铁材料采购运输协议
- 2025版特色餐饮总经理聘用合同
- 二零二五年度泵站设备租赁与维护服务合同范本
- 二零二五年度新媒体内容编辑与运营合作协议
- 2025版新能源汽车销售居间代理协议
- 2025版茶叶茶点专卖店经营管理与服务合同
- 二零二五年度14年国际贸易合同范本-国际贸易新能源项目合作协议
- 二零二五年度精密仪器采购及供应商协同研发合同
- 2025届北京市丰台区北京第十二中学物理高二第二学期期末联考模拟试题含解析
- 二零二五年度高端商务楼全面清洁与维护服务合同模板
- 学堂在线 管理沟通的艺术 期末考试答案
- 劳务外包服务投标方案(技术标)
- 2024仁爱版初中英语单词表(七-九年级)中考复习必背
- 商混企业整合方案
- 连续波多普勒无线电引信论文
- 人力资源六大模块
- 双狐实用入门
- (完整版)应急预案评审表
- 小学英语作业设计论文5篇
- 烟草专卖零售许可证申请登记表
- 三十六种戏剧模式
评论
0/150
提交评论