




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
跑马灯电路设计单片机嵌入式系统中的跑马灯就像C语言的“Hello World!”程序一样,虽然简单,却是一个非常经典的例子。对初学者来说,通过跑马灯系统设计的学习与编程,能很快熟悉单片机的操作方式,了解单片机系统的开发流程,并通过第一个实例增强自己学习单片机系统设计的信心。下面详细讲解跑马灯电路的设计。6.1.1 跑马灯跑马灯,顾名思义,就是“会像马儿一样跑动”的小灯,故取名“跑马灯”。跑马灯在单片机系统中一般是用来指示和显示单片机的运行状态,一般情况下,单片机的跑马灯由8个LED发光二极管组成,可以方便地显示一个8位数据(0255)。在单片机运行时,可以在不同状态下让跑马灯显示不同的组合,作为单片机系统正常的指示。当单片机系统出现故障时,可以利用跑马灯显示当前的故障码,对故障做出诊断。此外,跑马灯在单片机的调试过程中也非常有用,可以在不同时候将需要的寄存器或关键变量的值显示在跑马灯上,提供需要的调试信息。如图6-1所示为开发板上的跑马灯,由8个贴片LED发光二极管组成,下面详细介绍LED发光二极管的知识与电路设计方法。6.1.2 发光二极管基础知识发光二极管的英文名为Light Emitting Diode,简称LED,发明于20世纪60年代,几十年来,发光二极管在各种电路及嵌入式系统中得到了广泛的应用,跑马灯使用的“小灯”就是8个并排的LED。LED发光二极管将电能转变成光能,可由-V族半导体材料制成。当工作在正向偏置状态时,LED发光二极管与普通的二极管极其相似,其同样具备单向导电特性,不同之处仅在于当加上正向偏置时,LED发光二极管将向外发光,此时能量通过PN结的载流子过程从电能转换为光能。LED发光二极管具有亮度高、耗电小、体积小、重量轻、寿命长、可靠性高、价格便宜等优点,已经被广泛地应用到不同的产品中,作为电源指示灯、系统状态灯、信号灯等用途。在通常工作状态下,LED发光二极管的使用寿命保守估计约为10万小时,部分甚至可以达到100万小时。如图6-2所示为不同种类、不同颜色、不同大小及不同封装形式的LED发光二极管。图6-2 各种LED发光二极管以LED发光二极管为基础部件进行组合可以得到多种不同的产品应用,如图6-3所示,最常见的有如下几种。(1)将7段LED发光二极管排列成数字形,即为LED数码管,在各种数字显示场合得到了成功的应用,例如电子时钟、计时器等。(2)大量LED发光二极管按照行列阵列集成到一起,通过微处理器进行控制与扫描,即为发光二极管点阵屏,可以显示数字、字母、汉字、动画等复杂的信息内容,现也已经被广泛地应用到各行各业的显示应用中,例如广告牌、宣传栏、信息指示牌等。(3)将LED发光二极管直接制作成相应的字母、汉字或特殊符号的形状,只要在发光二极管两端加上正向电压,只需要很小的电流消耗即可显示一些特殊的符号,在各种交通指示灯、工业产品、机场导航等场合得到了广泛的应用。这些复杂LED发光二极管应用的基本原理和跑马灯十分类似,只要学会了跑马灯的原理和设计方法,触类旁通,即可很快地学会LED数码管和LED显示屏的控制与应用设计。对不同颜色不同亮度LED发光二极管进行选型需要了解以下的相关知识。(1)LED发光二极管的光强度与电流强度成正比,一般的LED发光二极管在通过2mA电流时便开始发光。其发光颜色取决于光波长,而LED发光二极管的光波长主要与晶体材料本身和掺杂材料有关。(2)LED发光二极管最常见的颜色是红色、绿色、黄色和橙色,因为这几种颜色的晶体材料和掺杂物都比较简单,且价格便宜。(3)发蓝光与发白光的LED发光二极管由于材料价格较高,制作工艺复杂,一般价格与其他LED发光二极管相比价格较高,因此在各种应用中没有其他颜色的发光二极管使用的多。(4)在进行系统设计时,由于红光和绿光比较容易被肉眼识别,特别是在光线比较强的场合,黄色光和橙色光并不容易看清。因此综合考虑,建议在进行LED发光二极管选型时,如果没有特殊的要求,优先采用红色光或绿色光的LED发光二极管。图6-3 LED数码管与LED点阵屏6.1.3 发光二极管与单片机接口LED发光二极管在电路图中的表示符号如图6-4所示,与普通的二极管十分相似,只是多了两个向上的箭头表示发出光线。图6-4 发光二极管在电路图中的符号LED发光二极管与单片机的接口一般可以分为直接式、扫描式与多路复用式三种,如图6-5所示。 直接式:每个LED发光二极管对应单片机的一个唯一的输出引脚,即单片机的一个输出端口(P0、P1或P2)就能够控制8个LED发光二极管。当相应引脚输出为低时,电流从VCC流入单片机,LED发光二极管开始发光,发光亮度由匹配的串联电阻控制;当相应引脚输出为高时,没有电流通过LED发光二极管,LED发光二极管熄灭。 扫描式:LED发光二极管被组织成了行列形式的矩阵,其中各行各列分别对应单片机一个唯一的输出引脚,此时,当单片机对应行列的输出引脚分别为高和低时,电流从单片机的其中一个引脚流入到另一个引脚,LED发光二极管开始发光,此时,为了让LED发光二极管显示一个固定的状态,必须有相应的软件扫描维持输出的信号。 复用式:多路复用式与扫描式类似,也是将LED发光二极管组织成行列形式的矩阵,但是其各行各列是由单片机外置的多路解码锁存芯片进行控制,因此实现了多于单片机输出端口数目的LED发光二极管阵列,本质上就是扫描式的扩充。在具体的一个单片机嵌入式系统设计中,究竟采用哪种接口方式,主要是由最终产品的需求、单片机的性能指标、预期的生产成本等因素所决定。例如对于大型LED发光二极管显示点阵屏幕,则必须采用复用式的接口方式或其他的专用芯片,因为没有任何一种型号的单片机能够具有如此多的I/O输出端口供用户使用。而对于一般系统的跑马灯设计,由于跑马灯只有8位,结构简单,在单片机引脚资源并不紧张的情况下,一般都采用直接式进行连接。图6-5 LED发光二极管与单片机的接口方式6.1.4 发光二极管的限流在几年前的单片机设计电路中,LED发光二极管是不能由单片机的I/O输出引脚直接进行驱动的,而要使用诸如7405等集电极开路门进行驱动,原因就是单片机的引脚不能够承受LED导通时的电流输入。随着新技术的应用和单片机集成技术的不断发展,现在大部分的单片机端口都集成了集电极开路的输出电路,具备一定外部驱动能力。但是这时外接的LED发光二极管电路也必须使用电阻进行限流,否则会损坏单片机的输出引脚,一般单片机驱动引脚能够承受的电流输入在1015mA左右。此外,如果没有限流电阻,LED发光二极管在工作时也会迅速发热,为了防止LED发光二极管过热损害,也必须采用限流串联电阻对LED发光二极管的功耗进行限制,如表6-1所示为典型的LED发光二极管功率限制指标。表6-1 典型的LED发光二极管功率限制指标参 数单 位红色LED绿色LED黄色LED橙色LED最大功率限制mW55756075正向电流峰值mA16010080100最大恒定电流mA25252025LED发光二极管的发光功率可以由其两端的电压和通过LED的电流进行计算得到,公式如下:Pd = VdIdLED发光二极管的典型的电压与电流关系如图6-6所示,可以根据需要的LED发光亮度选择合适的电阻R进行限流,但为了保护单片机的驱动输出引脚,通过LED发光二极管的电流一般应限制在10mA左右,由图6-6所示曲线可知,也即是将LED发光二极管的正向电压限制在2V左右。图6-6 LED发光二极管典型电压电流关系曲线对于采用某些高亮度LED发光二极管照明场合,需要LED发光二极管通过较大的电流,此时不能直接采用单片机的输出引脚直接驱动LED发光二极管,而应该使用专用的驱动芯片,或者如图6-6中右图所示,采用一个NPN型的三极管进行驱动。可以利用图6-6中所示的曲线计算限流电阻R,计算的方法如下:R =(5V Vd)/Id例如,若限制电流Id为10mA,则由图6-6中所示曲线得到LED发光二极管的正向电压Vd约为2V,从而得到限流电阻值如下:R = (5V-2V)/10mA = 300 (欧)在实际设计中,为了有效保护单片机驱动输出引脚,预留一定的安全系数,一般对LED发光二极管驱动采用的限流的电阻都要比采用10mA计算出的大,常用的典型值为470欧。6.1.5 跑马灯电路设计前面几节详细讲解了利用LED发光二极管设计跑马灯电路的原理与方法,利用Protel 2004等电路设计软件可以方便地进行电路设计与PCB板设计。本章采用的跑马灯实例由8个LED发光二极管组成,由AT89S51的P0口进行驱动操作,具体电路设计如图6-7所示,P0口的8个输出引脚分别接到了8个LED发光二极管的阴极,LED发光二极管的另一端由阻值为470欧的限流电阻上拉至电源VCC。图6-7 跑马灯电路设计跑马灯系统的8个限流电阻可以采用普通电阻也可以采用排阻,使用排阻比较有利于节省PCB布板的空间。6.2 跑马灯软件设计 完成硬件设计之后即可开始跑马灯的软件设计,软件设计的目标是使跑马灯能够按照设想的方式显示出不同的发光组合,指示单片机系统不同的运行状态。下面详细讲述跑马灯的软件设计。6.2.1 第一个单片机程序对于初学者来说,第一个单片机程序往往都从跑马灯LED发光二极管的驱动开始,下面以这个最简单例子作为本书的第一个单片机程序,该程序基于ATMEL公司的AT89S51进行编写,采用P0口驱动8位发光二极管跑马灯。具体的代码如下所示,可以在本书附带光盘中的源代码目录下找到相应的C语言源文件。/* File: TheFirstExampleError.c* Description: The first error example* Created Date: 2007-09-04* Last Modified: 2007-09-04* Author: Jeffrey - S* Notes: None*/#include /* Function: Main()* Input Variables: None* Return Variables: None* Usage: Program Entry*/void main() while(1) P0 = 0x00; / P0口输出电平低 P0 = 0xff; / P0口输出电平高 这一段代码十分简单,但是对于初学者来说,这个程序有以下几点需要特别注意。(1)首先,为了使用编译器附带的51单片机各个引脚描述的宏定义来直接对单片机的各个模块进行操作,必须在C语言源文件的头部使用#include包含相关的定义头文件。(2)其次,对于每一个应用程序来说,都必须要具备一个程序入口,一般情况下,程序的入口就是主函数main(),因此在设计的程序中必须含有一个main()函数,一般这个函数返回值为void或int型。(3)最后,与在PC机上学习C语言编程不同的是,对于所有的嵌入式系统来说,其控制软件都必须是一个无限循环,换句话说,嵌入式软件的main()函数都不能够返回,如上面代码通过一个while(1)使得这段程序不停地进入循环,这一点尤其要注意,是初学者经常犯的一个错误。麻雀虽小,但五脏俱全,这一段代码虽然非常简单短小,却包含了单片机嵌入式程序最基本的框架,读者应仔细体会学习。注意:如果一个嵌入式软件的程序不是无限循环,当所有的程序代码执行完后,单片机将以不可预知的方式运行,俗称单片机“跑飞”,这在实际的工业控制等应用中是十分危险的现象,要极力避免单片机出现“跑飞”的现象。上述代码中通过向P0端口赋值,在AT89S51的P0口输出不同的电平,从而驱动LED发光二极管跑马灯闪动。当执行P0 = 0x00时,AT89S51的P0口输出全为低电平,电流从VCC经过LED发光二极管流入单片机P0口,跑马灯全亮;当执行P0 = 0xff时,AT89S51的P0口输出全为高电平,LED发光二极管中无电流流过,跑马灯全灭。由于while(1)的无限循环,LED发光二极管跑马灯应不停地亮灭闪动。在Keil C环境下对上述代码进行编译、下载,运行程序后,发现跑马灯一直发光,并没有出现跑马灯闪动的现象。这是因为人的眼睛有视觉停留效应,由于单片机运行速度较快(相对人眼的响应应该是极其地快),肉眼无法分辨出LED发光二极管跑马灯的闪动。因此,为了让人的肉眼能够看到跑马灯的闪动,就必须在两行命令之后增加一个延时函数delay(),具体代码如下所示。/* File: TheFirstExampleOK.c* Description: The first delay example* Created Date: 2007-09-04* Last Modified: 2007-09-04* Author: Jeffrey - S* Notes: None*/#include #define LED_FLASH_T 10000; / 定义延时长度/* Function: delay(unsigned int t)* Input Variables: t* Return Variables: None* Usage: Common Delay Routine, t as the delay time ticks*/void delay(unsigned int t) for(;t0;t-); / 延时循环/* Function: main()* Input Variables: None* Return Variables: None* Usage: Program Entry*/void main() while(1) P0 = 0x00; / P0口输出电平低 delay(LED_FLASH_T); P0 = 0xff; / P0口输出电平高 delay(LED_FLASH_T); 在上面的代码中,编写了一个delay()函数来进行延时,采用的是单片机中最简单的延时方 法循环延时。函数delay()具有一个unsigned int类型的输入变量t,这个输入变量决定了延时时间的长短,函数delay()的主体就是进行t次空循环。在LED发光二极管跑马灯发光与熄灭之间加入两个延时函数后,便能够看到跑马灯按照预想的方式进行闪动了。在程序中定义了一个宏LED_FLASH_T,这个宏的数值就决定了LED发光二极管跑马灯闪动的频率。该值越大,闪动的频率就越低;该值越小,闪动的频率就越高。读者可以自行修改LED_FLASH_T的值进行实验观察。使用循环延时的优点是函数简单明了、容易实现、使用方便。但是循环延时也具备一些不可回避的缺点,如延时的时间不能精确控制,单片机执行延时函数时,所有的资源都被用于进行无用的循环,造成了单片机资源的浪费等,在后面的章节中将要讲述比较精确的中断延时。6.2.2 跑马灯编程工作状态指示在单片机中,可以利用跑马灯来指示单片机的工作状态,一般情况下,需要指示的状态有正常工作状态和故障状态。为了指示单片机目前正常工作,通常使用动态的跑马灯对正常状态进行指示,以便能够通过观察直接从跑马灯的状态得知当前单片机正在正常运行,没有出现“跑飞”或“死循环”的现象,这在单片机调试过程中是十分有效的。通常使用一组不断动态交互的跑马灯样式来表示单片机正常运行,如图6-8所示,跑马灯状态变换位于程序主体中的一个位置,只要单片机中的程序在正常运行,跑马灯就不停地变化,指示目前程序还“活着”。图6-8 跑马灯的动态状态指示当传感器发生失效或检测到一些危险状态时候,单片机需要进入报警状态。除了使用其他的方式进行报警以外,首先通过跑马灯进行警示是十分有效的一个方法,可以方便地快速发现系统故障。通常使用不断全灭全亮闪烁的报警等来指示故障,如图6-9所示,故障状态指示程序一般放在主程序之外的一个分支上,当单片机系统发现系统错误时,程序进入分支,通过跑马灯发出错误警示。图6-9 跑马灯报警指示通过上面的分析可以得到如下代码,读者可以在本书附带光盘中找到。/* File: TheStatus.c* Description: MCU Status report with LEDs* Created Date: 2007-09-12* Last Modified: 2007-09-12* Author: Jeffrey - S* Notes: None*/#include #define LED_FLASH_T 10000;void LEDs_Move();void LEDs_Error();/* Function: delay(unsigned int t)* Input Variables: t* Return Variables: None* Usage: Common Delay Routine, t as the delay time ticks*/void delay(unsigned int t) for(;t0;t-); / 延时循环#ifndef true #define true 1#endif/* Function: main()* Input Variables: None* Return Variables: None* Usage: Program Entry*/void main() unsigned char System_Status; while(1) / 程序主任务区 / . / 程序主任务区 if(System_Status = true) / 当系统处于正常状态 LEDs_Move(); / 跑马灯指示系统正常 else / 当系统发生错误 LEDs_Error(); / 跑马灯指示错误 /* Function: LEDs_Move* Input Variables: None* Return Variables: None* Usage: System Normal Status Report*/void LEDs_Move() static unsigned char LEDs = 0x55; / 静态变量用于存储LEDs发光状态 P0 = LEDs; / LED间隔亮灭并移位 delay(LED_FLASH_T); / 延时 LEDs = LEDs; / 状态改变/* Function: LEDs_Error* Input Variables: None* Return Variables: None* Usage: System Error Status Report*/void LEDs_Error() static unsigned char LEDs = 0x00; / 静态变量用于存储LEDs发光状态 P0 = LEDs; / LED警告报警亮灭 delay(LED_FLASH_T); / 延时 LEDs = LEDs; / 状态改变这一段代码中有以下几个需要注意的地方。(1)本段代码将跑马灯正常状态和错误状态均定义了一个单独的函数,使得整段代码显得简洁清晰,不但使得代码的可读性大大增强,也使得代码变得更加容易扩展。例如,如果需要修改跑马灯指示状态的亮灯方式,只需要更改LEDs_Move()这个函数就可以了。(2)通过对跑马灯正常状态和错误状态均定义了一个单独的函数,增强了这段程序的可移植性。因为和跑马灯硬件相关的函数完全被封装到了LEDs_Move()和LEDs_Error()中,因此当此段代码要移植到其他硬件或其他类型的单片机上时,只需要修改LEDs_Move()和LEDs_Error()就可以了。读者在自行编程时要多注意这些程序结构化的方法与技巧。(3)在程序中对系统当前状态进行了判定,这是通过检验变量System_Status的值来实现的。为此通过宏定义了一个真值TRUE,在此使用了#ifndef#endif宏汇编语句,#ifndef的意思是如果之前的程序段没有定义过这个宏,再执行下面的语句,对该宏进行定义。通过这个宏汇编语句,可以避免宏的重复定义。(4)在函数LEDs_Move()和LED_Error中均采用了static静态变量来保存跑马灯的状态,static静态变量在此处的使用可以称为“函数内的全局变量”,采用static静态变量将可以保存前次调用函数时的变量值,起到类似全局变量的作用,但却将这个变量封装起来,函数之外的程序其余部分都不能够访问该变量。6.2.3 跑马灯编程蛇形花样所谓蛇形花样就是指跑马灯显示花样像一条蛇,不停地进行游走,具体花样如图6-10所示,跑马灯显示了一段4位长的蛇形花样来对程序分支一进行指示。在单片机中,可以利用跑马灯来指示单片机的工作状态,除了指示的状态有正常工作状态和故障状态以外,还需要对一些特殊的工作流程进行指示,例如指示程序的不同分支或程序的不同任务等,这就需要利用跑马灯显示一些不同的花样来进行指示,本节将讲解蛇形花样的跑马灯编程。图6-10 跑马灯蛇形花样具体的程序代码如下:/* File: TheLEDsSnake.c* Description: LEDs Snake Animation* Created Date: 2007-09-12* Last Modified: 2007-09-12* Author: Jeffrey - S* Notes: None*/#include #define LED_FLASH_T 10000;void LEDs_Move();void LEDs_Error();void LEDs_Snake();/* Function: delay(unsigned int t)* Input Variables: t* Return Variables: None* Usage: Common Delay Routine, t as the delay time ticks*/void delay(unsigned int t) for(;t0;t-); / 延时循环#ifndef true #define true 1#endif#define TASK_1 1#define TASK_2 2/* Function: main()* Input Variables: None* Return Variables: None* Usage: Program Entry*/void main() unsigned char System_Status = true; unsigned char System_Task = TASK_2 ; while(1) / 程序主任务区 / . / 程序主任务区 if(System_Status = true) / 当系统处于正常状态 if(System_Task = TASK_1) / 主程序 LEDs_Move(); / 跑马灯指示系统正常 else if(System_Task = TASK_2) / 程序分支一 LEDs_Snake(); / 跑马灯蛇形花样指示 else / 当系统发生错误 LEDs_Error(); / 跑马灯指示错误 /* Function: LEDs_Move* Input Variables: None* Return Variables: None* Usage: System Normal Status Report*/void LEDs_Move() static unsigned char LEDs = 0x55; /静态变量用于存储LEDs发光状态 P0 = LEDs; /LED间隔亮灭并移位 delay(LED_FLASH_T); /延时 LEDs = LEDs; /状态改变/* Function: LEDs_Error* Input Variables: None* Return Variables: None* Usage: System Error Status Report*/void LEDs_Error() static unsigned char LEDs = 0x00; /静态变量用于存储LEDs发光状态 P0 = LEDs; /LED警告报警亮灭 delay(LED_FLASH_T); /延时 LEDs = LEDs; /状态改变/* Function: LEDs_Snake* Input Variables: None* Return Variables: None* Usage: System Snake LED Animation*/void LEDs_Snake() static unsigned char LEDs = 0x0f; / 静态变量用于存储LEDs发光状态 P0 = LEDs; / LED蛇形花样显示,注意LED亮灭和P0输出值是相反的 delay(LED_FLASH_T); / 延时 if( (LEDs|0x01) & (LEDs!=0x0f) LEDs = LEDs1 + 1; / 蛇形花样移动 else LEDs = LEDs1; / 蛇形花样移动 if(LEDs = 0xe0) / 蛇形花样移出 LEDs += 1; 这一段代码和前面代码基本相似,读者要理解蛇形跑马灯移动的逻辑。6.2.4 跑马灯编程龙舞花样除了蛇形花样以外,在进行系统状态分支指示时,还常用龙舞花样,本节将讲解龙舞花样的跑马灯编程。所谓龙舞花样就是指跑马灯显示花样像一条龙,来回进行摆动,具体花样如图6-11所示,跑马灯显示了一段4位长的龙舞花样来对程序分支二进行指示。龙舞花样要比蛇形花样复杂一些,因此其程序逻辑也更复杂一些。图6-11 跑马灯龙舞花样具体的程序代码如下:/* File: TheLEDsDragon.c* Description: LEDs Gragon Animation* Created Date: 2007-09-12* Last Modified: 2007-09-12* Author: Jeffrey - S* Notes: None*/#include #define LED_FLASH_T 10000;void LEDs_Move();void LEDs_Error();void LEDs_Gragon();/* Function: delay(unsigned int t)* Input Variables: t* Return Variables: None* Usage: Common Delay Routine, t as the delay time ticks*/void delay(unsigned int t) for(;t0;t-); / 延时循环#ifndef true #define true 1#endif#define TASK_1 1#define TASK_2 2/* Function: main()* Input Variables: None* Return Variables: None* Usage: Program Entry*/void main() unsigned char System_Status = true; unsigned char System_Task = TASK_2; while(1) / 程序主任务区 / . / 程序主任务区 if(System_Status = true) / 当系统处于正常状态 if(System_Task = TASK_1) / 程序分支一 LEDs_Move(); / 跑马灯指示系统正常 else if(System_Task = TASK_2) / 程序分支二 LEDs_Dragon(); / 跑马灯龙舞花样指示 else / 当系统发生错误 LEDs_Error(); / 跑马灯指示错误 /* Function: LEDs_Move* Input Variables: None* Return Variables: None* Usage: System Normal Status Report*/void LEDs_Move() static unsigned char LEDs = 0x55; / 静态变量用于存储LEDs发光状态 P0 = LEDs; / LED间隔亮灭并移位 delay(LED_FLASH_T); / 延时 LEDs = LEDs; / 状态改变/* Function: LEDs_Error* Input Variables: None* Return Variables: None* Usage: System Error Status Report*/void LEDs_Error() static unsigned char LEDs = 0x00; / 静态变量用于存储LEDs发光状态 P0 = LEDs; / LED警告报警亮灭 delay(LED_FLASH_T); / 延时 LEDs = LEDs; / 状态改变/* Function: LEDs_Dragon* Input Variables: None* Return Variables: None* Usage: System Dragon LED Animation*/void LEDs_Dragon() static unsigned char Direction = 1; / 静态变量用于存储龙舞方向 static unsigned char LED_status = 0x0F; / 静态变量用于存储LEDs发光状态 if(Direction=1) if(LED_status=0x0F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 渣土办申请书
- 双十一活动申请书
- 护士退赔申请书
- 更好的日语冲刺班课件
- 检察院再审申请书
- 渝州宾馆转正申请书
- 2025购买粮食购销合同范本
- 2025贷款买房合同范本
- 文职岗位申请书
- 2025协议解除劳动合同书范本专业版
- 2025四川省水电投资经营集团有限公司所属电力公司员工招聘6人考试参考试题及答案解析
- 新疆劳动就业白皮书课件
- 视觉障碍老人护理指南
- 手术室无菌技术操作讲课
- 宠物医院建设方案(3篇)
- 2025年中学生法治素养竞赛题库及答案
- 《“高效办成一件事”2025年度第二批重点事项清单》知识解读
- 2025年飞行器设计与工程师考试试卷及答案
- 2025年三级律师试题题库及答案
- 布控球使用管理办法
- 智能化系统施工方案及技术措施
评论
0/150
提交评论