嵌入式智能小車_第1頁
嵌入式智能小車_第2頁
嵌入式智能小車_第3頁
嵌入式智能小車_第4頁
嵌入式智能小車_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

個人資料整理僅限學習使用個人資料整理僅限學習使用圖3–19所示。DJ8T7nHuGT圖STYLEREF1\s2SEQ圖\*ARABIC\s14泰克示波器觀察到的電機轉(zhuǎn)速檢測電路產(chǎn)生的脈沖QF81D7bvUA通過LPC2138的定時器捕獲功能對上述脈沖進行捕獲,通過以下式子就可以計算出電機的轉(zhuǎn)速了。(公式3-1>r為安裝的輪子的半徑,NUM為單周期捕獲到的脈沖數(shù)。電機使用的光碼盤為一周有12個刻度。從而使捕獲到的電機轉(zhuǎn)速精度非常高,更有利于電機的精確控制。同時為了擴展電機數(shù)度控制范圍,我們運用兩路光碼盤檢測并選擇適當間距讓兩路出信號相位差為90°,然后將兩路信號分別輸給D觸發(fā)器的數(shù)據(jù)端和時鐘端,Q輸出就可以獲知電機是正轉(zhuǎn)還是反轉(zhuǎn)處理電路如REF_Ref251789234\h圖25,如此一來就可以將PID調(diào)節(jié)拓展到反轉(zhuǎn)了,這樣處理得好處是,PID調(diào)節(jié)范圍擴大了一倍,同時速度給零時電機可以迅速停止,這樣就可滿足智能小車的電機控制要求。4B7a9QFw9h2.1.7為了提高小車尋跡的精度,小車使用基恩士傳感器FS2系列光纖傳感器,RGB(紅綠藍>三光源,檢測范圍寬度70±20mm,高速反應(yīng)時間300μs,防水感測頭IP-67。KEYENCE光纖傳感器RGB數(shù)字光纖傳感器通過2個彩色熒屏和3種感測方式檢測傳統(tǒng)的傳感器所不能檢測的物體。業(yè)界最高的顏色解讀度。RGB數(shù)字放大器的3原色中每一色的接收光量被轉(zhuǎn)換為12位資料。每一LED發(fā)射器內(nèi)部都裝置了自我穩(wěn)定其。CZ-V的放大器和傳感器設(shè)置十分簡單,大大改善了以往檢測應(yīng)用中的穩(wěn)定性問題。ix6iFA8xoX激光傳感傳感器信號接受電路使用開關(guān)電路即可,電路如圖:2.1.8為了實現(xiàn)小車掃雷的功能,我選擇了SN04-N.P.Y接近式開關(guān),它具有精度高,感應(yīng)靈敏,穩(wěn)定等特點。金屬探測信號接受電路同樣使用開關(guān)電路。2.2小車硬件電路圖原理圖2.3智能小車軟件總體及各模塊設(shè)計框圖2.3.1主程序框圖2.3.2按鍵掃描2.3.3液晶菜單顯示2.3.4控制下位機點流水燈2.3.5控制下位機播放歌曲2.3.6尋跡2.3.7掃雷2.3.8P2.3.9定時器1中斷2.4小車實物圖3程序文檔:/********************************************************************Kp5zH46zRk*BWM888Program*江西理工大學交通061班*(c>Copyright1992-2009,歐陽劍飛*AllRightsReserved**File:main.c*By:歐陽劍飛*Version:********************************************************************/Yl4HdOAA61#include"config.h"#include"stdio.h"#include"LCDApp.h"#include"DisplayKey.h"#include"nRF2410.h"#include"nRF2410Conf.h"#include"motor.h"volatileuint32T0Flag=0。/*LED掃頻標志*/ch4PJx4BlIvolatileuint32FollowFlage=0。/*啟動尋跡小車標志*/qd3YfhxCzovolatileuint32MetaldrFlage=0。/*啟動探測金屬小車標志*/E836L11DO5volatileuint32RunLEDFlage=0。/*啟動走迷宮小車標志*/S42ehLvE3Mvolatileuint32PlayMusicFlage=0。/*啟動清潔小車標志*/501nNvZFisuint32GuiMetalNum=0。/*金屬數(shù)量寄存器*/jW1viftGw9charGuDisp_F[30]。/*LCD顯示緩存寄存器*/xS0DOYWHLPstructTIME/*定義時間結(jié)構(gòu)變量*/LOZMkIqI0w{uint8hour。uint8min。uint8sec。}。structTIMETime1。/*時間緩存寄存器*/ZKZUQsUJed/********************************************************************dGY2mcoKtT**Functionname: Timer0Init****Descriptions: InitializetheTime0****inputparameters: None**Returnedvalue: None****Usedglobalvariables: None**Callingmodules: None********************************************************************/rCYbSWRLIAvoidTimer0Init(void>{/**initializationforOStimetick*初始化MR0,為操作系統(tǒng)時鐘*/T0IR=0xffffffff。T0PR=0。T0TC=0。/*定時器設(shè)置為0 */FyXjoFlMWh T0TCR=0x01。 /*計數(shù)器使能 */T0MCR=0x03。/*設(shè)置T0MR0匹配后復(fù)位T0TC,*//*...并產(chǎn)生中斷標志*/TuWrUpPObXT0MR0=(Fpclk/1000>。/*定時1ms*/7qWAq9jPqE}/********************************************************************llVIWTNQFk**函數(shù)名稱:Delayms(>**功能描述:延時程序**入口參數(shù):t時間,單位Ms**出口參數(shù):無********************************************************************/yhUQsDgRT1voidDelayms(uint32t>{uint32n=0。while(n<(t>>{if(T0Flag==1>{n++。T0Flag=0。}}}/**********************************************************************函數(shù)名稱:IRQ_Timer0(>MdUZYnKS8I**功能描述:TIMER0中斷服務(wù)程序**入口參數(shù):無**出口參數(shù):無********************************************************************/09T7t6eTnovoid__irqIRQ_Timer0(void>{ T0Flag=1。 /*T0中斷標志置位*/ T0IR=0x01。 /*清除中斷標志*/ VICVectAddr=0。 /*向量中斷處理結(jié)束*/}/********************************************************************e5TfZQIUB5**Functionname: VICInit****Descriptions: InitializetheInterruptVevtorControllers1SovAcVQM**********************************************************************/GXRw1kFW5svoidVICInit(void>{/*1引入中斷函數(shù)句柄*/externvoidIRQ_Exception(void>。VICIntSelect=0x00000000。/*所有中斷通道設(shè)置為IRQ中斷*/UTREx49Xj9VICIntEnClr=0xffffffff。/*禁止所有中斷通道*/8PQN3NDYyP/*2分配向量通道*/VICVectAddr0=(uint32>IRQ_Timer0。/*設(shè)置Timer0向量入口*/mLPVzx7ZNwVICVectCntl0=(ENABLE|TIME0_NUM>。VICDefVectAddr=(uint32>IRQ_Exception。/*設(shè)置默認向量入口*/AHP35hB02d/*3使能向量通道*/VICIntEnable=(1<<TIME0_NUM>。/*使能相應(yīng)的中斷通道*/}/********************************************************************NDOcB141gT**函數(shù)名稱:playE(>**功能描述:放音函數(shù)**入口參數(shù):無**出口參數(shù):********************************************************************/1zOk7Ly2vAvoidplayE(void>{inti,j。PINSEL0&=~(3<<14>。/*放音函數(shù)*/fuNsDv23KhIO0DIR|=(1<<7>。IO1PIN=(0xd0<<16>。for(i=0。i<10000。i++>for(j=0。j<100。j++>。IO0SET|=(1<<7>。for(i=0。i<10000。i++>for(j=0。j<100。j++>。IO0CLR|=(1<<7>。}/********************************************************************tqMB9ew4YX**函數(shù)名稱:RTCInit(void>**函數(shù)功能:RTC初始化**入口參數(shù):無**出口參數(shù):無********************************************************************/HmMJFY05dEvoidRTCInit(void>{ PREINT=Fpclk/32768-1。 /*設(shè)置基準時鐘分頻器*/ViLRaIt6sk PREFRAC=Fpclk-(Fpclk/32768>*32768。 HOUR=0。 MIN=0。 SEC=0。 CCR=0x01。 /*啟動RTC*/}/********************************************************************9eK0GsX7H1**函數(shù)名稱:GetTime(structTIME*t>**函數(shù)功能:讀取時間**入口參數(shù):無**出口參數(shù):無********************************************************************/naK8ccr8VIvoidGetTime(structTIME*t>{uint32times。times=CTIME0。t->hour=(times>>16>&0x1f。t->min=(times>>8>&0x3f。t->sec=times&0x3f。}/********************************************************************B6JgIVV9ao**函數(shù)名稱:main(>**函數(shù)功能:lcd顯示控制主函數(shù)**入口參數(shù):無**出口參數(shù):無********************************************************************/P2IpeFpap5INT8UAddress[5]={0x00,0x00,0x00,0x00,0x01}。 //接收端地址:00000000013YIxKpScDMintmain(void>{uint32RK=0。PINSEL2&=~0x08。/*初始化語音播放*/gUHFg9mdSsIO1DIR|=(0xff<<16>。IO1SET|=(0xff<<16>。IO1CLR|=(0xff<<16>。 LED_Init(>。LCD_Init(>。nRF2401Initial(>。 /*初始化nRF2401A*/uQHOMTQe79 nRF2401Mode(1>。 /*設(shè)置nRF2401A工作方式:發(fā)送*/ nRF2401SetAddress(Address,5>。 /*設(shè)置接收端地址0000000001*/IMGWiDkflPTimer0Init(>。 LCD_PictureClear(>。VICInit(>。IRQEnable(>。while(1>{if(T0Flag==1>{T0Flag=0。RK++。if(RK>2>{LED_Redraw(>。RK=0。}}LCD_Menu(>。}return0。}/********************************************************************WHF4OmOgAw**函數(shù)名稱:voidHelp(void>**函數(shù)功能:LCD菜單**測試結(jié)果:通過********************************************************************/aDFdk6hhPdvoidHelp(void>{uint32key=NOKEY。LCD_TextClear(>。LCD_PrintString(0,0,"智能小車!">。while(1>{if(T0Flag==1>{/*掃描顯示和按鍵*/ozElQQLi4TT0Flag=0。LED_Redraw(>。}key=LED_GetKey(>。if(ESC==key>{/*按ESC號鍵退出*/CvDtmAfjiAreturn。}}}/*設(shè)置pwm頻率*/voidSetPWMValve(void>{uint32key=NOKEY。charcDispString[16]。loops:LCD_TextClear(>。sprintf(cDispString,"路程:%d",ptt>。LCD_PrintString(0,0,cDispString>。while(1>{if(T0Flag==1>{/*掃描顯示和按鍵*/T0Flag=0。QrDCRkJkxhLED_Redraw(>。}www=0。key=LED_GetKey(>。if(UP==key>{ptt++。gotoloops。}if(DOWN==key>{ptt--。gotoloops。}if(ESC==key>{/*按ESC號鍵退出*/4nCKn3dlMXreturn。}}*/}/*設(shè)置右輪速度*/voidSetSpeedR(void>{uint32key=NOKEY。charcDispString[16]。loops:LCD_TextClear(>。sprintf(cDispString,"右輪速度:%dmm/s",SpeedR/10>。LCD_PrintString(0,0,cDispString>。while(1>{if(T0Flag==1>{/*掃描顯示和按鍵*/ijCSTNGm0ET0Flag=0。LED_Redraw(>。}key=LED_GetKey(>。if(UP==key>{SpeedR=SpeedR+10。gotoloops。}if(DOWN==key>{SpeedR=SpeedR-10。gotoloops。}if(ESC==key>{/*按ESC號鍵退出*/vfB1pxanfkreturn。}}*/}/*設(shè)置左輪速度*/voidSetSpeedL(void>{uint32key=NOKEY。charcDispString[16]。loops:LCD_TextClear(>。sprintf(cDispString,"左輪速度:%dmm/s",SpeedL/10>。LCD_PrintString(0,0,cDispString>。while(1>{if(T0Flag==1>{/*掃描顯示和按鍵*/T0Flag=0。LED_Redraw(>。}key=LED_GetKey(>。if(UP==key>{SpeedL=SpeedL+10。gotoloops。}if(DOWN==key>{SpeedL=SpeedL-10。gotoloops。}if(ESC==key>{/*按ESC號鍵退出*/JbA9VhEou1return。}}*/}/*設(shè)置捕獲頻率*/voidSetCapValve(void>{uint32key=NOKEY。charcDispString[16]。loops:LCD_TextClear(>。sprintf(cDispString,"捕獲頻率:%dHz",CapValve>。LCD_PrintString(0,0,cDispString>。while(1>{if(T0Flag==1>{/*掃描顯示和按鍵*/X7Ahr18pJIT0Flag=0。LED_Redraw(>。}key=LED_GetKey(>。if(UP==key>{CapValve++。gotoloops。}if(DOWN==key>{CapValve--。gotoloops。}if(ESC==key>{/*按ESC號鍵退出*/b3zqXLCqXoreturn。}}*/}/*設(shè)置為點流水燈*/voidSetRunLED(void>{uint32key=NOKEY。charcDispString[16]。loops:LCD_TextClear(>。sprintf(cDispString,"點流水燈:%d",RunLEDFlage>。LCD_PrintString(0,0,cDispString>。while(1>{if(T0Flag==1>{/*掃描顯示和按鍵*/pZyytu5rc5T0Flag=0。LED_Redraw(>。}key=LED_GetKey(>。if(UP==key>{RunLEDFlage=0。/*不啟動尋跡小車*/gotoloops。}if(DOWN==key>{RunLEDFlage=1。/*啟動尋跡小車*/PlayMusicFlage=0。/*保證一次只能設(shè)置一種狀態(tài)*/MetaldrFlage=0。FollowFlage=0。gotoloops。}if(ESC==key>{/*按ESC號鍵退出*/return。}}}/*設(shè)置為點歌設(shè)置*/voidSetPlayMusic(void>{uint32key=NOKEY。charcDispString[16]。loops:LCD_TextClear(>。sprintf(cDispString,"點歌設(shè)置:%d",PlayMusicFlage>。LCD_PrintString(0,0,cDispString>。while(1>{if(T0Flag==1>{/*掃描顯示和按鍵*/T0Flag=0。LED_Redraw(>。}key=LED_GetKey(>。if(UP==key>{PlayMusicFlage=0。/*不啟動走迷宮小車*/gotoloops。}if(DOWN==key>{PlayMusicFlage=1。/*啟動走迷宮小車*/RunLEDFlage=0。/*保證一次只能設(shè)置一種狀態(tài)*/MetaldrFlage=0。FollowFlage=0。gotoloops。}if(ESC==key>{/*按ESC號鍵退出*/return。}}}/*設(shè)置為尋跡小車*/voidSetFollow(void>{uint32key=NOKEY。charcDispString[16]。loops:LCD_TextClear(>。sprintf(cDispString,"尋跡小車設(shè)置:%d",FollowFlage>。LCD_PrintString(0,0,cDispString>。while(1>{if(T0Flag==1>{/*掃描顯示和按鍵*/T0Flag=0。LED_Redraw(>。}key=LED_GetKey(>。if(UP==key>{FollowFlage=0。/*不啟動尋跡小車*/gotoloops。}if(DOWN==key>{FollowFlage=1。/*啟動尋跡小車*/PlayMusicFlage=0。/*保證一次只能設(shè)置一種狀態(tài)*/MetaldrFlage=0。RunLEDFlage=0。gotoloops。}if(ESC==key>{/*按ESC號鍵退出*/return。}}}/*設(shè)置為掃雷小車*/voidSetMetaldr(void>{uint32key=NOKEY。charcDispString[16]。loops:LCD_TextClear(>。sprintf(cDispString,"掃雷小車設(shè)置:%d",MetaldrFlage>。LCD_PrintString(0,0,cDispString>。while(1>{if(T0Flag==1>{/*掃描顯示和按鍵*/T0Flag=0。LED_Redraw(>。}key=LED_GetKey(>。if(UP==key>{MetaldrFlage=0。/*不啟動探測金屬小車*/gotoloops。}if(DOWN==key>{MetaldrFlage=1。/*啟動探測金屬小車*/PlayMusicFlage=0。/*保證一次只能設(shè)置一種狀*/RunLEDFlage=0。FollowFlage=0。gotoloops。}if(ESC==key>{/*按ESC號鍵退出*/return。DVyGZezsrM}}}/*小車點流水燈主程序*/voidRunLED(void>{uint32i,T=0。uint32key=NOKEY。LCD_PrintString(0,2,"小車正在點流水燈">。for(i=0。i<1000。i++>。LCD_PrintString(2,1,"BMW888">。for(i=0。i<1000。i++>。LCD_PrintString(0,0,"交通061班">。for(i=0。i<1000。i++>。LCD_PrintString(2,3,"歐陽劍飛">。while(1> {if(T==1>{nRF2401SendByte(0x01>。 DelayUs(100000>。 } LED_Redraw(>。/*掃描顯示和按鍵*/RQxPvY3tFskey=LED_GetKey(>。if(DOWN==key>{}if(UP==key>{}if(ENTER==key>{T=1。}if(ESC==key>{/*按ESC號鍵退出*/5MxX1IxuU9T=0。return。}}}/*小車點歌主程序*/voidPlayMusic(void>{uint32i,TT=0。uint32key=NOKEY。LCD_PrintString(1,1,"小車正在點歌">。for(i=0。i<1000。i++>。LCD_PrintString(2,2,"BMW888">。for(i=0。i<1000。i++>。LCD_PrintString(0,0,"交通061班">。for(i=0。i<1000。i++>。LCD_PrintString(2,3,"歐陽劍飛">。while(1> {if(TT==1>{ nRF2401SendByte(0x02>。 DelayUs(100000>。 } LED_Redraw(>。/*掃描顯示和按鍵*/jIw5xs0v9Pkey=LED_GetKey(>。if(DOWN==key>{}if(UP==key>{}if(ENTER==key>{TT=1。}if(ESC==key>{/*按ESC號鍵退出*/xEve2buwnwTT=0。return。}}}/*小車尋跡主程序*/voidFollowMe(void>{uint32i=0。uint32key=NOKEY。LCD_PrintString(1,1,"小車正在尋跡">。for(i=0。i<1000。i++>。LCD_PrintString(2,2,"BMW888">。for(i=0。i<1000。i++>。LCD_PrintString(0,0,"交通061班">。for(i=0。i<1000。i++>。LCD_PrintString(2,3,"歐陽劍飛">。PINSEL1=(PINSEL1&~(0xff<<22>>。IO0DIR&=~(0x0f<<27>。motorInit(>。while(1> {if(GuiFollowMeStart==0>{if(GuiBBFindFlage==0>{GuiBBFindFlage=1。if(GuiLeftMMoveFlage==0>BWMLeftMMoveDistance(0,0>。if(GuiRightMMoveFlage==0>BWMRightMMoveDistance(100,300>。}if(GuiLeftRedLed==0>GuiLeftRedLedFlage=1。if(GuiLeftGreenLed==0>{GuiLeftGreenLedFlage=1。GuiLeftRedLedFlage=0。}if((GuiLeftGreenLedFlage==1>&(GuiLeftRedLedFlage==0>&(GuiLeftGreenLed>>{KAvmyVYxCdGuiSetMotorRightSpeed=0。GuiFollowMeStart=1。}if(GuiBBFindFlage==2>{GuiBBFindFlage=3。if(GuiLeftMMoveFlage==0>BWMLeftMMoveDistance(0,0>。if(GuiRightMMoveFlage==0>BWMRightMMoveDistance(-100,300>。}if(GuiBBFindFlage==4>{GuiBBFindFlage=5。if(GuiLeftMMoveFlage==0>BWMLeftMMoveDistance(100,300>。if(GuiRightMMoveFlage==0>BWMRightMMoveDistance(0,0>。}if(GuiRightRedLed==0>GuiRightRedLedFlage=1。if(GuiRightGreenLed==0>{GuiRightGreenLedFlage=1。GuiRightRedLedFlage=0。}if((GuiRightGreenLedFlage==1>&(GuiRightRedLedFlage==0>&(GuiRightGreenLed>>{Ywuu4FszRTGuiSetMotorLeftSpeed=0。GuiFollowMeStart=1。}} LED_Redraw(>。/*掃描顯示和按鍵*/cstDApWA6Akey=LED_GetKey(>。if(DOWN==key>{}if(UP==key>{}if(ENTER==key>{}if(ESC==key>{GuiSetMotorLeftSpeed=0。/*按ESC號鍵退出*/qotL69pBkhGuiSetMotorRightSpeed=0。return。}}}/*小車正在掃雷主程序*/voidMetaldr(void>{uint32i=0,w=0。uint32uiMetalFlage=0。uint32key=NOKEY。charcDispString[16]。PINSEL0=(PINSEL0&~(0x03<<16>>。IO0DIR&=~(0x01<<8>。LCD_PrintString(1,1,"小車正在掃雷">。for(i=0。i<1000。i++>。LCD_PrintString(2,2,"BMW888">。for(i=0。i<1000。i++>。LCD_PrintString(0,0,"交通061班">。for(i=0。i<1000。i++>。LCD_PrintString(2,3,"歐陽劍飛">。PINSEL1=(PINSEL1&~(0xff<<22>>。IO0DIR&=~(0x0f<<27>。motorInit(>。while(1> {if(GuiFollowMeStart==0>{if(GuiBBFindFlage==0>{GuiBBFindFlage=1。if(GuiLeftMMoveFlage==0>BWMLeftMMoveDistance(0,0>。if(GuiRightMMoveFlage==0>BWMRightMMoveDistance(100,300>。}if(GuiLeftRedLed==0>GuiLeftRedLedFlage=1。if(GuiLeftGreenLed==0>{GuiLeftGreenLedFlage=1。GuiLeftRedLedFlage=0。}if((GuiLeftGreenLedFlage==1>&(GuiLeftRedLedFlage==0>&(GuiLeftGreenLed>>{EksTCSTCzXGuiSetMotorRightSpeed=0。GuiFollowMeStart=1。}if(GuiBBFindFlage==2>{GuiBBFindFlage=3。if(GuiLeftMMoveFlage==0>BWMLeftMMoveDistance(0,0>。if(GuiRightMMoveFlage==0>BWMRightMMoveDistance(-100,300>。}if(GuiBBFindFlage==4>{GuiBBFindFlage=5。if(GuiLeftMMoveFlage==0>BWMLeftMMoveDistance(100,300>。if(GuiRightMMoveFlage==0>BWMRightMMoveDistance(0,0>。}if(GuiRightRedLed==0>GuiRightRedLedFlage=1。if(GuiRightGreenLed==0>{GuiRightGreenLedFlage=1。GuiRightRedLedFlage=0。}if((GuiRightGreenLedFlage==1>&(GuiRightRedLedFlage==0>&(GuiRightGreenLed>>{Sgs28CnDOEGuiSetMotorLeftSpeed=0。GuiFollowMeStart=1。}}if(T0Flag==1>{/*掃描顯示和按鍵*/6craEmRE2kT0Flag=0。w++。}while(w==80>{if((IO0PIN&(0x01<<8>>==0> uiMetalFlage=1。else{if(uiMetalFlage==1>{GuiMetalNum++。uiMetalFlage=0。LCD_TextClear(>。s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論