msp430大作業(yè)_第1頁
msp430大作業(yè)_第2頁
msp430大作業(yè)_第3頁
msp430大作業(yè)_第4頁
msp430大作業(yè)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于msp430單片機的遙控器設(shè)計報告 學(xué)號_02121427_ 班級_021215_ 姓名_董國慶_一、摘要紅外遙控器在家電中得到了廣泛應(yīng)用,但各產(chǎn)品的遙控器不能相互兼容,使得生活中遙控器數(shù)目越來越多,使用時?;煜A硗?,若遙控器丟失,找到配套的遙控器也很困難。具有學(xué)習(xí)功能的智能遙控器以普通的低成本單片機為核心,能解碼與記憶遙控器編碼,并模擬發(fā)射,是一個遙控器可以代替多個遙控器控制多個電器,是一種智能化的控制工具。我在此介紹的多功能紅外遙控器是使用msp430單片機作為整個系統(tǒng)的主控芯片,具有多功能自適應(yīng)性,兩種工作狀態(tài):學(xué)習(xí)狀態(tài)和控制狀態(tài)。可以對多種遙控器進行解碼以及自學(xué)習(xí)功能,即實現(xiàn)了對

2、多種電器的遙控控制功能。二、硬件設(shè)計紅外遙控發(fā)射及其編碼 紅外遙控發(fā)射器采用一塊大規(guī)模集成電路(lsi),當(dāng)按壓功能指令鍵盤時,由lsi產(chǎn)生經(jīng)過調(diào)制的串行編碼,通過激勵電路,驅(qū)動紅外線發(fā)光二極管發(fā)光,將編碼信號經(jīng)紅外線二次調(diào)制后發(fā)射出去。二次調(diào)制首先是用與鍵盤操作相對應(yīng)的控制信號對38到40 khz左右的載波信號進行脈沖調(diào)制,然后再去對波長約為950 nm的紅外光載波進行第二次幅度調(diào)制,即用驅(qū)動紅外線發(fā)光二極管方法產(chǎn)生紅外遙控信號。當(dāng)發(fā)射器按鍵按下后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:采用脈寬調(diào)制的串行碼,以脈寬為0.565 ms、間隔0.56 ms、周期為1

3、.125ms的組合表示二進制的“0”;以脈寬為0.565 ms、間隔1.685 ms、周期為2.25 ms的組合表示二進制的“1”,其波形如圖所示:遙控器的“0”和“1”上述“0”和“1”組成的32位二進制碼經(jīng)38 khz的載頻進行二次調(diào)制以提高發(fā)射效率,達到降低電源功耗的目的。然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射,如圖所示:完整的紅外數(shù)據(jù)編碼圖遙控信號編碼是連續(xù)的32位二進制碼組,其中前16位為用戶識別碼,能區(qū)別不同的電器設(shè)備,防止不同機種遙控碼互相干擾。后16位為8位操作碼(功能碼)及其反碼。遙控器在按鍵按下后,周期行地發(fā)出同一種32位二進制碼,周期約為108 ms。一組碼本身的持

4、續(xù)時間隨它包含的二進制“0”和“1”的個數(shù)不同而不同,大約在4562 ms之間。當(dāng)一個鍵按下超過36 ms,振蕩器使芯片激活,將發(fā)射一組108ms的編碼脈沖,這108 ms發(fā)射代碼由一個起始碼(9 ms),一個結(jié)束碼(4.5 ms),低8位地址碼(9 ms18 ms),高8位地址碼(9 ms18 ms),8位數(shù)據(jù)碼(9 ms18 ms)和這8位數(shù)據(jù)的反碼(9 ms18 ms)組成。如果鍵按下超過108 ms仍未松開,接下來發(fā)射的代碼(連發(fā)代碼)將僅由起始碼(9 ms)和結(jié)束碼(4.5 ms)組成。紅外遙控接收及其解碼 解碼的關(guān)鍵是如何識別“0”和“1”,由于接收代碼是發(fā)射代碼的反碼,發(fā)射代碼中

5、“0”和“1”的高電平寬度相同,低電平寬度不同,所以,從位的定義我們可以發(fā)現(xiàn)接收代碼中“0”、“1”均以0.56 ms的低電平開始,不同的是高電平的寬度不同,“0”為0.56 ms,“1”為1.68 ms,所以必須根據(jù)高電平的寬度區(qū)別“0”和“1”。如果從0.56 ms低電平過后,開始延時,0.56 ms以后,若讀到的電平為低,說明該位為“0”,反之則為“1”,為了可靠起見,延時必須比0.56 ms長些,但又不能超過1.12 ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此取(1.12ms+0.56ms)/2=0.84ms最晚可靠,一般取0.84 ms左右均可。紅外系統(tǒng)硬件設(shè)計 紅外

6、遙控系統(tǒng)主要由遙控發(fā)射器、一體化接收頭、單片機、接口電路組成。遙控器用來產(chǎn)生遙控編碼脈沖,驅(qū)動紅外發(fā)射管輸出紅外遙控信號,遙控接受他完成對遙控信號的放大、檢波、整形、解調(diào)出遙控編碼脈沖。遙控編碼脈沖是一組串行二進制碼,對于一般的紅外遙控系統(tǒng),此串行碼輸入到微控制器,由其內(nèi)部cpu完成對遙控指令解碼,并執(zhí)行相應(yīng)的遙控功能。使用遙控器作為控制系統(tǒng)的輸入,需要解決如下幾個關(guān)鍵問題:如何接收紅外遙控信號;如何識別紅外遙控信號以及解碼軟件的設(shè)計、控制程序的設(shè)計。紅外系統(tǒng)整體設(shè)計框圖紅外接收電路設(shè)計 接收電路使用集成一體化紅外接收頭sm0038,sm0038對外只有3個引腳:vs、gnd和1個脈沖信號輸出

7、引腳out。與單片機接口非常方便。vcc接電源(+5 v)并經(jīng)電容進行濾波,以避免電源干擾;gnd接系統(tǒng)的地線(0 v);脈沖信號輸出接cpu的中斷輸入引腳。采取這種連接方法,軟件解碼既可工作于查詢方式,也可工作于中斷方式。紅外發(fā)射電路設(shè)計 因為發(fā)光二極管的發(fā)光距離與其發(fā)射功率成正比,為了提高發(fā)光二極管的發(fā)光距離,必須提高它的發(fā)射功率,也就是使紅外發(fā)光二極管工作于脈沖狀態(tài)。可以用兩種方法來實現(xiàn):一是用硬件方法,即設(shè)計脈沖電路來產(chǎn)生占空比盡量小的脈沖載波信號;另一種就是用軟件來控制msp430的輸出端p2.0,讓其輸出即為占空比較小的脈沖信號。紅外遙控發(fā)射模塊框圖如圖是目前所有紅外遙控器發(fā)射電路

8、的功能組成,其中的編碼器即調(diào)制信號,按遙控器用途的編碼方式可以很簡單、也可以很復(fù)雜。例如用于電視機、vcd、dvd和組合音響的遙控發(fā)射的編碼器,因其控制功能多達50種以上,此時的編碼器均采用專用的紅外線編碼協(xié)議進行嚴格的編程,然而對控制功能少的紅外遙控器,其編碼器是簡單而靈活。前者編碼器是由生產(chǎn)廠家的專業(yè)人員按紅外遙控協(xié)議進行編碼,而后者適用于一般電子技術(shù)人員和電子愛好者的編碼。圖2-4中的38 khz振蕩器即載波信號比較簡單,但專業(yè)用的和業(yè)余用的也有區(qū)別,專業(yè)用的振蕩器采用了晶振,而后者一般是rc振蕩器。例如彩電紅外遙控器上的發(fā)射端用了455 khz的晶振,是經(jīng)過整數(shù)分頻的,分頻系數(shù)為12,

9、即455khz÷12=37.9khz。當(dāng)然也有一些工業(yè)用的遙控系統(tǒng),采用36 khz、40 khz或56 khz等的載波信號。上圖中中編碼器的編碼信號對38 khz的載波信號進行調(diào)制,在經(jīng)紅外發(fā)射管d向空間發(fā)送信號供遙控接收端一體化接收頭接收、解調(diào)輸出、再做處理。利用紅外線的特點,可以制作多路遙控器。在遙控發(fā)射電路中,有兩種電路,即編碼器和38 khz載波信號發(fā)生器。在不需要多路控制的應(yīng)用電路中,可以使用常規(guī)集成電路組成路數(shù)不多的紅外遙控發(fā)射和接收電路,該電路無需使用較復(fù)雜的專用編譯碼器,因此制作容易。單片機控制紅外發(fā)射電路設(shè)計這里利用軟件來實現(xiàn)這個功能。即在需要輸出高電平的時候,讓

10、程序定時把p2.1口輸出狀態(tài)反向,其中定時時間是由指令數(shù)和指令周期來決定的,每條指令的指令執(zhí)行周期是固定的,所以如果想讓反向頻率高一些,則讓指令執(zhí)行的少一些,反之就讓指令多一些。可見輸出信號占空比可以由定時時間的長短來決定,這樣就可以在高電平時輸出占空比盡量小的脈沖信號。因為接收頭對38 khz的光信號轉(zhuǎn)換能力比較強,所以把高電平的頻率設(shè)置為38 khz。在需要輸出低電平的時候,控制p2.1口一直為低就可以了。紅外發(fā)光二極管發(fā)射時,先發(fā)一段前導(dǎo)碼,以檢驗這組碼是否為想要的碼。前導(dǎo)碼由一個9 ms的高電平和一個4 ms的低電平組成。然后再發(fā)32位數(shù)據(jù)代碼,其中高電平為0.5 ms,低電平為0.5

11、 ms的一個周期為代碼“0”;高電平為0.5 ms,低電平為1.5 ms的一個周期為代碼“1”,為了提高發(fā)射功率,實際工作時,發(fā)光二極管的高電平用38 khz的載波信號載波,低電平則一直為低。矩陣鍵盤原理分析行列掃描式鍵盤又叫矩陣鍵盤,矩陣鍵盤電路主要是對msp430單片機的一般i/o口來進行擴展設(shè)計。矩陣鍵盤由行線和列線組成。矩陣鍵盤通過掃描來實現(xiàn)捕獲鍵盤的輸入。所謂掃描就是單片機不斷地對行線一次設(shè)置低電平,然后檢查列線的輸入狀態(tài),從而確定鍵盤是否有輸入。如圖,為鍵盤的電路設(shè)計圖。鍵盤電路p1.0、p1.1、p1.2、p1.3分別為鍵盤的列線。p1.4、p1.5、p1.6、p1.7為鍵盤的行

12、線。列線為輸入口,行線為輸出口。由于所有列線都上拉到3.3v,所以在沒有任何鍵被按下時,所有列線上都為高電平。當(dāng)往相應(yīng)的行線上輸出低電平,如果鍵盤上某個鍵被按下時,則某個列線就為低電平,單片機讀取該列線的狀態(tài)就可以判斷某個被按下,這就是鍵盤的掃描原理。由于msp430單片機的p1口具有中斷功能,因此在軟件設(shè)計時,可以采用一般i/o口來實現(xiàn)鍵盤輸入,也可以利用p1口的中斷功能來實現(xiàn)鍵盤輸入。三、程序設(shè)計一般i/0口方式的程序設(shè)計根據(jù)上面的原理分析,軟件主要是基于掃描實現(xiàn)的。軟件通過設(shè)置行線上的輸出,讀取列線上的狀態(tài)來獲取鍵盤的輸入值,整個程序處于鍵盤的掃描狀態(tài)。在實際的應(yīng)用中,有時候按鍵的抖動可

13、能引起誤判,所以在程序設(shè)計時必須考慮消除抖動。如圖所示為程序流程圖。一般i/o方式程序設(shè)計流程圖可以看出,整個程序包括端口初始化、鍵盤掃描、抖動消除和鍵盤識別等幾個部分,下面具體分析鍵盤掃描程序。鍵盤掃描程序主要是等待按鍵的按下,如果有按鍵按下,則進行按鍵輸入分析,在進行鍵盤掃描的時候,為了簡單起見,在等待鍵盤輸入的時候采取的是死循環(huán)等待方式,在實際中可以采用其它靈活的方式,具體情況根據(jù)系統(tǒng)的需求來確定,下面為具體的程序。int keyscan(void)int np10,np11,np12,np13;int nres = 0;for(;)/讀取各個管腳的狀態(tài)np10 = p1in &

14、 bit0;np11 = (p1in & bit1) >> 1;np12 = (p1in & bit2) >> 2;np13 = (p1in & bit3) >> 3;/是否有鍵被按下if(np10 = 0 | np11 = 0 | np12 = 0 | np13 = 0)break;/有鍵被按下delay();/延時一點時間,消除抖動/讀取各個管腳的狀態(tài)np10 = p1in & bit0;np11 = (p1in & bit1) >> 1;np12 = (p1in & bit2) >>

15、; 2;np13 = (p1in & bit3) >> 3;/是否有鍵被按下if(np10 = 0 | np11 = 0 | np12 = 0 | np13 = 0)/有鍵被按下,進行鍵盤輸入分析nres = keyprocess();else return -1; /沒有輸入,為干擾return nres;其中,delay()為延時程序,用于消除抖動,具體程序如下:void delay()int i;for(i=100;i>0;i-); /延時一點時間即可中斷功能方式的程序設(shè)計由于msp430單片機的p1口有中斷功能,因此可以采用中斷的方式進行軟件設(shè)計,采用中斷方式

16、實現(xiàn)的軟件不需要掃描處理。另外,在端口的初始化時也有所不同,下面是端口初始化的具體程序。void init_port(void)/將p1口的所有的管腳在初始化的時候設(shè)置為輸入方式p1dir = 0;/將p1口所有的管腳設(shè)置為一般i/o口p1sel = 0;/將p1.4、p1.5、p1.6、p1.7設(shè)置為輸出方向p1dir |= bit4;p1dir |= bit5;p1dir |= bit6;p1dir |= bit7;p1out = 0x00; /先輸出低電平p1ie = 0; /將中斷寄存器清零p1ies = 0;p1ifg =0;/打開管腳的中斷功能/對應(yīng)的管腳由高到低電平跳變是相應(yīng)的標

17、志置位p1ie |= bit0;p1ies |= bit0;p1ie |= bit1;p1ies |= bit1;p1ie |= bit2;p1ies |= bit2;p1ie |= bit3;p1ies |= bit3;_eint();/打開中斷return;上面的程序中增加了中斷設(shè)置,并設(shè)置成低電平觸發(fā)中斷方式。由于使用中斷功能,因此必須打開全局中斷使能位。上面的“_eint();”就是打開全局中斷功能使能位。鍵盤的輸入處理可以在p1口的中斷服務(wù)程序中進行處理。下面為中斷服務(wù)程序。/處理來自端口1的中斷interrupt port1_vector void port_isr(void)de

18、lay(); /延時消抖keyprocess();if(p1ifg & bit0)p1ifg &= (bit0); /清除中斷標志位if(p1ifg & bit1)p1ifg &= (bit1); /清除中斷標志位if(p1ifg & bit2)p1ifg &= (bit2); /清除中斷標志位if(p1ifg & bit3)p1ifg &= (bit3); /清除中斷標志位lcd1602硬件電路設(shè)計如圖所示,為msp430與lcd1602的接口電路圖,連接電路比較簡單,使用p4口作為數(shù)據(jù)傳輸接口,使用p3.0、p3.1、p3.2

19、作為液晶控制接口。 液晶硬件連接圖lcd1602控制說明狀態(tài)字說明sta0sta6=d0d7 當(dāng)前數(shù)據(jù)地址指針的數(shù)值sta7讀寫操作使能(1:禁止,0:允許)顯示模式設(shè)置指令碼:0x38功能:設(shè)置16×2顯示,5×7點陣,8位數(shù)據(jù)接口顯示開/關(guān)及光標設(shè)置指令碼:00001dcb(8位二進制碼)d=1 開顯示;d=0 關(guān)顯示;c=1 顯示光標;c=0 不顯示光標b=1 光標閃爍;b=0 光標不顯示指令碼:000001nsn=1 當(dāng)讀或?qū)懸粋€字符后地址指針加1,且光標加1n=0 當(dāng)讀或?qū)懸粋€字符后地址指針減1,且光標減1s=1 當(dāng)寫一個字符,整屏顯示左移(n=1)或右移(n=0

20、)s=0 當(dāng)寫一個字符,整屏顯示不移動軟件程序設(shè)計了解了1602的操作時序與指令,將電路連接后,下面開始程序的編寫。首先,為了方便程序的書寫,我們先對接口進行一下宏定義,這樣使得程序易讀且清晰。#define datadir p4dir /數(shù)據(jù)方向選擇#define dataport p4out#define busy 0x80#define ctrldir p3dir#define clr_rs p3out&=bit0; /rs = p3.0#define set_rs p3out|=bit0;#define clr_rw p3out&=bit1;/rw = p3.1#def

21、ine set_rw p3out|=bit1;#define clr_en p3out&=bit2;/en = p3.2#define set_en p3out|=bit2;向液晶顯示的當(dāng)前地址寫入顯示數(shù)據(jù)void lcdwritedata( uchar data ) /data為要顯示的數(shù)據(jù) waitforenable(); /等待液晶不忙 set_rs; clr_rw; _nop(); dataport = data; /將顯示數(shù)據(jù)寫入數(shù)據(jù)端口 _nop(); set_en; /產(chǎn)生使能脈沖信號 _nop(); _nop(); clr_en;向液晶模塊寫入命令void lcdwri

22、tecommand(uchar cmd,uchar chk) if (chk) waitforenable(); / 檢測忙信號? clr_rs; clr_rw; _nop(); dataport = cmd; /將命令字寫入數(shù)據(jù)端口 _nop(); set_en; /產(chǎn)生使能脈沖信號 _nop(); _nop(); clr_en;1602的初始化void lcdinit(void) ctrldir |= 0x07; /控制線端口設(shè)為輸出狀態(tài) datadir = 0xff; /數(shù)據(jù)端口設(shè)為輸出狀態(tài) lcdwritecommand(0x38, 0); /規(guī)定的復(fù)位操作 delay5ms(); l

23、cdwritecommand(0x38, 0); delay5ms(); lcdwritecommand(0x38, 0); delay5ms(); lcdwritecommand(0x38, 1);/顯示模式設(shè)置 lcdwritecommand(0x08, 1);/顯示關(guān)閉 lcdwritecommand(0x01, 1); /顯示清屏 lcdwritecommand(0x06, 1);/寫字符時整體不移動 lcdwritecommand(0x0c, 1);/顯示開,不開游標,不閃爍紅外數(shù)據(jù)的解碼與存儲紅外解碼程序流程圖1.紅外解碼程序:#include <msp430x14x.h&g

24、t; #define ir_pin (p2in & 0x80) /定義紅外接收頭端口unsigned char ir_buf4; / 用于保存解碼結(jié)果unsigned int ir_get_low(); unsigned int ir_get_high();/* 函數(shù)名稱:main功 能:主函數(shù)參 數(shù):無返回值 :無 */void main(void) unsigned int temp,delay; char i,j; wdtctl = wdtpw + wdthold; / 關(guān)閉看門狗 bcsctl1 &= xt2off; / xt2on bcsctl2 |= selm1 +

25、 sels; / mclk為8m for(delay=5000;delay>0;delay-); ifg1 &=ofifg; taccr0=0xffff; p2dir =0x00; / 輸入設(shè)置 p2dir |= bit0; p2out &= bit0; p4dir =0xff; lcdreset(); init_keypad(); dispnchar(0,0,22,init); while(1) restart: while(ir_pin); /等待紅外信號 temp=ir_get_low(); if(temp<8500 | temp>9500) conti

26、nue; /引導(dǎo)脈沖低電平9000 temp=ir_get_high(); if(temp<4000 | temp>5000) continue; /引導(dǎo)脈沖高電平4500 for(i=0;i<4;i+) /4個字節(jié) for(j=0;j<8;j+) /每個字節(jié)8位 temp=ir_get_low(); if(temp<200 | temp>800) goto restart; temp=ir_get_high(); if(temp<200 | temp>2000) goto restart; ir_bufi>>=1; if(temp&

27、gt;1120) ir_bufi|=0x80; /* 函數(shù)名稱:ir_get_low功 能:計算低電平持續(xù)的時間參 數(shù):無 返回值 :tar*/unsigned int ir_get_low() tar=0x0000; tactl|=tassel1 + taclr + id0 +id1 + mc0; while(!ir_pin && (tar&0x8000)=0); /等待高電平到來 tactl=0x00; return tar; /* 函數(shù)名稱:ir_get_high功 能:計算高電平持續(xù)的時間參 數(shù):無 返回值 :tar*/unsigned int ir_get_h

28、igh() tar=0x0000; tactl|=tassel1 + taclr + id0 +id1 + mc0; while(ir_pin && (tar&0x8000)=0); tactl=0x00; return tar; 2.紅外發(fā)送程序#include "msp430x16x.h"#define sendhp1sel|=bit2;tbcctl4&=ccifg#definesendlp1sel&=bit2#define sendstarttbcctl0&=ccifg;tbcctl0|=ccie/*/char addr

29、ess;char data;uchar count = 0;/遙控所需相關(guān)資源初始化void hwinit()/初始化tbtbctl = tbssel_2 + tbclr + mc_1; /tb時鐘源:smclk 增模式tbccr0 = 1125 - 1;tbccr4 = 560-40;/初始化tatactl = tassel_2 + mc_1; /smclk,增模式 tacctl1 |= outmod_7;ccr0 = 26;ccr1 = 13;/相關(guān)端口初始化 程序由p1.2口發(fā)出紅外編碼(已加入38k載波)/p!sel bit2置1即發(fā)出38k的紅外,清0即停止發(fā)送38k的紅外p1out

30、 &= bit2;p1dir |= bit2;/發(fā)送數(shù)據(jù),包括地址碼和數(shù)據(jù)碼void senddata(uchar addr,uchar dat)address = addr;/要發(fā)送的數(shù)據(jù)放入對應(yīng)存儲區(qū)域data = dat;sendstart; /開始發(fā)送/發(fā)送引導(dǎo)碼 ,tb0中斷中調(diào)用void sendleadcode()static uchar i = 0;/計數(shù) 1.125ms個數(shù)i+;switch(i)/9ms高,4.5ms低case 1:sendh; break;/9ms高電平case 9:sendl; break;/4.5ms低電平case 13:sendh; tbcc

31、r4 = (tbr+560-40>1124) ? (tbr+560-40-1124) : (tbr+560-40);if(tbccr4>1124) tbccr4 = 1124;/防止tbccr4出界i = 0; tbcctl4|=ccie; break;/引導(dǎo)碼完成 560us高,準備數(shù)據(jù)default:break;/發(fā)送一位數(shù)據(jù) ,tb0中斷中調(diào)用void sendonebit()uint taddr = (address<<8)|(address)&0xff);uint tdat = (data<<8)|(data)&0xff);static uchar i = 0;/計數(shù)static uchar flg = 0;/位“1”可發(fā)送:位“1”需要更長時間低電平i+;if(i<=16)if(taddr&(1<<(16-i) && flg=0)/"1"第一次flg = 1;i

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論