单片机听课笔记18课金沙滩2014年更新_第1页
单片机听课笔记18课金沙滩2014年更新_第2页
单片机听课笔记18课金沙滩2014年更新_第3页
单片机听课笔记18课金沙滩2014年更新_第4页
单片机听课笔记18课金沙滩2014年更新_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机听课笔记1-8课金沙滩工作室2014年更新 Lesson 1: 1、用公司用的单片机/视频用的单片机 2、书是用来查的。 3、单片机方面不怎么需要软件仿真 4、KEIL软件安装(keilc51) 30分钟-35分钟 双击-*next J -next-*默认路径fnext1,2,3, email格式一next自动安装-*去掉三个选项的V finish。 桌面上出现KEIL快捷方式。 5、文字大小,文字颜色的设定:edit-*configuration-*colour sbitADDR0 = PlA0; sbitADDRl = PlAl; sbit ADDR2 = P1A2; sbit AD

2、DR3 = P1A3; sbitENLED = PlA4; void main() ENLED = O; ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDRO = 0; LED = O; while(l); 14、安装usb-串口的驱动; 查找COM IL我的电脑一设备管理器。 选择单片机型号打开hex文件选择使用的COM 口波特率默认下次冷启动选择:与下载无关一 (STC89C52RC冷启动单片机)先点下载后上电。 作业: 3了解KEIL软件的基本用法和单片机编程流程,能够独立完成编程下载等基本操作。 Lesson 3:硬件基础学习 1、电磁干扰EMI,电磁兼容EMC

3、 2、低频滤波电容:去除电源低频纹波,稳定电源作用。 铝电解电容、袒电容(有色标的一端为正极,性能好)、瓷电容。 3、高频滤波电容:对高频短路,町滤去高频干扰。(104 = 0.1uF) 4、电容选取两个主要参数:耐压值、容值。 5、三极管的功能:开关控制(100lble,则工作在饱和状态)、信号放大、电平转换。 6、三八译码器:74HC138地址输入端c/b/a及E3使能端接4.7K电阻上拉。 7、双向缓冲器:74HC245 DIR为高,A-B;输入端接4.7K 拉电阻。 i30000;i+);是用法一的特殊情况,相当于执行语句为不执行。 三、for(;)相当于 while(l) 5、whi

4、le语句的用法 一、while(条件表达式) 循坏语句; 6、函数名的类型,就是return值的类型。Void main() void表示函数名,无返回值,int main (),返回值为整型。 7、变量在使用之前,先定义。 i100; i+); I = 100; while(i-); 精确延时:用定时器定时 利用库函数-nop-(); 9、肉眼分辨率:20ms下看不到闪烁;50ms间隔能清楚看见亮灭。 10软件仿真: 先设置 target options-*target-*11.0592M, debug-*选中 use simulator-*ok 点击start debug session图

5、标,进入仿真界面。 设置断点:双击,若设置不了 target optionsfC5Llevel,设置优化登记一般选8。 RST复位run全速运行。然后看时间情况。(50分钟附近) 11、程序一:小灯的闪烁(视频位置与笔记顺序不一致) # include sbit LED = P0A0; sbitADDRO= PlA0; sbit ADDR1 = P1A1; sbitADDR2 = P1A2; sbit ADDR3 = P1A3; sbitENLED = PlA4; void main() unsigned int i = 0; ENLED = O; ADDR3 = 1; ADDR2 = 1;

6、ADDR1 = 1; ADDRO = 0; LED = O; for(;)/while(l) LED = O; for(i = 0; i20000; i+); LED = 1; for(i = 0; i20000; i+); 12、程序二:流水灯程序(法一) # include sbit ADDRO = P1AO; sbit ADDR1 = P1A1; sbit ADDR2 = P1A2; sbit ADDR3 = P1A3; sbit ENLED = P1A4; void main() unsigned int i = 0; ENLED = 0; ADDR3 = 1; ADDR2 = 1;

7、ADDR1 = 1; ADDRO = 0; while(l) PO = OXFE; for(i = 0; i30000; i+); PO = OXFD; for(i = 0; i30000; i+); P0 = OXFB; for(i = 0; i30000; i+); PO = 0XF7; for(i = 0; i30000; i+); PO = OXEF; for(i = 0; i30000; i+); PO = OXDF; for(i = 0; i30000; i+); PO = OXBF; for(i = 0; i30000; i+); PO = 0X7F; for(i = 0; i3

8、0000; i+); 13、移位指令()、取反指令()。 14、程序二:流水灯程序(法二) # include sbitADDRO = PlAO; sbitADDRl = PlAl; sbit ADDR2 = P1A2; sbit ADDR3 = P1A3; sbitENLED = PlA4; void main() unsigned chart = 0; unsigned int i = 0; ENLED = O; ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDRO = 0; while(l) PO = (OxOlcnt+); for(i = 0; i= 8) en

9、t = 0; 作业: 4、独立完成流水灯右移操作。 5、独立完成左移到头,接着右移,右移到头,接着左移的程序。 Lesson 5定时器和数码管基础 1、逻辑运算逻辑与: 二、设计数寄存器 TH0、TLO 的初值。例如:TH0 = 0XB8; TLO = 0X00;定时 20ms THO = 0XB8; TLO = 0X00;定时 1ms 三、设TCON(控制寄存器TF位,TR位),通过TRO置1来让定时器开始计数例如:TRO = 1; 四、判断TCON寄存器的TFO位,检测定时器的溢出情况。 计算计数寄存器初值的方法:12* (65536-X) /11059200 = 20ms 6、Is闪烁一

10、次的小灯程序 #in clude sbit LED = P0A0; sbit ADDRO = P1AO; sbit ADDR1 = P1A1; sbit ADDR2 = P1A2; sbit ADDR3 = P1A3; sbit ENLED = P1A4; void main() unsigned chart = 0; ENLED = 0; ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDRO = 0; TMOD = 0 x01; while(l) 定时20ms TFO = C| THO = OXBf TLO=0X00; cnt+; if(cnt = 50) ent =

11、 0; LED =-LED; 7、数码管分:位、段(A/B/C/D/E/F/G/DOP)两个概念 sbit ADDR1 = P1A1; sbit ADDR2 = P1A2; sbit ADDR3 = P1A3; sbit ENLED = P1A4; void main() unsigned chart = 0; ENLED = 0; ADDR3 = 1; ADDR2 = 0; ADDR1 = 0; ADDRO = 0; P0 = 0XF9; while(l); 9、1位数码管从(每隔1秒加1) #in clude sbitADDRO = PlAO; sbit ADDR1 = P1A1; sbi

12、t ADDR2 = P1A2; sbit ADDR3 = P1A3; sbit ENLED = P1A4; unsigned char code ledchar = 0 xc0,0 xf9,0 xa4/0 xb0/ 0 x99,0 x92,0 x82,Oxf void main() unsigned chart = 0; unsigned char sec = 0; ENLED = 0; ADDR3 = 1; ADDR2 = 0; ADDR1 = 0; ADDRO = 0; TMOD = 1; THO = 0XB8; TLO = 0X00; TRO = 1; while(l) if(TFO =

13、 1) TFO = 0; THO = 0XB8; TLO = 0X00; cnt+; if(cnt= 50) ent = 0; P0 = ledcharsec; sec+; if(sec= 16) sec = 0; 作业: 1、熟练掌握单片机定时器的原理和应用方法 2、通过研究定时器模式1的示意图,自己打开STC89C52RC手册的定时器部分,独立研究模式0,模式1,模式2, 和模式3的示意图,锻炼研究示意图的能力。 3、使用定时器实现延时,完成左右移动的流水灯程序。 4、了解数码管的原理,掌握数码管的真值表计算方法。 5、编程实现数码管静态显示秒表的倒计时。 Lesson 6中断与数码管动态

14、显示 1、if语句的用法 (1)if (条件表达式) 语句1: 只判断一次,只执行一次,然后执行下面的程序。 (2)if (条件表达式) 语句1: else 语句2; (3)if(表达式1) 语句1: elseiff表达式1) 语句1; elseiff表达式1) 语句1; else 语句n 旦有一个为真,执行完相应语句后,跳出if语句。 2、switch语句的用法 法一: Switch(表达式) Case常量表达式1:语句1; Case常量表达式2:语句2; Case常量表达式n:语句n; Default:语句 n+1; 法二: Switch)表达式) Case常量表达式1:语句1; brea

15、k; Case常量表达式2:语句2; break; Case常量表达式n:语句n; break; Default:语句 n+1;break; 3、动态显示利用人肉眼的视觉暂留现彖(余晖效应) 10ms以必须重新刷新同一个数码管。 ENLEDADDR3 选中 ADDR2 ADDR1 ADDR0 切换 4、6位显示的秒表程序(if语句) #in clude sbitADDR0 = PlA0; sbit ADDR1 = P1A1; sbit ADDR2 = P1A2; sbit ADDR3 = P1A3; sbit ENLED = P1A4; unsigned char code ledchar =

16、 0 xc0,0 xf9,0 xa4,0 xb0, 0 x99,0 x92,0 x8乙 Oxf unsigned char ledbuff二Oxff,Oxff/)xftOxftOxftOxff;初始值 OXFF void main() unsigned intt = 0; unsigned long sec = 0; unsigned char i = 0; ENLED = 0; ADDR3 = 1; TMOD = 0X01; THO = OXFC; TLO = 0X67; TRO = 1; while(l) if(TFO = 1) TFO = 0; THO = OXFC; TLO = 0X6

17、7; cnt+; if(cnt=1000) ent = 0; sec+; ledbuffO = ledcharsec%10; ledbuffl = ledcharsec/10%10; ledbuff2 = ledcharsec/100%10; ledbuff3 = ledcharsec/1000%10; ledbuff4 = ledcharsec/10000%10; ledbuff5 = ledcharsec/100000%10;/ if(i = 0) ADDR2 = 0; ADDR1 = 0; ADDRO = 0; i+; PO = ledbuffO); else if (i = 1) AD

18、DR2 = 0; ADDR1 = 0; ADDRO = 1; i+; PO = ledbuffl; else if (i = 2) ADDR2 = 0; ADDR1 = 1; ADDRO = 0; i+; PO = ledbuff2; else if (i = 3) ADDR2 = 0; ADDR1 = 1; ADDRO = 1; i+; PO = ledbuff3; else if (i = 4) ADDR2 = 1; ADDR1 = 0; ADDRO = 0; i+; PO = ledbuff4; else if (i = 5) ADDR2 = 1; ADDR1 = 0; ADDRO =

19、1; i = 0; PO = ledbuff5); 5、6位显示的秒表程序(switch语句) #in clude sbitADDRO = PlAO; sbitADDRl = PlAl; sbit ADDR2 = P1A2; sbit ADDR3 = P1A3; sbitENLED = PlA4; unsigned char code ledchar = 0 xc0,0 xf9,0 xa4/0 xb0/ 0 x99,0 x92,0 x8乙 Oxf unsigned char ledbuff二Oxff,OxftOxftOxftOxff,Oxff;初始值 OXFF void main() unsi

20、gned intt = 0; unsigned long sec = 0; unsigned char i = 0; ENLED = O; ADDR3 = 1; TMOD = 0X01; THO = OXFC; TLO = 0X67; TRO = 1; while(l) if(TFO = 1) TFO = 0; THO = OXFC; TLO = 0X67; cnt+; if(cnt=1000) ent = 0; sec+; ledbuffO = ledcharsec%10; ledbuffl = ledcharsec/10%10; ledbuff2 = ledcharsec/100%10;

21、ledbuff3 = ledcharsec/1000%10; ledbuff4 = ledcharsec/10000%10; ledbuff5 = ledcharsec/100000%10;/ PO = OXFF;/消除鬼影操作。 switch(i) case 0:ADDR2 = 0; ADDR1 = 0; ADDRO = 0; i+; PO = ledbuffO; break; case 1:ADDR2 = 0; ADDR1 = 0; ADDRO = 1; i+; PO = ledbuffl;break; case 2:ADDR2 = 0; ADDR1 = 1; ADDRO = 0; i+;

22、 PO = ledbuff2;break; case 3:ADDR2 = 0; ADDR1 = 1; ADDRO = 1; i+; PO = ledbuff3;break; case 4:ADDR2 = 1; ADDR1 = 0; ADDRO = 0; i+; PO = ledbuff4;break; case 5:ADDR2 = 1; ADDR1 = 0; ADDRO = 1; i = 0; PO = ledbuff5;break; default:break; 6、使用中断实现秒表程序(中断) #in clude sbit ADDRO = P1AO; sbit ADDR1 = P1A1;

23、sbitADDR2 = PlA2; sbit ADDR3 = P1A3; sbitENLED = PlA4; unsigned char code LedChar=OxCO, 0 xF9, 0 xA4, OxBO, 0 x99, 0 x92, 0 x82, OxF unsigned char LedBuff6=0 xFFz OxFF, OxFF, OxFF, OxFF, OxFF; unsigned intt = 0; void main() unsigned long sec = 0; ENLED = O; ADDR3 = 1; TMOD = 0 x01; THO = OxFC; TLO=

24、0 x67; TRO = 1; EA = 1; ETO = 1; while(l) if(cnt = 1000) ent = 0; sec+; LedBuffO = LedCharsec%10; LedBuffl = LedCharsec/10%10; LedBuff2 = LedCharsec/100%10; LedBuff3 = LedCharfsec/1000%10; LedBuff4 = LedCharfsec/10000%10; LedBuff5 = LedCharsec/100000%10; unsigned char i = 0; void lnterruptTimerO() i

25、nterrupt 1 THO = OxFC; TLO= 0 x67; cnt+; PO = OxFF;/ 消隐 switch(i) case 0: ADDR2=0; ADDR1=O; ADDRO=O; i+; PO=LedBuffO;break; case 1: ADDR2=0; ADDR1=O; ADDRO=1; i+; PO=LedBuffl;break; case 2: ADDR2=0; ADDR1=1; ADDRO=O; i+; P0=LedBuff2;break; case 3: ADDR2=0; ADDR1=1; ADDRO=1; i+; P0=LedBuff3;break; ca

26、se 4: ADDR2=1; ADDR1=O; ADDRO=O; i+; P0=LedBuff4;break; case 5: ADDR2=1; ADDR1=O; ADDRO=1; i=0; PO二LedBuff;break; default:break; 7、数码管不亮的地方发暗,数码管鬼影怎么解决?秒表加1时,显示抖动怎么解决? 消除鬼影:见程序二上面黄色部分。 显示抖动:使用中断消除。 8、中断优先级(固有优先级) 中断函数编号 中断名称 中断标志位 中断使能位 中断向量地址 默认优先级 0 外部中断 IE0 EXO 0 x0003 1(最高) 1 T0 TFO ETO OxOOOB 2

27、 2 外部中断 IE1 EX1 0 x0013 3 3 T1 TF1 ET1 OxOOlB 4 4 UART TI/RI ES 0 x0023 5 5 T2 TF”EXF2 ET2 0 x002B 6 9、中断58分钟后。进入中断条件:第一打开中断、符合中断条件、中断入II正确。 10、 中断使能寄存器:IE可位寻址。关注:EA、ETO位。 11、 中断向量地址:决定中断入II号x*8 +3 =中断向量地址。 定时器0:中断入口号1;定时器1,中断入口号3。 作业: 3、彻底理解中断的原理和应用方法,关闭教程自己把本章节程序编写完毕,卜载实践。 4、尝试修改程序,只显示有效位 5、尝试写一个从

28、999999开始倒计时的程序,通过改用定时器T1的中断来完成。 Lesson 7变量进阶与LED点阵(点阵部分需要完善) 1、变量的作用域 (1)局部变量:只在函数部使用的变量 (2)全局变量: 2、全局变量的副作用: A, 降低函数的独立性一修改,对任何一个函数的修改,都可能影响其他函数。 B, 降低函数的通用性一不利于函数重复调用 C, 降低程序的清晰度每个函数执行,都可能改变全局变量的值。 D, 全局变量永久占据存。 3、原则:能用局部变量,就不用全局变量。 全局变量和局部变屋同名,在局部变量作用域I制,局部变量有效。 4、变量的存储类别: 自动变量:函数中的局部变量,如不加static

29、关键字修饰,都属于自动变量,也叫做动态变量。 静态变量:所有全局函数都属于静态变量,局部变量如呆加了 static关键字修饰,也是静态变量。 5、点阵取模软件的用法 A, 新建图像:8*8, B, 模拟动画:放人格点值最大,画图,选中的点为灭,白色的为亮, C, 修改图像;黑白反选,确定要显示的容。 D, 取模方式:C51格式。 E, 参数设置:一其他选项选择横向取模+ 其他默认(选中:字节倒序(点阵第一行左侧DB0),保留、任何时候都) F, 基本操作:保存图像,打开图像,便于下次操作。 6、显示汉字:需要至少16*16的显示屏。 7、动态显示:例如,I * u可以新建一个8*40行的点阵。

30、 (点阵显示部分重看之后待完善) 8、左右移动方法一,图像侧过来,把板子侧过来就可以了。 9、左右移动方法二:二维数组。 10、Unsigned char a23 = 1, 2, 3, 4, 5, 6; Lesson 8函数进阶与按键 一、单片机最小系统解析 1、电源:5V、3.3V两种: 数字电乍各电 1原:24V、12V、5V、3.3V、2.5V、1.8V 2、无源晶振(晶体):需接起振电容,不依赖电源电压,接好电路就工作; 有源晶振(振荡器):需接电源,输出端直接接XTAL1,依赖工作电压,适用高精度场合。 3、复位电路 上电复位:复位时间t = 1.2RC故:t = 1.2M.7K*

31、0.1*0.000001F = 564usz大于两个机器周期约2us,故能起 到复位作用。 手动复位:人手按下按键的时间一般100ms以上,快的也有几十ms,故满足复位条件。 18欧的电阻作用是放电时,K、R、C形成闭合回路,消除干扰。 软件复位。 二、函数的调用 1、例如:利用 void secondcount() void ledrefresh()函数优化秒表程序。 2、静态变量只第一次有效。 3、函数调用时,不加函数类型(无void等),加分号: 函数调用之前,必须进行定义或声明; 函数声明的时候必须加:函数类型,函数的形参,最后加一个分号。 4、函数体顺序:函数声明一main()f子函

32、数排序一中断函数。 5、实参,形参27-32分钟。 三、独立式按键 VCC .7k kl VIA 准双师O 口 只有部输出为高电平,MCU的10 II就为高电平,才能读键。故有P2 = 0XF7; #include/ 用 K1-K4 控制 LED6-9 的亮灭 sbit ADDR0 = PlA0; sbit ADDR1 = P1A1; sbit ADDR2 = P1A2; sbit ADDR3 = P1A3; sbit ENLED = P1A4; sbit LED9 = P0A7; sbit LED8 = P0A6; sbit LED7 = P0A5; sbit LED6 = POM; sbi

33、t KEY1 = P2A4; sbit KEY2 = P2A5; sbit KEY3 = P2A6; sbit KEY4 = P2A7; main() ENLED = 0; ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDRO = 0; P2 = 0XF7; /KEY1=4接高电平、KEY0UT4接低电平 while(l) LED9 = KEYl; /把读的KEY1的值赋给LED9; LED8 = KEY2; LED7 = KEY3; LED6 = KEY4; (法二) Main程序 #in clude #include”key.h” main() ENLED = 0;

34、 ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDRO = 0; PO = OXff; KEY0UT1 = 0; while(l) P0 = (P24)|0 xf0; 头文件 #ifndef _KEY_H_ #define _KEY_H_ sbitADDRO = PlAO; sbit ADDR1 = P1A1; sbit ADDR2 = P1A2; sbitADDR3 = PlA3; sbitENLED = PlA4; sbit KEY1 = P2A4; sbit KEY2 = P2A5; sbit KEY3 = P2A6; sbit KEY4 = P2A7; sbit

35、 KEY0UT1 = P2A3; sbit KEYOUT2 = P2A2; sbit KEYOUT3 = P2A1; sbit KEYOUT4 = P2A0; #endif 程序二:KI、K2控制数字加减的程序,防抖动 #inelude /include ,key.hH void delay() unsigned int i = 2000; while(i-); main() unsigned char n = 0; PO = OXFF; KEY0UT1 = 0; ENLED = O; ADDR3 = 1; ADDR2 = 0; ADDR1 = 0; ADDRO = 0; 控制最右边数码管 D

36、S1 亮 PO = ledcharO; while(l) if(!KEYl) /相当于if(KEYl = 0)判断键是否按下 delay(); if(!KEYl)/再判断健是否按卜 if(n = 9) n = 0; else n+; PO = ledcharn; while(!KEYl); 等待按键1松开的语句。 if(!KEY2) delay(); if(!KEY2) if(n = 0) n = 9; else n-; PO = ledcharn; while(!KEY2); 程序三、用小灯构成的5位二进制数表示16个按键,11,22,:160; #include include Hkey.

37、hH void delay(); main() ENLED = O; ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDRO = 0; PO = OxFF; while(l) KEYOUT1 = 0; KEY0UT2 = 1; KEY0UT3 = 1; KEY0UT4 = 1; if(KEYl = 0) delay(); if(KEYl = 0) PO = if(KEY2 = 0) delay(); if(KEY2 = 0) PO = 2; if(KEY3 = 0) delay(); if(KEY3 = 0) PO = 3; if(KEY4 = 0) delay(); i

38、f(KEY4 = 0) PO = 4; while(KEYl = 0)| (KEY2 = 0)|(KEY3 = 0)|(KEY4 = 0);/第一行检测完 KEY0UT1 = 1; KEY0UT2 = 0; (0 nn 七 32 H 0d (0 Un ZA盖 oAeop (0 nn 0)七 ln2 H od (0 hh富工七 oAeop (I nH iauje七 甘 H 寸 InoAUJN 甘 H mlnoAUJN olep (T nH TAUJE七 甘 H 寸JLAOA4I on ELAOA4I X H ZIAOE 甘 n LLno 碾晨匍 gHM、(0 UH 寸诗乂三OH 三(0 s EN

39、) - - (0 s IA3NT_Z乡 宀 宀 602 n od 一 (0 hh 寸)4一 oAeap 一 (0 nH 寸 L2 n od (0 Hn mALAJN)七 if(KEYl = 0) P0 = 9; if(KEY2 = 0) delay(); if(KEY2 = 0) PO = 10; if(KEY3 = 0) delay(); if(KEY3 = 0) PO = -11; if(KEY4 = 0) delay(); if(KEY4 = 0) PO = -12; while(KEYl = 0)| (KEY2=0)|(KEY3 = 0)| (KEY4 = 0);/第三行检测完 KEY

40、0UT1 = 1; KEY0UT2 = 1; KEY0UT3 = 1; KEY0UT4 = 0; if(KEYl = 1) delay(); if(KEYl = 0) PO = -13; if(KEY2 = 0) delay(); if(KEY2 = 0) PO = 14; if(KEY3 = 0) delay(); if(KEY3 = 0) PO = -15; if(KEY4 = 0) delay(); if(KEY4 = 0) PO = -16; 第四行检测完 while(KEYl = 0)| |(KEY2 = 0)|(KEY3 = 0)| |(KEY4 = 0); void delay() unsigned int i = 1000; while(i-); 8课未完待续 Lesson 12指针与LCD1602初识 57分钟后为1602 程序一:用显示字符的形式在LCD上显示字符串与数字

温馨提示

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

评论

0/150

提交评论