基于AT89S51单片机的多功能电子万年历的设计_第1页
基于AT89S51单片机的多功能电子万年历的设计_第2页
基于AT89S51单片机的多功能电子万年历的设计_第3页
基于AT89S51单片机的多功能电子万年历的设计_第4页
基于AT89S51单片机的多功能电子万年历的设计_第5页
免费预览已结束,剩余25页可下载查看

下载本文档

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

文档简介

1、单片机应用系统设计课题:姓名:班级:学号:指导老师:日期:电子万年历的设计基于 AT89S51单片机的多功能一、绪论:现在是一个知识爆炸的新时代,新产品、新技术层出不穷,电子技术的发展更是日新 月异。可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活, 改变着我们的世界。近些年,随着科技的发展和社会的进步,人们对电子万年历的要求也越来越高,传统的电子万年历已不能满足人们的需求。人们对多功能电子万年历的功能及工作顺序都非常熟悉,但是却很少知道它的内部结构以及工作原理。由于单片机具有灵活性强、 成本低、功耗低、保密性好等特点,还有,单片机是微型计算机的一个重要分枝,单片机是

2、 把中央处理器、随机存储器、只读存储器、定时器/计数器、并行接口接口、串行接口、A/D转换器等主要计算机部件,集中在一块集成电路芯片上。虽然只是一个芯片,但从功能上它就相当于一台完整的微机。随着科学技术的迅猛发展,单片计集成度高、体积小、运算速度快、功耗低、运行可靠、价格低廉等诸多优点,越来越显现出来。在日常生活方面,我们使 用彩电、录放机、 VCD照相机、手机等等可以说举不胜举。所以多功能电子万年历一般都 以单片机为核心,外加一些外围设备来实现。 由单片机作为多功能电子万年历的核心控制器, 通过按键可以进行定时、校时功能。输出设备显示器可以用液晶显示技术和数码管显示技术。意义:电子万年历作为

3、电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对 神农百草膏单片机扩展的应用。而且在操作的设计上要力 求简洁,功能上尽量齐全,显示界面也要出色。所以,电子万年历无论作为比赛题目还是练 习题目都是很有价值。二、系统总体方案设计:1、共具备两个功能:(1)显示年月日及分秒信息(2)具有可调整日期和时间功能。2、硬件电路的总体框图:图1总体硬件框图3、所用芯片U1AXTAL1YTA I oP0.0/AD0 P 0.1/AD1 P0.2/AD2P0.3/AD3P0.4/AD4X IAL

4、2P0.5/AD5P0.6/AD6RSTP0.7/AD7P2.0/A8P 2.1/A9P SENP2.2/A10P2.3/A11ALEP2.4/A12EAP2.5/A13P2.6/A14P2.7/A15P 1.0/T2P 3.0/RXDP 1.1/T2EXP 3.1/TXDP 1.2P 3.2/INT0P 3.3/INT1P 1.3P 1.4P3.4/T0P 1.5P3.5/T1P 1.6P 3.6/WRP 1.7P 3.7/RDAT89C52191894681229_3031_11_12233J517三、硬件系统设计:1、硬件原理图:DNGLM016LX222pFX1+5VAn*I 01U2

5、2+5VX1VCC1VCC2RSTSCLKX2I/O536123U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2XTAL2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6RSTP0.7/AD7P2.0/A8P2.1/A9P2.2/A10PSENP2.3/A11ALEP2.4/A12EAP2.5/A13P2.6/A14P2.7/A15P1.0P3.0/RXDP1.1P3.1/TXDP1.2P3.2/rNT0P1.3P3.3/rNTTP1.4P3.4/T0P1.5P3.5/T1P1.6P3.6/WRP1.7P3.7/RD1892930 k21 22- -23n25

6、 F27-2810073635-343239V5+fl o 上工 fl oR -DNGU3VCCDQGND DS18B20P0 口作为6位液晶显示电路的驱动接口,这是由于P0 口,它的驱动能力强,故只需外接上拉电阻便可以把LED数码,在单片机进行动态扫描的时候不会 8位LED数码管的 ,由一个8位的I/O 口图3硬件原理2、硬件原理:在硬件电路中采用 输出驱动电路工作处于开漏状态 管点亮。因为共阴的LED数码管它的驱动电流是分开的 影响彼此的电流,故该电路中的8位LED数码管均用共阳阴极的数码管。 位选线分别由相应的 P2. 0P2. 5控制,而将其相应的段选线并联在一起 控制,即 P0 口。

7、P3 口与八个校时按键相连,以成功实现万年历校时的功能。四、系统软件设计:1、程序流程框图:2、年调整程序流程图,图4 程序流程框图月、日调整程序流程图类似。图5年调整程序流程图3、源程序代码:#include 温度传送数据 IO 口0 /#include Command/#include LCD1602.hvoid show_time();/液晶#define LCD_DA TA/#include DS1302.h显示程序1/ Data#define uint unsigned int/*1602 液 晶 显#define#define uchar unsigned char示部分子程序LC

8、D_CLEAR_SCREENchar*/0x01 / 清屏hide_sec,hide_min,hide_hour#defineLCD_HOMING,hide_day,hide_week,hide_m0x02 / 光onth,hide_year; /秒 ,分 ,时/Port标返回原点到日 ,月,年位闪的计数Definitions*void LCD_Write(bit style,char*unsigned char input)done,count,temp,flag,Up_Ke*y_flag,down_flag;sbit LcdRs= P 2人5;LcdEn=0;uchar temp_valu

9、e; /sbit LcdRw= P 2人6;LcdRs=style;温度值sbit LcdEn= P 2人7;LcdRw=0;ucharsfr DBPort = 0x80;_nop_();TempBuffer5,week_value/P0=0x80,P1=0x90,P2DBPort=input;2;=0xA0,P3=0xB0. 数据端口_nop_();/注意顺序内部等待函数LcdEn=1;*_nop_();/注意顺序sbit DS1302_CLK = PIT;*LcdEn=0;/实时时钟时钟线引脚*_nop_();sbit DS1302_IO= P 1人6;*LCD_Wait();/实时时钟数

10、据线引脚unsignedcharsbit DS1302_RST = P15;LCD_Wait(void)/实时时钟复位线引脚/ 设 置 显 示 模 式sbit p ortOI = P 3人0;LcdRs=0;*sbit p ort02 = P 3人1;LcdRw=1;*sbit p ort03 = P 3人2;_nop_();/ 延 时一个 时*sbit p ort04 = P 3人3;钟周期#define LCD_SHOWsbit ACC0 = ACCS;LcdEn=1;_nop_();0x04/显示开sbit ACC7 = ACC7;#define LCD_HIDEsbit Set_Key

11、 =P 2人0;0x00/显示关/模式切换键LcdEn=0;sbit Up_Key =P 2;return DBPort;/加法按钮#define LCD_CURSORsbit Down_Key = P 2人2;/向 LCD 写入命令或数据0x02/显示光/减法按钮*标sbit out_Key_Key=P 2人3;*#define LCD_NO_CURSOR/立刻跳出调整模式按钮*0x00/无光标sbit DQ = P19/#define LCD_COMMAND幵*卄*卄*卄*卄*卄*卄*#defineLCD_NO_FLASH0x00/光标不#define LCD_FLASH0x01/ 光标闪

12、闪动 void void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38);/8 位数据端口 ,2 行显示 ,5*7 点阵while(*str!=0)LCD_Write(LCD_DATA,*str);str+;LCD_Set_KeyDisplay(unsig ned char DisplayMode) LCD_Write(LCD_CO MMAND, 0x08|DisplayMode);LCD_Write(LCD_CO MMAND,0x38);LCD_Set_KeyDisplay( LCD_SHOW|LCD_NO_CU RSOR); / 开启显示

13、, 无 光标/ 设 置 输 入 模幵*卄*卄*卄*卄*卄*卄*#defineLCD_AC_UP_KEYLCD_Write(LCD_CO MMAND,LCD_CLEAR_SC REEN); /清屏LCD_Set_KeyInput(LC D_AC_UP_KEY|LCD_NO_ MOVE); /AC 递增 , 画面不动/*DS1302部分子*/typedef_SYSTEMTIME#define0x02LCD_AC_DOWN0x00/default/ 液 晶 字 符 输 入 的 位 置*时钟序structunsigned char Second; unsigned char Minute; unsig

14、ned char Hour; unsigned char Week; unsigned char Day; unsigned char Month;#define LCD_MOVEvoid GotoXY(unsigned charunsigned charYear;0x01 / 画x, unsigned char y)unsignedchar面可平移DateString11;#define LCD_NO_MOVEif(y=0)unsignedchar0x00TimeString9;/defaultLCD_Write(LCD_COSYSTEMTIME;/定义的MMAND,0x80|x);时间类型

15、voidif(y=1)SYSTEMTIMELCD_Set_KeyInput(unsigneCurrentTime;d char InputMode)LCD_Write(LCD_COMMAND,0x80|(x-0x40);LCD_Write(LCD_CO#define AM(X)XMMAND, 0x04|InputMode);#define PM(X)(X+12)/将字符输出到液晶显示/ 转成 24 小时制void#define DS1302_SECOND/ 初 始 化Print(unsighttp:/www.shenn0x80/时钟LCD*ned char *str)芯片的寄存器位置,存放时/

16、 相charcharchar#define DS1302_MINUTE0x82#define DS1302_HOUR0x84#define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH 0x88#define DS1302_YEAR0x8C voidDS1302InputByte(unsigned char d) / 实时时钟写入一 字节 (内部函数 ) unsigned char i;ACC = d; for(i=8; i0; i-) DS1302_IOACC0; 当于汇编中的 RRCDS1302_CLK = 1;DS13

17、02_CLK = 0;ACC = ACC 1;unsigned charDS1302OutputByte(void) /实时时钟读取一字节 (内部函数 )unsigned char i;for(i=8; i0; i-)ACC = ACC 1; /相当于汇编 中的 RRCACC7DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0; return(ACC);void Write1302(unsigned char ucAddr, unsigned char ucDa) /ucAddr: DS1302 地址 , ucData: 要写的数据 DS1302_RST = 0;D

18、S1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr);/ 地址,命令DS1302InputByte(ucDa); / 写 1Byte 数据 DS1302_CLK = 1; DS1302_RST = 0;unsignedRead1302(unsigned ucAddr) /读取 DS1302 某 地址的数据unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1;DS1302InputByte(ucAddr|0x01); / 地址,命令 ucDataDS1302Ou

19、tputByte();/ 读 1Byte 数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData);void DS1302_GetTime(SYSTEM TIME *Time) / 获取时钟 芯片的时钟数据到自定义 的结构型数组 unsignedReadValue;ReadValue Read1302(DS1302_SECON D);Time-Second (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue Read1302(DS1302_MINUT E);Time-Minute (ReadValue&

20、0x70)4)*10 + (ReadValue&0x0F);ReadValueRead1302(DS1302_HOUR);Time-Hour (ReadValue&0x70)4)*10+ (ReadValue&0x0F);ReadValueRead1302(DS1302_DAY);Time-Day (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValueRead1302(DS1302_WEEK);Time-Week (ReadValue&0x70)4)*10+ (ReadValue&0x0F);ReadValue Read1302(DS1302_MO

21、NTH );Time-Month (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValueRead1302(DS1302_YEAR);Time-Year (ReadValue&0x70)4)*10 + (ReadValue&0x0F); Time-DateString5 = Time-Month/10 + 0;Time-DateString6= Time-Month%10 + 0;elseTime-DateString10 = 0; / 字符串末尾加 0 ,判 断结束字符 voidDateToStr(SYSTEMTIME *Time)/将时间年 ,月

22、 ,日,星期数据转换成液晶显 示字符串,放到 数组里 DateString if(hide_year2) /这里的 if,else 语句都是判 断位闪烁 ,2 就不显示 ,输出字符串为 2007/07/22Time-DateString0= 2;Time-DateString1= 0;Time-DateString5 = ;Time-DateString6 = ;Time-DateString7if(hide_dayDateString8 = Time-Day/10 + 0;Time-DateString9 = Time-Day%10 + 0;else void TimeToStr(SYSTE

23、MTIME *Time) /将时 ,分 ,秒数据 转换成液晶显示字符放到 数组 TimeString; if(hide_hourTimeString0 = Time-Hour/10 + 0;Time-TimeString1= Time-Hour%10 + 0;elseTime-TimeString0 = ;Time-DateString2 = Time-Year/10 + 0;Time-DateString3 = Time-Year%10 + 0;elseTime-DateString0 = ;Time-DateString1 = ;Time-DateString2 = ;Time-DateS

24、tring3 = ;Time-DateString4Time-DateString8 = ;Time-DateString9 if(hide_weekWeek%10 + 0; / 星 期的数据另外放到 week_value 数组 里,跟 年, 月 ,日的分开存放 ,因为等一 下要在最后显示elseweek_value0 Time-TimeString1 = ;Time-TimeString2if(hide_minTimeString3 = Time-Minute/10 + 0;Time-TimeString4 = Time-Minute%10 + 0;elseTime-TimeString3

25、= ;Time-TimeString4 = ;Time-TimeString5if(hide_month2)week_value1 = 0;if(hide_secTimeString6 = Time-Second/10 + 0;Time-TimeString7 = Time-Second%10 + 0;else/*ds18b20序*/子程unsignedReadOneChar(void)charTime-TimeString6 = ;Time-TimeString7 = ;Time-DateString80;void/时钟芯片初始化unsigned char Second=Read1302(D

26、S1302_ SECOND);if(Second&0x80) /判断 时钟芯 片是否 关闭Initial_DS1302(void)Write1302(0x8e,0x00);/写入允许Write1302(0x8c,0x07);/ 以下写入初始化时间 日期:07/07/25. 星期 : 3. 时间 :23:59:55Write1302(0x88,0x07);Write1302(0x86,0x25);Write1302(0x8a,0x07);Write1302(0x84,0x23);Write1302(0x82,0x59);Write1302(0x80,0x55);Write1302(0x8e,0x

27、80); /禁止写入/*ds18b20 子函数(晶振 12MHz )*/延迟uchar i=0; uchar dat = 0; for (i=8;i0;i-)DQ = 0; /给脉冲信号void delay_18B20(unsignedint i)while(i-);/*ds18b20函*/冲信号初始化数dat=1;DQ = 1; /给脉if(DQ) dat|=0x80; delay_18B20(4);return(dat);void Init_DS18B20(void)unsigned char x=0;DQ =/DQ 复位 delay_18B20(8);做延时DQ = 0;单片机将 DQ

28、拉低delay_18B20(80);确延时 大于 480usDQ = 1;拉高总线1;/稍/精/delay_18B20(14); x=DQ;/ 稍做延时后 如果 x=0 初始化成功 x=1 则初始化 失败delay_18B20(20);/*ds18b20 个字节 */读一/*ds18b20一个字*/voiddat)WriteOneChar(ucharunsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0x01; delay_18B20(5);DQ = 1;dat=1;读取 ds18b20 当 前 温 度 */*void ReadTemp(voi

29、d)unsigned char a=0; unsigned char b=0; unsigned char t=0;温度符号Init_DS18B20();WriteOneChar(0xCC);/ 跳过读序号列号的 操作WriteOneChar(0x44);/ 启动温度转换TempBuffer3=C;TempBuffer4=0;void Delay1ms(unsigned count)intwhile(port01=1);/Up_Keykey()/ 升序 按unsigned int i,j; for(i=0;icount;i+) for(j=0;j0;delay-) for(i=0;i62;i+

30、) /1ms 延时 .;=1)mdelay(8);switch(count)case 1:delay_18B20(100);a=ReadOneChar();/读取温度值低位 b=ReadOneChar();/读取温度值高位 temp_value=b4;void temp_to_str() / 温度 数据转换成液晶字符显示TempBuffer0=temp_value/10+0; /十位TempBuffer1=temp_value%10+0; /个位TempBuffer2=0xdf; /temp=Read1302(DS1302_SECOND); / 读取秒数void/ 跳出调整模式 ,返回默认显

31、示outkey()temp=temp+1; / 秒数加 1 uchar Second;if(out=0|port01=1) mdelay(8);count=0;hide_sec=0,hide_min=0 ,hide_hour=0,hide_day=0,hi de_week=0,hide_month=0,hi de_year=0;Second=Read1302(DS1 302_SECOND);Write1302(0x8e,0x00); /写入允许Write1302(0x80,Second &0x7f);Write1302(0x8E,0x80);/禁止写入done=0;while(out=0);U

32、p_Key_flag=1; 调整后更新标志if(temp&0x7f)0x59)超过 59 秒,清零temp=0;case 2:/数据break;/temp=Read1302(DS1302_MINUTE); / 读取分数if(temp0x7)temp=temp+1; / 分数加temp=1;temp=temp+1;/ 年数加 1Up_Key_flag=1;break;Up_Key_flag=1;if(temp0x59) 超过 59 分,清零/case 5:if(temp0x85)case 3:temp=0;break;temp=Read1302(DS1302_HOUR); /读取小时数temp=

33、temp+1;1/ 小时数加Up_Key_flag=1;if(temp0x23)小时 ,清零/超过23case 4:temp=0;break;temp=Read1302(DS1302_WEEK); / 读取星期数temp=temp+1; / 星期数加1Up_Key_flag=1;temp=Read1302(DS1302_DAY); /读取日数temp=temp+1;Up_Key_flag=1;if(temp0x31)case 6:/日数加temp=1;break;default:break;temp=0;break;while(Up_Key=0);while(port02=1);temp=Re

34、ad1302(DS1302_MONTH); / 读取月数/void Down_Keykey()/ 降序 按键temp=temp+1;Up_Key_flag=1;if(temp0x12)case 7:/月数加temp=1;break;Down=1;if(Down=0|port03=1)mdelay(8);switch(count)case 1:temp=Read1302(DS1302_YEAR); / 读取年数temp=Read1302(DS1302_SECOND); / 读取秒数temp=temp-1;/秒数减Down_Key_flag=1;case 6:break;while(port03=

35、1);if(temp=-1)temp=Read1302(DS1302_MONTH); / 读取月数Down_Key_flag=1;/数据调整后更新标志temp=0x23;temp=temp-1; /月数减 1break;if(temp=0x7f)0 秒 , 返回 59 秒/小于case 4:temp=0x59;temp=Read1302(DS1302_WEEK); / 读取星期数case 2:break;temp=temp-1; / 星期数减1Down_Key_flag=1;if(temp=0)temp=12;break;case 7:temp=Read1302(DS1302_MINUTE);

36、 /读取分数Down_Key_flag=1;temp=Read1302(DS1302_YEAR); / 读取年数if(temp=0)temp=temp-1; / 分数减temp=0x7;temp=temp-1; /年数减 1Down_Key_flag=1;break;Down_Key_flag=1;case 5:if(temp=-1)if(temp=-1)temp=0x59;/ 小于 0 秒 ,返回 59 秒temp=Read1302(DS1302_DAY); /读取日数temp=0x85;break;temp=temp-1; /日数减 1break;case 3:Down_Key_flag=

37、1;default:break;temp=Read1302(DS1302_HOUR); /读取小时数if(temp=0)temp=temp-1; / 小时数减1temp=31;while(Down=0);/扫描模式切换按键 switch(count) case 1:do晶显示数据void Set_Keykey()/ 模式选 择按键while(count=2);break;/count=1, 调整秒case 2:doSet_Key=1;if(Set_Key=0|port04=1)outkey();描跳出按钮/count=2, 调整分hide_sec=0;mdelay(8);count=count

38、+1;/Set_Keykey 按 一次,count就加1done=1;/进入调整模式Up_Keykey();/扫描加按钮Down_Keykey();/扫描减按钮outkey();Up_Keykey();Down_Keykey();while(Set_Key=0);if(Up_Key_flag=1|down_fl ag=1) /数据更新,重新 写入新的数据if(temp0x60)temp=0;while(port04=1);Write1302(0x8e,0x00);/ 写入允许if(Up_Key_flag=1|down_flag=1)void行keydo ne()/按键功能执Write1302(

39、0x80,temp|0x80);/写入新的秒数Write1302(0x8e,0x00);入允许/写uchar Second;if(flag=0)关闭时钟 ,停止计时/Write1302(0x8e,0x80);止写入/ 禁Write1302(0x82,temp); 入新的分数/ 写Up_Key_flag=0; Write1302(0x8e,0x00); 写入允许/Down_Key_flag=0;Write1302(0x8e,0x80);止写入/ 禁temp=Read1302(0x80);Write1302(0x80,temp|0x80);hide_sec+; 闪计数/位Up_Key_flag=0

40、;Down_Key_flag=0;Write1302(0x8e,0x80);/禁止写入if(hide_sec3)hide_min+;flag=1;Set_Keykey();show_time();/液hide_min=0;hide_sec=0;if(hide_min3)show_time();while(count=4);break;case 4:do/count=5, 调整日while(count=3);break;case 3:do/count=4, 调整星期hide_week=0;outkey();/count=3, 调整小时hide_hour=0;Up_Keykey();outkey(

41、);hide_min=0;Down_Keykey();outkey();Up_Keykey();Down_Keykey();if(Up_Key_flag=1|down_flag=1)Up_Keykey();Down_Keykey();if(Up_Key_flag=1|down_flag=1)Write1302(0x8e,0x00);入允许/ 写Write1302(0x8e,0x00);入允许/ 写Write1302(0x8a,temp);入新的星期数/ 写Write1302(0x84,temp);入新的小时数/ 写Write1302(0x8e,0x80);止写入/ 禁Write1302(0x8

42、e,0x80);止写入/ 禁Up_Key_flag=0;Down_Key_flag=0;Up_Key_flag=0;Down_Key_flag=0;hide_week+;hide_hour+;if(hide_hour3)show_time();if(hide_week3)hide_week=0;show_time();while(count=5);break;if(Up_Key_flag=1|down_flag=1)Write1302(0x8e,0x00);入允许Write1302(0x86,temp); 入新的日数Write1302(0x8e,0x80);止写入Up_Key_flag=0;D

43、own_Key_flag=0;hide_day+;if(hide_day3)hide_day=0;show_time();/ 写/ 写/ 禁while(count=6);break;/count=6, 调整月hide_hour=0;case 6:docase 5:dooutkey();hide_month=0;hide_day=0;Up_Keykey();Write1302(0x80,Second&0x7f);outkey();Up_Keykey();Down_Keykey();Write1302(0x8E,0x80);/禁止写入/ 写Down_Keykey();if(Up_Key_flag=1|down_flag=1)if(Up_Key_flag=1|down_flag=1)Write1302(0x8e,0x00);入允许 done=0;break; /count=7, 开启中断 ,标志位置 0 并退 出default:break;Write1302(0x8e,0x00);入允许/ 写Write1302(0x8c,temp);

温馨提示

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

评论

0/150

提交评论