基于單片機的數字溫控制系統設計_第1頁
基于單片機的數字溫控制系統設計_第2頁
基于單片機的數字溫控制系統設計_第3頁
基于單片機的數字溫控制系統設計_第4頁
基于單片機的數字溫控制系統設計_第5頁
已閱讀5頁,還剩29頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、創新項目報告項目名稱: 基于單片機的數字溫度控制系統設計 專 業: 電子信息工程技術 班 級: 電信141 指導 老師: 喬志勇 姓 名: 盧德寅 地 點: 教學樓 時 間: 2015年12月成績評定二一六 年 一 月 十 日摘 要隨著時代的進步和發展,單片機技術已經普及到我們生活,工作,科研,各個領域,已經成為一種比較成熟的技術,單片機具有體積小、功耗低、控制功能強、擴展靈活、微型化和使用方便等優點,廣泛應用于儀器儀表中,結合不同種類的傳感器,可實現諸如電壓、濕度、溫度、速度、硬度、壓力等的物理量的測量。本文將介紹一種基于單片機控制理論及其應用系統設計的數字溫度計。本文主要介紹了一個基于AT

2、89C51單片機的測溫系統,詳細描述了利用數字溫度傳感器DS18B20開發測溫系統的過程,重點對傳感器在單片機喜愛的硬件連接,軟件編程以及各模塊系統流程進行了詳盡分析,對各部分的電路也進行一一介紹,該系統可以方便的是實現溫度采集和顯示,并可以根據需要任意設定上下限報警溫度,它使用起來方便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優點,適合我們日常生活和工農業生產中的溫度測量,也可以當做溫度處理模塊嵌入其他系統中,作為其他主系統的輔助擴展。DS18B20和AT89C51結合實現最簡溫度檢測系統,該系統結構簡單,抗干擾能力強,適合與惡劣環境下進行現場溫度測量,有廣泛的應用前景。本設計首先是確

3、定目標,氣候是各個功能模塊的設計,再在Proteus軟件上進行仿真,修改,仿真。本溫度計屬于多功能溫度計,可以設置上下報警溫度,當溫度不在設置范圍內時,可以報警,同時根據設定的溫度范圍通過升降溫電路控制環境的溫度達到恒溫效果。 【關鍵詞】 單片機,數字控制,溫度計, DS18B20,STC89C52RC目錄第1章 緒 論11研究意義及背景12設計目的13主要工作1第2章 系統概述21系統方案22系統組成2第3章 系統硬件設計31 AT89S52單片機的介紹32顯示電路43 DS18B20介紹63.1溫度傳感器測溫原理74系統工作原理75系統整體電路8第4章 系統軟件設計91主程序設計92 DS

4、18B20初始化103 DS18B20溫度傳感器與單片機的接口電路124數碼管顯示與單片機對接145仿真結果166總程序19第五章 實物圖30總 結31第1章 緒 論1研究意義及背景隨著新技術的不斷開發與應用,近年來單片機發展十分迅速,一個以微機應用為主的新技術革命浪潮正在蓬勃興起,單片機的應用已經滲透到電力、冶金、化工、建材、機械、食品、石油等各個行業。傳統的溫度采集方法不僅費時費力,而且精度差,單片機的出現使得溫度的采集和數據處理問題能夠得到很好的解決。本設計使用單片機作為核心進行控制。單片機具有集成度高,通用性好,功能強,特別是體積小,重量輕,耗能低,可靠性高,抗干擾能力強和使用方便等獨

5、特優點,在數字化、智能化方面有廣泛的用途。2設計目的1. 溫度顯示基本范圍1030。2. 精度誤差小于0.01。3. 所測溫度值由LCD1602液晶顯示屏顯示。4. 可以設定溫度的上下限控制及報警功能。3主要工作本設計的研究重點是設計一種基于單片機的數字溫度計控制系統。設計采用數字溫度傳感器DS18B20,此傳感器讀取被測量溫度值,并進行轉換。將轉換后的數據送到單片機處理,再通過LCD1602液晶顯示屏顯示出來。第2章 系統概述1系統方案數字溫度傳感器DS18B20輸出信號全數字化,便于單片機處理及控制,省去傳統測溫方法的很多外圍電路。且該芯片的物理性、化學性很穩定,能用做工業測溫元件。采用5

6、1單片機控制,軟件編程的自由度大,可通過編程實現各種各樣的算術算法和邏輯控制,硬件實現簡單,體積小,安裝方便。所以該系統利用AT89C51芯片控制溫度傳感器DS18B20進行實時溫度檢測并顯示,能夠實現快速測量環境溫度,并可根據需要設定上下限控制及報警溫度。2系統組成本設計是以AT89S52單片機為核心的一種數字溫度顯示控制系統,系統整體硬件電路包括:采集模塊、顯示模塊、設置模塊和單片機最小系統模塊四大模塊組成。系統框圖如圖2-1所示。單片機最小系統顯示模塊設置模塊報警/控制模塊采集模塊 圖2-1 系統基本方框圖第3章 系統硬件設計1 AT89S52單片機的介紹AT89S52有40個引腳,4個

7、8位并行I/O口,1個全雙工異步串行口,同時內含5個中斷源,2個優先級,2個16位定時/計數器。AT89S52的存儲器系統由4K的程序存儲器(掩膜ROM),和128B的數據存儲器(RAM)組成,具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電路系統的設計需要,很適合便攜手持式產品的設計,使用系統可用USB供電。AT89S52單片機的基本組成框圖見圖3-1。圖3-1 AT89S52單片機結構由圖3-1可見,AT89S52單片機主要由以下幾部分組成:1. CPU系統8位CPU,含布爾處理器;時鐘電路;總線控制邏輯。2. 存儲器系統4K字節的程序存儲器(ROM/EPROM/Flash,可

8、外擴至64KB);128字節的數據存儲器(RAM,可再外擴64KB);特殊功能寄存器SFR。3. I/O口和其他功能單元4個并行I/O口;2個16位定時計數器;1個全雙工異步串行口;中斷系統(5個中斷源,2個優先級)。2顯示電路1602液晶簡介LCD1602分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的 比不帶背光的厚,是否帶背光在應用中并無差別,兩者尺寸差別如圖3-2所示。圖3-2 LCD1602規格引腳功能LCD1602采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表3.1所示。表3.1 LCD1602引腳說明編號符號引腳說明編號符號引腳說明1VSS

9、電源地9D2數據2VDD電源正極10D3數據3VL液晶顯示偏壓11D4數據4RS數據/命令選擇12D5數據5R/W讀/寫選擇13D6數據6E使能信號14D7數據7D0數據15BLA背光源正極8D1數據16BLK背光源負極指令說明LCD1602液晶模塊內部的控制器共有11條控制指令,如表3.2所示。表3.2 LCD1602內部控制器序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標返回000000001*3置輸入模式00000001I/DS4顯示開/關控制0000001DCB5光標或字符移位000001S/CR/L*6置功能00001DLNF*7置字符發生存貯器

10、地址0001字符發生存貯器地址8置數據存貯器地址001顯示數據存貯器地址9讀忙標志或地址01BF計數器地址10寫數到CGRAM或DDRAM)10要寫的數據內容11從CGRAM或DDRAM讀數11讀出的數據內容3 DS18B20介紹DS18B20引腳如圖3-3所示。圖3-3 DS18B20引腳圖數字溫度傳感器DS18B20是一種新型的“一線器件”, 采用單總線的數據傳輸,其體積小,輸出信號全數字化,便于單片機處理及控制,在0100 攝氏度時,其最大線形偏差小于1 攝氏度。工作電源既可以在遠端引入,也可以采用寄生電源方式產生。多個DS18B20可以并聯到3 根或2 根線上,CPU只需一根端口線就能

11、與諸多DS18B20 通信,占用微處理器的端口較少,可節省大量的引線和邏輯電路。因此用它來組成一個測溫系統,線路十分簡單。3.1溫度傳感器測溫原理低溫度系數晶振的振蕩頻率受溫度影響很小,用于產生固定頻率的脈沖信號送給計數器1。高溫度系數晶振隨溫度變化其振蕩率明顯改變,所產生的信號作為計數器2的脈沖輸入。計數器1和溫度寄存器被預置在55所對應的一個基數值。計數器1對低溫度系數晶振產生的脈沖信號進行減法計數,當計數器1的預置值減到0時,溫度寄存器的值將加1,計數器1的預置將重新被裝入,計數器1重新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環直到計數器2計數到0時,停止溫度寄存器值的累加,此

12、時溫度寄存器中的數值即為所測溫度。其內部結構圖如圖3-4所示。圖3-4 DS18B20內部結構4系統工作原理溫度傳感器DS18B20將模擬溫度值經過DS18B20處理后轉換為數字值,然后送到單片機中進行數據處理,單片機將處理后的數據通過LCD1602顯示屏顯示出來,同時判斷測得的溫度和設置控制及報警的溫度限進行比較,超過限度則通過蜂鳴器發出報警聲音。5系統整體電路圖3-5 系統電路第4章 系統軟件設計1主程序設計整個系統的功能是由硬件電路配合軟件來實現的,當硬件基本定型后,軟件的功能也就基本定下來了。從軟件的功能不同可分為兩大類:一是監控軟件(主程序),它是整個控制系統的核心,專門用來協調各執

13、行模塊和操作者的關系。二是執行軟件(子程序),它是用來完成各種實質性的功能如測量、計算、顯示、通訊等。每一個執行軟件也就是一個小的功能執行模塊。這里將各執行模塊一一列出,并為每一個執行模塊進行功能定義和接口定義。主程序流程見圖4-1。開始AT89S52初始化DS18B20初始化LCD1602初始化溫度是否到達設定限度Y啟動控制以及報警N溫度在顯示范圍內Y溫度顯示N結束圖 4-1 主程序流程圖主程序如下:void main(void)unsigned char i=0;P2=0xef;P1=0x00;BEEP=1;LCD_Initial(); /LCD 初始化Read_Temperature()

14、; /讀取溫度值writestring(1,0,"DS18B20 Alarmer"); /顯示"DS18B20 Alarmer"delayms(1000);/延時1Swritestring(0,0,"Current T= "); /顯示"Current T= "writestring(0,1," Low=10 Top=30 "); /顯示" Low=10 Top=30 "NG=0;while(1) Read_Temperature();/讀取溫度值Display_Temper

15、ature();/顯示溫度值SetFun();Alarm();2 DS18B20初始化DS18B20初始化流程圖見圖4-2。圖4-2 DS18B20初始化流程圖初始化子程序:void ds1820rst(void)/*ds1820復位*/ unsigned char x=0;DQ = 1; /DQ復位delay_18B20(4); /延時DQ = 0; /DQ拉低delay_18B20(100); /精確延時大于480usDQ = 1; /拉高delay_18B20(40); 3 DS18B20溫度傳感器與單片機的接口電路當DS18B20處于寫存儲器操作和溫度A/D轉換操作時,總線上必須有強的

16、上拉,上拉開啟時間最大為10us。傳感器與單片機接口如圖4-3所示:圖4-3 DS18B20與單片機的接口電路uchar ds1820rd(void)/*讀數據*/ unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; /給脈沖信號 dat>>=1;DQ = 1; /給脈沖信號if(DQ)dat|=0x80;delay_18B20(10); return(dat);void ds1820wr(uchar wdata)/*寫數據*/unsigned char i=0; for (i=8; i>0;

17、 i-) DQ = 0;DQ = wdata&0x01;delay_18B20(10);DQ = 1;wdata>>=1; unsigned int Read_Temperature(void)/*讀取溫度值并轉換*/uchar a,b;ds1820rst(); ds1820wr(0xcc);/*跳過讀序列號*/ds1820wr(0x44);/*啟動溫度轉換*/ds1820rst(); ds1820wr(0xcc);/*跳過讀序列號*/ ds1820wr(0xbe);/*讀取溫度*/ a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<

18、<=8;tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else tvalue=tvalue+1;tflag=1;tvalue=tvalue*(0.625);/溫度值擴大10倍,精確到1位小數CurrentT=tvalue;return(tvalue);4數碼管顯示與單片機對接如圖4-4所示。用AT89S5的P0口作為數據端口,P2.5-P2.7為液晶顯示使能控制端。P0口接上上拉電阻,拉高信號使液晶顯示。圖4-4 LCD1602顯示屏與AT89S52對接LCD1602顯示程序:void Display_Temperature()/顯示溫度u

19、char flagdat; disdata0=tvalue/1000+0x30;/百位數 disdata1=tvalue%1000/100+0x30;/十位數 disdata2=tvalue%100/10+0x30;/個位數 disdata3=tvalue%10+0x30;/小數位 disdata4=tvalue%1+0x30; if(tflag=0) flagdat=0x20;/正溫度不顯示符號 else flagdat=0x2d;/負溫度顯示負號:-if(tflag=1)writeChar(10,0,flagdat);/wr_com(0x8a);wr_dat(flagdat);/顯示符號位

20、writeChar(11,0,disdata0);/wr_com(0x8b);wr_dat(disdata0);/顯示百位writeChar(12,0,disdata1);/wr_com(0x8c);wr_dat(disdata1);/顯示十位 writeChar(13,0,disdata2);/wr_com(0x8d);wr_dat(disdata2);/顯示個位 writeChar(14,0,0X2E);/wr_com(0x8e);wr_dat(0x2e);/顯示小數點 writeChar(15,0,disdata3);/wr_com(0x8f);wr_dat(disdata3);/顯示小

21、數位writeChar(16,0,disdata4);elsewriteChar(10,0,disdata0);/wr_com(0x8a);wr_dat(disdata0);/顯示百位writeChar(11,0,disdata1);/wr_com(0x8b);wr_dat(disdata1);/顯示十位 writeChar(12,0,disdata2);/wr_com(0x8c);wr_dat(disdata2);/顯示個位 writeChar(13,0,0X2e);/wr_com(0x8d);wr_dat(0x2e);/顯示小數點 writeChar(14,0,disdata3);/wr_

22、com(0x8e);wr_dat(disdata3);/顯示小數位writeChar(15,0,disdata4); 5仿真結果設置溫度上限為38度,溫度下限為8度。1.如圖4-5所示。此時溫度為6度,低于下限溫度,蜂鳴器實現報警,加溫器指示燈D3亮,表示加溫器工作。圖4-5 仿真圖12.如圖4-6所示。此時溫度為31度,超過上限溫度,蜂鳴器實現報警,降溫器指示燈D2亮,表示降溫器工作。圖4-6 仿真圖23.如圖4-7所示。此時溫度為26度,在所設范圍內,蜂鳴器沒有報警,說明溫度正常。圖4-7 仿真圖36總程序#include <reg52.h>#include <intri

23、ns.h>#define uint unsigned int#define uchar unsigned charsbit DQ=P23;/ds18b20與單片機連接口sbit RS=P25;sbit RW=P26;sbit EN=P27;sbit LED1=P36;sbit LED2=P37;uchar data disdata5;uint tvalue,CurrentT=0;/溫度值uchar tflag;/溫度正負標志#define LCD_BUS P0sbit SetKey = P22;sbit UpKey = P21;sbit DnKey = P20;sbit BEEP = P

24、24;unsigned char AlarmTempLow=10,AlarmTempTop=30,Set=0,NG=0;void delayms(uint ms) /延時xx毫秒 uchar i;while(ms-) for(i=0;i<120;i+);void command(uint com) /LCD寫指令 RS=0; /RS為0 LCD_BUS=com; /裝載指令 delayms(5); /延時5ms EN=1; /LCD使能 delayms(5);/延時5ms EN=0;/LCD不使能void write_dat(uchar dat) /LCD寫數據 RS=1;/RS為1 L

25、CD_BUS=dat;/裝載數據 delayms(5); /延時5ms EN=1; /LCD使能 delayms(5); /延時5ms EN=0; /LCD不使能void writestring(uchar x,uchar y,uchar *s) /LCD 寫字符串 if (y = 0) command(0x80 + x); /表示第一行 else command(0xC0 + x); /表示第二行 while (*s) /判斷是否字符串的結尾 write_dat( *s); /顯示當前字符 s +; /字符串地址加1 void writeChar(uchar x,uchar y,uchar

26、s) /LCD 寫字符串 if (y = 0) command(0x80 + x); /表示第一行 else command(0xC0 + x); /表示第二行 write_dat( s); /顯示當前字符 void LCD_Initial()/LCD初始化 EN=0; /LCD不使能 RW=0; /RW為0 command(0x38);/發送初始化指令 command(0x0c);/發送初始化指令 command(0x06); /發送初始化指令 command(0x01); /發送初始化指令 command(0x80+0x02);/發送LCD初始位置/*DS1820程序*/void dela

27、y_18B20(unsigned int i)/延時1微秒 while(i-);void ds1820rst(void)/*ds1820復位*/ unsigned char x=0;DQ = 1; /DQ復位delay_18B20(4); /延時DQ = 0; /DQ拉低delay_18B20(100); /精確延時大于480usDQ = 1; /拉高delay_18B20(40); uchar ds1820rd(void)/*讀數據*/ unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; /給脈沖信號dat&

28、gt;>=1;DQ = 1; /給脈沖信號if(DQ)dat|=0x80;delay_18B20(10); return(dat);void ds1820wr(uchar wdata)/*寫數據*/unsigned char i=0; for (i=8; i>0; i-) DQ = 0;DQ = wdata&0x01;delay_18B20(10);DQ = 1;wdata>>=1; unsigned int Read_Temperature(void)/*讀取溫度值并轉換*/uchar a,b;ds1820rst(); ds1820wr(0xcc);/*跳過讀

29、序列號*/ds1820wr(0x44);/*啟動溫度轉換*/ds1820rst(); ds1820wr(0xcc);/*跳過讀序列號*/ ds1820wr(0xbe);/*讀取溫度*/ a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else tvalue=tvalue+1;tflag=1;tvalue=tvalue*(0.625);/溫度值擴大10倍,精確到1位小數CurrentT=tvalue;return(tvalue);void Disp

30、lay_Temperature()/顯示溫度uchar flagdat; disdata0=tvalue/1000+0x30;/百位數 disdata1=tvalue%1000/100+0x30;/十位數 disdata2=tvalue%100/10+0x30;/個位數 disdata3=tvalue%10+0x30;/小數位 disdata4=tvalue%1+0x30; if(tflag=0) flagdat=0x20;/正溫度不顯示符號 else flagdat=0x2d;/負溫度顯示負號:-if(tflag=1)writeChar(10,0,flagdat);/wr_com(0x8a)

31、;wr_dat(flagdat);/顯示符號位writeChar(11,0,disdata0);/wr_com(0x8b);wr_dat(disdata0);/顯示百位writeChar(12,0,disdata1);/wr_com(0x8c);wr_dat(disdata1);/顯示十位 writeChar(13,0,disdata2);/wr_com(0x8d);wr_dat(disdata2);/顯示個位 writeChar(14,0,0X2E);/wr_com(0x8e);wr_dat(0x2e);/顯示小數點 writeChar(15,0,disdata3);/wr_com(0x8f

32、);wr_dat(disdata3);/顯示小數位writeChar(16,0,disdata4);elsewriteChar(10,0,disdata0);/wr_com(0x8a);wr_dat(disdata0);/顯示百位writeChar(11,0,disdata1);/wr_com(0x8b);wr_dat(disdata1);/顯示十位 writeChar(12,0,disdata2);/wr_com(0x8c);wr_dat(disdata2);/顯示個位 writeChar(13,0,0X2e);/wr_com(0x8d);wr_dat(0x2e);/顯示小數點 writeC

33、har(14,0,disdata3);/wr_com(0x8e);wr_dat(disdata3);/顯示小數位writeChar(15,0,disdata4); void SetFun(void)unsigned char i1=0,i2=0,i3=0,i4=0,i5=0,i6=0;if(SetKey=0)delayms(20);if(SetKey=0)if(Set<2)Set+;else Set=0;switch(Set)case 0: writestring(0,1," ");writestring(8,1," ");break;case 1

34、:writestring(0,1,">");writestring(8,1," ");break;case 2:writestring(0,1," ");writestring(8,1,">");break;while(SetKey=0);if(UpKey=0)&&(Set!=0)delayms(20);if(UpKey=0)switch(Set)case 1:if(AlarmTempLow<99) AlarmTempLow+;else AlarmTempLow=99; break

35、;case 2:if(AlarmTempTop<99) AlarmTempTop+;else AlarmTempTop=99; break;i1 = AlarmTempLow/100; /獲得溫度值的百位 i2 = AlarmTempLow%100/10; /獲得溫度值的十位i3 = AlarmTempLow%10; /獲得溫度值的個位i4 = AlarmTempTop/100; /獲得溫度值的百位 i5 = AlarmTempTop%100/10; /獲得溫度值的十位i6 = AlarmTempTop%10; /獲得溫度值的個位writestring(5,1," "

36、);writestring(13,1," ");if(i1!=0)writeChar(5,1,i1+'0');if(i1=0)&&(i2!=0) writeChar(5,1,i2+'0');if(i1!=0) writeChar(6,1,i2+'0');if(i1=0)&&(i2=0)writeChar(5,1,i3+'0');else if(i1=0)&&(i2!=0)writeChar(6,1,i3+'0');if(i1!=0) writeCh

37、ar(7,1,i3+'0');if(i4!=0)writeChar(13,1,i4+'0');if(i4=0)&&(i5!=0) writeChar(13,1,i5+'0');if(i4!=0) writeChar(14,1,i5+'0');if(i4=0)&&(i5=0)writeChar(13,1,i6+'0');else if(i4=0)&&(i5!=0)writeChar(14,1,i6+'0');if(i4!=0) writeChar(15,

38、1,i6+'0');while(UpKey=0);if(DnKey=0)&&(Set!=0)delayms(20);if(DnKey=0)switch(Set)case 1:if(AlarmTempLow>0) AlarmTempLow-;else AlarmTempLow=0; break;case 2:if(AlarmTempTop>0) AlarmTempTop-;else AlarmTempTop=0; break;i1 = AlarmTempLow/100; /獲得溫度值的百位 i2 = AlarmTempLow%100/10; /獲得溫度

39、值的十位i3 = AlarmTempLow%10; /獲得溫度值的個位i4 = AlarmTempTop/100; /獲得溫度值的百位 i5 = AlarmTempTop%100/10; /獲得溫度值的十位i6 = AlarmTempTop%10; /獲得溫度值的個位writestring(5,1," ");writestring(13,1," ");if(i1!=0)writeChar(5,1,i1+'0');if(i1=0)&&(i2!=0) writeChar(5,1,i2+'0');if(i1!=0) writeChar(6,1,i2+'0');if(i1=0)&&(i2=0)writeChar(5,1,i3+'0');else if(i1=0)&&(i2!=0)writeChar(6,1,i3+'0');if(i1!=0) writeChar(7,1,i3+'0');if(i4!=0)write

溫馨提示

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

評論

0/150

提交評論