基于STC89C52單片機(jī)的溫濕度檢測系統(tǒng)設(shè)計_第1頁
基于STC89C52單片機(jī)的溫濕度檢測系統(tǒng)設(shè)計_第2頁
基于STC89C52單片機(jī)的溫濕度檢測系統(tǒng)設(shè)計_第3頁
基于STC89C52單片機(jī)的溫濕度檢測系統(tǒng)設(shè)計_第4頁
基于STC89C52單片機(jī)的溫濕度檢測系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于STC89C52單片機(jī)的溫濕度檢測系統(tǒng)設(shè)計摘要隨著人們的生活及其生產(chǎn)水平的不斷提高,對生活環(huán)境和生產(chǎn)環(huán)境的要求就顯的尤為重要,溫濕度的控制就是一個典型的例子,因此溫濕度檢測系統(tǒng)就是現(xiàn)代生產(chǎn)生活中應(yīng)運(yùn)而生的一種智能、快捷、方便可靠的檢測系統(tǒng),特別是在工業(yè)生產(chǎn)中如果檢測得不準(zhǔn)確就會發(fā)生許多的生產(chǎn)事故。要為現(xiàn)代人工作、科研、生活提供更好的更方便的設(shè)施就需要從單片機(jī)技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向開展。本設(shè)計是以單片機(jī)為核心,配合溫濕度傳感器,以及相關(guān)的外圍電路組成的檢測系統(tǒng),可以接收所測環(huán)境的溫度和濕度信號,檢測人員可以通過LCD顯示的數(shù)據(jù),實(shí)時監(jiān)控環(huán)境的溫度和濕度情況。所有的測量操作都可以通過主機(jī)控制軟件來實(shí)現(xiàn),溫度和濕度傳感器得到的測量信號,經(jīng)電路轉(zhuǎn)換為電信號,然后通過轉(zhuǎn)換送到單片機(jī)進(jìn)行數(shù)據(jù)處理,經(jīng)軟件分析處理后送顯示裝置。本系統(tǒng)包括系統(tǒng)硬件和軟件設(shè)計,可靠性高,結(jié)構(gòu)簡單,實(shí)現(xiàn)了對溫濕度的自動調(diào)節(jié)。系統(tǒng)還應(yīng)用RS232與上位機(jī)相連接,可以設(shè)置自動記錄溫度、濕度的相關(guān)的參數(shù),也可以設(shè)置每隔一定的時間自動記錄,可用在氣象的觀察方面。關(guān)鍵詞:STC89C52單片機(jī),溫濕度傳感器,LCAspeoplelifelevelofproductionandimprovethelivingenvironmentandproductionenvironmenttothedemandsofthesignificantparticularlyimportant,controloftemperatureandhumidityisoneexample,sothetemperatureandhumiditydetectionsystemisthemodernproductionandlifeofakindofintelligencehaveemergedin,quick,convenientandreliabledetectionsystem,especiallyintheindustrialproduction,ifdetectionisnotaccuratewillhappenmanyproductionaccidents.Formodernpeopletowork,scientificresearch,andprovideabetterlifemoreconvenientfacilitieswillneedfromsinglechiptechnologyofdigitalcontroltoall,intelligentcontroldirection.Thisdesignisbasedonsinglechipmicrocomputerasthecore,withtemperatureandhumiditysensor,andrelatedperipheralcircuitcomposedofdetectionsystem,canreceivetheenvironmenttemperatureandhumiditysignal,testingpersonnelcanthroughtheLCDdisplaydata,real-timemonitoringofenvironmentaltemperatureandhumidityconditions.Thissystemincludingthesystemhardwareandsoftwaredesign,highreliability,simplestructure,realizetheautomaticadjustmentofthetemperatureandhumidity.SystemisusedRS232andsuperordinationmachineconnected,cansetupautomaticrecordingoftemperatureandhumidityinrelatedparameters,canalsoseteverycertaintimetobeautomaticrecords,canbeusedinmeteorologicalobservation.Keywords:STC89C52microcontroller,temperatureandhumiditysensor,LCDdisplay目錄第1章概述21.1課題的研究背景21.2溫濕度檢測的開展?fàn)顩r以及存在的問題31.3本課程設(shè)計的主要內(nèi)容4第2章系統(tǒng)總體方案設(shè)計42.1溫濕度傳感器51、DHT11產(chǎn)品概述52接口說明53、電源引腳64、串行接口(單線雙向)65、DHT11引腳說明66、焊接信息67、考前須知72.2RS232接口72.3單片機(jī)STC89C5272.4LCD16029第3章系統(tǒng)的硬件設(shè)計和連接103.1主控模塊103.2顯示模塊123.3溫度和濕度采集模塊123.4鍵盤設(shè)計143.5與上位機(jī)相連電路的設(shè)計153.6報警電路設(shè)計15第4章系統(tǒng)軟件方案的設(shè)計164.1程序流程圖16第5章總結(jié)與展望36參考文獻(xiàn)37第1章概述1.1課題的研究背景工業(yè)生產(chǎn)中有些場合需要使用精密的機(jī)臺設(shè)備,這些設(shè)備的精密度高、價格高,因此為了保證產(chǎn)品的質(zhì)量及機(jī)臺的使用壽命,對其環(huán)境的要求也很高,尤其的是對溫度、濕度的控制。例如在我工作的生產(chǎn)發(fā)光二極管LED的工業(yè)現(xiàn)場,前面的兩道工序固晶片和焊線要求的精度非常高,晶片必須固到碗杯的中心點(diǎn),偏差不可超過1/5晶片的寬度,且對膠量的控制也有嚴(yán)格的要求,只有這道工序做好了,下一個工序焊線才會順利,否那么焊線將會出現(xiàn)很多異常,不僅會降低產(chǎn)量也會造成質(zhì)量問題,因此要求每三個小時記錄一次室內(nèi)的溫濕度,且要保證其溫度在18℃--23隨著信息產(chǎn)業(yè)的開展及工業(yè)化的進(jìn)步,溫度和濕度不僅僅表現(xiàn)在以上幾個方面直接或間接影響著人類根本生活條件,還表現(xiàn)在對工生物制品、醫(yī)藥衛(wèi)生、科學(xué)研究、國防建設(shè)等方面的影響。針對以上情況,研制可靠且實(shí)用的溫濕度控制器顯得非常重要。常用溫濕度傳感器的非線性輸出及一致性較差,使溫濕度的測量方法和手段相對較復(fù)雜,且給電路的調(diào)試帶來很大的困難。傳統(tǒng)的溫濕度測量多采用模擬小信號傳感器,不僅信號調(diào)理電路復(fù)雜,且溫濕度值的標(biāo)定過程也極其復(fù)雜,并需要使用昂貴的標(biāo)定儀器設(shè)備。因此對于溫濕度控制器的設(shè)計有著很大的現(xiàn)實(shí)生產(chǎn)意義。本文設(shè)計的是基于單片機(jī)STC89C52的溫濕度檢測和控制系統(tǒng),主要以廣泛應(yīng)用的DHT11作為溫度和濕度的檢測,該儀器具有測量精度較高、硬件電路簡單、并能很好的進(jìn)行顯示,可測試不同環(huán)境溫濕度的特點(diǎn)。另外和控制電路相連,可以進(jìn)行加濕電路和除濕電路的控制,使溫度和濕度參數(shù)在預(yù)先設(shè)定的范圍內(nèi),不需要人的直接參與。本系統(tǒng)還通過RS232和上位機(jī)相連,可以設(shè)置每隔一定的時間進(jìn)行溫度和濕度的采集,上傳到上位機(jī),以供查詢。1.2溫濕度檢測的開展?fàn)顩r以及存在的問題傳統(tǒng)的溫度和濕度檢測系統(tǒng)主要有以下幾種:〔1〕水汽壓〔e〕:是水汽在大氣總壓力中的分壓力。它表示了空氣中水汽的絕對含量的大小,以毫巴為單位?!?〕相對濕度〔rh〕:濕空氣中實(shí)際水汽壓e與同溫度下飽和水汽壓E的百分比,相對濕度的大小能直接表示空氣距離飽和的相對程度。空氣完全枯燥時,相對濕度為零。相對濕度越小,表示當(dāng)時空氣越枯燥。當(dāng)相對濕度接近于100%時,表示空氣很潮濕,越接近于飽和?!?〕露點(diǎn)〔或霜點(diǎn)〕溫度:指空氣在水汽含量和氣壓都不改變的條件下,冷卻到飽和時的溫度?!?〕干濕球溫度表:用一對并列裝置的、形狀完全相同的溫度表,一支測氣溫,稱干球溫度表,另一支包有保持浸透蒸餾水的脫脂紗布,稱濕球溫度表。〔5〕發(fā)濕度表〔計〕:利用脫脂人發(fā)〔或牛的腸衣〕具有空氣潮濕時伸長,枯燥時縮短的特性,制成毛發(fā)濕度表或濕度自記儀器,它的測濕精度較差,毛發(fā)濕度表通常在氣溫低于-10℃〔6〕電阻式濕度片:利用吸濕膜片隨濕度變化改變其電阻值的原理,常用的有碳膜濕敏電阻和氯化鋰濕度片兩種。前者用高分子聚合物和導(dǎo)電材料碳黑,加上粘合劑配成一定比例的膠狀液體,涂覆到基片上組成的電阻片;后者是在基片上涂上一層氯化鋰酒精溶液,當(dāng)空氣濕度變化時,氯化鋰溶液濃度隨之改變從而也改變了測濕膜片的電阻?!?〕薄膜濕敏電容:是以高分子聚合物為介質(zhì)的電容器,因吸收〔或釋放〕水汽而改變電容值。它制作精巧,性能優(yōu)良,常用在探空儀和遙測中。隨著智能檢測系統(tǒng)的飛速開展,基于單片機(jī)的溫濕度檢測系統(tǒng)將多傳感器系統(tǒng)結(jié)合在一起。如何把多傳感器集中于一個檢測控制系統(tǒng),綜合利用來自多傳感器的信息,獲得對被測對象的可靠了解和解釋,以利于系統(tǒng)做出正確的響應(yīng)、決策和控制,是智能檢測控制系統(tǒng)中需要解決的首要問題。在溫濕度要求嚴(yán)格的場合,利用多傳感技術(shù)可以提高系統(tǒng)的可靠性和精度,亦可以提高系統(tǒng)的時間空間的覆蓋范圍。1.3本課程設(shè)計的主要內(nèi)容單片機(jī)是系統(tǒng)的控制核心,所以單片機(jī)的性能關(guān)系到整個系統(tǒng)的好壞。因此單片機(jī)的選擇,對所設(shè)計系統(tǒng)的實(shí)現(xiàn)以及功能的擴(kuò)展有著很大的影響。單片機(jī)種類很多,在眾多51系列單片機(jī)中,較為常用的是ATMEL公司的AT89C51和AT89S52單片機(jī),AT89C51片內(nèi)4KROM是Flash工藝的,使用專用的編程器自己就可以隨時對單片機(jī)進(jìn)行電擦除和改寫,片內(nèi)有128字節(jié)的RAM。而AT89S52含有在系統(tǒng)可編程的Flash存儲器,片內(nèi)有8K閃存,RAM的容量也較AT89C51大,為256字節(jié)。顯然這種單片機(jī)優(yōu)點(diǎn)更多,開發(fā)時間也大為縮短。在本次設(shè)計中選用了STC89C52單片機(jī)。鍵盤接口電路較為簡單,而顯示局部有兩種方案供選擇:一種為LCD,一種為LED。LCD液晶顯示的像素單元是整合在同一塊液晶版當(dāng)中分隔出來的小方格。通過數(shù)碼控制這些極小的方格進(jìn)行顯像。顯示非常細(xì)膩但是造價很高。而LED數(shù)碼顯示中每一個像素單元就是一個發(fā)光二極管,如果是單色,一般是紅色發(fā)光二極管。如果是彩色,一般是三個三原色小二極管組成的一個大二極管。這些二極管組成的矩陣由數(shù)碼控制實(shí)時顯示文字或圖象,造價相對低廉,顯示效果也較好。本設(shè)計中,最終選用的集成溫度傳感器DHT11,采集到的溫濕度信號送至單片機(jī),實(shí)現(xiàn)溫濕度的顯示與控制。系統(tǒng)主要由以上元器件組成,通過硬件電路和軟件程序的設(shè)計,實(shí)現(xiàn)系統(tǒng)的根本功能。第2章系統(tǒng)總體方案設(shè)計本設(shè)計是基于單片機(jī)對數(shù)字信號的高敏感和可控性、溫濕度傳感器可以產(chǎn)生模擬信號,和A/D模擬數(shù)字轉(zhuǎn)換芯片的性能,此設(shè)計以STC89C52根本系統(tǒng)為核心的一套檢測系統(tǒng),其中包括單片機(jī)、復(fù)位電路、溫濕度檢測、鍵盤及顯示、報警電路、系統(tǒng)軟件等局部的設(shè)計。系統(tǒng)總體方框圖如圖2.1。鍵盤控制顯示電路系統(tǒng)晶振電平變換PC機(jī)報警電路溫濕度傳感器單片機(jī)鍵盤控制顯示電路系統(tǒng)晶振電平變換PC機(jī)報警電路溫濕度傳感器單片機(jī)系統(tǒng)重點(diǎn)及組成:溫濕度的檢測溫濕度的顯示單片機(jī)與PC機(jī)間的通信通過開關(guān)量控制實(shí)現(xiàn)溫濕度上下限調(diào)節(jié)圖2.1系統(tǒng)總體框圖2.1溫濕度傳感器1、DHT11產(chǎn)品概述DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性與卓越的長期穩(wěn)定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價比極高等優(yōu)點(diǎn)。每個DHT11傳感器都在極為精確的濕度校驗(yàn)室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式儲存在OTP內(nèi)存中,傳感器內(nèi)部在檢測信號的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,信號傳輸距離可達(dá)20米以上,使其成為各類應(yīng)用甚至最為苛刻的應(yīng)用場合的最正確選那么。產(chǎn)品為4針單排引腳封裝。連接方便,特殊封裝形式可根據(jù)用戶需求而提供。2接口說明建議連接線長度短于20米時用5K上拉電阻,大于20米時根據(jù)實(shí)際情況使用適宜的上拉電阻3、電源引腳DHT11的供電電壓為 3-5.5V。傳感器上電后,要等待1s以越過不穩(wěn)定狀態(tài)在此期間無需發(fā)送任何指令。電源引腳〔VDD,GND〕之間可增加一個100nF的電容,用以去耦濾波。4、串行接口(單線雙向)DATA用于微處理器與DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次通訊時間4ms左右,用戶MCU發(fā)送一次開始信號后,DHT11從低功耗模式轉(zhuǎn)換到高速模式,等待主機(jī)開始信號結(jié)束后,DHT11發(fā)送響應(yīng)信號,送出40bit的數(shù)據(jù),并觸發(fā)一次信號采集,用戶可選擇讀取局部數(shù)據(jù).從模式下,DHT11接收到開始信號觸發(fā)一次溫濕度采集,如果沒有接收到主機(jī)發(fā)送開始信號,DHT11不會主動進(jìn)行溫濕度采集.采集數(shù)據(jù)后轉(zhuǎn)換到低速模式。5、DHT11引腳說明Pin名稱注釋1VDD供電3-5.5VDC2DATA串行數(shù)據(jù),單總線3NC空腳,請懸空4GND接地,電源負(fù)極6、焊接信息手動焊接,在最高260℃的溫度條件下接觸時間須少于107、考前須知(1)防止結(jié)露情況下使用。(2)長期保存條件:溫度10-40℃2.2RS232接口RS232接口是1970年由美國電子工業(yè)協(xié)會〔EIA〕聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。它的全名是“數(shù)據(jù)終端設(shè)備〔DTE〕和數(shù)據(jù)通訊設(shè)備〔DCE〕之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)〞。該標(biāo)準(zhǔn)規(guī)定采用一個25個腳的DB25連接器,對連接器的每個引腳的信號內(nèi)容加以規(guī)定,還對各種信號的電平加以規(guī)定。隨著設(shè)備的不斷改良,出現(xiàn)了代替DB25的DB9接口,現(xiàn)在都把RS232接口叫做DB9。2.3單片機(jī)STC89C52STC89C52是一種低功耗、高性能CMOS八位微控制器,具有8K在系統(tǒng)可編程Flash存儲器,使用ATMEL公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許ROM在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使其為眾多嵌入式控制應(yīng)用系統(tǒng)提供靈活的解決方案。2.3(1)與MCS-51單片機(jī)產(chǎn)品兼容;(2)8K字節(jié)在系統(tǒng)可編程Flash存儲器;(3)1000次擦寫周期;(4)全靜態(tài)操作:0Hz~33Hz;(5)三級加密程序存儲器;(6)32個可編程I/O口線;(7)三個16位定時器/計數(shù)器;(8)八個中斷源;(9)全雙工UART串行通道;(10)低功耗空閑和掉電模式;(11)掉電后中斷可喚醒;圖2.3STC89C52芯片的引腳圖(12)看門狗定時器;(13)雙數(shù)據(jù)指針;(14)掉電標(biāo)識符。如圖2.3所示STC89C52芯片的引腳圖VCC:電源Vss:地P0口:8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動8個TTL邏輯電平。對P0端口寫“1”P1口:具有內(nèi)部上拉電阻的8位雙向I/O口,P1輸出緩沖器能驅(qū)動4個TTL邏輯電平。對P1端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流〔IILP2口:具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動四個TTL邏輯電平。對P2端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流〔IIL〕。在方位外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器時,P2口送出高八位地址。P3口:P3口是一個具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動四個TTL邏輯電平。對P3端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流〔IILP3口亦作為STC89C52特殊功能〔第二功能〕使用RST:復(fù)位輸入。晶振工作時,RST腳持續(xù)2個機(jī)器周期高電平將使單片機(jī)復(fù)位。DISRTO默認(rèn)狀態(tài)下,復(fù)位高電平有效。ALE/:控制信號〔ALE〕是訪問外部程序存儲器時,鎖存低8位地址的輸出脈沖。在Flash編程時,此引腳〔〕也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強(qiáng)調(diào),在每次訪問外部數(shù)據(jù)存儲器時,ALE脈沖將會跳過。如果需要,通過將地址為8EH的SFR的第0位置“1〞,ALE操作將無效。這一位置“1〞,ALE僅在執(zhí)行MOVX或MOVC指令時有效。否那么,ALE將被微弱拉高。這個ALE使能標(biāo)志位〔地址為8EH的SFR的第0位〕的設(shè)置對微控制器處于外部執(zhí)行模式下無效。:外部程序存儲器選通信號〔〕是外部程序存儲器選通信號。當(dāng)89S52從外部程序存儲器執(zhí)行外部代碼時,在每個機(jī)器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲器時,將不被激活。/VPP:訪問外部程序存儲器控制信號。為使能從0000H到FFFFH的外部程序存儲器讀取指令,必須接地。為執(zhí)行內(nèi)部程序指令,應(yīng)該接VCC。在Flash編程期間,也接收12伏VPP電壓。XTAL1:振蕩器反相放大器和內(nèi)部時鐘發(fā)生電路的輸入端。XTAL2:振蕩器反相放大器的輸出端。2.4LCD1602工業(yè)字符型液晶,能夠同時顯示16x02即32個字符?!?6列2行〕1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,其中:引腳符號功能說明1VSS一般接地2VDD接電源〔+5V〕3V0液晶顯示器比照度調(diào)整端,接正電源時比照度最弱,接地電源時比照度最高〔比照度過高時會產(chǎn)生“鬼影〞,使用時可以通過一個10K的電位器調(diào)整比照度〕。4RSRS為存放器選擇,高電平1時選擇數(shù)據(jù)存放器、低電平0時選擇指令存放器。5R/WR/W為讀寫信號線,高電平(1)時進(jìn)行讀操作,低電平(0)時進(jìn)行寫操作。6EE(或EN)端為使能(enable)端,下降沿使能。7DB0低4位三態(tài)、雙向數(shù)據(jù)總線0位〔最低位〕8DB1低4位三態(tài)、雙向數(shù)據(jù)總線1位9DB2低4位三態(tài)、雙向數(shù)據(jù)總線2位10DB3低4位三態(tài)、雙向數(shù)據(jù)總線3位11DB4高4位三態(tài)、雙向數(shù)據(jù)總線4位12DB5高4位三態(tài)、雙向數(shù)據(jù)總線5位13DB6高4位三態(tài)、雙向數(shù)據(jù)總線6位14DB7高4位三態(tài)、雙向數(shù)據(jù)總線7位〔最高位〕〔也是busyflag〕15BLA背光電源正極16BLK背光電源負(fù)極存放器選擇控制表RSR/W操作說明00寫入指令存放器〔去除屏等〕01讀busyflag〔DB7〕,以及讀取位址計數(shù)器〔DB0~DB6〕值10寫入數(shù)據(jù)存放器〔顯示各字型等〕11從數(shù)據(jù)存放器讀取數(shù)據(jù)第3章系統(tǒng)的硬件設(shè)計和連接3.1主控模塊采用STC89C52單片機(jī)作為系統(tǒng)的控制器。Pl口控制數(shù)碼管顯示溫度和濕度值。P2口與DHT11連接.實(shí)現(xiàn)濕度模擬電壓量轉(zhuǎn)換為數(shù)字量便于單片機(jī)處理。鍵盤控制采用PO口.其中PO.O是溫度的設(shè)置,PO.1是濕度的設(shè)置,PO.2/PO.3是分別對溫度與濕度的上/下限值進(jìn)行設(shè)置。原理如下列圖:圖3.1STC89C52單片機(jī)各引腳功能3.2顯示模塊3.3溫度和濕度采集模塊1.通訊過程如圖1所示圖1總線空閑狀態(tài)為高電平,主機(jī)把總線拉低等待DHT11響應(yīng),主機(jī)把總線拉低必須大于18毫秒,保證DHT11能檢測到起始信號。DHT11接收到主機(jī)的開始信號后,等待主機(jī)開始信號結(jié)束,然后發(fā)送80us低電平響應(yīng)信號.主機(jī)發(fā)送開始信號結(jié)束后,延時等待20-40us后,讀取DHT11的響應(yīng)信號,主機(jī)發(fā)送開始信號后,可以切換到輸入模式,或者輸出高電平均可,總線由上拉電阻拉高。圖2總線為低電平,說明DHT11發(fā)送響應(yīng)信號,DHT11發(fā)送響應(yīng)信號后,再把總線拉高80us,準(zhǔn)備發(fā)送數(shù)據(jù),每一bit數(shù)據(jù)都以50us低電平時隙開始,高電平的長短定了數(shù)據(jù)位是0還是1.格式見下面圖示.如果讀取響應(yīng)信號為高電平,那么DHT11沒有響應(yīng),請檢查線路是否連接正常.當(dāng)最后一bit數(shù)據(jù)傳送完畢后,DHT11拉低總線50us,隨后總線由上拉電阻拉高進(jìn)入空閑狀態(tài)。數(shù)字0信號表示方法如圖4所示圖4數(shù)字1信號表示方法.如圖5所示 圖53.4鍵盤設(shè)計用了幾個簡單的按鍵將它們拼成了一個簡易的鍵盤。為提高CPU的效率,鍵盤采用中斷方式。按鍵對單片機(jī)的接口電路圖如下圖。行信號〔KEY〕接到高電平,當(dāng)沒有鍵按時,行線與列線〔KEYSCAN〕是斷開的,且行線都是高電平〔1111〕,行信號作為的輸入端、列信號作為的輸出端??梢栽O(shè)置列線初始狀態(tài)為低電平〔0000〕。信號為從上到下的順序

當(dāng)有鍵按下時,假設(shè)是K1按下,行信號與列信號接通,這時相應(yīng)的行線〔KEY0〕變?yōu)榈碗娖健?1111〕,可以肯定第一行〔K1,5,9,13〕有鍵按下。

下面就要運(yùn)用掃描的原理了:

1、因?yàn)橹恢赖谝恍杏墟I按下,不知道是那個,可以設(shè)置列信號為0111,這時行信號變?yōu)椤?111〕〔注:假設(shè)時鐘周期很短,手還沒松開,即鍵還在按下的狀態(tài)〕

2、設(shè)置列信號為1011,行信號也變成〔1111〕

3、設(shè)置列信號為1101,行信號也變成〔1111〕

4、設(shè)置列信號為1110,行信號也變成〔0111〕,這時就可以肯定是第一個鍵按下。

3.5與上位機(jī)相連電路的設(shè)計通過和MAX232和上位機(jī)相連接,如圖3-9所示。在大氣氣候的檢測中需要做記錄時,可以通過設(shè)置單片機(jī)的參數(shù),每隔一定的時間進(jìn)行自動的做記錄,省去人工的記錄麻煩。Max232的T1IN和單片機(jī)的P3.2相連,R1OUT和單片機(jī)的P3.1相連。圖3.5單片機(jī)系統(tǒng)與上位機(jī)的連接3.6報警電路設(shè)計NPN5.6K3.3K+5VP3.2AT89S52PB2130UPNPN5.6K3.3K+5VP3.2AT89S52PB2130UP002A圖3.6三極管驅(qū)動的峰鳴音報警電路第4章系統(tǒng)軟件方案的設(shè)計溫度控制主程序的設(shè)計應(yīng)考慮以下問題:〔1〕溫濕度采樣,數(shù)字濾波;〔2〕越限報警和處理;〔3〕溫度標(biāo)度轉(zhuǎn)換;〔4〕溫濕度顯示。通常,符合上述功能的溫度控制程序由主程序和T0中斷效勞程序兩局部組成。在該軟件系統(tǒng)中,定時器T0為工作方式1,定時周期為125ms,8次定時器中斷為1S,由于實(shí)際環(huán)境溫度和濕度變化是連續(xù)和平緩的,故這里采用分段定值平緩濾波算法處理每次測得的溫度和濕度值,有效防止了突發(fā)干擾使測得值波動很大,導(dǎo)致反應(yīng)系統(tǒng)關(guān)啟工作,影響系統(tǒng)的穩(wěn)定,提高了系統(tǒng)的抗干擾性。4.1程序流程圖LCD1602頭文件#ifndef__LCD_1602_CLIMBERWIN__#define__LCD_1602_CLIMBERWIN__#defineucharunsignedchar#defineuintunsignedint#include<intrins.h>#include"lcd1602define.h"/******PortDefinitions*****/#defineLCD_DataP0//LCD的數(shù)據(jù)口sbitLCD_BF=LCD_Data^7;//LCD忙信號位sbitLCD_RS=P2^7;sbitLCD_RW=P2^6;sbitLCD_EN=P2^5;unsignedchardis_buf[3];//數(shù)值顯示緩沖區(qū)unsignedchartable[11]="0123456789";//字碼/*定義子程序*/voidLCD_ClrAll(void);//清屏voidJudge_LCD_busy(void);//檢測是否忙碌voidLCD_Write(ucharWriteData);//寫控制字voidLCD_write_data(ucharLCD_data);//寫數(shù)據(jù)顯示voidLCD_cursor(ucharx);//光標(biāo)起始地址voidLCD_printc(unsignedcharlcd_data);//輸出一個字符voidLCD_prints(unsignedchar*lcd_string);//輸出字符串voiddelay_ms(unsignedchari);//1ms延時//************************************************************************/*LCD1602忙碌判斷子程序*/voidJudge_LCD_busy(void)//判斷LCD1602是否忙狀態(tài){while(1){LCD_EN=0;LCD_RS=0;LCD_RW=1;LCD_Data=0xff;LCD_EN=1;//EN是1—0使能if(!LCD_BF)break;//LCD_BF=1表示忙碌,需要等待。}LCD_EN=0;}/******LCD清屏***************/voidLCD_ClrAll(void){Judge_LCD_busy();//判斷是否忙碌LCD_RS=0;LCD_RW=0;LCD_Data=0x01;LCD_EN=1;LCD_EN=0;}/*******LCD寫數(shù)據(jù)定義各種模式*********/voidLCD_Write(ucharWriteData)//寫指令到LCD{Judge_LCD_busy();LCD_RS=0;LCD_RW=0;LCD_Data=WriteData;//把WriteData的數(shù)據(jù)送到數(shù)據(jù)口LCD_EN=1;LCD_EN=0;}/********LCD顯示數(shù)據(jù)***********/voidLCD_write_data(ucharLCD_data)//輸出一個字節(jié)數(shù)據(jù)到LCD{Judge_LCD_busy();LCD_RS=1;LCD_RW=0;LCD_Data=LCD_data;LCD_EN=1;LCD_EN=0;}/****光標(biāo)位置確實(shí)定***/voidLCD_cursor(ucharx)//LCD光標(biāo)定位到x處{LCD_Write(0x80+x);//第一行地址是0x80}/*輸出一個字符*/voidLCD_printc(unsignedcharlcd_data){LCD_write_data(lcd_data);}/*輸出字符串*/voidLCD_prints(unsignedchar*lcd_string){unsignedchari=0;while(lcd_string[i]!=0x00){LCD_write_data(lcd_string[i]);i++;}}/*顯示整數(shù)*/voidLCD_ints(unsignedcharnum){signedchari=0;for(i=0;i<3;i++)//拆分bcd{dis_buf[i]=num%10;;num=num/10;}for(i=2;i>0;i--)//滅零{if(dis_buf[i]==0)dis_buf[i]=10;elsebreak;}for(i=2;i>=0;i--)//逐個顯示{LCD_write_data(table[dis_buf[i]]);}}/*初始化程序*/voidLCD_initial(void)//初始化LCD{LCD_Write(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE);LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_OFF);LCD_Write(LCD_DISPLAY_DOUBLE_LINE);LCD_ClrAll();}#endifUART頭文件bitflag_uart=0; //字符串接受完成后標(biāo)志位置位,須軟件復(fù)位unsignedcharS_LEN=4;unsignedcharRes_buf[20]={0};voidUart_init(){ ES=1; //setES SCON=0x52; //setSM1、RENandTI; TMOD=0x20; //setM1,方式2; TH1=0xf3; TL1=0xf3; //baudrate2400b/s TR1=1; //計數(shù)使能}voidUart_sc(unsignedcharbyte)//發(fā)送單字符{ while(!TI); SBUF=byte; TI=0;}voidUart_ss(unsignedchar*p,bitflag) //發(fā)送字符串{ while(*p) { Uart_sc(*p++); } if(flag==1) { Uart_sc(0x0D); Uart_sc(0x0A);//結(jié)尾發(fā)送回車換行 }}KEY頭文件unsignedcharcoderow_scan[4]={0xef,0xdf,0xbf,0x7f};voiddelay_1ms(unsignedinti)//1ms延時{ unsignedcharx,j; for(j=0;j<i;j++) for(x=0;x<=40;x++); }unsignedcharkey_scan(){ unsignedchari,j; unsignedchartemp,key_vaul; for(i=0;i<4;i++) { P1=row_scan[i]; temp=0x01; for(j=0;j<4;j++) { if(!(P1&temp)) { key_vaul=i*4+j+1; while(!(P1&temp)); returnkey_vaul; } temp<<=1; } }}bitkey_check() //檢測有無鍵按下{ bitkey_flag=0; //鍵標(biāo)志。有鍵按下時為1 P1=0x0f; if(P1!=0x0f) { delay_1ms(1); if(P1!=0x0f) { key_flag=1; //有鍵按下 } elsekey_flag=0;//為抖動 } returnkey_flag;}DHT11頭文件#ifndef__DHT11_H__#define__DHT11_H__sbit DT0 = P2^0;sbit DT1 = P2^1;sbitBEEP=P2^3;#defineOK1#defineERROR0#defineNUMBER20#defineSIZE5staticunsignedcharstatus;//存放五字節(jié)數(shù)據(jù)的數(shù)組staticunsignedcharvalue_array_0[SIZE];staticunsignedcharvalue_array_1[SIZE];inthumi_value0,temp_value0,humi_value1,temp_value1;voiddelay_ms(unsignedchari)//ms延時{ unsignedcharx,j; for(j=0;j<i;j++) for(x=0;x<=140;x++); }voiddelay(unsignedcharx)//x*0.14MS{ unsignedchari; while(x--) { for(i=0;i<13;i++){} }}voiddelay_1(unsignedcharx)//x*1.4MS{ unsignedchari; while(x--) { for(i=0;i<130;i++){} }}voidbeep(){ unsignedchari; BEEP=0; for(i=0;i<6;i++) { BEEP=!BEEP; delay_1(5000); delay_1(5000); } }voiddelay_10us(){unsignedchari;i--;i--;i--;i--;i--;i--;}voidNode_sensor_0(unsignedintTEP,unsignedintDAM,intflag_send){ unsignedchari,j,N=0; unsignedcharbuf[5]={0}; unsignedchartem,teml=10,temh=40; DT0=0; delay_ms(30); DT0=1; delay_10us(); delay_10us(); delay_10us(); delay_10us(); DT0=1; if(DT0==0) //是否響應(yīng)信號 { while(DT0==0); //跳過80usDHT響應(yīng)信號 while(DT0==1); //跳過80usDHT拉高信號 //準(zhǔn)備接受溫濕度數(shù)據(jù) for(i=0;i<5;i++) { for(j=0;j<8;j++) { N=0; while(DT0==0);//bit數(shù)據(jù)頭 while(DT0==1) { delay_10us();//適當(dāng)延時 N++; } buf[i]<<=1; if(N>3)buf[i]++; } } DT0=1; //接受完成,準(zhǔn)備校驗(yàn)數(shù)據(jù) tem=buf[0]+buf[1]+buf[2]+buf[3]; if(tem==buf[4]) { //buf[2]=buf[2]-5; LCD_cursor(0); LCD_prints(""); LCD_cursor(0); LCD_prints("N1"); LCD_prints("T:"); LCD_cursor(0x04); LCD_ints(buf[2]); LCD_cursor(0x07); LCD_write_data(0xDF); LCD_write_data(0x43); LCD_cursor(0x0A); LCD_prints("HU:%"); LCD_cursor(0x0C); LCD_ints(buf[0]); if(flag_send==1) { LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_ON|LCD_CURSOR_BLINK_ON); Uart_ss("N1:",0); Uart_ss("Tem:",0); Uart_sc(buf[2]/10+48); Uart_sc(buf[2]%10+48); Uart_ss("度",0); Uart_ss("Hum:",0); Uart_sc(buf[0]/10+48); Uart_sc(buf[0]%10+48); Uart_sc(0xA3); Uart_sc(0xA5); Uart_sc(0x0D); Uart_sc(0x0A);//結(jié)尾發(fā)送回車換行 LCD_cursor(0x40); } else { LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_OFF|LCD_CURSOR_BLINK_OFF); } teml=TEP; temh=TEP>>8; if((buf[2]<teml)||(buf[2]>temh))//溫度低于于10度或高于40度時候報警 { beep();LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_ON); } else { BEEP=1;LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_OFF); } teml=DAM; temh=DAM>>8; if((buf[0]<teml)||(buf[0]>temh))//濕度低于15%或高于60%度時候報警 { beep();LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_ON); } else { BEEP=1;LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_OFF); } } } } voidNode_sensor_1(unsignedintTEP,unsignedintDAM,intflag_send){ unsignedchari,j,N=0; unsignedcharbuf[5]={0}; unsignedcharteml,temh; DT1=0; delay_ms(30); DT1=1; delay_10us(); delay_10us(); delay_10us(); delay_10us(); DT1=1; if(DT1==0) //是否響應(yīng)信號 { while(DT1==0); //跳過80usDHT響應(yīng)信號 while(DT1==1); //跳過80usDHT拉高信號 //準(zhǔn)備接受溫濕度數(shù)據(jù) for(i=0;i<5;i++) { for(j=0;j<8;j++) { N=0; while(DT1==0);//bit數(shù)據(jù)頭 while(DT1==1) { delay_10us();//適當(dāng)延時 N++; } buf[i]<<=1; if(N>3)buf[i]++; } } DT1=1; //接受完成,準(zhǔn)備校驗(yàn)數(shù)據(jù) teml=buf[0]+buf[1]+buf[2]+buf[3]; if(teml==buf[4]) { //buf[2]=buf[2]-5; LCD_cursor(0x40); LCD_prints(""); LCD_cursor(0x40); LCD_prints("N2"); LCD_prints("T:"); LCD_cursor(0x44); LCD_ints(buf[2]); LCD_cursor(0x47); LCD_write_data(0xDF); LCD_cursor(0x48); LCD_write_data(0x43); LCD_cursor(0x4A); LCD_prints("HU:%"); LCD_cursor(0x4C); LCD_ints(buf[0]); if(flag_send==1) { LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_ON|LCD_CURSOR_BLINK_ON); Uart_ss("N2:",0); Uart_ss("Tem:",0); Uart_sc(buf[2]/10+48); Uart_sc(buf[2]%10+48); Uart_ss("度",0); Uart_ss("Hum:",0); Uart_sc(buf[0]/10+48); Uart_sc(buf[0]%10+48); Uart_sc(0xA3); Uart_sc(0xA5); Uart_sc(0x0D); Uart_sc(0x0A);//結(jié)尾發(fā)送回車換行 Uart_sc(0x0D); Uart_sc(0x0A);//結(jié)尾發(fā)送回車換行 } else { LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_OFF|LCD_CURSOR_BLINK_OFF); } teml=TEP; temh=TEP>>8; if((buf[2]<teml)||(buf[2]>temh))//溫度低于于10度或高于40度時候報警 { beep();LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_ON); } else { BEEP=1;LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_OFF); } teml=DAM; temh=DAM>>8; if((buf[0]<teml)||(buf[0]>temh))//濕度低于15%或高于60%度時候報警 { beep();LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_ON); } else { BEEP=1;LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_OFF); } } } } #endif主程序#include<reg51.h>#include"LCD1602.h"#include"LCD1602define.h"#include"uart.h"#include"KEY.h"#include"dht11.h"#defineucharunsignedchar#defineuintunsignedintuintTEP1=10250,TEP2=10250;uintDAM1=15375,DAM2=15375;//15375=60*256+10(60可以在高八位10在低八位)uchartemx[2],humx[2];uinttem_down=10,tem_up=40,hum_down=10,hum_up=60,number,t;intflag_true=0;voidDelay1ms(unsignedintcount);//延時程序voidshow_tem_hum();voidset_tem_up();voidset_tem_down();voidcomper_tem();voidset_hum_up();voidset_hum_down();voidcomper_hum();voidup_com();voidset_chose(uintflag,uintnum);voidshow_tem_hum(uintflag);intset_tem_key();intset_tem_key()//輸入鍵值{uintflag1=0;uchari;while(1) { while(key_check()!=0) { i=key_scan(); switch(i) { case2:set_chose(flag1,1);flag1++;break; case3:set_chose(flag1,2);flag1++;break; case4:set_chose(flag1,3);flag1++;break; case6:set_chose(flag1,4);flag1++;break; case7:set_chose(flag1,5);flag1++;break; case8:set_chose(flag1,6);flag1++;break; case10:set_chose(flag1,7);flag1++;break; case11:set_chose(flag1,8);flag1++;break; case12:set_chose(flag1,9);flag1++;break; case15:set_chose(flag1,0);flag1++;break; default:break; } if(flag1==2)return1; } }}voidset_tem_down(){uintflag_down=0;LCD_ClrAll();while(1) { LCD_cursor(0); LCD_prints("settemdown:"); tem_down=0; while(1) { if(flag_down==0) { set_tem_key(); flag_down++; tem_down=number; LCD_cursor(0x40); LCD_prints("numberis:"); LCD_ints(tem_down); LCD_cursor(0x4d); LCD_write_data(0xDF); LCD_write_data(0x43); } if(key_scan()==16)break; } break; } comper_tem();}voidset_tem_up(){uintflag_up=0; LCD_ClrAll();while(1) { LCD_cursor(0); LCD_prints("settemup:"); tem_up=0; while(1) { if(flag_up==0) { set_tem_key(); flag_up++; tem_up=number; LCD_cursor(0x40); LCD_prints("numberis:"); LCD_ints(tem_up); LCD_cursor(0x4d); LCD_write_data(0xDF); LCD_write_data(0x43); } if(key_scan()==16)break; } break; }comper_tem();}voidcomper_tem(){ if(tem_up<tem_down) { LCD_ClrAll(); LCD_cursor(0); LCD_prints("YOUSETTHE"); LCD_cursor(0X40); LCD_prints("WRONGNUMBER"); LCD_cursor(0); for(t=0;t<50;t++)//延時1.5S左右 { delay_1ms(255); } LCD_prints("SYSTEMTHEN"); LCD_cursor(0x40); LCD_prints("RESTART"); for(t=0;t<50;t++)//延時1.5S左右 { delay_1ms(255); } TEP1=10250;TEP2=10250; tem_up=10;tem_down=40;} else { TEP1=tem_up*256+tem_down;TEP2=TEP1; LCD_cursor(0); LCD_prints(""); LCD_cursor(0X40); LCD_prints("");}}voidset_hum_down(){uintflag_down=0;LCD_ClrAll();while(1) { LCD_cursor(0); LCD_prints("sethumdown:"); hum_down=0; while(1) { if(flag_down==0) { set_tem_key(); flag_down++; hum_down=number; LCD_cursor(0x40); LCD_prints("numberis:"); LCD_ints(hum_down); LCD_cursor(0x4d); LCD_prints("%"); } if(key_scan()==16)break; } break; } comper_hum();}voidset_hum_up(){uintflag_up=0;LCD_ClrAll();while(1) { LCD_cursor(0); LCD_prints("sethumup:"); hum_up=0; while(1) { if(flag_up==0) { set_tem_key(); flag_up++; hum_up=number; LCD_cursor(0x40); LCD_prints("numberis:"); LCD_ints(hum_up); LCD_cursor(0x4d); LCD_prints("%"); } if(key_scan()==16)break; } break; } comper_hum();}voidcomper_hum(){ if(hum_up<hum_down) { LCD_ClrAll(); LCD_cursor(0); LCD_prints("YOUSETTHE"); LCD_cursor(0X40); LCD_prints("WRONGNUMBER"); LCD_cursor(0); for(t=0;t<50;t++)//延時1.5S左右 { delay_1ms(255); } LCD_prints("SYSTEMTHEN"); LCD_cursor(0x40); LCD_prints("RESTART"); for(t=0;t<50;t++)//延時1.5S左右 { delay_1ms(255); } DAM1=15375;DAM2=15375; hum_up=60;hum_down=10; } else { DAM1=hum_up*256+hum_down;DAM2=DAM1; LCD_cursor(0); LCD_prints(""); LCD_cursor(0X40); LCD_prints("");}}voidset_chose(uintflag,uintnum){ if(flag==0) number=10*num; if(flag==1) number+=num; }voidshow_tem_hum(uintflag){ if(flag==1) { LCD_ClrAll(); LCD_cursor(0); LCD_prints("temup:"); LCD_ints(tem_up); LCD_cursor(0x0c); LCD_write_data(0xDF); LCD_write_data(0x43); LCD_cursor(0x40); LCD_prints("temdown:"); LCD_ints(tem_down); LCD_cursor(0x4c); LCD_write_data(0xDF); LCD_write_data(0x43); for(t=0;t<100;t++) { delay_1ms(255); } } if(flag==2){ LCD_ClrAll(); LCD_cursor(0); LCD_prints("humup:"); LCD_ints(hum_up); LCD_cursor(0x0c); LCD_prints("%"); LCD_cursor(0x40); LCD_prints("humdown:"); LCD_ints(hum_down); LCD_cursor(0x4c); LCD_prints("%"); for(t=0;t<100;t++) { delay_1ms(255); } } }main(){uintflag_key=0;uchari=0;Uart_init();LCD_initial();//LCD初始化LCD_ClrAll();//LCD清屏LCD_cursor(0);//光標(biāo)起始地址,第一行地址是0x00~0x0F,第二行地址是0x40~0x4fLCD_prints("MYSYSTEMBEGIN");LCD_cursor(0x40);LCD_prints("HAPPYNEWYEAR");for(t=0;t<50;t++)// { delay_1ms(255); }while(1) { Node_sensor_0(TEP1,DAM1,flag_true); Node_sensor_1(TEP2,DAM2,flag_true); for(t=0;t<25;t++) { delay_1ms(255); } if(key_check()!=0) { i=key_scan(); switch(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論