![Keil C 上机的基本方法_第1页](http://file4.renrendoc.com/view/ca7e517fd1ff81025983fef27355da49/ca7e517fd1ff81025983fef27355da491.gif)
![Keil C 上机的基本方法_第2页](http://file4.renrendoc.com/view/ca7e517fd1ff81025983fef27355da49/ca7e517fd1ff81025983fef27355da492.gif)
![Keil C 上机的基本方法_第3页](http://file4.renrendoc.com/view/ca7e517fd1ff81025983fef27355da49/ca7e517fd1ff81025983fef27355da493.gif)
![Keil C 上机的基本方法_第4页](http://file4.renrendoc.com/view/ca7e517fd1ff81025983fef27355da49/ca7e517fd1ff81025983fef27355da494.gif)
![Keil C 上机的基本方法_第5页](http://file4.renrendoc.com/view/ca7e517fd1ff81025983fef27355da49/ca7e517fd1ff81025983fef27355da495.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章从标准C转向KeilC2.1概述常用的单片机应用系统的软件编写语言有汇编、BASIC、C、C++等,对51单片机而言,使用最为广泛的还是汇编语言和C语言。有经验的程序员用汇编语言可编写出高效率的程序,但用汇编语言不便于表达人们日常解决问题的思路和方法,还有编程工作量大、容易出现Bug(程序中的错误)、编写的程序不容易移植等缺点,故汇编语言一般只用于小型程序的编写或整个软件中对执行效率要求较高的关键部分。用C语言编写程序比汇编更符合人们的思维习惯,开发者可以更专心考虑算法,对于51单片机而言,最著名的C语言开发工具是KellSoftware公司的yVision3集成开发环境,一般将其中的C语言称为C51。C51对ANSI(标准)C作了扩展,使C51和汇编浯言一样可直接访问8051的硬件资源。对绝大多数51单片机应用系统可只用C语言,不使用汇编就可完成软件开发任务;但即使是用C语言编写程序,也须理解51单片机的内部结构,特别是内存、中断、串行通信口等资源的使用方法,否则很难实现一个实际的应用系统。C51是专门为51系列单片机设计的,根据51单片机自身的特点进行了若干扩展,与ANSIC在语法和库函数方面存在稍许差别,但绝大部分是兼容的。卩Vision3集成开发环境(IDE)包括项目(Project)管理器、程序编辑器、Cx51编译器、Ax5l宏汇编器、BL51/Lx5l连接定位器、RTX51实时操作系统、Simulator软件模拟器以及Monitor51硬件目标调试器,所有这些功能均可在卩Vision3提供的单一而灵活的开发环境中极为简便地进行操作。卩Vision3提供了强大的项目管理功能,可以十分方便地进行结构化多模块程序设计。开发一个单片机系统的一般步骤如下:设计并制作好硬件电路板(目标板)。根据目标板各功能模块,用KeilC或其他开发工具编写目标板功能模块测试程序。拔下目标板上的CPU,将仿真器的仿真头插人目标电路板的CPU插座,并将仿真器与PC的通信电缆(一般用串口)连接好,然后给目标电路板和仿真器加电,这样仿真器内的CPU就可代替(模拟)目标电路板的CPU。在PC上运行仿真器配套的测试软件,编写或打开第②步得到的模块测试程序,运行并调试程序。程序调试的方法与TC、VC等环境下程序调试的方法相似,如目标板不能实现所需功能,应检查井更正目标板软、硬件设计中的错误,然开重复①〜④步,直至目标板各功能模块测试正确为止。目标板硬件功能通过测试后,编写单片机应用系统的软件,采用与③④步相似的方法,测试单片机系统软硬件的正确性,直至系统软硬件功能正确。将开发工具生成的可执行文件固化到芯片中。软硬件调试正确后,用KeilC或其他开发工具生成可执行文件。如程序在目标板CPU片内运行,则用编程器将生成的可执行文件写入CUP中;如程序在片外运行,则将可执行文件写入ROM芯片中。目标板断电,拔下仿真头,将写入程序后的CPU及ROM芯片插入目标扳后加电,验证目标板是否实现了所需功能;如不正确.则应重复①一⑦步,直至正确。许多厂商都能生产符合KeilC公司Mon51标准、能在KeilC集成开发环境中使用的Mon51仿真器,如广州周立功公司的TKS系列仿真器。当采用KellC配合Mon51仿真器作为开发工具时,KeilC既是软件编与工具,也是程序调试工具,可避免在各种开发工具间反复切换,方便软件开发。随着软件技术的发展,在实际的开发过程中,程序调试的绝大多数工作可不依赖硬仿真器,也不必非等到目标板完成制作后才开始软件测试。与目标板外围电路无关的部分,可利用KeilC的8051软仿真器来完成程序稠试;与目标板相关的部分,可利用Protues软件与KeilC联合仿真的方法进行软件调试。单片机应用要求较多的综合知识,与电子技术、自动控制技术、通信技术等知识紧密相关,建议有条件的读者实际上手完成书中介绍的PID温度控制器,以真正完成知识综合、理论到实践的学习过程。2.2C51程序的一般结构与标准C语言相同,C51程序由一个或多个函数构成,其中至少包含一个主函数main。程序执行时一定是从主函数开始,调用其它函数后又返回主函数;被调函数如果位于主调函数前面,可以直接调用,否则要先声明后调用。这里函数与汇编语言中的子程序类似,函数之间也可以互相调用。C51程序的一般结构如下:预处理命令 /*用于包含头文件等*/全局变量定义 /*全局变量可以被本程序的所有函数引用*/函数1声明函数n声明/*主函数*/Main(){局部变量定义;/*局部变量只能在所定义的函数内部引用*/执行语句;函数调用(形式参数表);}/*其它函数定义*/函数1(形式参数){局部变量定义;/*局部变量只能在所定义的函数内部引用*/执行语句;函数调用(形式参数表)}函数n(形式参数){局部变量定义;/*局部变量只能在所定义的函数内部引用*/执行语句;函数调用(形式参数表);}2.3KeilC上机的基本方法一、pVision3中编程的基本步骤采用KeilC开发8051单片机应用程序一般需要以下步骤:1) 在pVision3集成开发环境中创建一个新项目(Project),并为该项目选定合适的单片机型号。2) 利用pVision3的文件编辑器编写C语言(或汇编语言)源程序文件,并将文件添
加到项目中去。一个项目可以包含多个文件,除源程序文件外还可以有库文件或文本说明文件。通过pVision3的各种选项,配置Cx51编译器、Ax51宏汇编器、BL51/Lx51连接定位器以及Debug调试器的功能。利用pVision3的构造(Build)功能对项目中的程序文件进行编译链接,生成绝对目标代码和可选的HEX格式的可执行文件,如果出现编译链接错误则返回第2)步,修改源程序中的错误后重新构造整个项目。将没有错误的绝对目标代码装入pVision3调试器进行仿真调试,调试成功后用编程器将可执行文件写入到单片机应用系统的程序存储器或单片机内部的FlashROM中。二、pVision3上机实例下面,我们以实例来介绍在pVision3集成开发环境中,如何创建一个应用程序。/*【例2.1】从键盘输入两个数,在屏幕上输出较大者。其源程序写在max.c文件中。*/max.c源程序如下:#include"reg51.h"#include"stdio.h"voidserial_initial(void){SCON=0x50;TMOD=0x20;TH1=0xf3;TR1=1;TI=1;voidserial_initial(void){SCON=0x50;TMOD=0x20;TH1=0xf3;TR1=1;TI=1;/*串口工作方式1、允许接收*//*定时器/计数器1工作于方式2,8位自动重装载*//*f=12MHzSMOD=0波特率=2400的重装载值*//*启动定时器1*//*TI置位以便发送通用异步收发器的第一个字符*/}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}main(){inta,b,c;serial_initial();printf("PleaseInputa,b:\n");scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d\n",c);while(1); /*死循环,防止CPU取到非法指令*/}在上例的结尾,有一条死循环语句:while(1),为什么要加这条死循环语句?在程序执行时,CPU会根据当前指令的长度自动修改指令指针寄存器(PC)的值,以使PC指向下一条指令。如果应用程序只占用程序存储区的一部分,则程序存储器中除应用程序外的其它部分是无意义的内容。若上例的最后没有while(1)这条死循环语句,则程序执行完printf(“max=%d\n”,c)函数调用后,PC就会指向没有用户程序的存储区,从而取到非法指令而导致错误。为防止这种错误,C51应用程序的main函数常用如下结构:voidmain(){„//初始化部分while(1){„//其他代码}}在PC机上编写的C程序由于有Windows等操作系统的支持,不必采用这种结构。上机的具体步骤:(1)启动KeiluVision3双击桌面上的KeiluVision3图标或者单击屏幕左下方的“开始”,在弹出的对话框中选择“程序”;再在弹出的程序对话框中,单击KeiluVision3选项,则进入KeiluVision3集成开发环境。(2)建立项目文件选择ProjectINewProject菜单项,则弹出CreateNewProject界面,单击其中的“保存在”下拉按钮,选择“E盘”,再单击创建新文件夹按钮,给文件夹起名为“MyProject”然后双击MyProject文件夹进入。在“文件名”文字框输入程序项目名称,这里输入“Myexample”,保存后的文件名扩展名为uv2,以后可以双击此文件打开该项目。在uVision3中,一个项目是由包括项目文件(.uv2文件)、源程序等在内的很多文件组成,为例便于管理,通常为每个项目建一个文件夹,本例建立了项目文件夹MyProject。(3) 选择CPU器件项目文件夹保存完毕后将弹出SelectDeviceforTargit„Targit1'界面,用于为新建项目选择一种CPU器件,本例选Atmel公司的AT89C51,选定后“Vision3将按所选器件自动设置默认的工具选项,从而简化了项目的配置过程。窗口的Description列表框对所选的CPU的I/O线,内部RAM、FLASHROM容量等主要性能作了简要描述。(4) 加入KeilC提供的启动文件STARTUP.A51完成CPU器件选择后,点击OK,则弹出是否增加启动文件到本项目界面,此处可以选择“是”。STARTUP.A51是用汇编语言编写的源文件,一般用户无须修改;高级用户可修改其中的内容,以定制堆栈管理、动态存储分配等相关设置。创建一个新项目后,在项目管理窗口(ProjectWorkspace)中自动生成一个默认的目标(Targit1)和文件组(SouceGroup1)。在项目管理窗口的底部,有5个选项卡:“文件(File)选项卡、用于在项目中快速定位、添加、移除文件;“寄存器(Regs)”选项卡,用于程序仿真运行时显示寄存器的值;“书籍(Book)”选项卡,用于打开帮助文件;“函数(Functions)”选项卡,用于在项目中快速定位已定义的函数;“模板(Templates)”选项卡,对C语言不太熟悉的初学者可利用该选项卡提供的功能快速输入C语言的各种语句,减少源程序的语法错误。(5)编辑源程序文件选择FileNew菜单项,从打开的编辑界面中输入前面列出的max.c。注意:输入源程序可采取先保存文件(以文件名max.c保存),然后再输入的方法。同学自可体会其中的优点。(6)将源程序加入到项目中源程序文件可以是已有的,也可以是新建的。|JVision3具有十分完善的右键功能,选择项目管理窗口File选项卡,在其中的SourceGroup1上面右击,则弹出一个快捷菜单,选择快捷菜单中的AddFilestoGroup‘SourceGroup1'选项,弹出AddFilestoGroup‘SourceGroup1'源文件选择页面,选择刚才保存的源程序文件max.c,单击Add按钮,将其添加到新创建项目中去,然后单击Close按钮关闭此页面。设置项目配置选项右击项目管理窗口中Targit1节点,在弹出的快捷菜单中选择OptionsforTargit'Targit1'选项,则弹出OptionsforTargit‘Targit1'项目配置界面。这是一个十分重要的窗口,包括Device、Targit、Output、Listing、C51、A51、BL51Locate、BL51Misc、Debug和Utilities选项卡,每个选项卡均可根据项目需要作必要的调整。本例全部使用默认值,不做任何修改。生成可执行文件完成项目配置iang的基本设定之后,就可以对当前新建项目进行整体创建(BuildTargit)。单击项目管理窗口上方工具栏中的Build图标按钮或选择ProjectIBuildTargit菜单项单击。pVision3将按照所设定的项目选项,自动完成当前项目中所有源程序模块文件的编译链接,并在|JVision3下面的输出窗口(OutputWindow)中显示编译链接提示信息。如果有错误,则双击输出窗口内的提示信息,光标将自动跳到源程序文件的错误位置,以便修改;如果没有编译错误,则生成绝对目标代码文件(可执行文件)。仿真运行程序编译链接完成后,选择Debug|Start/StopDebugsession菜单项或者单击工具栏上的图标按钮,弹出新的窗口。在此状态下,项目管理窗口自动转到Regs选项卡,显示调试过程中单片机内部的工作寄存器R0〜R7、累加器A、堆栈指针SP、数据指针DPTR、程序计数器PC以及程序状态字PSW灯特殊功能寄存器的值。在仿真调试状态下,单击Run图标按钮或者选择Debug|Run菜单项,启动用户程序全速运行,再选择View|SerialWindow#1菜单项或者单击工具栏上SerialWindow#1图标按钮,打开调试状态下pVision3的串行窗口1。用户程序中采用scanf()和printf()所进行的输入输出操作,都是通过穿新窗口1实现的。单击串行窗口1,将输入法切换到英文输入状态,输入数字“5,10”后回车,立即得到输出结果“max=10”。至此,我们完成了建立一个pVision3项目的全过程。通过以上的具体步骤,希望读者能对pVision3软件在宏观上有一个感性认识,并对所讲的操作方法举一反三。在熟悉本例所述上机过程后,读者应仔细阅读下面的上机注意事项,以便更好地使用pVision3开发工具。三、 pVision3上机注意事项为方便程序调试,KeilC也提供了scanf和printf这两个函数,这两个库函数使用8051的串行通信口收发数据。Printf函数通过8051串口将数据送到“串行窗口”(一个Windows标准窗口)并显示出来,scanf函数从8051串口读入自“串行窗口”中输入的数据。为使这两个函数正确执行,应如上例中的serial_initial函数一样,设置好串行口的接收允许。每进行一次Build,pVision3都会根据项目选项重新编译生成可执行文件。BuildTarget命令只编译修改过的或新加进来的文件,然后生成可执行文件。Rebuildalltargetfiles命令重新编译项目中的所有文件,而不论是否修改过,然后再生成可执行文件。Translatecurrentfile命令只编译当前源程序编辑窗口中的源程序文件,但并不链接生成可执行文件。KeilC生成的默认可执行文件无扩展名,以项目名作为可执行文件名称,其名称可以修改。多数编译器都支持Intel的Hex目标文件格式。如在OptionsforTarget对话窗口的Output选项卡中选择CreateHexFile选项,则在Build项目时同时生成默认的可执行文件和Hex格式的可执行文件。在项目管理窗口中右击某个文件,从弹出的快捷菜单中选择RemoveFile,可从项目中移除该文件;此时项目将不再引用该文件,但并不从硬盘上删除该文件。原版的KeilC编译器会忽略编码为OxFD的字符,当编写中文显示程序时会出现问题,应安装针对这一问题的专用补丁。四、 KeilC软仿真器及程序调试方法1.调试相关工具介绍名称图标按钮功能Start/StopDebugSession开始/停止调试时间ProjectWorkspace显示/隐藏项目管理窗口OutputWindow显示/隐藏输出窗口Inset/RemoveBreakpoint插入/取消断点KillAllBreakpoint清除所有断点Enable/Disnablebreakpoint使能/禁止某一断点DisableAllBreakpoint禁止所有断点,但不清除断点ResetCPU重新从头开始运行程序Run运行程序,执行到断点处程序暂停执行Halt暂停程序执行StepInto进入被调函数StepOver执行一条语句StepOut从被调函数返回RuntoCursorLine执行到源程序编辑窗口当前光标处暂停WatchandCallStackWindow显示/关闭监视和调用堆栈窗口2.断点设置及应用实例下面结合max.c来说明断点设置及跟踪程序执行过程的基本方法。如果想在main()函数中观察变量c的值,则操作步骤如下:在源程序编辑窗口将光标移到“printf(“max=%d\n”,c);”代码行。单击工具栏上的“插入/取消断点”图标,在该代码行添加一个断点。单击Start/StopDebugSession按钮,进入调试状态,程序执行到main()函数时暂停。单击run按钮继续执行程序,此时打开SerialWindow#1,在其中输入两个值“5,6”并回车,程序执行到第2)步所设的断点行暂停。单击WatchandCallStackWindow按钮,在界面右下角出现监视和调用堆栈窗口。在此窗口可以两种方法观察变量a,b,c的值:方法1:在Locals选项卡中可直接查看各局部变量的值。方法2:在Watch#1或Watch#2选项卡中,单击有提示说明的一行后按F2键,输入变量名a并回车,则可显示变量a的值。顺便说明,CallStack选项卡用于显示函数间的调用关系。此外,还有一种观察变量值的方法:在源程序编辑窗口中用鼠标指向变量c并稍停片刻,在光标下方的浅黄色小窗口中将显示变量c所在的存储空间、十六进制地址、十六进制值。五、 C51中的变量和函数数据类型存储类型字节顺序
存储模式选择绝对地址访问和I/O端口读/写指针C51函数/*【Li2.2】检测BDATA存储类型变量bit_status的第三位是否为1,如果是1,则将temp变量加1*/#include"stdio.h"#include"Reg51.h"/*定义一个可位寻址变量,其第3位为零*/unsignedcharbdatabit_status=0x43; /*0x43写成二进制位01000011*//*针对bit_status变量的第3位声明一个位变量*/sbitstatus_3=bit_statusA3;voidmain(void){unsignedchartemp=0;SCON=0x12; /*允许向串口发送数据;printf函数需向串口发送数据*/if((bit)(status_3)){
temp++;/*=if(status_3)*/if((bit)(status_3)){
temp++;/*由于bit_status的第3位是0,temp不会加1*/if(bit_statusA3){ /*错误代码*/temp++;}if(bit_status&0x04){/*如果第3位置位temp再加1*/temp++;}printf("temp=%bd\n",temp);while(1);}/*上例运行后,在KeilC的串行窗口显示的temp的值是1,而不是0!原因在于第12行错误代码所致*//*【例2.3】在代码段中定义及访问只读数据的实例*/#include"reg51.h"#include"stdio.h"/*下面的chs字符数组的最后一个元素的值初始化为0,C语言*/unsignedcharcodechs[]={'H','e','l','l','o','!',0x00};voidmain(){unsignedchardatai;SCON=0x12;printf("%s\n",chs);/*用for循环显示Hello!*/for(i=0;chs[i]!=0;i++)printf("%c",chs[i]);printf("\n");/*换行*/while(1);}/*【例2.3_1】在代码段中定义及访问只读数据的实例(modified)*/#include"reg51.h"#include"stdio.h"unsignedcharcodechs[]="HelloWorld!";voidmain(){unsignedchardatai;SCON=0x12;printf("%s\n",chs);/*用for循环显示HelloWorld!*/for(i=0;chs[i]!=0;i++)printf("%c",chs[i]);printf("\n");while(1);}/*【例2.4】通用指针与特定指针执行效率的比较*/#include<absacc.h>char*generic_ptr;/*字符型通用指针*/chardata*xd_ptr;/*指向data空间的字符型指针*/chardatamystring[]="Testoutput";main(){generic_ptr=mystring;while(*generic_ptr){ /*此行设置断点,运行到此处时,机器周期数为586*/XBYTE[0x0000]=*generic_ptr;generic_ptr++;}xd_ptr=mystring; /*此行设置断点,运行到此处时,机器周期数为922*/while(*xd_ptr){ /*此行设置断点,运行到此处时,机器周期数为924*/XBYTE[0x0000]=*xd_ptr;xd_ptr++;}while(1); /*此行设置断点,运行到此处时,机器周期数为1073*/仿真运行上例时,单击Start/StopDebugSession按钮运行程序,在源程序编辑窗口将光标定位到第1个断点行,再单击Stepinto按钮,使程序运行到光标位置后暂停执行。此时在ProjectWorkspace中Regs选项卡上的statues和sec两项,分别代表程序已运行的机器周期数和秒数,分别为586个机器周期和0.00058600s。按本例源程序注释设置好断点,重新运行程序,运行到各断点行程序暂停执行时,观察ProjectWorkspace中Regs选项卡上的states项,可得到执行到各断点语句时的机器周期数(源程序注释中已记录),用此方法可知执行完使用通用指针的第一个循环需要922-586=336个机器周期,使用特定指向指针的后一个循环之需要1073-924=149个机器周期,可见特定指向指针的效率远高于通用指针。在实时性要求较高时,对代码的执行效率有要求,可用本例介绍的方法获取某段代码的执行时间,以判断其是否满足系统性能要求。C51函数语法与标准C函数基本相同,但针对51单片机的特点作了扩展,定义C51函数的语法格式如下:<return_type>funcname(<args>)<small|compact|large><reentrant><interruptx><usingy>/*【例2.5】递归调用不可重入函数错误计算5的阶乘(factorial)*/#include"stdio.h"#include"Reg51.h"/*不可重入函数fact递归调用来计算N的阶乘*/unsignedintfact(unsignedcharN){if(N==0)return1;if(N>1)returnN*fact(N-1);}voidmain(){SCON=0x12;printf("5!=%u\n",fact(5));while(1);}/*函数的重入是指函数上次运行未结束,又被再次调用的情形*//*若定义某函数时不特别指明,C51中就把该函数作为不可重入函数看待*/上面的程序执行后,计算出的5的阶乘为1,而不是120,就是因为递归调用了不可重入函数fact()而导致了错误的结果。C51允许使用reentrant属性将函数定义成可重入函数,而不用担心变量被覆盖,但要修改Startup.A51相关内容。/*【例2.6】递归调用可重入函数正确计算5的阶乘*//*注意:编译前须修改Startup.A51启动文件*/#include"stdio.h"#include"Reg51.h"/*递归调用可重入函数fact计算N的阶乘*/unsignedintfact(unsignedcharN)reentrant{if(N==0)return1;if(N>1)returnN*fact(N-1);}voidmain(){SCON=0x12;printf("5!=%u\n",fact(5));
while(1);}项目用Small存储模式,下面是Startup.A51需修改部分的原始内容及修改后的内容。原始内容:IBPSTACKEQU0;setto1ifsmallreentrantisused.IBPSTACKTOPEQU 0xFF+1;default0FFH+1参考以上两行后面的注释,改为:IBPSTACKEQU1IBPSTACKTOPEQU 0x7F+1注意:标准8051内部RAM7FH+1(80H)以上部分为特殊功能寄存器,但由于模拟栈是向下生长的,因此不会进入特殊功能寄存器区。六、KeilC中的51单片机中断编程/*【例2.7】8051晶振频率fosc为12MHz,用定时器0的溢出中断实现每隔50ms在“SerialWindow#1”上显示一行字符串“HelloWorld!"。*/#include<reg51.h>#include<stdio.h>#defineRELOADVALH0x3c#defineRELOADVALL0xb0voidmain(){IE=0;TR0=0;SCON=0x12;TMOD=0x01;TH0=RELOADVALH;TL0=RELOADVALL;IE=0x82;TR0=1;while(1);}voidtimer0_int(void)interrupt1{ET0=0;TR0=0;TH0=RELOADVALH;TL0=RELOADVALL;TR0=1;printf("HelloWorld!\n");ET0=1;/*定时器初值高/*定时器初值高8位*//*定时器初值低8位*//*关闭所有中断*//*停止定时器0*//*允许向串口发送数据*//*定时器0工作在方式1,16位定时器*//*装定时器初值,50ms后溢出*//*只开定时器0的中断,其余中断禁止*//*启动定时器0*//*关定时器0中断*//*停止定时器0*//*启动定时器0*/注:定时时间=(65535-初值)X机器周期,而机器周期=12/12000000=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全球及中国半导体用水溶性助焊剂行业头部企业市场占有率及排名调研报告
- 2025年全球及中国第一人称视角射击游戏行业头部企业市场占有率及排名调研报告
- 2025年全球及中国HDPE模制容器行业头部企业市场占有率及排名调研报告
- 2025年全球及中国茂金属线型低密度聚乙烯树脂行业头部企业市场占有率及排名调研报告
- 合同起草范本
- 汽车自驾租赁合同
- 房屋委托代管合同
- 2025赠与合同公证书
- 维修工聘用合同范本
- 收获成长迎接新起点主题班会
- 2024年江西省南昌市南昌县中考一模数学试题(含解析)
- 绘本的分镜设计-分镜的编排
- 查干淖尔一号井环评
- 体检中心分析报告
- 人教版初中英语七八九全部单词(打印版)
- 台球运动中的理论力学
- 最高人民法院婚姻法司法解释(二)的理解与适用
- 关于医保应急预案
- 新人教版五年级上册数学应用题大全doc
- 2022年版义务教育劳动课程标准学习培训解读课件笔记
- 2022年中国止血材料行业概览:发展现状对比分析研究报告(摘要版) -头豹
评论
0/150
提交评论