STC12C5A60S2单片机各个模块程序代码_第1页
STC12C5A60S2单片机各个模块程序代码_第2页
STC12C5A60S2单片机各个模块程序代码_第3页
STC12C5A60S2单片机各个模块程序代码_第4页
STC12C5A60S2单片机各个模块程序代码_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、实用标准文档/*/STC12C5A60S2 可编程时钟模块说明: STC12C5A60S2单片机有三路可编程时钟输出CLKOUT0/T0/P3.4CLKOUT1/T1/P3.5、 CLKOUT2/P1.0涉及寄存器: AUXR(辅助寄存器 ) 、WAKE_CLKO时(钟与系统掉电唤醒控制寄存器 ) BRT( 独立波特率发生器定时器寄存器 )程序说明:本程序可选实现 P3.4 输出 CLKOUT0时钟、 P3.5 输出 CLKOUT1时钟 P1.0输出 CLKOUT2时钟/*/#include #include /#define Port_BRT /如果想测试独立波特率发生器时钟输出请打开此句若

2、想测试 CLKOUT1和 CLKOUT0请注释此句#ifdef Port_BRT /*条件编译独立波特率发生器时钟输出 */*/* / CLKOUT2 时钟初始化 /*/void CLKOUT_init(void)WAKE_CLKO = 0x04; /Bit2-BRTCLKO 允许 P1.0 配置为独立波特率发生器的时钟输 出/BRT 工作在 1T 模式下时的输出频率 = Sysclk/(256-BRT)/2 /BRT 工作在 12T 模式下时输出频率 = Sysclk/12/(256-BRT)/2AUXR = 0x14; /Bit4-BRTR 允许独立波特率发生器运行 /Bit2-BRTx1

3、2 BRT 工作在 1T 模式下BRT = 0xff; / 更改该寄存器的值可实现对输出的时钟频率进行分频 #else /* 条件编译 CLKOUT0时钟输出 */*/*/ CLKOUT0 时钟和 CLKOUT1初始化 /*/void CLKOUT_init(void)WAKE_CLKO = 0x03; / 允许将 P3.4/T0 脚配置为定时器 0 的时钟输出 CLKOUT0文案大全/T0/T0/1T/12T工作在 1T模式时的输出频率 = SYSclk/(256-TH0)/2 工作在 12T 模式时的输出频率 = SYSclk/12/(256-TH0)/2 指的是每 1 个时钟加 1, 是

4、普通 C51 的 12 倍指的是每 12 个时钟加 1 与普通 C51 一样实用标准文档/ 允许将 P3.5/T1 脚配置为定时器 1 的时钟输出 CLKOUT1只, 能 工作在定时器模式 2 下/T1 工作在 1T 模式时的输出频率 = SYSclk/(256-TH0)/2/T1工作在 12T 模式时的输出频率 = SYSclk/12/(256-TH0)/2/1T 指的是每 1 个时钟加 1, 是普通 C51 的 12 倍/12T 指的是每 12 个时钟加 1 与普通 C51 一样AUXR = 0xc0; /T0/T1TMOD = 0x22; /TH0 = 0xff; /TL0 = 0xff

5、;TH1 = 0xff; /TL1 = 0xff;TR1 = 1;TR0 = 1;#endif定时器速度是普通 8051的 12倍, 即工作在 1T模式下 定时器速度是普通 8051 的 12 倍, 即工作在 1T 模式下 定时器 0工作模式为方式 2, 自动装载时间常数 定时器 1工作模式为方式 2, 自动装载时间常数 更改该寄存器的值可实现对输出的时钟频率进行分频更改该寄存器的值可实现对输出的时钟频率进行分频*/* / 主程序 /*/* void main()CLKOUT_init(); while(1);/*/ STC12C5A60S2 系统时钟模块/ 说明: STC12C5A60S2

6、单片机有两个时钟源,内部 R/C 振荡时钟和外部晶体时钟/ 出厂标准配置是使用外部晶体或时钟/ 涉及寄存器: CLK_DIV(时钟分频寄存器 )/ 由该寄存器的 Bit0-2 组合可实现对时钟源进行 0、2、4、8、 16文案大全实用标准文档/32、64、 128 分频/程序说明:/对外部时钟进行分频得到 Sysclk, 然后经过 P1.0 的独立波特率/时钟输出功能 Sysclk/2 输出时钟频率/#include #include #define Bus_clk 12 / 若要修改系统时钟直接在此处修改/12为12M/6为6M/3为3M/1500为1.5M/750为750kHz/375为3

7、75kHz/187500为187.5kHz/93750为93.75kHz/*的 sysclk 的 sysclk 的 sysclk 的 sysclk 的 sysclk 的 sysclk 的 sysclk 的 sysclk*/ 系统时钟初始化 /*/void Sysclk_init(void)WAKE_CLKO = 0x04; /AUXR = 0x14;/配置 P1.0 口为频率输出 允许波特率时钟工作/ 工作模式为 1TBRT = 0xff;#if( Bus_clk = 12 )CLK_DIV =0x00;#elif( Bus_clk= 6 )CLK_DIV= 0x01;#elif( Bus_c

8、lk= 3 )CLK_DIV= 0x02;#elif( Bus_clk= 1500 )CLK_DIV= 0x03;#elif( Bus_clk= 750 )CLK_DIV= 0x04;#elif( Bus_clk= 375 )CLK_DIV= 0x05;#elif( Bus_clk= 187500CLK_DIV= 0x06;#elif( Bus_clk= 93750 )CLK_DIV= 0x07;文案大全实用标准文档#endif/*/ 主程序 /*/void main()Sysclk_init();while(1);/*/STC12C5A60S2 系 统 省 电 模 块/ 说明: STC12C

9、5A60S2 单片机有三种省电模式以降低功耗 . 空闲模式,低速模式/ 掉电模式/ 涉及寄存器:/Bit0 - IDL/Bit1 - PDPCON电( 源控制寄存器 )控制单片机进入 IDLE 空闲模式 控制单片机进入掉电模式/程序说明: 程序实现让单片机先工作一阵子 (通过 P03 指示灯显示 )/ 然后进入掉电状态 ,利用外部中断 0 口来唤醒单片机工作/唤醒后单片机将通过 P00-3 口的灯闪烁显示开始工作/*/#include #include #define uchar unsigned char#define uint unsigned intuchar Power_Down_Fl

10、ag = 0; /进入掉电状态标志sbit Chip_Start_LED= P00;/sbit Power_Down_LED_INT0 = P01; /INT0 sbit N_Power_Down_LED_INT0 = P02; /INT0 sbit Normal_Work_LED = P03; /sbit Power_Down_Wakeup_INT0= P32; /单片机开始工作指示灯 口掉电唤醒指示灯 口没有唤醒指示灯 正常工作指示灯 外中断唤醒输入口void Delay_ms( uint time ); void Normal_work(void);文案大全实用标准文档void Intp

11、_init(void);void After_Powr_Down(void);/*/ 软件延时/*/void Delay_ms( uint time )uint t; / 延时时间 = (time*1003+16)us while(time-)for( t = 0; t 82; t+ );/*/ 正常工作指示 void Normal_work(void)Normal_Work_LED = 1;Delay_ms(500);Normal_Work_LED = 0;Delay_ms(500);void After_Power_Down(void)uchar i ;for( i = 0; i 100;

12、 i+ )P0 = 0x0f; Delay_ms(500);P0 = 0x00;Delay_ms(500);/*/ 中断初始化 void Intp_init(void)IT0 = 0; /外部中断源 0 为低电平触发EX0 =1; /允许外部中断EA = 1; /开总中断文案大全实用标准文档/*/ 主程序 /*/= 0; Power_Down_LED_INT0 = 1; while( Power_Down_Wakeup_INT0 = 0 ) nop();Power_Down_LED_INT0 = 0;掉电唤醒状态指示/ 等待高电平void main()uchar j = 0;uchar wak

13、eup_counter = 0; /P0 = 0x00;Chip_Start_LED = 1; /Intp_init(); / while(1)P2 = wakeup_counter; wakeup_counter+; for( j = 0; j 250; j+ )Normal_work(); / Power_Down_Flag = 1; / PCON = 0x02;_nop_();_nop_();_nop_();_nop_();After_Power_Down(); /*/ 中断服务/*/ void INT0_Service(void) interrupt 0 if( Power_Down_

14、Flag )Power_Down_Flag记录掉电次数单片机开始工作外中断 0 初始化系统正常工作指示系统开始进入掉电状态掉电唤醒后else / 未掉电状态文案大全实用标准文档N_Power_Down_LED_INT0 = 1; / while( Power_Down_Wakeup_INT0 = 0 ) _nop_();N_Power_Down_LED_INT0 = 0;不是掉电唤醒指示/*/STC12C5A60S2 A/D 转 换 模 块/说明: STC12C5A60S2单片机有 8路 10位高速 AD转换器 ,P10-P17涉及寄存器: P1ASF(模拟功能控制寄存器 ) 、ADC_CON

15、TR(AD控C制寄存器 ) ADC_RES、 ADC_RESL转( 换结果寄存器 )/ 动 A/D 转换/ 转换/注意 :、初次打开内部 A/D 模拟电源需适当延时等内部模拟电源稳定后, 再启启动 A/D 后,在转换结束前不改变任何 I/O 口的状态 , 有利于高精度 A/D/ 正确/若能将定时器 / 串行/ 中断系统关闭更好。、A/D 转换模块使用的时钟为内部 R/C振荡器所产生的系统时钟、由于使用两套时钟 ,设置好 ADC_CONT后R要加 4 个空延时操作才可以读到 ADC_CONT寄R 存器的值程序说明:/ 结果通过/12864本程序实现 P10 口作为 A/D采集输入口 , 对外部电

16、压的测量并将测量和串口显示出来/*/#include #include #include lcd.h#define ADC_POWER 0x80 /AD 电源控制#define ADC_START 0x08 /AD 转换控制文案大全#define ADC_FLAG 0x10 /AD 转换完成#define Speed_00x00 /540 clk#define Speed_10x20 /360 clk#define Speed_20x40 /180 clk#define Speed_30x60 /90 clk#define ADC00x00 /P1.0#define ADC10x01 /P1.

17、1#define ADC20x02 /P1.2#define ADC30x03 /P1.3#define ADC40x04 /P1.4#define ADC50x05 /P1.5#define ADC60x06 /P1.6#define ADC70x07 /P1.7void AD_init(void);double Result_Calculate(void);void SendData( uchar byte );/*/ A/D初始化 /实用标准文档AUXR1= 0x04;/转换结果高 2 位放在 ADC_RES的低 2 位中低 8 位放在ADC_RESL中P1ASF= 0x01;/P1.0

18、口作为模拟功能A/D 使用ADC_RES= 0x00;/结果清零void AD_init(void)ADC_RESL = 0x00;ADC_CONTR = ADC_POWER|Speed_2|ADC0|ADC_START; / 打开电源 ,180CLK 周期转换 , 选择 P1.0 作输入_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();EADC = 1;EA = 1;/允许 A/D 转换中断 开总中断/*/ 串口初始化 /*/void UART_init(void)文案大全实用标准文档SM0 = 0; /SM1 =

19、 1; /8 REN = 1;BRT = 0xDC;AUXR = 0x15; / /选择串口为方式 1 工作 位数据波特率可变选择独立波特率发生器为串行 口的波特率发生器 , 模式为 1T/*/ 转换结果计算 /*/double Result_Calculate(void)uint temp;double result;temp = ADC_RES * 256 + ADC_RESL;result = temp * 4.94 / 1024;return result;/*/ 串口发送数据 / void SendData( uchar byte )SBUF = byte; while(!TI);

20、TI = 0; /*/ 主程序 /*/void main()Init_LCD();AD_init();UART_init();while(1);/*/ A/D 中断服务 / void AD_Service(void) interrupt 5 ADC_CONTR &= !ADC_FLAG; / 清标志 Printf_Decimal(Result_Calculate();文案大全实用标准文档ADC_RES =ADC_RESL0x00;= 0x00;ADC_CONTR = ADC_POWER|Speed_2|ADC_START; / 开始下一次转换 _nop_();_nop_();_nop_();_

21、nop_();#include #include #define uchar unsigned char #define uint unsigned intsbit PSB = P04; / sbit RS = P07; / sbit RW = P06; /串 / 并行接口选择 1- 并行 0- 串行sbit E = P05; /并行使能 , 串行同步时钟并行数据 / 命令选择 , 串行片选 0- 指令 1- 数据 并行读写选择 0- 写 1- 读 串行数据口void Delay_ms( uint time ); /延时uchar Busy(void); / 读忙 uchar Read_Sta

22、tus(void);/ 读状态 uchar Read_Date(void); /读数据void Write_Cmd( uchar cmd ); /写命令void Write_Date( uchar date );/写数据void Init_LCD(void);/ 初始化 LCD void Location( uchar x, uchar y );/设定显示位置void Clear_Screen(void);/ 清屏 void Write_str( uchar *p );void Printf_Decimal(double Num);#include lcd.hextern void SendD

23、ata( uchar byte );/*以下部分为 LCD的驱动程序 */* /* 名称 : Delay_ms() /* 功能 : 实现软件延时 /* 输入 : time -时间参数/* 输出 : 无延时时间 = (time*1003+16)us 延时时间 = (time*499+16)us/* void Delay_ms( uint time ) uint t; /82, while(time-)/41,文案大全实用标准文档for( t = 0; t 41; t+ );/*/* 名称 : Busy()/* 功能 : 读取忙状态/* 输入 : 无/* 输出 : 1- 忙 0- 空闲 uchar

24、 Busy(void)uchar busy,flag;Delay_ms(1);busy = Read_Status();if( busy & 0x80 )flag = 1;elseflag = 0;Delay_ms(1);return flag;/*/* 名称 : Read_Status()/* 功能 : 读 12864 状态/* 输入 : 无/* 输出 : status- 当前状态*/* uchar Read_Status(void)uchar status;RS = 0;RW = 1;E = 0;_nop_();_nop_();_nop_();E = 1;Delay_ms(1);statu

25、s = P2;Delay_ms(1);E = 0;_nop_();_nop_();return status;文案大全*/实用标准文档/*名称Write_Cmd()/*功能向 12864 写命令/*输入cmd - 命令参数/*输出无/*void Write_Cmd( uchar cmd )RS = 0;RW = 0;E = 0;Delay_ms(1);P2 = cmd;Delay_ms(1);/ 等待数据稳定E = 1;Delay_ms(1);E = 0;/*名称Write_Date()/*功能向 12864 写数据/*输入date - 待写入的数据/*输出无void Write_Date(

26、uchar date )while(Busy();RS = 1;RW = 0;E = 0;_nop_();_nop_();P2 = date;Delay_ms(1);/ 待数据稳定E = 1;Delay_ms(1);E = 0;_nop_();_nop_();/* 名称 : Read_Date()文案大全实用标准文档/* 功能: 向 12864 读数据/* 输入 : 无/* 输出 : date - 返回的数据 /*/ uchar Read_Date(void)uchar date;while(Busy(); / 忙RS = 1;RW = 1;E = 0;_nop_();_nop_();_nop

27、_();E = 1;Delay_ms(1);date = P2;Delay_ms(1);E = 0;_nop_();return date;/*/* 名称 : Init_LCD()/* 功能 : 初始化 LCD/* 输入 : 无/* 输出 : 无/*/void Init_LCD(void)Delay_ms(4);PSB = 1;/ 并行方式Delay_ms(4);Write_Cmd(0x0c);/ 开显示关游标Delay_ms(4);Clear_Screen();/ 清屏/*/*名称Location()/*功能设定显示位置/*输入x,y -X 轴点 -Y 轴点/*x只能是 1-4 中的一个数/

28、*Y只能是 0-7 中的一个数/*输出无文案大全实用标准文档/*/ void Location( uchar x, uchar y ) uchar position;if( x = 1 )x = 0x80;else if( x = 2 )x = 0x90;else if( x = 3 )x = 0x88;else if( x = 4 )x = 0x98;position = x + y;Write_Cmd(position);Delay_ms(2);/*/* 名称 : Clear_Screen()/* 功能 : 清屏/* 输入 : 无/* 输出 : 无 void Clear_Screen(vo

29、id)Write_Cmd(0x34); /扩充指令Delay_ms(11); /10msWrite_Cmd(0x30); /基本指令Delay_ms(1);Write_Cmd(0x01);/ 清屏Delay_ms(10);/*/*名称:Write_str()/*功能:向 12864 里写字符串/*输入 :*p - 字符串地址/*输出 :无void Write_str( uchar *p ) while( *p != 0 )Write_Date(*p); p+;文案大全实用标准文档/*/*名称:Printf_Decimal()/*功能:打印浮点类型数据/*输入:double Num - 要打印的

30、数据/*输出:无/*/void Printf_Decimal(double Num)uchar s6 = 0,0,46,0,0;uint t;t = (uint)(Num * 1000);s0 = t/10000+48;s1 = t%10000/1000+48;s3 = t%1000/100+48;s4 = t%100/10+48;s5 = t%10+48;Location(1,2);Write_str(s);SendData(s0);SendData(s1);SendData(s2);SendData(s3);SendData(s4);SendData(s5);SendData(t);/*/

31、 STC12C5A60S2 PCA/PWM 模 块/ 说明: STC12C5A60S2 单片机有两路可编程计数器阵列 (PCA)模块, 可用于软件/ 定时器 , 外部脉冲的捕捉、高速输出以及脉宽调制(PWM)输出/ 涉及寄存器: CMOD(PCA工作模式寄存器 ) CCON(PCA控制寄存器 )/ CCAPM0,CCAPM1(PCA 比较/ 捕获寄存器 )/ CH,CL(PCA的 16位计数器 ) 、CCAPnL,CCAPnH(PCA捕捉 /比较寄存器 )/ PCA_PWM0,PCA_PWM1(PCA 模块 PWM寄存器 )/AUXR1(辅助寄存器 1)/ 程序说明: 本程序实现对 PCA/P

32、WM模块的四种工作模式的测试。文案大全实用标准文档/ 始化/ 在相应/ 方式注意:当选择相应的模式时 , 需在主函数内和中断服务内更改相应模式的初和相应的中断服务程序。去掉注释即可, 若要更改相应模式的功能 , 需的初始化函数里更改相应的参数 , 脉宽调制 (PWM默) 认设置为无中断/*/#include #include #define uchar unsigned char#define uint unsigned int/* 高速模式变量更改 */ #define FOSC 12000000#define T100KHz (FOSC/2/100000) / /(2*CCAP0L)高速脉

33、冲输出频率计算 : f = PCA 模块的时钟源/CCAP0L = PCA /* 定时模式变量更改 */ #define T5ms (0.005*FOSC) /* #define DR_50 0x7f #define DR_10 0x19*PWM 模式变量更改/50%/10%/*/占空比占空比时钟源选择 */时钟源 /2/f定时计数值 =T/(1/PCA 的时钟源 )#define CLK_0 0x00 /Sysclk/12 #define CLK_1 0x02 /Sysclk/2#define CLK_2 0x04 / 定时器 0 的溢出脉冲#define CLK_3 0x06 /ECI/P

34、1.2(P4.1) 输入的外部时钟 #define CLK_4 0x08 /Sysclk#define CLK_5 0x0a /Sysclk/4#define CLK_6 0x0d /Sysclk/6#define CLK_8 0x0e /Sysclk/8模式选择#define H_model 0x4d /#define T_model 0x49 /#define P_model 0x42 /#define PL_model 0x63 /#define PH_model 0x53 /#define PHL_model 0x73 /#define CU_model 0x61 /16#define

35、 CD_model 0x51 /16#define CUD_model 0x71 /16高速输出模式 , 中断模式 定时模式无中断 PWM模式 由低变高可中断 PWM模式 由高变低可中断 PWM模式 高低都可中断 PWM模式位捕获 , 上升触发中断模式 位捕获 , 下降触发中断模式 位捕获 , 跳变触发中断模式文案大全时的 CCAP0L值实用标准文档uint value = T100KHz; /100kHzuint time = T5ms; /5ms时的 CCAP0L和 CCAP0H值uint test = 0;/sbit LED = P17; /测试用 , 要删除 用来观测定时模式和捕获模式

36、的现象 定时模式时 500MS闪烁 , 捕获模式时捕获一次时取反/*函数声明 */void HP_init(void); /高速模式初始化void PP_init(void); /PWM 模式初始化void TP_init(void); /定时器模式初始化void CD_init(void); /捕获模式初始化/*/ H_model 初始化/*/void HP_init(void)CMOD= CLK_4; /PCACCAPM0= H_model; /CCAP0L= value;CCAP0H= value8;value +=T100KHz;CR = 1; /EA = 1; /时钟源为 Syscl

37、k 高速输出模式开启 PCA计数器 开总中断/*/ P_model 初始化/*/void PP_init(void)CMOD =CLK_4;/时钟源为 SysclkCCAPM0= P_model; /无中断 PWM模式CCAP0L =DR_50;/%50占空比CCAP0H= DR_50;/当 CL 值大于 CCAP0L时输出为高, 反之输出为低/当 CL 溢出时 CCAP0H的值装载到CCAP0L中CR = 1;/开启 PCA计数器/ 当不使用定时 0 溢出为时钟源时 ,PWM输出的频率 =PCA的时钟源 /256/使用定时器溢出的时钟源时, 可设定定时器的值对输出频率的改变/分频为 0-25

38、6 分频/*/ T_model 初始化 / void TP_init(void)文案大全实用标准文档CMOD =CLK_4; /时钟源为SysclkCCAPM0= T_model; /定时模式CCAP0L =time; /CCAP0H= time8; /定时5mstime += T5ms;CR = 1;EA = 1;/*/ CD_model 初始化 / void CD_init(void)CMOD = CLK_4;CCAPM0 = CD_model;CR = 1;EA = 1;/ 主程序 /*/void main()CD_init();/PP_init();/HP_init();/TP_ini

39、t(); while(1)/*/ 中断服务 /*/void CD_Service(void) interrupt 7CCF0 = 0;LED = LED;/*void TP_Service(void) interrupt 7清除 PCA计数器溢出中断标志CCF0 = 0; /文案大全实用标准文档test+;if( test = 100 )test = 0;LED = LED;CCAP0L = time;CCAP0H = time8;time += T5ms; */*void HP_Service(void) interrupt 7CCF0 = 0; / 清除 PCA计数器溢出中断标志 CCAP

40、0L = value;CCAP0H = value8;value += T100KHz; */* /说明: STC12C5A60S2 单片机有 2 个采用 UART工作方式的全双工串行通信接口 两个串口都有 4 种工作方式 , 两种波特率可变,两种波特率固定的 串口 1 为 TxD-P3.1 引脚 RxD-P3.0 引脚 串口 2 为 当在 P1 口时 TxD2-P1.3 引脚 RxD2-P1.2 引脚 当在 P4 口时 TxD2-P4.3 引脚 RxD2-P4.2 引脚/寄存器 )/涉及寄存器: SBUF( IP(Bit1 - PD/12864程序说明:BRT(独立波特率发生器数据缓冲寄存器

41、中断优先级寄存器) AUXR( 辅助寄存器 )SCON(串行控制寄存器 )PCON(电源控制寄存器 )IE( 中断控制寄存器 )IPH()SADEN()SADDR()WAKE_CLKO时( 钟唤醒控制单片机进入掉电模式/程序实现从 PC端发送数据到单片机 , 单片机将接收到的数据通过STC12C5A60S2 串 行 通 信 模显示出来/* /文案大全实用标准文档#include #include #include LCD.h#define uchar unsigned char#define uint unsigned int#define BTL 9600 /若要更改波特率直接更改此处, 当波特率大于 9600 时需修改相应的接收程序 ,/ 可选波特率有以下 : 否则有可能

温馨提示

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

评论

0/150

提交评论