基于单片机出租车计价器课题研究设计(c语言编写)_第1页
基于单片机出租车计价器课题研究设计(c语言编写)_第2页
基于单片机出租车计价器课题研究设计(c语言编写)_第3页
基于单片机出租车计价器课题研究设计(c语言编写)_第4页
基于单片机出租车计价器课题研究设计(c语言编写)_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、 日月28完成日期:2010年12 电子信息工程系系: 通信工程业:专 班071级:班 出租车计价器设计题目: 王勉谢明七 学生姓名: 董玉华、许爽指导教师: 目 录 一、设计任务和性能指标 . 3 . 31.1设计任务 . 31.2性能指标二、设计方案 . 4 . 42.1任务分析 . 42.2系统设计三 系统硬件设计 . 6 . 6电源电路3.1 . 6单片机的最小系统3.2 . 7时钟电路3.3 DS1302 . 7显示电路的设计3.4 . 8按键控制的设计3.5 . 9复位电路3.7四、系统软件设计 . 11 . 114.1主程序设计 . 12子程序设计 4.2 . 12子程序 4.2

2、.1 DS1302 . 12子程序流程图4.2.1 DS1302 . 14 4.2.2 显示子程序 . 15 4.2.2 显示子程序流程图 . 17修改时间子程序4.3 五、调试及性能分析 . 18 . 18 5.1 调试步骤 . 18硬件调试5.1.1 . 185.1.2软件调试: . 18性能分析5.2六、心得体会 . 20 七、参考文献 . 20 八、附录 . 21 . 21 附录1、程序清单 . 312 附录系统硬件电路图 一、设计任务和性能指标 1.1设计任务 出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良

3、好性能的计价器无论是对广大出 租车司机朋友还是乘客来说都是很必要的。出租车计价器的主要功能是计价显示、时钟显示、根据白天、黑夜、途中等待来调节营运参数、计量数据查询等。要求用Protel 画出系统的电路原理图(要求以最少组件,实现系统设计所要求的功能),印刷电路板(要求布局合理,线路清晰),绘出程序流程图,并给出程序清单(要求思路清晰,尽量简洁,主程序和子程序分开,使程序有较强的 可读性)。1.2性能指标 1. 开始收费);>10min不同情况具有不同收费标准:白天、晚上、途中等待(2. 数据输出:单价输出、路程输出、总金额输出;3. 晚上切换、复位;按键:启动计时开关、数据显示切换、白

4、天/4. 能手动进行修改单价,但单价设定需密码进入。 二、设计方案 任务分析2.1 出租车计价器基本功能部分是根据里程数来完成总金额的输出。实现方法有两种。所示。采用传感器件,输出脉冲2.1方案一:采用数字电路控制。其原理方框图如图信号,经过放大整形作为移位寄存器的脉冲,实现计价,但是考虑到这种电路过于简单, 性能不够稳定,而且不能调节单价,也不能根据天气调节计费标准,电路不够实用。金额显电源电路及示保护电路移位寄存器单价显里程传感器电路示 数字电路实现框图图2.1 方案二:采用单片机控制。利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程计价功能和价格调节、时钟显示功能。本方案有较大

5、的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们 采用后一种方案。2.2系统设计 键盘电路 单片机 掉电保护 里程输入 i+;i>8 ? Y 结束P > 12 ? Y 结束 X00011 测量温度 X00101 测量湿度显示电路 图2.1电路系统构成框图 主控芯片使用51系列AT89C52单片机,采用高性能的静态80C51设计,由先进工艺制造,并带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位COMS微处理 芯片,市场应用最多。时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片DS1

6、302。采用DS1302作为主要计时芯片、可以做到计时准确。更重要的是,DS1302可以在很小的电流的后备电源(2.55.5V电源,在2.5V时耗电小于300nA)下继续计时,并可编程选择多种充电电流对后备电源进行慢速充电,可以保证后备电源基本不耗电。采用串行数据传输,与单片机硬件连接简单,如果使用时钟芯片DS12887,将采用并行数据 。DS1302传输,占用更多的硬件资源。因此为节省单片机端口,时钟芯片采用它们可以检测磁场及其变化,可在各种与磁场有关的场合中使用。霍尔器件以霍尔效应为其工作基础。霍尔器件具有许多优点,它们的结构牢固,体积小,重量轻,寿命长,安装方便,功耗小,频率高(可达1M

7、HZ),耐振动,不怕灰尘、油污、水汽及盐雾等的污染或腐蚀。活儿现行器件的精度高、线性度好;霍尔开关器件无触点、无磨损、输出波形清晰、无抖动、无回跳、无知重复精度高(可达Im级)。采用了各种步长和保护措施 摄氏度。摄氏度150的霍尔器件的工作温度范围宽,可达-55数据显示模块采用的是LED数码管显示,LCD虽然也能实现显示功能,但在距屏幕1M之外就无法看清数据,不能满足要求,而且在白天其对比度也不能满足要求,因此建议采用LED数码管显示。数码管总共用了12个,其中第一行显示小时和分钟,第二行第 个显示里程数,最后一行显示总价。一个显示单价,后面3按键控制模块使用了3个脉冲开关,其中一个开关负责换

8、位,另一个负责改数,第三 个按键负责切换至等待时间。 三 系统硬件设计 3.1电源电路 因为出租车上的电压时12V,而芯片所需供电电压是5V,所以选择LM7805的经典电 所示:3.1转12V5V的目的。电源电路图如下图路电源电路完成 电源电路图3.1图3.2单片机的最小系统 单片机最小系统采用的是STC89C54芯片,STC89C54是一种低功耗、高新能CMOS 8为微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51铲平指令和引脚完全兼容。偏上FLASH允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有平桥的8为CPU

9、何在系统可编程Flash, 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。使得STC89C54STC89C54具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16为定时器/计数器,一个6向量2级终端结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0HZ静态逻辑操作,支持2中软件可选择节点模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、终端继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到 所示:3.2下一个中断或硬件复位为止。单片机最小系统电路图如下图 单片机

10、最小系统电路图3.2图 3.3 DS1302时钟电路 若采用单片机计时,一方面需要采用计数器,占用阴间资源,另一方面需要设置终端、查询等,同样耗费单片机的资源,并且使用单片机的时钟误差比较大,当长时间使用后会,会出现很大错误,而在系统中采用DS1302则能很好的解决这个问题。DS1302时钟 所示:电路图如图3.3 时钟电路图3.3 DS1302图3.4显示电路的设计 在显示模块需要对时间、单价、总价、路程、等待时间进行显示,采用的是数码管,数码管总共用了12个,其中第一行显示小时和分钟,第二行第一个显示单 个显示里程数,最后一行显示总价。3价,后面 所示:3.4显示电路图(一个数码管)如下图

11、 显示电路图3.4 图 3.5按键控制的设计 按键的设置是为了能够手动更改时间和单价,还有就是手动切换到等待时间的地方,按键采用的是脉冲按键。 所示:3.5按键设置电路图如图 按键控制电路图图3.5 掉电保护3.6掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。掉电保护的芯片较多,如AT24C02 是ATMEL 公司的2KB 字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8 脚的DIP 封装,使用方便。掉电 所示:保护电路图如下图3.6 掉电保护

12、电路图3.6 图 3.7复位电路 复位功能采用的是MAX813L芯片。MAX813L是具有监控电路的微处理芯片,它具有4个功能:1具有独立的看门狗计时器,如果看门狗输入在1.6秒内无变化,就会产生看门狗输出;2掉电或电源电压低于1.25V时,产生掉电输出;3上电时能自动产生200ms宽的 具有人工复位功能,当人工复位端输入低电平时,产生复位信号输出。4复位脉冲; 所示:复位电路如图3.7 复位电路图3.7图 四、系统软件设计 4.1主程序设计 程序的难度主要就是在数码管的显示和外部脉冲的采集部分,分别采用74LS273芯片对数码管进行段选,使数码管显示对应的数,另外使用74LS154对数码管进

13、行位选,选择哪个数码管亮,采用的是动态显示。还有外部脉冲的收集,需要对里程数进行显示,所以 必须要先进行脉冲的采集。 所示:程序流程图如图4.1 程序流程图4.1图4.2 子程序设计 4.2.1 DS1302子程序 4.2.1 DS1302子程序流程图 显示单价、总价、路程、时间等数据,循环扫描进行显示。(如果在一分钟内没有脉 冲,开启终端,显示秒分子程序。 所示:4.2.1子程序流程图如DS1302 开始addr 写入实参数CE=1 SCLK=0 I=0 ADDR低位取 Addr右移一位是否是上升N 沿N Y 上升沿等待上升沿Sclk 子程序流程图图4.2.1 DS1302 4.2.2 显示

14、子程序 显示等待时间及单价、总价、路程子程序void sett() / 。TAB0=Read1302(0x83)/10 。TAB1=Read1302(0x83)_x0010_ 。TAB7=Read1302(0x81)/10 。TAB8=3TAB6=Read1302(0x81)_x0010_。 。TAB3=Coo/10_x0010_TAB2=Coo/100。 。TAB4=Coo_x0010_ if(TAB4<=3&&TAB2=0&&TAB3=0) 。TAB11=8 else TAB11=(8+(Coo-3)*TAB8)_x0010_。 。TAB5=TAB2*

15、TAB8/10 。TAB9=Coo/100*TAB8+Coo_x0010_0*TAB8/100 TAB10=(Coo/10*TAB8+Coo_x0010_*TAB8/10)_x0010_。 显示时间子程序void mmm() / 。 TAB0=Read1302(0x85)/10 。 TAB1=Read1302(0x85)_x0010_ 。 TAB7=Read1302(0x83)/10 TAB8=3。 TAB6=Read1302(0x83)_x0010_ TAB11=(8+(Coo-3)*TAB8)_x0010_。 。TAB5=TAB2*TAB8/10 。TAB9=Coo/100*TAB8+Co

16、o_x0010_0*TAB8/100 。TAB10=(Coo/10*TAB8+Coo_x0010_*TAB8/10)_x0010_ 非计价时的显示时间void mm() / 。TAB0=Read1302(0x85)/10 。TAB1=Read1302(0x85)_x0010_ 。TAB7=Read1302(0x83)/10 。TAB8=3TAB6=Read1302(0x83)_x0010_。 。TAB3=Coo/10_x0010_TAB2=Coo/100。 。TAB4=Coo_x0010_ if(TAB4<=3&&TAB2=0&&TAB3=0) TAB11

17、=8。 else 。TAB11=(8+(Coo-3)*TAB8)_x0010_ 。TAB5=TAB2*TAB8/10 。TAB9=Coo/100*TAB8+Coo_x0010_0*TAB8/100 。TAB10=(Coo/10*TAB8+Coo_x0010_*TAB8/10)_x0010_4.2.2 显示子程序流程图 :4.2.2显示子程序流程图如图所示 开始*p 定义指针TAB 将指针指向数组 值displaytab数组位赋DET将将P赋值给DET,给赋TMP值将P0, N 显示子程序流程图图4.2.2 4.3 修改时间子程序 修改TAB数组里的前5位数据,分别为小时、分钟、单价. 五、调试

18、及性能分析 5.1 调试步骤 5.1.1硬件调试 脚弄混32脚和错误1:LM7805封装时 脚手工矫正3LM78052脚和解决办法:1、将 、利用飞线重新手工焊接 2错误2:进行原理图设计时,电源网络标号不一致(74LS14、74HC154电源网络标号 与其他的不一致) 解决办法:利用飞线,将错误的网络标号和正确的网络标号进行手工焊接。 排阻焊反1K*9错误3: 解决办法:手工拔出,重新焊接 错误四:在焊接时,由于焊接时间过长,造成三极管烧坏 解决办法:手工拔出重新焊接 :有些器件焊接次数过于频繁,造成印刷板上焊盘和导线脱落5错误 解决办法:利用飞线将对应的网络标号进行连接5.1.2软件调试:

19、 在软件编程时,应充分利用原理图,不然会在编程时导致硬件与软件不能对应起来,使程序无法实现功能,还有在编程时子程序的名称应与其功能对应,否则会使别人在读程序的时候不能及时理解程序含义,而且在软件调试时逻辑一定要清晰,不然在找错时会浪 费很多时间,5.2性能分析 通过软件调试后,最终能实现实时时钟显示、里程数的显示、单价的显示、总价的显 示、时间的调整、等待时间的显示。时间显示模块使用的是时钟芯片DS1302,它精确度高,功能强大,使用它能降低单片 机的负荷,减小误差。里程数收集模块由于条件限制,所以我们使用一个外部脉冲信号作为里程数的收集, 公里。256用一个脉冲表示一公里,最大的里程数可达电

20、源模块部分由于经验问题,没有在PCB板上加上串口和USB口,使得电源不稳, 只能用导线在外部加一个5V电压,而且由于7805的封装引脚分配有错误,导致在最初调 电压。+5V试的时候芯片烧坏,所以最终放弃7805的电压转换,而直接使用显示模块使用LED数码管,通过软件调试,12个数码管能显示时间、总路程、单价、总价及等待时间的自动切换。 六、心得体会 由于初次进行硬件电路设计,出现了很多简单又致命的错误(见硬件调试)。5个错误在一块线路密集并且已经焊好器件的电路板上无疑是大海捞针。像器件焊反之类的错误 还比较好排除。而器件损坏和网络标号不一致这样的错误就很让人头疼。仅仅只是网络标号不一致这个错误

21、就让我们整整测试了一天才发现。所以下次设计硬 件电路的时候一定要找几个人仔细检查电路图,不能再轻易犯这样的错误。像印刷板上导线断裂这样的错误也比较难找。而这种错误往往是焊接时温度过高或者 是焊接过于频繁造成的,所以以后焊接的时候一定不会再犯这样的错误了。而且由于当初设计USB口和串行口,为软件调试造成了很大的麻烦(每天不停地拔单片机)。再做学生实验的时候不能太过于追求趋近于真实产品。过于追求真实会让你的实 验过程变得极其困难。真的是后悔不已。当初想利用以前做的单片机最小系统开发板上的串行口进行程序下载,但是到真正实行的时候在发现并不是那么回事。由于对单片机的要求达不到,虽然理论上天衣无缝,但

22、实际上根本不可能实现。虽然出租车上提供的电源是12V,即便在实验板上设计了电源电路也应该再加上一个USB口提供5V电源。因为除了在实验室其他地方是并不太容易找到12V电源。由于对 口的省略,对软件调试工作造成了很大的麻烦。USB 七、参考文献 1996大连:大连理工大学出版社,单片微型机原理及应用. 徐维祥、刘旭敏1 . 2005北京:清华大学出版社 戴胜华,蒋大明 单片机原理与应用 2004天津:天津大学出版社 李刚 新概念单片机教程王宗和 单片机实验与综合训练 北京 高等教育出版社 2000 八、附录 附录1、程序清单 椣据畬敤牜来?栮 椣据畬敤尠湩牴湩?屨 #define uchar u

23、nsigned char 。uchar tmp 。uchar det 。uchar Coo 。int m 。int fuchar code DispTab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0。 /字 形码 。uchar TAB24 。sbit P00=P00 。sbit P01=P01 。sbit P02=P02 。sbit P03=P03 。sbit P04=P04 。sbit P05=P05 。sbit P10=P10 。sbit P27=P27 。sbit P14=P14 */脚脉冲的。 /*DS1302SCLKs

24、bit SCLK =P13 */IO脚数据的sbit DIO=P12。 /*DS1302 */RST脚片选的。sbit CE=P11 /*DS1302 。sbit P15=P15 。sbit P23=P23 。sbit P21=P21 。sbit P16=P16 。sbit P35=P35 。sbit P22=P22 。sbit P17=P17 。sbit P20=P20 。sbit P26=P26 。sbit P24=P24 。sbit ACC7=ACC7 。sbit ACC0=ACC0 等待计时中断void time() interrupt 1 / 。TH0=0x15int i,j。 。i

25、+TL0=0xa0。 。j+。if(i=100)i=0。 f=Coo。if(j=10)j=0 延时子程序void mDelay(unsigned int Delay) / 。 unsigned int I Delay-)Delay>0。for(。 I+)。 for(I=0。I<124 。 写程序void Write1302 ( unsigned char addr,dat ) /DS1302 。 unsigned char i,temp 引脚为低,数据传送中止。 /CE CE=0 清零时钟总线 / SCLK=0。 引脚为高,逻辑控制有效。 CE = 1 /CE 发送地址 / 次移位

26、循环。 for ( i=8 i>0 i- ) /8 。 temp = addr 每次传输低字节。 / DIO = (bit)(temp&0x01) 。 addr >>= 1 右移一位 / SCLK = 0。 。 SCLK = 1 发送数据/ i- ) 。 i>0 for ( i=8 。 temp = dat DIO = (bit)(temp&0x01)。 。 dat >>= 1 。 SCLK = 0 。 SCLK = 1 。 CE = 0 数据读取子程序unsigned char Read1302 ( unsigned char addr )

27、 / 。 unsigned char i,temp,dat1,dat2 。 CE=0 。 SCLK=0 CE = 1。 发送地址 / 次移位循环。 for ( i=8 i>0 i- ) /8 。 temp = addr 每次传输低字节。 / DIO = (bit)(temp&0x01) 。 addr >>= 1 。 SCLK = 0 右移一位 / SCLK = 1。 读取数据 / i- ) 。 i>0 for ( i=8 。 ACC7=DIO ACC>>=1。 。 SCLK = 1 。 SCLK = 0 。 CE=0 。 dat1=ACC 数据进制转

28、换 dat2=dat1/16。 / 十六进制转十进制。 dat1=dat1_x0016_ / 。 dat1=dat1+dat2*10 。 return (ACC) DS1302初始化void Initial() / 禁止写保护 /。 Write1302 (0x8E,0x00) 秒位初始化 / Write1302 (0x80,0x00)。 分钟初始化 /。 Write1302 (0x82,0x20) 。 Write1302 (0x84,0x10) 。 Write1302 (0x86,0x23) 。 Write1302 (0x88,0x05) 小时初始化 / Write1302 (0x8c,0x1

29、0)。 允许写保护 / Write1302 (0x8E,0x80)。 修改时间void set() / 禁止写保护 / Write1302 (0x8E,0x00)。 分钟初始化。 / Write1302 (0x82,TAB7*16+TAB6) 。 Write1302 (0x84,TAB0*16+TAB1) Write1302 (0x8E,0x80)。 显示子程序void ss()/ 。p=TABint i。uchar *p i+)i<1。for(i=0。 。det=*p 。tmp=DispTabdet 。P20=1。P20=0。P0=tmp 。p+P17=0。P16=0P14=0。P15

30、=0。 。det=*p 。tmp=DispTabdet 。P0=tmp 。p+。P16=0。P17=0P20=0。P20=1。P14=1。P15=0 。det=*p 。tmp=DispTabdet 。p+。P15=1。P16=0P17=0。P0=tmp。P20=0P20=1。P14=0 。det=*p 。tmp=DispTabdet 。p+P17=0P16=0P15=1P14=1P20=1P20=0P0=tmp。 。det=*p 。tmp=DispTabdet 。P0=tmp 。p+P16=1。P17=0P20=1。P14=0。P15=0。P20=0。 。det=*p 。tmp=DispTab

31、det 。p+。P17=0。P14=1。P15=0。P16=1P0=tmp。P20=0。P20=1 。det=*p 。tmp=DispTabdet 。p+P17=0。P15=1。P16=1。P0=tmp。P20=0P20=1。P14=0 。det=*p 。tmp=DispTabdet 。p+P17=0P15=1。P16=1。P0=tmp。P20=0。P20=1。P14=1。 。det=*p 。tmp=DispTabdet 。p+P16=0。P17=1。P20=0。P20=1P14=0。P15=0。P0=tmp。 。det=*p 。tmp=DispTabdet 。p+。P17=1。P14=1。P

32、15=0。P16=0P0=tmp。P20=0。P20=1 。det=*p 。tmp=DispTabdet 。p+。P16=0。P17=1。P0=tmp。P20=0。P20=1。P14=0P15=1 。det=*p 。tmp=DispTabdet 。p+P17=1。P15=1P14=1。P16=0。P20=1P0=tmp。P20=0。 。det=*p 。tmp=DispTabdet 。p+。P15=0P16=1。P17=1。P0=tmpP20=0P20=1P14=0 显示等待时间及单价、总价、路程子程序void sett() / 。TAB0=Read1302(0x83)/10 。TAB1=Rea

33、d1302(0x83)_x0010_ 。TAB7=Read1302(0x81)/10 。TAB8=3TAB6=Read1302(0x81)_x0010_ 。TAB3=Coo/10_x0010_TAB2=Coo/100 。TAB4=Coo_x0010_ if(TAB4<=3&&TAB2=0&&TAB3=0) 。TAB11=8 else 。TAB11=(8+(Coo-3)*TAB8)_x0010_ 。TAB5=TAB2*TAB8/10 。TAB9=Coo/100*TAB8+Coo_x0010_0*TAB8/100 。TAB10=(Coo/10*TAB8+Coo

34、_x0010_*TAB8/10)_x0010_ 显示时间子程序void mmm() / 。 TAB0=Read1302(0x85)/10 。 TAB1=Read1302(0x85)_x0010_ 。 TAB7=Read1302(0x83)/10 TAB8=3。 TAB6=Read1302(0x83)_x0010_。 修改时间、单价子程序void qie(int j) / switch(j)uchar i。 。 case 4:ss() if(P22=0) )。for(i=0。i!=1 。ss()i=P22。 。TAB8+ if(TAB8=10) 。breakTAB8=0。 。case 3:ss(

35、) if(P22=0) )。for(i=0i!=1 。i=P22ss() 。TAB6+ if(TAB6=10) 。TAB6=0break 。case 2:ss() if(P22=0) )i!=1。for(i=0。 。i=P22。ss() 。TAB7+ if(TAB7=6) 。breakTAB7=0 。case 1:ss() if(P22=0) )。for(i=0。i!=1 。ss()。i=P22 。TAB1+ if(TAB0=2&&TAB1=4)|TAB1=10) 。breakTAB1=0。 。case 0:ss() if(P22=0) )i!=1。for(i=0。 。i=P22。ss() 。TAB0+ if(TAB0=3) 。break。 default:breakTAB0=0。 修改单价位、时间位子程序oid die() /V )m<

温馨提示

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

评论

0/150

提交评论