武汉理工大学微机原理课程设计_第1页
武汉理工大学微机原理课程设计_第2页
武汉理工大学微机原理课程设计_第3页
武汉理工大学微机原理课程设计_第4页
武汉理工大学微机原理课程设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

学号课程设计题目数码管显示学院自动化专业自动化班级自动化zy1102姓名魏迪指导教师徐小强2014年01月14日

课程设计任务书学生姓名:魏迪专业班级:自动化zy1102班指导教师:徐小强工作单位:自动化学院题目:数码管显示要求完成的主要任务:4位数码管显示【0,9999】内任一整数时间安排:1.1月6日1月7日查阅资料及方案设计2.1月7日1月8日编程3.1月8号1月10日调试程序4.1月10号1月13日撰写课程设计报告5.1月14日准备辩论指导教师签名:2014年1月14日系主任〔或责任教师〕签名:2014年1月14日目录11924引言1327451设计意义及要求2265201.1设计意义2232201.2设计要求229052MSP430G2系列及launchpad介绍35583方案设计5203123.1设计思路5120443.2方案设计5260523.2.1硬件接线方案520383.2.2编程方案876263.2.3程序18322623.2.4程序流程图22214534MSP430使用说明23324884.1安装IAR23120344.2使用步骤2315715程序的烧写与测试2859885.1程序的烧写28309495.2程序的测试2818698结束语297504参考文献3010829附录:本科生课程设计成绩评定表31摘要当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度开展,电子技术已经散布生活的各个角落,虽然这些电子技术有些很复杂但其最初原理都是0,1的二进制指令集,任何一项技术都是由易到难的过程,所以懂得微机原理并且利用好自己所学的知识结合单片机控制些外部器件实现一种自己想要的功能就显得很重要,外部器件包括按键,数码管,液晶,电机,led灯等,本次用的单片机为TI公司的MSP430型号为g2553的单片机,这款单片机特点是低功耗,有了这些硬件,通过IAR开发软件,对430单片机进行编程开发,就可以实现想要的功能,编程语言可以选择C语言或者汇编语言等,本次用的是C语言,C语言有着自己独特的特点,它是一项面向过程的语言,属于高级语言,编程开发比拟方便,通过硬件和软件的结合,最终可以完成一些功能。关键字:智能控制,电子技术1设计意义及要求1.1设计意义通过课程设计,使学生在理论计算,课程设计、查阅设计资料、标准和标准运用和计算机应用能力得到训练和提高。培养学生的自学能力,以及严肃认真、实事求是的科学态度和勇于探索的创新精神。锻炼学生的自学软件的能力及分析问题、解决问题的能力。拓展学生的理论知识与专业技能。为今后从事电子领域打下坚实的根底。1.2设计要求利用MSP430单片机结合外部器件使4位数码管显示【0,9999】内任一整数。2MSP430G2系列及launchpad介绍前言所述,主要谈到MSP430系列单片机在超低功耗领域傲人的优势,具体谈到MSP430G2系列单片机,其核心竞争力在于超高性价比。G2系列又称“超值系列”,那么它的超值到底表达在哪些方面呢?首先,G2系列单片机的售价低,G2全系列单片机共有44款,根据片上资源的丰富程度价格由低到高,最低价格0.34美元,配置最全的2553也仅售0.99美元,这样的价位在单片机范围内可以算是物美价廉了。G2系列单片机虽然价格不高,但不等于它的功能不强,G2系列单片机作为MSP430系列中的一员拥有大局部MSP430单片机片上外围模块:16MHz主频16位CPU片上程序存储器FLASH〔512B/1KB/2KB/4KB/8KB/16KB〕及FLASH控制器片上随机存储器SRAM(128B/256B/512B)通用并行输入输出端口GPIO〔4位/16位/20位/24位〕支持电容触摸式I/O看门狗定时器WDT上电复位模块BOR多功能通信模块USI〔I2C/SPI〕USIC_A(UART/LIN/IrDA/SPI)USIC_B(I2C&SPI)比拟器模块ComparatorA+片内温度传感器TempSensor十位逐次逼近型ADC10斜率型slopeADC基于LaunchPad的MSP-EXP430G2低本钱实验板是一款适用于TI最新MSP430G2xx系列产品的完整开发解决方案。其基于USB的集成型仿真器可提供为全系列MSP430G2xx器件开发应用所必需的所有软、硬件。LaunchPad具有集成的DIP目标插座,可支持多达20个引脚,从而使MSP430ValueLine器件能够简便地插入LaunchPad电路板中。此外,还可提供板上Flash仿真工具,以直接连接至PC轻松进行编程、调试和评估。LaunchPad实验板还能够对eZ430-RF2500T目标板、eZ430-Chronos手表模块或eZ430-F2012T/F2013T目标板进行编程。此外,它还提供了从MSP430G2xx器件到主机PC或相连目标板的9600波特UART串行连接。其实物图如图2.1所示。MSP-EXP430G2采用IAREmbeddedWorkbench集成开发环境(IDE)或CodeComposerStudio(CCS)编写、下载和调试应用。调试器是非侵入式的,这使用户能够借助可用的硬件断点和单步操作全速运行应用,而不耗用任何其他硬件资源。MSP-EXP430G2LaunchPad特性:•USB调试与编程接口无需驱动即可安装使用,且具备高达9600波特的UART串行通信速度•支持所有采用PDIP14或PDIP20封装的MSP430G2xx和MSP430F20xx器件•分别连接至绿光和红光LED的两个通用数字I/O引脚可提供视觉反响•两个按钮可实现用户反响和芯片复位•器件引脚可通过插座引出,既可以方便的用于调试,也可用来添加定制的扩展板•高质量的20引脚DIP插座,可轻松简便地插入目标器件或将其移除3方案设计3.1设计思路根据要求,首先应该完成硬件的连接,再编程考虑如何完成功能。首先硬件包括MSP430g2553launchpad开发板,四位数码管,8550三极管,假设干1千欧电阻,假设干杜邦线,数码管内部发光二极管点亮时,需要5毫安以上的电流,且电流不可过大,否那么会烧毁发光二极管,由于单片机的I/O口送不出如此大的电流所以数码管与单片机连接时需要加驱动电路,三极管可以完成这样的驱动功能。再其次考虑软件编程方法,题目要求使4位数码管显示【0,9999】内任一整数。要是能编程能使数码馆从0000计数一直计数到9999,计数间隔利用定时器定一固定值,在计到10000时立马清零,这样就可以完成4位数码管显示0到9999内任意整数的功能。3.2方案设计3.2.1硬件接线方案图3.2.1430launchpad开发板图3.2.24位数码管实物图图3.2.38550三极管实物图加上假设干电阻,通过杜邦线将430launchpad开发板,4位数码管,8550三极管按一定接线,具体接线方案如下:4位数码管选择共阳极数码管,4位数码管有4个公共端,8个段选段。用4个8550三极管驱动,4个8550三极管的发射极均接Vcc,基极接一个1千欧电阻后接到430launchpad开发板的P1口的P2.0-P2.2及P2.4,集电极接到4位数码管的4个公共端,这样就可以通过三极管放大电流驱动数码管,同时也把三极管当做开关,控制选通4位数码管的任何一个。数码管的8个段选段依次接到430launchpad开发板的P1口,及P2.0-P2.7。由于430launchpad开发板自带下载器,所以通过USB下载线将430launchpad开发板连到电脑的USB接口上,可以通过IAR软件编辑程序,下载到430launchpad开发板上,这样差不多就完成了硬件接线,其实也挺简单的。具体接线图如下:图3.2.4总接线图3.2.2编程方案再回忆一下功能要求:使4位数码管显示【0,9999】内任一整数,编程能使数码馆从0000计数一直计数到9999,计数间隔利用定时器定一固定值,在计到10000时立马清零,这样就可以完成4位数码管显示0到9999内任意整数的功能。要完成的功能需要了解430launchpadg2553芯片的内部硬件以及存放器配置,要用到的局部如下:I/O口,定时器A。〔1〕I/O口:I/0口是微处理器系统对外界沟通的最根本部件,从根本的键盘、LED到复杂的外设芯片等,都是通过I/0口的输入输出操作来进行的。在MSP430系列中,不同的单片机I/0口数量不同。体积最小的MSP430F20xx系列中只有10个I/0口,适合在超小型设备中应用;功能最丰富的MSP430FG46xx系列中多达80多个I/0口,足够应付外部设备繁多的复杂应用。在MSP430G2553单片机中,共有16个I/0口,属于I/0口较少的系列。〔2〕I/0存放器:和大局部单片机类似,MSP430系列单片机也是将8个I/0口编为一组。每个I/0口有四个控制存放器,P1和P2还有额外的3。表3.2.1I/0存放器表PxDIR存放器用于设置每一位的I/0口方向MSP430单片机的I/0口是双向I/0口:0=输入1=输出。在使用I/0口时首先要选择存放器来设置每个I/0口方向。例如下面的语句:P1DIR|=BIT1+BIT3+BIT4;P1DIR|=~(BIT5+BIT6+BIT7);以上语句将P1.1,P1.3和P1.4的方向置为输出,P1.5,P1.6和P1.7的方向置为输入。PxDIR存放器在复位的过程中会被清零,没有被设置的I/0口方向均为输入状态,所以第二句可以省略。注意,将未用的I/0口置为输出可减小漏电流。对于所有已经设成输出的I/0口可通过PxOUT存放器设置其输出电平;对于所有已经被设成输入的I/0口,可通过PxIN存放器读回其输入电平。PxSEl存放器用于设置每一位I/0口的功能:0=普通I/0口,1=第二功能。在MSP430系列单片机中,很多内部功能模块也需要和外界进行数据交换,为了不增加芯片的管脚数量,大局部都和I/0口管脚复用,这就导致MSP430系列单片机的大多数I/0管脚都具有第二功能。通过PxSEL可以指定某些I/0口作为第二功能使用。如MSP430G2553中P1.1和RXD,P1.2和TXD复用。〔3〕I/0口中断:在MSP430系列所有的单片机中,P1口、P2口总共16个I/0口均能引发中断。PxIE用于设置每一位I/0口的中断允许:0=不允许1=允许PxIES用于选择每一个I/0口的中断触发沿:0=上升沿1=下降沿在使用I/0口中断之前,需要先将I/0口设置为输入状态,并允许该位I/0中断,再通过PxIES存放器选择上升沿触发还是下降沿触发。如下例,将P1.5,P1.6和P1.7设置为中断源,下降沿触发。P1DIR&=~〔BIT5+BIT6+BIT7〕;P1IES|=BIT5+BIT6+BIT7;P1IE|=BIT5+BIT6+BIT7;_EINT();PxIFG是I/0口中断标志存放器:0=中断标志不成立,1=中断条件曾经成立无论中断是否被允许,也无论是否可以执行中断效劳程序,只要对应I/0口满足中断条件,PxIFG中相应位都会立即置1并保持,只能通过软件人工去除。这种机制的目的在于最大可能的保证不会漏掉每一次中断。在MSP430系列单片机中,P1口的8个中断各共用了一个中断入口,因此该存放器另一重要作用在于判断是哪一位I/0产生了中断。注意,在退出中断前,一定要人工去除中断标志,否那么该中断会不停被执行。类似的原理,即使I/0口没有出现中断条件,人工向PxIFG存放器写“1”,也会引发中断。更改中断沿选择存放器也相当于跳变,也会引发中断。所以,更改PxIES存放器应该在关闭中断后进行,并且在翻开中断后及时去除中断标示位。定时器A:定时器A是一个16位定时器/柜台三个捕捉/比拟存放器。定时器A可以支持多个捕捉/比拟PWM输出,间隔的时间。定时器A还拥有丰富的中断功能。从计数器溢出条件,并从每个可能会产生中断。〔5〕定时器A根本原理:Timer_A定时/计数器的主计数器模块结构和原理Timer_A分为2局部:主计数器和比拟捕获模块。主计数器负责定时,计时或计数。计数值〔TAR存放器的值〕被送到各比拟捕获模块中,它们可以在无需CPU干预的情况下根据触发条件与计数器值自动完成某些测量和输出功能。只需定时或计数功能时,可以只使用主计数器局部。在PWM调制,利用捕获测量脉宽,周期等应用之中还需要捕获比拟模块配合。与Timer_A定时器中的主计数器相关的控制位都位于TACTL存放器中,主计数器的计数数值存放与TAR存放器中。每个比拟捕获存放器TACCRx〔x=0,1,2〕。在一般定时器应用中,TACCRx可提供额外的定时中断触发条件;在PWM输出模式之下,TACCRx可用于设置周期和占空比;在捕获模式下,TACCRx存放捕获结果。主计数器结构如图3.2.4所示,它包括时钟源选择,预分频,计数器与计数模式选择几个局部。图3.2.5TA主计数器结构相关控制字有:TASSELx:Timer_A计数器的时钟源选择〔位于TACTL存放器〕00=外部管脚〔TACLK〕01=ACLK10=SMCLK11=外部管教〔TACLK取反〕快捷宏定义:TASSEL_0TASSEL_1TASSEL_2TASSEL_3IDx:Timer_A计数器预分频系数〔位于TACTL存放器〕00=无分频01=2分频10=4分频11=8分频快捷宏定义:ID_0ID_1ID_2ID_3通过上面两组控制位,可以设置定时计数时钟源。在低功耗应用以及需要长时间定时或计时的情况下,可以用ACLK作为作为时钟,加上预分频,最长的定时计时周期可达16s。在高分辨率短时间应用之中,可以选择SMCLK作为时钟源。假设选择TACLK作为,定时器实际上成为计数器,累积从TACLK管脚上输入的脉冲,上升沿计数。假设选择TACLK取反作为时钟源,TACLK的下降沿计数。TACLR:Timer_A计数器清零控制位〔位于TACTL存放器〕0=不清零1=清零将该控制位置1,可以立即将Timer_A计数器清零,无需通过软件赋值操作来实现。计数器复位后该标志位自动归零,因此读该标志位将永远读回0。MCx:Timer_A计数器的技术模式〔位于TACTL存放器〕00=停止01=增计数10=连续增计数11=增减计数快捷宏定义:MC_0MC_1MC_2MC_3TAIFG:Timer_A计数器溢出标志位〔位于TACTL存放器〕0=未发生溢出1:发生了溢出Timer_A计数器提供了3种计数模式:增计数,连续计数和增减计数。在增计数模式下,每个时钟周期TAR加1。在TAR值超过TACCR0存放器〔捕获比拟模块0模式值〕时自动清零,同时将Timer_A溢出标志位TAIFG置1。如果TA中断被允许,还会引发中断。改变TACCR0存放器可以改变定是周期,且不存在初值装载问题,非常适合产生周期定时中断,只要改变TACCR0的值即可随意调整定时周期。在连续计数模式下,其工作方式与8051的定时器根本相同。每个时钟周期TAR加1,计数器值超过0xFFFF后溢出,TAR回到0,同时将TAIFG置1,或引发中断。如果中断内给TAR重新赋初值,也可以产生不同周期的定时中断。用增计数模式产生定时中断比连续模式更加简单,一般不用连续模式更简单;连续模式一般在捕获下使用较多,让计数器自由运行,利用捕获功能在事件发生时自动记录下计数值,通过比照几个值可以确定时间发生的准确时间或者准确的时间间隔。在增减模式下,计数器从0开始递增,计到TACCR0后,自动切换为递减模式,减到0后又恢复为递增模式,如此往复,在TAR从1变为0的时刻产生TAIFG中断标志。在一般应用中,不用增减模式来定时或计数,而多用于PWM发生器。借助增减模式,捕获比拟模块能够产生带死区的对称PWM驱动波形,可以直接驱动半桥电路,无需专门的死区产生电路。例如,在MSP430单片机中,为Timer_A配置时钟源及工作模式,使Timer_A在无需CPU的干预下,每隔1.3125s溢出一次〔假设SMCLK=MCLK=1.048576MHz,ACLK=32.768kHz〕。首先1.3125时间较长,假设使用SMCLK作为时钟源16位计数器不够用,应该使用低频ACLK作为时钟源。再考虑周期性定时,3种模式都能实现,其中增计数模式最简单,无需重复置初值等操作。最后计算TACCR0的值应该1.3125乘以ACLK频率得到设置值43008.计数从0开始,实际应设置为43007.〔6〕Timer_A定时器中断:Timer_A定时器的以下四种事件均能产生中断:主计数器〔TACCR0〕计满后复位,TAIFG标志被置1。中断发生在计数值从TACCR0跳至0时刻。捕获通道0发生捕获事件,或让主计数器值TAR计至TACCR0〔计数值从TACCR0-1跳至TACCR0的时刻〕,TACCTL0存放器内的CCIFG标志被置1。捕获通道1发生捕获事件,或主计数值TAR计至TACCR1〔计数器从TACCR1-1跳至TACCR0的时刻〕,TACCTL1存放器内的CCIFG标志被置1。捕获通道2发生捕获事件,或主计数器TAR计至TACCR2〔计数值从TACCR2-1跳至TACCR2的时刻〕,TACCTL2存放器内的CCIFG标志被置1。这4种事件占用了两个中断源,其中,事件2〔计至TACCR2或捕获通道0发生捕获事件〕独占一个中断源TIMERA0_VECTOR,其余3种事件共用另一个中断源TIMERA1_VECTOR。对于需要紧急处理的捕获事件建议使用通道0,因为它独占一个中断源,在终端内无需分之判断,反响最快。相应的标志位有:TAIFG:Timer_A计数器计满复位标志〔位于TACTL存放器〕TAIE:Timer_A主计数器计满中断允许位〔位于TACTL存放器〕CCIFG:Timer_A捕获/比拟模块中断标志〔位于TACCTL0/1/2存放器〕比拟模式下,当主计数器计至TACCRx时,该标志位置1.在捕获模式下,当捕获条件发生时,该标志位置1。TACCTL0内的CCIFG标志会在中断执行后自动清零,其余模块共用了中断入口,它们的CCIFG标志位会根据TAIV存放器的值在执行相应的中断后自动去除。CCIE:Timer_A比拟捕获模块中断允许位〔位于TACCTL0/1/2存放器〕TAIV:Timer_A中断向量存放器几个事件共用了TIMERA1_VECTOR中断向量,需要在中断效劳程序中通过软件判断TAIV存放器的值来确定具体中断原因。表3.2.2Timer_A中断向量存放器表存放器图TACTL:图3.2.6TACTL结构未使用:15~10位TASSELx:9~8位Timer_A时钟源选择00TACLK01SMCLK02ACLK03INCLKIDx:7~6位时钟分频选择00/101/202/403/8MCx:5~4位模式控制00停止模式01增计数模式,计至TACCR002连续技术模式,计至0xFFFF03增减计数模式,增计数计至TACCR0减至0未使用:3位未使用TACLR:2位清零位,计数器清零,分频和模式位也清零TAIE:1位中断允许位,中断允许时置1TAIFG:0位中断允许标志位,有中断时置1图3.2.7TARx:15~0位Timer_A计数器存放器图3.2.8TACCRx:TimerA比拟捕获存放器比拟模式:TACCRx与TAR比拟,当相等时改变输出管脚的电平捕获模式:当捕获源到来时将TAR复制到TACCRx图3.2.9TACCTLx捕获比拟控制存放器CMx:15~14位捕获模式00无捕获01上升沿捕获02下降沿捕获03上升下降沿捕获CCISx:13~12位捕获比拟输入选择00CCIxA01CCIxB02GND03VccSCS:11位同步异步选择0异步捕获1同步捕获SCCI:10位捕获同步信号输入端未使用:9位CAP:8位捕获模式0比拟模式1捕获模式OUTMODEx:7~5位输出模式配置000模式0001模式1010模式2011模式3100模式4101模式5110模式6111模式7CCIE:4位0不允许中断1中断允许CCI:3位捕获比拟输入OUT:2位在模式0,该位直接控制输出电平COV:1位捕获溢出控制位0无捕获溢出1捕获溢出CCIFG:0位捕获比拟中断1无中断发生0中断发生以上为430launchpadg2553关于I/O口,定时器A的信息。了解了定时器A和I/O口的用法,下面考虑一下编程方法。要能编程能使数码馆从0000计数一直计数到9999,首先要对数码管进行编码让他可以显示0—9十个数字,依次选通4位数码管,不断的扫描更新显示,依次显示个,十,百,千位,中间做很短延时,利用定时器A定时50毫秒,每50毫秒讲数加一,这样就可以完成从0到9999的计数,不过之前要进行以此判断,判断他是不是加到10000,如果加到10000,立刻清零,然后从0开始重新计数,50毫秒这一参数也可以调整大或调小,这样就可以完成4位数码管显示0到9999内任意整数的功能。可以通过一个按键,控制数码管扫描的停否,下面是完整的程序。3.2.3程序#include<msp430g2553.h>#defineuintunsignedint#defineucharunsignedcharuintnum,num_0,num1,ge,shi,bai,qian;ucharkey;uchartable[]={0X05,0XDD,0x46,0X54,0X9C,0X34,0X24,0X1D,0X04,0X14};voiddelay(uint);voidchuli(uint);voiddisplay();voidkeyscan();voidinit();voidmain(void){init();while(1){display();}}voidinit(){WDTCTL=WDTPW+WDTHOLD;CCTL0=CCIE;//CCR0interruptenabledCCR0=50000;TACTL=TASSEL_2+MC_1;//增计数模式,时钟主频1MHZP2SEL&=~0XC0;//设置P2.6,P2.7为I/O口P1DIR|=0xF7;//P1outputP1REN|=0X08;P1OUT|=0X08;P1IE|=0X08;P1IES|=0X08;P1IFG&=~0X08;P2DIR|=0xFF;_EINT();//开总中断}voiddelay(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}voidchuli(uintdata){qian=data%10000/1000;bai=data%1000/100;shi=data%100/10;ge=data%10;}voiddisplay(){chuli(num);delay(5);P1OUT=0xfe;P2OUT=table[qian];delay(5);P1OUT=0xfd;P2OUT=table[bai];delay(5);P1OUT=0xfb;P2OUT=table[shi];delay(5);P1OUT=0xef;P2OUT=table[ge];delay(5);}#pragmavector=TIMER0_A0_VECTOR__interruptvoidTimer_A(void){num_0++;if(num_0==3){num_0=0;num++;if(num==10000)num=0;}}#pragmavector=PORT1_VECTOR__interruptvoidPort_1(void){delay(10);key=P1IN&0X08;if(key==0){delay(10);if(key==0){CCTL0^=CCIE;}}P1IFG&=~0X08;}是是取反定时器中断否按键是否按下否是否计到10000初始化系统扫描数码管,计数3.2.4程序流程图是是取反定时器中断否按键是否按下否是否计到10000初始化系统扫描数码管,计数开始开始4MSP430使用说明4.1安装IAR请使用我们提供的软件进行安装,因为网上版本可能过旧,我们提供的版本是从TI官网下载安装的。注册请按文件夹提示操作,安装完成,点击图标运行程序。4.2使用步骤1.创立工作空间:点击File->NEW->Workspace2.创立工程:点击Project->CreatNewProject,出现:图4.1然后保存新建工程到英文路径。3.往工程添加文件:图4.2右键,Add->Addfiles添加源程序文件。4.设置工程属性:图4.3点击右键,options5.设置芯片型号:图4.46.设置仿真类型:图4.5simulator为软件仿真,FETDebuger那么为硬件仿真,如果为硬件仿真,那么需设置FETDebuger,选择你的仿真器。图4.6完成后点击OK保存

温馨提示

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

评论

0/150

提交评论