单片机定时计数器设计方案.doc_第1页
单片机定时计数器设计方案.doc_第2页
单片机定时计数器设计方案.doc_第3页
单片机定时计数器设计方案.doc_第4页
单片机定时计数器设计方案.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

单片机定时计数器设计方案1 设计方案1.1 设计要求用AT89S52单片机,在1602LCD上显示年月日、星期、时分秒设计数字钟,内有4组可设置的定时开/关,控制一路开关量输出。定时开关的设置分为单次操作(2011年6月25日8:00开2011年6月26日18:00关),周期操作(如周三8:00 开,周四16:00关)。数码管显示时间(单位秒)与设置值(单位分钟),用发光二极管表示周期与单次操作。1.2 设计方案论证本设计是纯粹的应用性设计,主要以实现计时、定时、温度显示等功能为最终目的。设计以Atmel公司的AT89S52为核心,在最小系统的基础上扩展键盘,数字温度计,以及LCD显示模块,硬件设计简单节约,其功能的实现主要靠软件设计,所以软件在本设计中是最为重要的,在计时设计思路上有两种方案可以选取。方案一:选用外部时钟芯片,单片机只负责其数据的存取读写以及外部辅助电路的扩展,这种方案的优点是计时准确,软件编写相对简单,但其要求对其芯片必须要有比较深的了解方案二:利用单片机的内部时钟和定时器进行计数,这种方案电路简单,容易实现,但时间容易丢失,且长时间计数会有误差,而且软件编写也相对复杂。考虑到本次设计的目的,采用方案二,并加入了年月日的扩展,由于时间和精力有限年月日只是进行简单的模拟,没有精确的进行计算。只是进行适当的扩展。本设计包括硬件设计和软件设计两部分。主要硬件有AT89S52单片机、字符型液晶显示模块HY1602A和若干按键等。软件大致思路为:使用12MHz的晶振,单片机内部的定时器0工作在方式1,每计数50000个机器周期(即50ms)产生一次中断,中断20次就是一秒,这样就可以实现精确计时的目的。在把实时数据显示在LCD1602上的同时,不断扫描按键,如果有按键按下,则对按键做出相应的响应。2 硬件设计2.1 器件选型本设计选取主控MCU为Atmel公司的AT89S52,显示器件选择市面上常见的字符型液晶显示模块HY1602A。2.2 器件介绍2.2.1单片机AT89C51AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。1.主要特性:与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路2.管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端口保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。3振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。4芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。2.2.2 LCD1602显示模块工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)注:为了表示的方便 ,后文皆以1表示高电平,0表示低电平。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶屏。管脚功能1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。3.3V或5V工作电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有192个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM3 软件设计3.1 软件设计思路3.1.1 实现功能用AT89S52单片机,在1602LCD上显示年月日、星期、时分秒。内有4组可设置的定时开/关,控制一路开关量输出。定时开关的设置分为单次操作(2011年6月25日8:00开2011年6月26日18:00关),周期操作(如周三8:00 开,周四16:00关)。具备闹钟和时间段的设定功能,闹铃方式为蜂鸣器持续响10秒钟,或者用按键手动关闭响铃。可以用键盘调整时间、设定开关时间和方式。复位时间是2011年1月1日00:00:00。3.1.2编程思路1. 给以下变量赋初值:年(Year)、月(Month)、日(Day)、时(Hour)、分(Min)、秒(Sec)。2. 因为晶振频率为12MHz,所以计数频率为12MHz/12=1MHz,这就需要计数器0计数1000000次才可以达到一秒钟。我们用定时器0工作在方式1状态,每次计数50000次,如此进行20次,即可凑够一秒钟。这样可以得到初始化定时器的控制字:TMOD=0x01,计数初值65536-50000=15536即 0x3cb0,这样就可以设计一个计数一秒的函数。3. 读相应变量的值,送入LCD显示时间等信息。4. 不断的扫描按键,并且响应按键输入。在进入设定模式后,所有时间变量被过渡变量代替,如果确认设置,则过渡变量赋给时间变量,如果取消设置,则还使用原时间变量。3.1.3操作及功能介绍定时器能显示年月日、星期、时分秒。内有4组可设置的定时开/关,控制一路开关量输出。定时开关的设置分为单次操作(2011年6月25日8:00开2011年6月26日18:00关),周期操作(如周三8:00 开,周四16:00关)。下面具体具体介绍按键和LED的功能:1、K1为时间的小时设定键,按下后将进入时间的设定,按K1是对时间小时的设定。2、K2为时间的分钟设定键,当处于时间的调整时,按它可以对时间的分钟进行调整,当未处于时间调整时,按下第一次为开关量的开启时间,按下第二次为开关量的关闭时间。3、K3为设定时间完成的退出键和进入开关量时间的设定键,但时间设置完成以后,按下K3键将进入正常的计时状态;当要进入定时任务时间设定时,按下此键将进入定时任务开始时间的设定,设定完成后退出进入正常计时,然后再按下此键进入定时任务关闭时间的设定。4、K4为定时任务是否开启的设定键,若LED的黄灯是亮的说明任务是开启的,若没有亮则是关闭的。5、K5为定时任务运行的方式:周期与单次的切换,若绿灯亮则为周期,没亮则为单次。6、K6、K7、K8依次为年月日的设定键。3.2 主程序流程图开始定时器0初始化液晶显示器LCD1602初始化判断定时扫描键盘闹钟响开关量开/关 N Y判断是否有键按下 Y N 图3-1 主程序流程图4 仿真图5 设计体会及小结本设计在Proteus仿真软件测试成功,但是,此电子钟有自身的先天缺陷。首先,由于采用单片机内部定时器产生时间信号,所以如果时钟意外掉电,则会丢失当前的时间和闹钟等数据,需要重新设定。由于本人能力和时间有限,只能暂时实现本既定方案。课设也大大锻炼了我们的自学能力。比如我们要用到的很多芯片,不可能样样都在课本上学习过的,学过的毕竟是少数,在以后的学习实践和工作中,要用的东西五花八门,怎么可能四年都学遍呢?而且像我们学的这门迅速发展中的学科,知识更新一日千里,要准备好学习一辈子的,在大学里课堂上所学的只是方法,至于其中的内容,还要靠自己去挖掘,所谓“师傅领进门,修行在个人”就是这个道理,这才是成年人的学习生活,因此,通过课设,我们掌握了一项很基本但对于我们来讲很重要且具有十分深刻意义的技能,就是学会自学,这是前所未有的。参考文献1王质朴,吕运鹏.MCS-51单片机原理接口与应用,北京理工大学出版社,2009.2郑学坚;周斌.微型计算机原理及应用M.北京:清华大学出版社,20013谭浩强.C程序设计(第三版).北京清华大学出版社,2007.4康光华.电子技术基础(模拟部分).北京:高等教育出版社,2004.5 康光华. 电子技术基础M. 北京:高等教育出版社,2006:124-135.6 谭浩强. C程序设计M.北京:清华大学出版社,2005:82-135. 附录1 硬件电路设计图附录2 主程序#include#define uint unsigned int #define uchar unsigned char uint miao,fen,fen1,shi,shi1,flag1,flag2,flag3,aa,K1num,K2num,K3num,K4num,N,i,dan1,k,fen2,shi2,a,m,Month=1,Year=2011,Day=1,K6num,num,Year1,Year2,Day1,Day2,Month1,Month2; /K1num-K1按键被按下的标记变量,K2num-K2按键被按下的标记变 量,K3num=0-K3按键被按下的标记变量sbit K1=P10;/四个按键sbit K2=P11;sbit K3=P12;sbit K4=P13;sbit K5=P14;sbit K6=P15;sbit K7=P16;sbit K8=P17;sbit dan=P26;sbit dan2=P27;sbit rs=P20;sbit lcden=P22;sbit led=P23;/发光二极管控制端sbit beep=P24; /蜂鸣器控制端sbit relay=P25;/继电器控制端void delay(uint z)/延时函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)/液晶写命令函数rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)/液晶写数据函数rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;void write_sfm(uchar add,uchar date)/液晶写时分秒函数uchar shi,ge;shi=date%100/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge); void write_sfm1(uchar add,uchar date)/液晶写时分秒函数uchar shi,ge;shi=date%100/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge); void write_sfm2(uchar add,uchar date)/液晶写时分秒函数uchar qian,bai,ge,shi; qian=date/1000; bai=date%1000/100;shi=date%100/10;ge=date%10; write_com(0x80+add); write_date(0x30+qian);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);void init()/初始化函数aa=0;/中断次数标志K1num=0;/K1按键被按下的标记变量K2num=0;/K2按键被按下的标记变量K3num=0;/K3按键被按下的标记变量K4num=0;flag1=1;/控制lcd屏刷新的变量flag2=1;/控制闹钟响闹和继电器开启关闭的标记flag3=1;/控制闹钟响起时,按下K4停止闹钟响闹的标记led=1; /发光二极管初始化relay=0;/继电器初始化N=100;/系统启动时,闹钟时间到发出的声音为连续三次发出“哗”的一声miao=0;/系统初始化时间fen=0;shi=0;fen1=1;/初始化闹钟的时间shi1=0;beep=0;/蜂鸣器初始化lcden=0;/液晶使能端初始化write_com(0x38);/1602液晶初始化,设置16*2显示。5*7点阵,8位数据接口write_com(0x0c);/设置开显示,不显示光标write_com(0x06);/写一个字符后地址指针自动加1write_com(0x01);/显示清0,数据指针清0write_com(0x80);/将数据指针定位到第一行,第一个字处/for(num=0;num12)Month=0;/若满60后将清零write_sfm1(9,Month);/每调节一次送液晶显示一下write_com(0x80+10);/显示位置重新回到调节处if(K8=0&K6num=1)/判K2按下,修改系统时间的分钟delay(5);if(K8=0)write_com(0x80+13);/光标定位到分钟位置K6num=1;while(!K8);Day+; /则调整分加1if(Day30)Day=0;/若满60后将清零write_sfm1(12,Day);/每调节一次送液晶显示一下write_com(0x80+13);/显示位置重新回到调节处if(K1num=1|K3num=2)/当设置时间或闹钟时,K3被按下设置完成。if(K3=0)/判断K3按下delay(5);if(K3=0)K1num=0;K3num=0;K6num=0;while(!K3);write_com(0x0c);/取消光标闪TR0=1;/启动定时器使时钟开始走flag1=1;/flag=1.则修改系统时间时液晶显示的系统时间值,flag=0,则为修改闹钟时间时,屏幕显示的是修改闹钟时间的值write_sfm(8,fen);/送去液晶显示分,时write_sfm(5,shi);if(K2=0&K1num=0&K3num=0&m=0)/K2被按下时显示定时时间delay(5);m+;if(K2=0&m=1)while(K2=0)write_sfm(8,fen1);/送去液晶显示定时的分,时write_sfm(5,shi1);while(!K2);write_sfm(8,fen);/K2松开显示当前时间write_sfm(5,shi); if(K2=0&K1num=0&K3num=0&m=1)/K2被按下时显示定时时间delay(5);m+;if(K2=0&m=2)while(K2=0)write_sfm(8,fen2);/送去液晶显示定时的分,时write_sfm(5,shi2); while(!K2);write_sfm(8,fen);/K2松开显示当前时间write_sfm(5,shi);m=0; if(K1=0&K3num=1)/修改小时,判断K1键按下,K3num=1,表示K3按键按下,则此时修改的是闹钟时间的小时delay(5);if(K1=0)write_com(0x80+0x40+6);/光标定位到小时位置K3num=2;while(!K1);shi1+; /则调整定时的时加1if(shi1=24)/若满24后将清零shi1=0;write_sfm(5,shi1);/每调节一次送液晶显示一下write_com(0x80+0x40+6);/显示位置重新回到调节处if(K2=0&K3num=2)/卸螷2按下,修改闹钟时间的分钟delay(5);if(K2=0)write_com(0x80+0x40+9);/光标定位到分钟位置K3num=3;while(!K2);fen1+; /则调整分加1if(fen1=60)/若满60后将清零fen1=0;write_sfm(8,fen1);/每调节一次送液晶显示一下write_com(0x80+0x40+9);/显示位置重新回到调节处if(K6=0&K3num=3)/修改小时,判断K1键按下,K3num=1,表示K3按键按下,则此时修改的是闹钟时间的小时delay(5);if(K6=0)write_com(0x80+7);/光标定位到小时位置K3num=4;while(!K6);Year1+; /则调整定时的时加1if(Year1=24)/若满24后将清零Year1=0;write_sfm2(5,Year1);/每调节一次送液晶显示一下write_com(0x80+7);/显示位置重新回到调节处if(K7=0&K3num=4)/卸螷2按下,修改闹钟时间的分钟delay(5);if(K7=0)write_com(0x80+10);/光标定位到分钟位置K3num=5;while(!K7);Month1+; /则调整分加1if(Month1=12)/若满60后将清零Month1=0;write_sfm1(9,Month1);/每调节一次送液晶显示一下write_com(0x80+9);/显示位置重新回到调节处 if(K8=0&K3num=5)/卸螷2按下,修改闹钟时间的分钟delay(5);if(K8=0)write_com(0x80+13);/光标定位到分钟位置K3num=6;while(!K8);Day1+; /则调整分加1if(Day130)/若满60后将清零Day1=1;write_sfm1(12,Day1);/每调节一次送液晶显示一下write_com(0x80+12);/显示位置重新回到调节处if(K1=0&K3num=6)/修改小时,判断K1键按下,K3num=1,表示K3按键按下,则此时修改的是闹钟时间的小时delay(5);if(K1=0)write_com(0x80+0x40+6);/光标定位到小时位置K3num=7;while(!K1);shi2+; /则调整定时的时加1if(shi2=24)/若满24后将清零shi2=0;write_sfm(5,shi2);/每调节一次送液晶显示一下write_com(0x80+0x40+6);/显示位置重新回到调节处if(K2=0&K3num=7)/卸螷2按下,修改闹钟时间的分钟delay(5);if(K2=0)write_com(0x80+0x40+9);/光标定位到分钟位置K3num=8;while(!K2);fen2+; /则调整分加1if(fen2=60)/若满60后将清零fen2=0;write_sfm(8,fen2);/每调节一次送液晶显示一下write_com(0x80+0x40+9);/显示位置重新回到调节处 if(K1=0&K3num=9)/修改小时,判断K1键按下,K3num=1,表示K3按键按下,则此时修改的是闹钟时间的小时delay(5);if(K6=0)write_com(0x80+7);/光标定位到小时位置K3num=10;while(!K6);Year2+; /则调整定时的时加1if(Year25000)/若满24后将清零shi2=0;write_sfm2(4,Year2);/每调节一次送液晶显示一下write_com(0x80+4);/显示位置重新回到调节处if(K7=0&K3num=11)/卸螷2按下,修改闹钟时间的分钟delay(5);if(K7=0)write_com(0x80+10);/光标定位到分钟位置K3num=12;while(!K7);Month2+; /则调整分加1if(Month212)/若满60后将清零Month2=1;write_sfm1(8,Month2);/每调节一次送液晶显示一下write_com(0x80+10);/显示位置重新回到调节处 if(K8=0&K3num=12)/卸螷2按下,修改闹钟时间的分钟delay(5);if(K8=0)write_com(0x80+13);/光标定位到分钟位置K3num=8;while(!K8);Day2+; /则调整分加1if(Day230)/若满60后将清零Day2=1;write_sfm1(12,Day2);/每调节一次送液晶显示一下write_com(0x80+13);/显示位置重新回到调节处K3num=0;if(K4=0&flag3=1)/当闹钟响起时,按下K4停止响闹,当闹钟响起时候flag3置为1delay(5);if(K4=0)flag2=0;flag3=0;/此处需置flag3为1,否则闹钟没有响起的时候按下K4键,程序会执行此句if(K4=0&flag3)/K4按下设置闹钟的状态为ON或OFF,flag3=1,表示闹钟此时没响起。K4num=0,表示此时为ON状态。 delay(10);if(K4=0) k+;if(k=1) K4num=1;dan=1; delay(10);if(k=2) K4num=0;dan=0;k=0;if(K5=0)delay(10);if(K5=0) i+; delay(10);if(i=1) dan1=1;dan2=1;if(i=2) dan1=0;dan2=0;i=0;void clock()/闹钟函数 K4闹铃ON/OFF的状态设置,设置为ON时连续三次发出“哗”的一声,设置为OFF发出“哗”的一?if(fen=fen1)&(shi=shi1)&(flag2=1)&(K4num=1)&dan1=1&Year1=Year&Month1=Month&Day1=Day)/闹钟的响闹控制beep=1;/此时闹钟响起,连续三次

温馨提示

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

评论

0/150

提交评论