單片機(jī)課程設(shè)計(jì)--數(shù)字溫度計(jì)設(shè)計(jì)_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p>  院 (系): 電氣與控制工程學(xué)院 </p><p>  專業(yè)班級:測控技術(shù)與儀器</p><p><b>  設(shè)計(jì)者:</b></p><p><b>  設(shè)計(jì)者</b></p>

2、<p><b>  指導(dǎo)教師:</b></p><p>  2013年7月 17日</p><p><b>  目錄</b></p><p><b>  1基本要求1</b></p><p><b>  1.1設(shè)計(jì)題目1</b></p

3、><p><b>  1.2設(shè)計(jì)任務(wù)1</b></p><p>  1.3本設(shè)計(jì)應(yīng)達(dá)到要求1</p><p><b>  1.4擴(kuò)展功能1</b></p><p>  1.5設(shè)計(jì)說明書(論文)1</p><p><b>  2課程設(shè)計(jì)內(nèi)容2</b>

4、</p><p>  2.1設(shè)計(jì)任務(wù)目的2</p><p>  2.2設(shè)計(jì)任務(wù)要求2</p><p><b>  2.3方案設(shè)計(jì)2</b></p><p>  2.3.1溫度采集電路的選擇2</p><p>  2.3.2單片機(jī)的選擇2</p><p>  2.3

5、.3顯示電路的取決3</p><p>  2.3.4報(bào)警部分電路分析3</p><p>  3重要器件及其相關(guān)參數(shù)4</p><p>  3.1單片機(jī)STC89C524</p><p>  3.2溫度傳感器DS18B204</p><p><b>  4硬件電路設(shè)計(jì)7</b></

6、p><p><b>  4.1主板電路7</b></p><p><b>  4.2顯示電路7</b></p><p>  4.3報(bào)警參數(shù)調(diào)節(jié)電路7</p><p>  4.4蜂鳴器報(bào)警電路7</p><p>  4.5溫度采集電路7</p><p&

7、gt;<b>  5系統(tǒng)軟件設(shè)計(jì)8</b></p><p><b>  5.1主程序8</b></p><p>  5.2讀取數(shù)據(jù)的流程圖8</p><p>  5.3溫度轉(zhuǎn)換命令子程序9</p><p>  5.4 計(jì)算溫度子程序10</p><p>  5.5模

8、式切換流程圖10</p><p>  6實(shí)際連接與最終結(jié)果11</p><p><b>  設(shè)計(jì)心得體會13</b></p><p><b>  參考文獻(xiàn)15</b></p><p>  附錄1:元件清單16</p><p>  附錄2:程序清單16</p&

9、gt;<p><b>  數(shù)字溫度計(jì)設(shè)計(jì)</b></p><p>  【摘 要】:隨著時(shí)代的進(jìn)步和發(fā)展,單片機(jī)技術(shù)已經(jīng)普及到我們生活,工作,科研,各個(gè)領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù),本文將介紹一種基于單片機(jī)控制的數(shù)字溫度計(jì),本溫度計(jì)屬于多功能溫度計(jì),可以通過鍵盤設(shè)置上下報(bào)警溫度當(dāng)溫度不在設(shè)置范圍內(nèi)時(shí),可以報(bào)警。 </p><p>  【關(guān)鍵字】:DS

10、18B20;STC89C52;四位一體數(shù)碼管;報(bào)警;</p><p>  【引 言】:隨著人們生活水平的不斷提高,單片機(jī)控制無疑是人們追求的目標(biāo)之一,它所給人帶來的方便也是不可否定的,其中數(shù)字溫度計(jì)就是一個(gè)典型的例子,但人們對它的要求越來越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施就需要從數(shù)單片機(jī)技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。</p><p>  本設(shè)計(jì)所

11、介紹的數(shù)字溫度計(jì)與傳統(tǒng)的溫度計(jì)相比,具有讀數(shù)方便,測溫范圍廣,測溫準(zhǔn)確,其輸出溫度采用數(shù)字顯示,主要用于對測溫比較準(zhǔn)確的場所,或科研實(shí)驗(yàn)室使用,該設(shè)計(jì)控制器使用單片機(jī)STC89C52RC,測溫傳感器使用DS18B20,用4位一體共陰數(shù)碼管以串口傳送數(shù)據(jù),實(shí)現(xiàn)溫度顯示,能準(zhǔn)確達(dá)到以上要求。</p><p><b>  1基本要求</b></p><p><b>

12、;  1.1設(shè)計(jì)題目</b></p><p><b>  數(shù)字溫度計(jì)設(shè)計(jì)</b></p><p><b>  1.2設(shè)計(jì)任務(wù)</b></p><p>  利用單片機(jī)和集成溫度傳感器設(shè)計(jì)一個(gè)可以直接顯示溫度值的數(shù)字溫度計(jì)并要求達(dá)到一定的測量精度。</p><p>  1.3本設(shè)計(jì)應(yīng)達(dá)到要求

13、</p><p> ?、?硬件設(shè)計(jì):根據(jù)任務(wù)要求,完成單片機(jī)最小系統(tǒng)及其擴(kuò)展設(shè)計(jì),焊接電路板,組成功能完整的樣機(jī)。</p><p>  ⑵ 軟件設(shè)計(jì):根據(jù)溫度測量及顯示功能要求,完成控制軟件的編寫與調(diào)試;</p><p> ?、?功能要求:至少利用3位數(shù)碼管進(jìn)行測量值的顯示(也可用液晶顯示器相應(yīng)內(nèi)容),溫度測量范圍:-20℃~100℃;</p><

14、;p><b>  1.4擴(kuò)展功能</b></p><p>  根據(jù)實(shí)際情況自由添加附加功能,如設(shè)置溫度的上下限報(bào)警功能,利用語音或聲光報(bào)警等。</p><p>  1.5設(shè)計(jì)說明書(論文)</p><p>  設(shè)計(jì)說明書應(yīng)表明設(shè)計(jì)思想和所使用的設(shè)計(jì)方法,主要內(nèi)容包括:</p><p>  ① 系統(tǒng)簡介、整體功能說明

15、、各功能模塊說明(附圖)及系統(tǒng)使用說明;</p><p>  ② 設(shè)計(jì)還需要改進(jìn)的地方及設(shè)計(jì)的心得體會;</p><p>  ③ 參考文獻(xiàn):包括參考書、資料、網(wǎng)站等,按標(biāo)準(zhǔn)格式列出(可參考教材最后的參考文獻(xiàn)引用格式);</p><p> ?、?附錄:系統(tǒng)總體原理圖及源程序。</p><p><b>  2課程設(shè)計(jì)內(nèi)容</b&g

16、t;</p><p><b>  2.1設(shè)計(jì)任務(wù)目的</b></p><p>  隨著人們生活水平的不斷提高,單片機(jī)控制無疑是人們追求的目標(biāo)之一,它所給人帶來的方便也是不可否定的,其中數(shù)字溫度計(jì)就是一個(gè)典型的例子,但人們對它的要求越來越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施就需要從數(shù)單片機(jī)技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。本次課程設(shè)計(jì)的

17、目的就是通過本次課程設(shè)計(jì)使我們更加熟練單片機(jī)技術(shù)的使用,將單片機(jī)理論知識融入于生產(chǎn)應(yīng)用。使我們學(xué)有所用,學(xué)以致用!</p><p><b>  2.2設(shè)計(jì)任務(wù)要求</b></p><p>  根據(jù)設(shè)計(jì)要求,確定設(shè)計(jì)任務(wù)的總綱領(lǐng):利用單片機(jī)和集成溫度傳感器設(shè)計(jì)一個(gè)可以直接顯示溫度值的數(shù)字溫度計(jì)。設(shè)計(jì)要求:</p><p> ?。?)硬件設(shè)計(jì):根據(jù)

18、任務(wù)要求,完成單片機(jī)最小系統(tǒng)及其擴(kuò)展設(shè)計(jì),焊接電路板,組成功能完整的樣機(jī)。</p><p> ?。?)軟件設(shè)計(jì):根據(jù)溫度測量及顯示功能要求,完成控制軟件的編寫與調(diào)試;</p><p>  (3)功能要求:至少利用3位數(shù)碼管進(jìn)行測量值的顯示(也可用液晶顯示器相應(yīng)內(nèi)容),溫度測量范圍:-20℃~100℃;</p><p><b>  (4)擴(kuò)展功能:</

19、b></p><p>  根據(jù)實(shí)際情況自由添加附加功能,如設(shè)置溫度的上下限報(bào)警功能,利用語音或聲光報(bào)警等。</p><p><b>  2.3方案設(shè)計(jì)</b></p><p>  因?yàn)楸驹O(shè)計(jì)的核心就是溫度的采集,故而首先考慮溫度的采集方案即溫度采集電路的選擇。</p><p>  2.3.1溫度采集電路的選擇<

20、;/p><p> ?。?)溫度采集電路方案一</p><p>  由于本設(shè)計(jì)是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。</p><p> ?。?)溫度采集電路方案二 </p&g

21、t;<p>  進(jìn)而考慮到用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。</p><p>  從以上兩種方案,很容易看出,采用方案二,電路與軟件設(shè)計(jì)都比較簡單,傳感精度也明顯更高。故采用了方案二為本次數(shù)字溫度計(jì)設(shè)計(jì)的大致方案。</p><

22、p>  2.3.2單片機(jī)的選擇</p><p>  選擇完溫度采集電路的設(shè)計(jì),則考慮此次設(shè)計(jì)電路的核心單片機(jī)。單片機(jī)的選擇主要是AT系列和STC系列的選擇。依照的原則是:滿足所需功能的前提下,盡量選擇低成本單片機(jī)。</p><p>  由于AT系列51單片機(jī)是USA的產(chǎn)品,功能少,速度慢,RAM/ROM小,性能不夠穩(wěn)定。而且一些AT系列的單片機(jī)已經(jīng)停產(chǎn)。相比STC系列單片機(jī)高性能,功

23、能齊全,速度高,RAM/ROM大,價(jià)格低廉、下載程序方便等優(yōu)點(diǎn)。毫無疑問。我們選擇了STC系列常用的且價(jià)格較低的單片機(jī)STC89C52RC。</p><p>  2.3.3顯示電路的取決</p><p>  單片機(jī)確定后。主要僅剩下顯示電路的設(shè)計(jì)。關(guān)于顯示電路。我們采用了四位一體八段共陰數(shù)碼管。符合課程設(shè)計(jì)的要求。</p><p>  2.3.4報(bào)警部分電路分析&l

24、t;/p><p>  在測溫場所我們往往需要對高、低溫進(jìn)行報(bào)警,而且需要根據(jù)不同情況隨時(shí)調(diào)節(jié)報(bào)警溫限,這就需要設(shè)計(jì)鍵盤電路來進(jìn)行報(bào)警參數(shù)設(shè)置。根據(jù)分析需要設(shè)計(jì)三個(gè)按鍵的鍵盤,即模式切換、加鍵,減鍵。</p><p><b>  2.4系統(tǒng)框圖</b></p><p>  該系統(tǒng)可分為以下七個(gè)模塊:</p><p> ?。?)

25、控制器:采用單片機(jī)STC89C52對采集的溫度數(shù)據(jù)進(jìn)行處理;</p><p> ?。?)溫度采集:采用DS18B20直接向控制器傳輸12位二進(jìn)制數(shù)據(jù);</p><p>  (3)溫度顯示:采用了4個(gè)LED共陰極七段數(shù)碼管顯示實(shí)際溫度值;</p><p> ?。?)門限設(shè)置:主要實(shí)現(xiàn)模式切換及上下門限溫度的調(diào)節(jié);</p><p> ?。?)報(bào)警

26、裝置:采用發(fā)光二極管和嗡鳴器進(jìn)行報(bào)警,低于低門限或高于高門限均使其二極管發(fā)光嗡鳴器發(fā)出報(bào)警聲音;</p><p> ?。?)復(fù)位電路:對整個(gè)系統(tǒng)進(jìn)行復(fù)位;</p><p>  (7)時(shí)鐘振蕩模塊:為整個(gè)系統(tǒng)提供統(tǒng)一的時(shí)鐘周期。</p><p>  圖2.1總體設(shè)計(jì)方框圖</p><p>  3重要器件及其相關(guān)參數(shù)</p><

27、;p>  3.1單片機(jī)STC89C52</p><p>  P0.0~P0.7:通用I/O引腳或數(shù)據(jù)低8位地址總線復(fù)用地址;</p><p>  P1.0~P1.7:通用I/O引腳;</p><p>  P2.0~P2.7:通用I/O引腳或高8位地址總線復(fù)用地址;</p><p>  P3.0~P3.7:通用I/O引腳或第二功能引腳(R

28、xD、TxD、</p><p>  INT0、INT1、T0、T1、WR、RD);</p><p>  XTAL1、XTAL2:外接晶振輸入端;</p><p>  RST/Vpd:復(fù)位信號輸入引腳/備用電源輸入引腳;</p><p>  Vcc:接+5V電源;</p><p><b>  Vss:地端。&l

29、t;/b></p><p>  3.2溫度傳感器DS18B20</p><p> ?。?)DS18B20內(nèi)部結(jié)構(gòu)框圖如圖3.1所示:</p><p>  圖3.1DS18B20內(nèi)部結(jié)構(gòu)框圖</p><p> ?。?)DS18B20溫度傳感器內(nèi)部高速RAM結(jié)構(gòu)如圖3.2所示。用戶要去改動(dòng),R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率。&

30、lt;/p><p><b>  圖3.2</b></p><p> ?。?)由表1可見,DS18B20溫度轉(zhuǎn)換的時(shí)間比較長,而且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間越長。因此,在實(shí)際應(yīng)用中要將分辨率和轉(zhuǎn)換時(shí)間權(quán)衡考慮。</p><p>  表1 DS18B20溫度轉(zhuǎn)換時(shí)間表</p><p> ?。?)DS18B20的測溫原理

31、:器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計(jì)數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號作為減法計(jì)數(shù)器2的脈沖輸入。器件中還有一個(gè)計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù)進(jìn)而完成溫度測量。計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將-55℃所對應(yīng)的一個(gè)基數(shù)分別置入減法計(jì)數(shù)器1、溫度寄存器中,計(jì)數(shù)器1和溫度寄存器被預(yù)置在-

32、55℃所對應(yīng)的一個(gè)基數(shù)值。</p><p>  減法計(jì)數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器計(jì)數(shù)到0時(shí),停止溫度寄存器的累加,此時(shí)溫度寄存器中的數(shù)值就是所測溫度值。其輸出用于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)器門仍未關(guān)閉就重復(fù)上述過程,直

33、到溫度寄存器值大致被測溫度值。</p><p> ?。?)通過單線總線端口訪問 DS1820 的協(xié)議如下:</p><p><b>  ? 初始化</b></p><p>  ? ROM 操作命令</p><p><b>  ? 存儲器操作命令</b></p><p><

34、;b>  ? 執(zhí)行/數(shù)據(jù)</b></p><p>  DS1820 需要嚴(yán)格的協(xié)議以確保數(shù)據(jù)的完整性。協(xié)議包括幾種單線信號類型:復(fù)位脈沖、存在脈沖、寫0、寫1、讀0 和讀1。所有這些信號,除存在脈沖外,都是由總線控制器發(fā)出的。和 DS1820 間的任何通訊都需要以初始化序列開始,一個(gè)復(fù)位脈沖跟著一個(gè)存在脈沖,表明DS1820 已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)(適當(dāng)?shù)腞OM 命令和存儲器操作命令)。<

35、;/p><p>  當(dāng)總線上只有一個(gè)器件時(shí),DS18B20讀溫度的流程為:</p><p>  復(fù)位→發(fā)0CCH SKIP ROM命令→發(fā)44H開始轉(zhuǎn)換命令→延時(shí)→復(fù)位→發(fā)0CCHSKIP ROM命令→發(fā)0BEH讀存儲器命令→連續(xù)讀出兩個(gè)字節(jié)數(shù)據(jù)(即溫度)→ 結(jié)束。</p><p> ?。?)DS18B20溫度傳感器與單片機(jī)的接口電路</p><

36、;p>  DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時(shí)DS18B20的1腳接地,2腳作為信號線,3腳接電源,其接電源與單片機(jī)連接方式如圖4。另一種是寄生電源供電方式。</p><p>  當(dāng)DS18B20處于寫存儲器操作和溫度A/D轉(zhuǎn)換操作時(shí),總線上必須有強(qiáng)的上拉,上拉開啟時(shí)間最大為10us。采用寄生電源供電方式時(shí)VDD端接地。由于單線制只有一根線,因此發(fā)送接口必須是三態(tài)的。</p

37、><p><b>  4硬件電路設(shè)計(jì)</b></p><p><b>  4.1主板電路</b></p><p>  系統(tǒng)整體硬件電路包括,傳感器數(shù)據(jù)采集電路,溫度顯示電路,上下限報(bào)警調(diào)整電路,單片機(jī)主板電路等,如圖4.1所示。</p><p>  圖4.1中有三個(gè)獨(dú)立式按鍵可以分別調(diào)整溫度計(jì)的上下限報(bào)

38、警設(shè)置,圖中蜂鳴器可以在被測溫度不在上下限范圍內(nèi)時(shí),發(fā)出報(bào)警鳴叫聲音。</p><p>  圖4.1中的按健復(fù)位電路是上電復(fù)位加手動(dòng)復(fù)位,使用比較方便,在程序跑飛時(shí),可以手動(dòng)復(fù)位,這樣就不用在重起單片機(jī)電源,就可以實(shí)現(xiàn)復(fù)位。</p><p><b>  圖4.1系統(tǒng)電路圖</b></p><p><b>  4.2顯示電路</b

39、></p><p>  顯示電路采用的是四位一體八段共陰數(shù)碼管。四位一體八段數(shù)碼管最大的有點(diǎn)是免去了各個(gè)數(shù)碼管間的復(fù)雜的連接電路。本設(shè)計(jì)中,將八段數(shù)碼管的A-DP,8個(gè)段選端分別接到單片機(jī)的P0~0-P0~7管腳。1-4,4個(gè)位選端分別連接到單片機(jī)的P2~0-P2~3管腳。</p><p>  4.3報(bào)警參數(shù)調(diào)節(jié)電路</p><p>  門限中的三個(gè)按鍵,分別

40、為模式切換按鍵、加按鍵、減按鍵;模式切換按鍵接P1~0,加按鍵接P1~1,減按鍵接P1~2。</p><p>  4.4蜂鳴器報(bào)警電路</p><p>  報(bào)警電路中,超過高門限或者低于低門限時(shí)發(fā)光二極管被點(diǎn)亮蜂鳴器,其余時(shí)刻光二極管均熄滅、蜂鳴器不響;蜂鳴器報(bào)警接P1~4。</p><p><b>  4.5溫度采集電路</b></p&

41、gt;<p>  DS18B20溫度采集電路中,需要注意的是DQ上需要一個(gè)上拉電阻,一般為4.7KΩ左右。DQ接P2~6。</p><p><b>  5系統(tǒng)軟件設(shè)計(jì)</b></p><p>  系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計(jì)算溫度子程序,顯示數(shù)據(jù)刷新子程序等</p><p><b>  

42、5.1主程序</b></p><p>  主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測量的當(dāng)前溫度值,溫度測量每1s進(jìn)行一次。這樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程見圖5.1所示。</p><p>  圖5.1主程序流程圖</p><p>  5.2讀取數(shù)據(jù)的流程圖</p><p>  DSl8820

43、的主要數(shù)據(jù)元件有:64位激光Lasered ROM,溫度靈敏元件和非易失性溫度告警觸發(fā)器TH和TL。DSBl820可以從單總線獲取電源,當(dāng)信號線為高電平時(shí),將能量貯存在內(nèi)部電容器中;當(dāng)單信號線為低電平時(shí),將該電源斷開,直到信號線變?yōu)楦唠娖街匦陆由霞纳?電容)電源為止。此外,還可外接5 V電源,給DSl8820供電。DSl8820的供電方式靈活,利用外接電源還可增加系統(tǒng)的穩(wěn)定性和可靠性。圖5.2為讀取數(shù)據(jù)流程圖。</p>&

44、lt;p>  圖5.2 讀取數(shù)據(jù)的流程圖</p><p>  5.3溫度轉(zhuǎn)換命令子程序</p><p>  溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,當(dāng)采用12位分辨率時(shí)轉(zhuǎn)換時(shí)間約為750ms,在本程序設(shè)計(jì)中采用1s顯示程序延時(shí)法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程圖如上圖,圖5.3所示。</p><p>  圖5.3溫度轉(zhuǎn)換命令子程序流程圖</p&

45、gt;<p>  5.4 計(jì)算溫度子程序</p><p>  計(jì)算溫度子程序?qū)AM中讀取值進(jìn)行BCD碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,其程序流程圖如圖5.4所示。</p><p>  圖5.4計(jì)算溫度子程序流程圖</p><p>  5.5模式切換流程圖</p><p>  圖5.5模式切換流程圖</p>&

46、lt;p>  使用模式值st來標(biāo)記不同模式,st=1時(shí),表示在正常溫度模式,st=2,表示在高門限模式,st=3表示在低門限模式,每次按下一次模式切換鍵,st+1,待其加至4時(shí),將該值返回至1。從而形成了模式鍵不斷按下,三種模式循環(huán)切換的情況。防抖在這里是十分關(guān)鍵的。因?yàn)榇颂幍陌存I是按下然后又返回為按了一次。所以按下時(shí),則進(jìn)入程序,為了防止機(jī)械抖動(dòng)等不確定情況,延時(shí)恰當(dāng)?shù)囊欢螘r(shí)間后再次檢測是否確實(shí)按下。若確實(shí)按下,則對模式進(jìn)行切換

47、。切換后,延時(shí)等待按鍵返回高位,返回高位后,再次延時(shí)消除抖動(dòng),再次檢驗(yàn),確定按鍵返回高位后,退出程序。</p><p>  6實(shí)際連接與最終結(jié)果</p><p><b>  (1)正常范圍顯示</b></p><p>  圖6.1正常顯示實(shí)物連接圖</p><p><b>  溫度報(bào)警上限顯示</b>

48、;</p><p>  圖6.2溫度報(bào)警上限顯示實(shí)物連接圖</p><p><b>  溫度報(bào)警下限顯示</b></p><p>  圖6.3溫度報(bào)警下限顯示實(shí)物連接圖</p><p><b>  設(shè)計(jì)心得體會</b></p><p>  [硬件焊接]xx:通過本次課程設(shè)計(jì)我

49、學(xué)到了好多東西,原來我的單片機(jī)知識并不扎實(shí),不論軟件還是硬件都不好,不過在這次實(shí)習(xí)中,通過親自動(dòng)手,發(fā)現(xiàn)了很多不會的問題,也加深了對這些知識的認(rèn)識。在課程設(shè)計(jì)之前,我們在書上網(wǎng)上查找了許多資料,最終確定了此次課設(shè)的電路圖。在調(diào)試過程中,我們的板子出現(xiàn)了許多問題,舉例如下:</p><p>  問題1:連接好線路,數(shù)碼管不亮</p><p>  解決辦法:我們猜測可能線路板有虛焊,就將線路板

50、檢查了一遍,最后是將數(shù)碼管給拆了,重新焊接了一遍。</p><p>  問題2:蜂鳴器響,數(shù)碼管不亮</p><p>  解決辦法:通過同學(xué)的幫助,我們最后發(fā)現(xiàn)是單片機(jī)的問題,換了一新的52芯片。</p><p>  問題3:連接好線路,數(shù)碼管亂碼。</p><p>  解決辦法:本次課程設(shè)計(jì)的電路圖是參考網(wǎng)上的,不知道是否正確,就用仿真試做

51、了一下,發(fā)現(xiàn)仿真結(jié)果是正確的,就照圖焊接了。連好線路,發(fā)現(xiàn)數(shù)碼管出現(xiàn)亂碼現(xiàn)象,通過詢問同學(xué),在網(wǎng)上查找資料,知道了是數(shù)碼關(guān)沒有驅(qū)動(dòng),就給4個(gè)位選線路分別焊接了三極管(9014),因?yàn)閿?shù)碼管是共陰的。</p><p>  問題4:數(shù)碼管顯示2559</p><p>  解決辦法:分析得知,這個(gè)可能是由于溫度傳感器沒有采集到數(shù)據(jù),即可能是因?yàn)檐浖幊逃袉栴}也可能是硬件焊接,我們找來同學(xué)的板子,

52、將我們的52單片機(jī)與同學(xué)焊接的板子相連接,發(fā)現(xiàn)數(shù)碼管有顯示,明白了是板子的問題,之后將與溫度串關(guān)起相連的線路仔細(xì)檢查,部分線路重新焊接。</p><p>  在課設(shè)中,我深深感受到團(tuán)隊(duì)合作的重要性。這次課設(shè)對于我們來說是比較困難的,但是俗話說三個(gè)臭皮匠頂個(gè)諸葛亮,雖說我們只有兩人,但我們分工明確,互相討論互相學(xué)習(xí)互相幫組,遇到不會的問題積極解決,請教同學(xué),終于成功完成了此次設(shè)計(jì)。我們收獲不小,這為我們大四的畢業(yè)設(shè)

53、計(jì)打下了基礎(chǔ)。</p><p><b>  [軟件調(diào)試]xx:</b></p><p>  經(jīng)過一周的努力我們終于完成了本次設(shè)計(jì)任務(wù),作品實(shí)現(xiàn)了預(yù)期的功能要求。但在本次設(shè)計(jì)與調(diào)試的過程中,我也遇到了很多的問題。</p><p>  (1)在仿真中,我將數(shù)碼管段碼a~dp連接在了P0口,仿真不成功。后查閱P0、P1、P2以及P3口的內(nèi)部結(jié)構(gòu)后發(fā)現(xiàn)

54、,除P0外另外三口均接有上拉電阻,而P0則無。所以P0在作為通用I/O接口使用時(shí),必須外接上拉電阻,其余端口則不需要。加入排阻后仿真成功。</p><p><b> ?。?)關(guān)于位選</b></p><p>  在最開始的測試數(shù)碼管類型中,我只測試了一位數(shù)碼管,使其顯示數(shù)值1,但測試成功后,4位數(shù)碼管均顯示為1。在測試過程中,我并未注意這個(gè)問題。</p>

55、<p>  測試結(jié)束后,進(jìn)行整體聯(lián)調(diào)。但數(shù)碼管始終無正確顯示。當(dāng)時(shí),我首先著手于尋找軟件程序中是否有錯(cuò)誤。所以人為將temp設(shè)定為一個(gè)固定值,先確定數(shù)據(jù)處理程序和數(shù)據(jù)顯示程序無誤。然而數(shù)碼管無法正常顯示我預(yù)先設(shè)定的值,后經(jīng)過反復(fù)改動(dòng),發(fā)現(xiàn),在位選過程中,必須在選中一位數(shù)碼管的過程中同時(shí)將其余所有的數(shù)碼管關(guān)閉,否則將產(chǎn)生混亂。若逐一設(shè)定S1=1;S2=0;S3=0;S4=0未免太過麻煩,所以設(shè)定一個(gè)數(shù)組,分別賦值0x08,0x

56、04,0x02,0x01。片選時(shí)按照規(guī)則將上值賦給,則一舉多得。</p><p><b> ?。?)DQ數(shù)據(jù)采集</b></p><p>  上述問題均解決后,再次進(jìn)行調(diào)試,數(shù)碼管顯示2559。顯然采集的數(shù)據(jù)是有很大問題的,這就說明電路并沒有采集到溫度數(shù)據(jù),我不斷的對程序中DS18B20的初始化時(shí)等部分的時(shí)序進(jìn)行調(diào)整。在經(jīng)歷了無法顯示正常溫度的挫敗后,我仔細(xì)查閱了DS

57、18B20的數(shù)據(jù)手冊,確定了在其初始化過程中,DQ電平應(yīng)該如何變化且應(yīng)當(dāng)延時(shí)多少。同時(shí)也確定了DS8B20的在12位分辨率情況下數(shù)據(jù)A/D轉(zhuǎn)換所需時(shí)間為500ms~750ms,所以在發(fā)出轉(zhuǎn)換命令后需要給其充分的時(shí)間來進(jìn)行A/D轉(zhuǎn)換。經(jīng)過對程序的調(diào)整,問題得到解決。</p><p> ?。?)數(shù)碼管大部分時(shí)間顯示的是正常溫度,但是仍然會在某些時(shí)候跳變?yōu)?559,1279等數(shù)值還不時(shí)的錯(cuò)誤報(bào)警。猜測可能是接觸不良造成

58、的,主要是排線,+5V電壓線,地線等諸多因素的影響,稍作調(diào)整后即可消除。</p><p>  總之,在這次單片機(jī)課程設(shè)計(jì)過程中我對溫度集成芯片有了進(jìn)一步了解。DS1820 雖然具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點(diǎn),但在實(shí)際應(yīng)用中由于 DS1820 與微處理器間采用串行數(shù)據(jù)傳送,因此,在對 DS1820 進(jìn)行讀寫編程時(shí),必須嚴(yán)格的保證讀寫時(shí)序,否則將無法讀取測溫結(jié)果。在 DS1820 測溫程序設(shè)

59、計(jì)中,向 DS1820 發(fā)出溫度轉(zhuǎn)換命令后,程序總要等待 DS1820 的返回信號,一旦某個(gè) DS1820 接觸不好或斷線,當(dāng)程序讀該 DS1820 時(shí),將沒有返回信號,程序進(jìn)入死循環(huán)。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 柴鈺.單片機(jī)原理及應(yīng)用[M].西安電子科技大學(xué)出版社,2009</p><p> 

60、 [2] 李朝青.單片機(jī)原理及接口技術(shù)[M].北京航空航天大學(xué)出版社,1998</p><p>  [3] 李廣弟.單片機(jī)基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,1994</p><p>  [4] 閻石.數(shù)字電子技術(shù)基礎(chǔ)(第三版). 北京:高等教育出版社,1989</p><p><b>  附錄1:元件清單</b></p>

61、<p>  1、STC89C52單片機(jī)最小系統(tǒng) 1個(gè)</p><p>  2、DS18B20溫度傳感器 1個(gè)</p><p>  3、4位一體共陰數(shù)碼管 1個(gè)</p><p>  4、9014三極管 5個(gè)</p><p>  5、蜂鳴器

62、 1個(gè)</p><p>  6、按鍵 3個(gè)</p><p>  7、電阻220 16個(gè)</p><p>  8、發(fā)光二極管 2個(gè)</p><p>  9、電阻470K 3個(gè)</p><

63、p><b>  10、導(dǎo)線若干</b></p><p>  14、萬用板10*15 1片</p><p>  15、4.7K 9腳排阻 1個(gè)</p><p><b>  附錄2:程序清單</b></p><p>  /***************

64、*****************************************************</p><p>  * 文件名 : 溫度采集DS18B20.c</p><p>  * 描述 : 該文件實(shí)現(xiàn)了用溫度傳感器件DS18B20對溫度的采集,并在數(shù)碼管上顯示出來。</p><p>  ***************************

65、********************************************/</p><p>  #include<reg52.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  #define

66、 disdata P0 //段碼輸出口</p><p>  #define discan P2 //掃描口</p><p>  #define jump_ROM 0xCC</p><p>  #define start 0x44</p><p>  #define read_EER

67、OM 0xBE</p><p>  sbit DQ = P2^6; //DS18B20數(shù)據(jù)口</p><p>  uchar st=1;</p><p>  uint temp;</p><p><b>  uint i;</b></p><p><b>  

68、float tt;</b></p><p>  uint h; </p><p>  uint temp;</p><p>  uchar r;</p><p>  char high=40,low=15;</p><p>  sbit beep=P1^3;//LED報(bào)警

69、</p><p>  sbit beep1=P1^4;//LED報(bào)警</p><p>  uchar pp;</p><p>  sbit key1=P1^0; //模式切換鍵</p><p>  sbit key02=P1^1; //加鍵</p><p>  sbit key03

70、=P1^2; //減鍵</p><p>  unsigned char TMPH,TMPL; </p><p>  uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p>  uchar code ditab[16]={0x00,0x01,0x01,0

71、x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};</p><p>  //溫度小數(shù)部分用查表法</p><p>  uchar code dis_7[15]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x00,0x40,0x76,0x38,0x39}

72、;</p><p>  //共陰LED段碼表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-"

73、"H" "L" "C" </p><p>  uchar code scan_con[4]={0x08,0x04,0x02,0x01}; //列掃描控制字</p><p>  uchar data temp_data[2]={0x00,0x00}; //讀出溫度暫放</p&g

74、t;<p>  uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //顯示單元數(shù)據(jù),共4個(gè)數(shù)據(jù)和一個(gè)運(yùn)算暫用</p><p>  /********************************************************************</p><p>  * 名稱 : delay()&

75、lt;/p><p>  * 功能 : 延時(shí),延時(shí)時(shí)間大概為140US。</p><p><b>  * 輸入 : 無</b></p><p><b>  * 輸出 : 無</b></p><p>  ****************************************************

76、*******************/</p><p>  void delay_1()</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  for(i=0; i<=10; i++)</p><p>  f

77、or(j=0; j<=2; j++)</p><p><b>  ;</b></p><p><b>  }</b></p><p>  /********************************************************************</p><p>

78、  * 名稱 : delay()</p><p>  * 功能 : 延時(shí)函數(shù)</p><p><b>  * 輸入 : 無</b></p><p><b>  * 輸出 : 無</b></p><p>  ***********************************************

79、************************/</p><p>  void delay(uint N)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  for(i=0; i<N; i++)</p><p&g

80、t;<b>  ;</b></p><p><b>  }</b></p><p>  /********************************************************************</p><p>  * 名稱 : Delay_1ms()</p><p>

81、;  * 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms * x</p><p>  * 輸入 : x (延時(shí)一毫秒的個(gè)數(shù))</p><p><b>  * 輸出 : 無</b></p><p>  ***********************************************************************/<

82、/p><p>  void Delay_1ms(uint i)//1ms延時(shí)</p><p><b>  {</b></p><p>  uchar x,j;</p><p>  for(j=0;j<i;j++)</p><p>  for(x=0;x<=148;x++);</p&

83、gt;<p><b>  }</b></p><p>  /********************************************************************</p><p>  * 名稱 : Reset()</p><p>  * 功能 : 復(fù)位DS18B20</p><

84、p><b>  * 輸入 : 無</b></p><p><b>  * 輸出 : 無</b></p><p>  ***********************************************************************/</p><p>  uchar Reset(void)&

85、lt;/p><p><b>  {</b></p><p>  uchar deceive_ready;</p><p><b>  DQ = 0;</b></p><p>  delay(29);</p><p><b>  DQ = 1;</b><

86、/p><p><b>  delay(3);</b></p><p>  deceive_ready = DQ;</p><p>  delay(25);</p><p>  return(deceive_ready);</p><p><b>  }</b></p>

87、<p>  /********************************************************************</p><p>  * 名稱 : read_bit()</p><p>  * 功能 : 從DS18B20讀一個(gè)位值</p><p><b>  * 輸入 : 無</b></

88、p><p>  * 輸出 : 從DS18B20讀出的一個(gè)位值</p><p>  ***********************************************************************/</p><p>  uchar read_bit(void)</p><p><b>  {</b>

89、;</p><p><b>  uchar i;</b></p><p><b>  DQ = 0;</b></p><p><b>  DQ = 1;</b></p><p>  for(i=0; i<3; i++);</p><p>  ret

90、urn(DQ);</p><p><b>  }</b></p><p>  /********************************************************************</p><p>  * 名稱 : write_bit()</p><p>  * 功能 : 向DS18B

91、20寫一位</p><p>  * 輸入 : bitval(要對DS18B20寫入的位值)</p><p><b>  * 輸出 : 無</b></p><p>  ***********************************************************************/</p><p&

92、gt;  void write_bit(uchar bitval)</p><p><b>  {</b></p><p>  DQ=0;if(bitval==1)</p><p><b>  DQ=1;</b></p><p><b>  delay(5);</b></

93、p><p><b>  DQ=1;</b></p><p><b>  }</b></p><p>  /********************************************************************</p><p>  * 名稱 : read_byte()&l

94、t;/p><p>  * 功能 : 從DS18B20讀一個(gè)字節(jié)</p><p><b>  * 輸入 : 無</b></p><p>  * 輸出 : 從DS18B20讀到的值</p><p>  ****************************************************************

95、*******/</p><p>  uchar read_byte(void)</p><p><b>  {</b></p><p>  uchar i,m,receive_data;</p><p><b>  m = 1;</b></p><p>  receive_

96、data = 0;</p><p>  for(i=0; i<8; i++)</p><p><b>  {</b></p><p>  if(read_bit())</p><p><b>  {</b></p><p>  receive_data = receiv

97、e_data + (m << i);</p><p><b>  }</b></p><p><b>  delay(6);</b></p><p><b>  }</b></p><p>  return(receive_data);</p><

98、;p><b>  }</b></p><p>  void key11()</p><p><b>  {</b></p><p>  while(key1==0) //當(dāng)模式切換鍵按下則進(jìn)入循環(huán)體</p><p><b>  {</b></p><p

99、>  delay(300);//延時(shí)消除抖動(dòng)</p><p>  if(key1==0)</p><p><b>  {</b></p><p>  st++;//模式循環(huán)切換</p><p><b>  if(st==4)</b></p><p><b&g

100、t;  st=1;</b></p><p><b>  }</b></p><p>  while(!key1);//延時(shí)等待按鍵回到高電平</p><p>  delay(300);</p><p>  while(!key1);//延時(shí)消除抖動(dòng)</p><p><b> 

101、 }</b></p><p><b>  }</b></p><p>  /******************門限值加1**************************/</p><p>  void key2() </p><p><b>  {</b></p>&

102、lt;p>  while(key02==0)</p><p><b>  {</b></p><p>  delay(400);</p><p>  if(key02==0)</p><p><b>  {</b></p><p><b>  if(st==3

103、)</b></p><p><b>  {</b></p><p>  low=low+1;}</p><p><b>  if(st==2)</b></p><p>  {high=high+1;}</p><p>  if(low>high)</p

104、><p>  {pp=low;low=high;high=pp;}</p><p><b>  }</b></p><p>  while(!key02);</p><p>  delay(400);</p><p>  while(!key02);</p><p><

105、b>  }</b></p><p><b>  }</b></p><p>  /******************門限值減1**************************/</p><p>  void key3() </p><p><b>  {</b></p&

106、gt;<p>  while(key03==0)</p><p><b>  {</b></p><p>  delay(400);</p><p>  if(key03==0)</p><p><b>  { </b></p><p><b> 

107、 if(st==3)</b></p><p>  {low=low-1;}</p><p><b>  if(st==2)</b></p><p>  {high=high-1;}</p><p>  if(low>high)</p><p>  {pp=low;low

108、=high;high=pp;}</p><p><b>  }</b></p><p>  while(!key03);</p><p>  delay(400);</p><p>  while(!key03);</p><p><b>  } </b></p&

109、gt;<p><b>  }</b></p><p>  /******************上限溫度顯示**************************/</p><p>  void high1()</p><p><b>  {</b></p><p><b> 

110、 uchar k;</b></p><p>  display[0]=high%10;</p><p>  display[1]=high/10;</p><p>  display[2]=10; //個(gè)位熄滅</p><p>  display[3]=12; //百位顯示H</p><p> 

111、 for(k=0;k<4;k++) </p><p><b>  {</b></p><p>  discan=scan_con[k]; </p><p>  disdata=dis_7[display[k]]; </p><p>  

112、delay(300);</p><p>  disdata=0x00;</p><p>  delay(100);</p><p><b>  }</b></p><p><b>  } </b></p><p>  /*uchar code table[10] = {

113、0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p>  uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};</p><p>  //溫度小數(shù)部分用查表法</p&g

114、t;<p>  uchar code dis_7[15]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x00,0x40,0x76,0x38,0x39};</p><p>  //共陰LED段碼表 "0" "1" "2" "3" "

115、4" "5" "6" "7" "8" "9" "不亮" "-" "H" "L" "C" </p><p>  uchar code scan_con[4]={0x08,0x04

116、,0x02,0x01}; //列掃描控制字</p><p>  uchar data temp_data[2]={0x00,0x00}; //讀出溫度暫放</p><p>  uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //顯示單元數(shù)據(jù),共4個(gè)數(shù)據(jù)和一個(gè)運(yùn)算暫用</p><p&

117、gt;  /******************下限溫度顯示**************************/</p><p>  void low1()</p><p><b>  {</b></p><p><b>  uchar ki;</b></p><p>  display[0]=l

118、ow%10;</p><p>  display[1]=low/10;</p><p>  display[2]=10; //個(gè)位熄滅</p><p>  display[3]=13; //百位顯示L</p><p>  for(ki=0;ki<4;ki++) </p><p

119、><b>  {</b></p><p>  discan=scan_con[ki]; </p><p>  disdata=dis_7[display[ki]]; </p><p>  delay(100);</p><p>  disdata=0x00;</p>

120、;<p>  delay(100);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void BEEP()</p><p><b>  {</b></p><p>  if(temp&g

121、t;=high||temp<=low)</p><p><b>  { beep=1;</b></p><p><b>  beep1=1;}</b></p><p><b>  else </b></p><p><b>  {beep=0;</b>

122、;</p><p><b>  beep1=0;}</b></p><p><b>  }</b></p><p>  /********************************************************************</p><p>  * 名稱 : wri

123、te_byte()</p><p>  * 功能 : 向DS18B20寫一個(gè)字節(jié)</p><p>  * 輸入 : val(要對DS18B20寫入的命令值)</p><p><b>  * 輸出 : 無</b></p><p>  *********************************************

124、**************************/</p><p>  void write_byte(uchar val)</p><p><b>  {</b></p><p>  uchar i,temp;</p><p>  for(i=0; i<8; i++)</p><p>

125、<b>  {</b></p><p>  temp = val >> i;</p><p>  temp = temp & 0x01;</p><p>  write_bit(temp);</p><p><b>  delay(5);</b></p><p

126、><b>  }</b></p><p><b>  }</b></p><p>  void work_temp()</p><p>  { Reset();</p><p>  write_byte(jump_ROM);</p><p>  write_

127、byte(start);</p><p><b>  Reset();</b></p><p>  write_byte(jump_ROM);</p><p>  write_byte(read_EEROM);</p><p>  TMPL = read_byte();</p><p>  TMP

128、H = read_byte();</p><p>  temp = TMPL / 16 + TMPH * 16;</p><p>  P0 = table[temp/10%10];</p><p>  P2 = 0x01;</p><p>  Delay_1ms(5);</p><p>  P0 = table[tem

129、p%10];</p><p>  P2 = 0x02;</p><p>  Delay_1ms(5); }</p><p>  /********************************************************************</p><p>  * 名稱 : Main()</p><

130、;p>  * 功能 : 主函數(shù)</p><p><b>  * 輸入 : 無</b></p><p><b>  * 輸出 : 無</b></p><p>  ***********************************************************************/</p&

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論