可編程數(shù)字時鐘設(shè)計 畢業(yè)設(shè)計_第1頁
可編程數(shù)字時鐘設(shè)計 畢業(yè)設(shè)計_第2頁
可編程數(shù)字時鐘設(shè)計 畢業(yè)設(shè)計_第3頁
可編程數(shù)字時鐘設(shè)計 畢業(yè)設(shè)計_第4頁
可編程數(shù)字時鐘設(shè)計 畢業(yè)設(shè)計_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、摘摘 要要在當(dāng)代繁忙的工作與生活中,時間與我們每一個人都有非常密切的關(guān)系,每個人都受到時間的影響。為了更好的利用我們自己的時間,我們必須對時間有一個度量,因此產(chǎn)生了鐘表。鐘表的開展是非常迅速的,從剛開始的機(jī)械式鐘表到現(xiàn)在普遍用到的數(shù)字式鐘表,即使現(xiàn)在鐘表千奇百怪,但是它們都只是完成一種功能計時功能,只是工作原理不同而已,在人們的使用過程中,逐漸發(fā)現(xiàn)了鐘表的功能太單一,沒有更大程度上的滿足人們的需求。因此,數(shù)字電子時鐘的出現(xiàn)成為必然。數(shù)字鐘是采用數(shù)字電路實現(xiàn)對.時,分.數(shù)字顯示的計時裝置,廣泛用于個人家庭,車站, 碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的開展和石

2、英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴(kuò)展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時播送、自動起閉路燈、定時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數(shù)字化為根底的。因此,研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實的意義。在此設(shè)計中所設(shè)計的鐘表不但具有普通鐘表的功能,它還能實現(xiàn)多個額外的功能:溫度測量、年,月,日,星期。關(guān)鍵詞:單片機(jī),電子時鐘,DS1302,DS18B20,LCD1602目錄目錄第一章第一章 緒緒 論論 .1 1第二章第二章 系統(tǒng)硬件電路設(shè)

3、計系統(tǒng)硬件電路設(shè)計 .3 3第 1 節(jié) 單片機(jī)控制系統(tǒng)原理.3第 2 節(jié) 模塊電路設(shè)計與比擬.4一、 時鐘方案選擇.4二、 溫度檢測方案選擇.4三、 顯示模塊的選擇.4四、 其他設(shè)計的考慮.4第 3 節(jié) 各功能模塊硬件設(shè)計及實現(xiàn).5一、 單片機(jī)控制系統(tǒng).5二、 DS1302 實時時鐘芯片 .10三、 溫度模塊.14四、 1602 液晶顯示器 .16第 4 節(jié) 電路總圖.20第三章第三章 系統(tǒng)程序設(shè)計系統(tǒng)程序設(shè)計 .2121第 1 節(jié) 主程序流程圖.21第 2 節(jié) 中斷效勞程序.22第四章第四章 程序程序 .2323第 1 節(jié) 系統(tǒng)程序設(shè)計.23第五章第五章 總結(jié)總結(jié) .3535第六章第六章 參

4、考文獻(xiàn)參考文獻(xiàn) .3636第一章第一章 緒緒 論論本設(shè)計主要分為硬件電路設(shè)計和軟件實現(xiàn)兩大局部。硬件電路設(shè)計采用模塊設(shè)計:中央處理電路、時鐘電路、溫度測量電路三大局部;軟件采用 C 語言編程實現(xiàn),設(shè)計采用按功能模塊劃分,包括:主程序、顯示程序、溫度測量程序、時鐘程序等。在中央處理器上我們采用 AT89S52 單片機(jī),該單片機(jī)是集 CPU ,RAM ,ROM ,計數(shù)和多種接口于一體的微控制器。自 20 世紀(jì) 70 年代問世以來,以其極高的性能價格比,受到人們的重視和關(guān)注。它體積小、重量輕、抗干擾能力強(qiáng)、環(huán)境要求不高、價格低廉、可靠性高、靈活性好、開發(fā)較為容易,廣泛應(yīng)用于智能生產(chǎn)和工業(yè)自動化上。在

5、時間功能上主要依靠實時時鐘芯片 DS1302 來完成大局部功能,DS1302 是具有涓細(xì)電流充電能力的低功耗實時時鐘電路,它以其接口簡單、價格低廉、使用方便,被廣泛地采用。它的主要特點是采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采用普通 32.768kHz 晶振。所以用此款芯片來實現(xiàn)時間功能是完全能滿足電路的要求。溫度方面工作由數(shù)字式溫度傳感器 DS18B20 來完成,這款溫度傳感器是具有線路簡單,體積小,方便易用等特點,溫度測量范圍為55125,可編程為 9 位12 位 A/D 轉(zhuǎn)換精度,測溫分辨率可達(dá),被測溫度用符號擴(kuò)展的 16 位數(shù)字量方式串行輸出。選

6、用這個芯片使電路簡化,提高了效率。本課題通過 MCS-51 單片機(jī)來設(shè)計,采用 C 語言進(jìn)行編程,可以實現(xiàn)以下一些功能:小時、分、秒和年、月、日的顯示,定時報警功能。本設(shè)計的電子時鐘系統(tǒng)由時鐘電路,LCD 顯示電路,定時報警電路,按鍵調(diào)整電路四局部組成。51單片機(jī)通過軟件編程,在 LCD1602 液晶屏上實現(xiàn)小時、分、秒和年、月、日的顯示;利用時鐘芯片 DS1302 來實現(xiàn)計時,定時功能;通過兩個按鍵開關(guān),一個用于時鐘的調(diào)節(jié),一個用于鬧鐘的調(diào)節(jié),來實現(xiàn)參數(shù)設(shè)置和調(diào)節(jié)功能;到達(dá)設(shè)置的鬧鐘時間時,由蜂鳴器發(fā)聲,起報警作用。本次設(shè)計的電子時鐘,經(jīng)過比照測試,發(fā)現(xiàn)實際計時的走時精度較高,可滿足多種場合

7、的應(yīng)用需求。本文詳細(xì)介紹了 AT89S52 單片機(jī)的根本原理,分析了 AT89S52 各個管腳的功能及它在設(shè)計電路中的作用。本文論述了 LCD1602 液晶屏和時鐘芯片 DS1302的工作原理及其軟件設(shè)計過程。第二章第二章 系統(tǒng)硬件電路設(shè)計系統(tǒng)硬件電路設(shè)計第第 1 節(jié)節(jié) 單片機(jī)控制系統(tǒng)原理單片機(jī)控制系統(tǒng)原理方案一方案一:采用 CPLD 可編程邏輯器件作為主控制器控制外圍電路進(jìn)行電壓、頻率測量,時鐘控制、溫度測量、鍵盤和 LED 控制、報警控制。此方案邏輯電路復(fù)雜,且靈活性較低,不利于各種功能的擴(kuò)展,在測電壓時將通過 A/D 測得的數(shù)值轉(zhuǎn)化為電壓有效值時有一定的困難。 方案二方案二:采用 AT8

8、9S52 單片機(jī)來實現(xiàn)系統(tǒng)的控制。鍵盤四個獨立按鍵控制,時鐘芯片采用 DS1302,溫度傳感器采用 DS18B20。此系統(tǒng)硬件簡潔,將復(fù)雜的硬件功能用軟件實現(xiàn),因此系統(tǒng)控制靈活,能很好地滿足此題的根本要求和擴(kuò)展要求。此方案根本原理框圖如圖 2.1 所示。 比擬以上兩種方案的優(yōu)缺點,方案二簡潔、靈活、可擴(kuò)展性好,能完全到達(dá)設(shè)計要求,故采用第二種方案。液晶顯示局部DS18B20溫度傳感器局部AT89S52單片機(jī)DS1302實時時鐘局部鍵盤輸入局部圖圖 2.1. 系統(tǒng)方框圖系統(tǒng)方框圖第第 2 節(jié)節(jié) 模塊電路設(shè)計與比擬模塊電路設(shè)計與比擬一、一、 時鐘方案選擇時鐘方案選擇方案一方案一:要求顯示小時和分鐘

9、,因此可以用門電路組合構(gòu)成時鐘發(fā)生器,但此方案硬件復(fù)雜,穩(wěn)定性低,且不易控制。 方案二方案二:采用帶 RAM 的時鐘芯片 DS1302。該芯片可以進(jìn)行時分秒的計數(shù),具有 100 年日歷,可編程接口,還具有報警功能和掉電保存功能,并且可以對其方便的進(jìn)行程序控制,能很好的符合要求。故采用方案二。二、二、 溫度檢測方案選擇溫度檢測方案選擇 方案一方案一:采用熱電偶或熱敏電阻作感溫元件,但熱電偶需冷端補(bǔ)償,電路設(shè)計復(fù)雜,熱敏電阻雖然精度較高,但需要標(biāo)準(zhǔn)穩(wěn)定電阻匹配才能使用,而且重復(fù)性、可靠性都比擬差。 方案二方案二:采用集成溫度傳感器 DS18B20 。該傳感器結(jié)構(gòu)簡單,不需外接電路,數(shù)據(jù)傳輸采用 o

10、ne-wire。總線,可用一根 I/O 數(shù)據(jù)線即供電又傳輸數(shù)據(jù),在-10 -+85范圍內(nèi)精度為,分辨率較高,重復(fù)性和可靠性好。故采用方案二。三、三、 顯示模塊的選擇顯示模塊的選擇方案一方案一:采用數(shù)碼管顯示。數(shù)碼管亮度高、體積小、重量輕,但其顯示信息簡單、有限,在此題目中應(yīng)用受到很大的限制。 方案二方案二:采用液晶顯示。液晶顯示功耗低,輕便防震。采用液晶顯示界面友好清晰,操作方便,顯示信息豐富。 四、四、 其他設(shè)計的考慮其他設(shè)計的考慮 鬧鈴響可采用蜂鳴器來模擬一些音樂,實現(xiàn)鬧鈴的效果。也可采用音樂模塊來更簡單,更實用的效果,在此本設(shè)計出于器件規(guī)模的考慮特采用蜂鳴器來模擬鬧鈴。第第 3 節(jié)節(jié) 各

11、功能模塊硬件設(shè)計及實現(xiàn)各功能模塊硬件設(shè)計及實現(xiàn)本設(shè)計以單片機(jī) AT89S52 為控制核心,由實時時鐘局部、顯示局部、鍵盤輸入局部、溫度采集局部等局部組成。其中實時時鐘采用 DS1302 可實現(xiàn)年月日時分秒等時間信息的采集和鬧鐘功能。溫度檢測模塊由 DS18B20 集成溫度傳感器對現(xiàn)場環(huán)境溫度進(jìn)行實時檢測。鍵盤采集局部由四個獨立按鍵組成,可實現(xiàn)時間顯示、鬧鐘設(shè)置、環(huán)境溫度測量等功能。硬件設(shè)計是整個系統(tǒng)的根底,要考慮的方方面面很多,除了實現(xiàn)此設(shè)計根本功能以外,主要還要考慮如下幾個因素:系統(tǒng)穩(wěn)定度;器件的通用性或易選購性; 軟件編程的易實現(xiàn)性;系統(tǒng)其它功能及性能指標(biāo);因此硬件設(shè)計至關(guān)重要?,F(xiàn)從各功能

12、模塊的實現(xiàn)逐個進(jìn)行分析探討。一、一、 單片機(jī)控制系統(tǒng)單片機(jī)控制系統(tǒng) AT89S52 單片機(jī)AT89S52 是美國 ATMEL 公司生產(chǎn)的低電壓,高性能的 CMOS8 位單片機(jī)片內(nèi) 8Kbytes 的可反復(fù)擦寫的只讀程序存儲器PEROM和 128bytes 的隨機(jī)存儲器RAM ,器件采用 ATMEL 公司的高密度、非易失存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51 指令系統(tǒng),片內(nèi)置通用 8 位中央處理器CPU和 Flash 存儲單元,功能強(qiáng)大。AT89S52 單片機(jī)可為你提供許多高性價的應(yīng)用場合,可靈活的應(yīng)用于各種控制領(lǐng)域。主要性能參數(shù):與 MCS-51 產(chǎn)品指令系統(tǒng)的全兼容 4k 字節(jié)可重擦寫 Flas

13、h 閃速存儲器1000 次可擦寫周期全靜態(tài)操作:0Hz-24MHz三級加密程序存儲器1288 字節(jié)內(nèi)部 RAM 32 個可編程 I/O 口線2 個 16 位定時/計數(shù)器 5 個中斷源 可編程串行 UART 通道低功耗空閑和掉電模式 AT89S52 功能特性描述: AT89S52 提供以下標(biāo)準(zhǔn)功能:4k 字節(jié) Flash 閃速存儲器,128 字節(jié)內(nèi)部RAM,32 個 I/O 口線,兩個 16 位定時/計數(shù)器,一個 5 向量中斷結(jié)構(gòu),一個全雙工串行通信口, 片內(nèi)震蕩器及時鐘電路。同時,AT89S52 可降至 0Hz 的靜態(tài)邏輯操作,并支持兩種軟件的可選的節(jié)電工作模式??臻e方式停止 CPU 的工作,

14、但允許 RAM,定時/計數(shù)器,竄行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存 RAM 中的內(nèi)容,但震蕩器停止工作并禁止所有部件工作直到下一個硬件復(fù)位。1AT89S52 引腳功能說明:Vcc:電源電壓GND:地P0 口:PO 口是一組 8 位漏極開路行雙向 I/O 口,也既地址/數(shù)據(jù)總線復(fù)用口。可作為輸出口使用時,每位可吸收電流的方式驅(qū)動 8 個 TTL 邏輯電路,對端口寫“1”可作為高阻抗輸入輸入端用。在訪問外部數(shù)據(jù)存儲器時,這組口線分時轉(zhuǎn)換地址低 8 位和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。在 Flash 編程時,PO 口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時,要求接上拉電阻。

15、P1 口:P1 口是一個內(nèi)部上拉電阻的 8 位雙向 I/O 口,P1 的輸入緩沖級可驅(qū)動吸收或輸出電流4 個 TTL 邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電圖圖 2.2. 單片機(jī)引腳圖單片機(jī)引腳圖阻把端口拉到高電平,此時可作輸出口。作輸入口時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時輸出一個電流I 。Flash 編程和程序校驗期間,P1口接收 8 位地址。P2 口:P2 口是一個帶有內(nèi)部上拉電阻的 8 位雙向 I/O 口,P2 的輸入緩沖極可以驅(qū)動輸入或輸出電流4 個 TTL 邏輯門電路。對端口“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時和作為輸出口,作輸出口時,因為存在內(nèi)部上

16、拉電阻,某個引腳被外部信號拉低時會輸出一個電流。在訪問外部存儲器或 1 位地址的外部數(shù)據(jù)存儲器例如執(zhí)行 MOVXDPTR 指令時,P2 口送出高 8 位地址數(shù)據(jù)。在訪問 8 位地址的外部數(shù)據(jù)存儲器如執(zhí)行 MOVXRI 指令時,P2 口線的內(nèi)容也既特殊功能存放器SFR區(qū)中 R2 存放器的內(nèi)容 ,在整個訪問期間不改變。Flash 編程或校驗時,P2 亦接收高地址和其他控制信號。P3 口:P3 口是一組帶有內(nèi)部上拉電阻的 8 位雙向 I/O 口,P1 的輸入緩沖級可驅(qū)動吸收或輸出電流4 個 TTL 邏輯門電路。對 P3 口寫入“1”時,它們被內(nèi)部上拉電阻拉高并可作為輸出端口。作輸出端口時,被外部拉低

17、的 P3 口將用上拉電阻輸出電流。P3 口除可作為一般的 I/O 口線外,更重要的用途是它的第二功能如表 2.1 所示:表表 2.1 AT89S52 端口:端口:P3 口還接收一些用于 Flas 閃速存儲器編程和程序校驗的控制信號ALE/當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE地址鎖存允許PROG輸出脈沖用于鎖存地址的低 8 位字節(jié),即使不訪問外部字節(jié),ALE 仍時鐘震蕩頻率的 1/6 輸出固定的正脈沖信號,因此它可對外輸出時鐘脈沖或用于定時目的。要注意的是:每次訪問外部存儲器時將跳過一個 ALE 脈沖。對 Flash 存儲器編程期間,該引腳還要輸入編程脈沖 。如有必要,可通過對特殊功能存放

18、PROG器SFR區(qū)中的 8EH 單元的 D0 位置位,可禁止 ALE 操作。該位置位后,只有一條 MOVX 和 MOVC 指令可激活。此外,此引腳會被微弱拉高,單片機(jī)執(zhí)行外部程序時,應(yīng)該置 ALE 無效RST:復(fù)位輸出。當(dāng)震蕩器工作時,RST 引腳出現(xiàn)兩個機(jī)器周期以上高電平使機(jī)器復(fù)位。 :程序存入允許輸出的是外部程序存儲器的讀選通信號,當(dāng)PSENPSENAT89S52 由外部程序取指令或數(shù)據(jù)時,每個機(jī)器周期兩次有效,既輸PSEN出兩個脈沖。在此期間,當(dāng)訪問外部數(shù)據(jù)存儲器,這兩次有效的信號不出PSEN現(xiàn)。EA/VPP:外部訪問允許。欲使 CPU 僅訪問外部程序存儲器地址為 0000H-FFFFH

19、 ,EA 端必須保持低電平接地 。要注意的是:如果加密位 LB1 被編程,復(fù)位時內(nèi)部會鎖存 EA 端狀態(tài)。Flash 存儲器編程時,該引腳加上+12V 的編程允許電源 Vpp,當(dāng)然這必須是該器件是使用 12V 的編程電壓 Vpp。XTAL1:震蕩器反向放大器及內(nèi)部時鐘的輸入端。XAAL2:震蕩器反向放大器的輸出端。圖圖 2.32.3 內(nèi)部震蕩電路內(nèi)部震蕩電路時鐘震蕩器:AT89S52 中有一個構(gòu)成內(nèi)部震蕩器的高增益由于外部時鐘信號是通過一個 2 分頻的觸發(fā)器后作為內(nèi)部時鐘信號的所以外部時鐘的占空比沒有特殊要求,但最小高電平持續(xù)的時間和最大低電平持續(xù)的時間應(yīng)符合產(chǎn)品技術(shù)條件的要求。表表 2.2

20、AT89S52 存放器存放器存放器內(nèi)容存放器內(nèi)容PC0000HTMOD00HACC00HTCOM00HB00HTH000HPSW00HTLO00HSP07HTH100H0DPTR0000HTH100HP1P30FFHSCON00HIPxxx00000SBUF不定IE0 xxx00000PCON0 xxx00000其中單片機(jī)最小系統(tǒng)的電路圖如下圖。圖圖 單片機(jī)最小系統(tǒng)單片機(jī)最小系統(tǒng)二、二、 DS1302 實時時鐘芯片實時時鐘芯片DS1302 是 DALLAS 公司推出的涓流充電時鐘芯片,內(nèi)含一個實時時鐘/日歷和31 字節(jié)靜態(tài) RAM,可以通過串行接口與單片機(jī)進(jìn)行通信。實時時鐘/日歷電路提供秒、分

21、、時、日、星期、月、年的信息,每個月的天數(shù)和閏年的天數(shù)可自動調(diào)整,時鐘操作可通過 AM/PM 標(biāo)志位決定采用 24 或 12 小時時間格式。DS1302 與單片機(jī)之間能簡單地采用同步串行的方式進(jìn)行通信,僅需三根 I/O 線:復(fù)位RST 、I/O 數(shù)據(jù)線、串行時鐘SCLK 。時鐘/RAM 的讀/寫數(shù)據(jù)以一字節(jié)或多達(dá) 31 字節(jié)的字符組方式通信。DS1302 工作時功耗很低,保持?jǐn)?shù)據(jù)和時鐘信息時,功耗小于 1mW。DS1302 的內(nèi)部結(jié)構(gòu)如下圖,主要組成局部為:移位存放器、控制邏輯、振蕩器、實時時鐘以及 RAM。雖然數(shù)據(jù)分成兩種,但是對單片機(jī)的程序而言,其實是一樣的,就是對特定的地址進(jìn)行讀寫操作圖

22、圖 2.5 DS1302 的內(nèi)部結(jié)構(gòu)圖的內(nèi)部結(jié)構(gòu)圖DS1302 含充電電路,可以對作為后備電源的可充電電池充電,并可選擇充電使能和串入的二極管數(shù)目,以調(diào)節(jié)電池充電電壓。不過對我們目前而言,最需要熟悉的是和時鐘相關(guān)局部的功能,對于其它參數(shù)請參閱數(shù)據(jù)手冊。DS1302 的工作原理的工作原理DS1302 工作時為了對任何數(shù)據(jù)傳送進(jìn)行初始化,需要將復(fù)位腳RST置為高電平且將 8 位地址和命令信息裝入移位存放器。數(shù)據(jù)在時鐘SCLK的上升沿串行輸入,前 8 位指定訪問地址,命令字裝入移位存放器后,在之后的時鐘周期,讀操作時輸出數(shù)據(jù),寫操作時輸出數(shù)據(jù)。時鐘脈沖的個數(shù)在單字節(jié)方式下為8+88 位地址+8 位數(shù)

23、據(jù) ,在多字節(jié)方式下為 8 加最多可達(dá) 248 的數(shù)據(jù)。DS1302 的存放器和控制命令的存放器和控制命令 對 DS1302 的操作就是對其內(nèi)部存放器的操作,DS1302 內(nèi)部共有 12 個存放器,其中有 7 個存放器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為 BCD 碼形式。此外,DS1302 還有年份存放器、控制存放器、充電存放器、時鐘突發(fā)存放器及與 RAM相關(guān)的存放器等。時鐘突發(fā)存放器可一次性順序讀寫除充電存放器以外的存放器。日歷、時間存放器及控制字如表 2.3 所示:表表 2.3:日歷、時鐘存放器與控制字對照表:日歷、時鐘存放器與控制字對照表最后一位 RD/W 為“0時表示進(jìn)行寫操作,為“1時表

24、示讀操作。DS1302 內(nèi)部存放器列表如表 2.4 所示:DS1302 內(nèi)部的 RAM 分為兩類,一類是單個 RAM 單元,共 31 個,每個單元為一個 8 位的字節(jié),其命令控制字為 COHFDH,其中奇數(shù)為讀操作,偶數(shù)為76543210存放器名稱1RAM/CKA4A3A2A1A0RD/W秒存放器1000000分存放器1000001小時存放器1000010日存放器1000011月存放器1000100星期存放器1000101年存放器1000110寫保護(hù)存放器1000111慢充電存放器1001000時鐘突發(fā)存放器1011111命令字各位內(nèi)容存放器名稱寫讀取值范圍76543210秒存放器80H81H

25、00-59CH10SECSEC分存放器82H83H00-59010MINMIN小時存放器84H85H01-12 或 00-2312/240AHRHR日期存放器86H87H01-28,29,30,310010DATEDATE月份存放器88H89H01-1200010MMONTH周存放器8AH8BH01-0700000DAY年份存放器8CH8DH00-9910YEARYEAR表表 2.4. DS1302 內(nèi)內(nèi)部部存存放放器器列列表表寫操作;再一類為突發(fā)方式下的 RAM,此方式下可一次性讀寫所有的 RAM 的31 個字節(jié),命令控制字為 FEH寫 、FH讀 。我們現(xiàn)在已經(jīng)知道了控制存放器和 RAM 的

26、邏輯地址,接著就需要知道如何通過外部接口來訪問這些資源。單片機(jī)是通過簡單的同步串行通訊與 DS1302 通訊的,每次通訊都必須由單片機(jī)發(fā)起,無論是讀還是寫操作,單片機(jī)都必須先向DS1302 寫入一個命令幀,這個幀的格式如表 2.1 所示,最高位 BIT7 固定為1,BIT6 決定操作是針對 RAM 還是時鐘存放器,接著的 5 個 BIT 是 RAM 或時鐘存放器在 DS1302 的內(nèi)部地址,最后一個 BIT 表示這次操作是讀操作抑或是寫操作。物理上,DS1302 的通訊接口由 3 個口線組成,即 RST,SCLK,I/O。其中RST 從低電平變成高電平啟動一次數(shù)據(jù)傳輸過程,SCLK 是時鐘線,

27、I/O 是數(shù)據(jù)線。請注意,無論是哪種同步通訊類型的串行接口,都是對時鐘信號敏感的,而且一般數(shù)據(jù)寫入有效是在上升沿,讀出有效是在下降沿DS1302 正是如此的,但是在芯片手冊里沒有明確說明 ,如果不是特別確定,那么把程序設(shè)計成這樣:平時 SCLK 保持低電平,在時鐘變動前設(shè)置數(shù)據(jù),在時鐘變動后讀取數(shù)據(jù),即數(shù)據(jù)操作總是在 SCLK 保持為低電平的時候,相鄰的操作之間間隔有一個上升沿和一個下降沿。DS1302 的命令字結(jié)構(gòu)圖圖圖 DS1302 的命令字結(jié)構(gòu)的命令字結(jié)構(gòu)圖圖 DS1302 局部原理圖局部原理圖三、三、 溫度模塊溫度模塊 本設(shè)計中我在溫度模塊中采用的是 DS18B20 溫度傳感器,DSl

28、8B20 是DALLAS 公司生產(chǎn)的一線式數(shù)字溫度傳感器。它將地址線、數(shù)據(jù)線和控制線合為一根雙向串行傳輸數(shù)據(jù)的信號線,允許在這根信號線上掛接多個 DSl8B20;因此,單片機(jī)只需通過一根 IO 線就可以與多個 DSl8B20 通信。每個芯片內(nèi)還有一個64 位的 ROM,其中存有各個器件自身的序列號,作為器件獨有的 ID 號碼。DSl8B20 簡化了測溫器件與計算機(jī)的接口電路,使得電路簡單,使用更加方便。DSl8B20 的特性如下:1測溫范圍:一 55 至十 125;2轉(zhuǎn)換精度:9 至 12 位二進(jìn)制數(shù)(包括符號 1 位),可編程確定轉(zhuǎn)換精度的位數(shù);3測溫分辨率:9 位精度為 05,12 位精度

29、為;4轉(zhuǎn)換時間:9 位精度為 9375ms,10 位精度為 1875ms,12 位精度為750ms;5具有非易失性上、下限報警設(shè)定的功能。預(yù)置斜率累加器計數(shù)比擬器預(yù)置溫度存放器減到 0減法計數(shù)器 2高溫度系數(shù)振蕩器減到 0減法計數(shù)器 1低溫度系數(shù)振蕩器停止增加圖圖 2.7 內(nèi)部測溫電路圖內(nèi)部測溫電路圖DS18B20 的測溫原理如圖 2.7 所示,圖中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計數(shù)器 1,高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號作為減法計數(shù)器 2 的脈沖輸入,圖中還隱含著計數(shù)門,當(dāng)計數(shù)門翻開時,DS18B20 就對低溫度系數(shù)振蕩器

30、產(chǎn)生的時鐘脈沖后進(jìn)行計數(shù),進(jìn)而完成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將-55 所對應(yīng)的基數(shù)分別置入減法計數(shù)器 1 和溫度存放器中,減法計數(shù)器 1 和溫度存放器被預(yù)置在-55所對應(yīng)的一個基數(shù)值。減法計數(shù)器 1 對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計數(shù),當(dāng)減法計數(shù)器 1 的預(yù)置值減到 0 時溫度存放器的值將加 1,減法計數(shù)器 1 的預(yù)置將重新被裝入,減法計數(shù)器 1 重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計數(shù),如此循環(huán)直到減法計數(shù)器 2 計數(shù)到 0 時,停止溫度存放器值的累加,此時溫度存放器中的數(shù)值即為所測溫度。圖中的斜率累加器用于補(bǔ)償和修正測溫過程中的非線性

31、,其輸出用于修正減法計數(shù)器的預(yù)置值,只要計數(shù)門仍未關(guān)閉就重復(fù)上述過程,直至溫度存放器值到達(dá)被測溫度值,這就是 DS18B20 的測溫原理。使用 DSl8B20 時應(yīng)注意以下事項: (1)由于 DSl8B20 的測溫分辨力提高到 12 位,因此它對時序及電特性參數(shù)要求較高需嚴(yán)格按照 DSl8B20 的時序要求進(jìn)行操作。 (2)DSl8B20 作三線制應(yīng)用時,應(yīng)將 UDD、IO、GND 端焊接牢固;作兩線制應(yīng)用時,應(yīng)將 UDD 與 GND 連在一起焊牢。假設(shè) UDD 端漏焊或者虛焊,傳感器就只能輸出十 850的溫度數(shù)據(jù)。 (3)測溫電纜線可采用帶屏蔽層的 4 芯雙絞線,其中兩根線分別接信號線與地線

32、,另兩根線依次接 UDD 和地線,屏蔽層在源端單點接地。四、四、 1602 液晶顯示器液晶顯示器1602 字符型型液晶是一種用 57 點陣圖形來顯示字符的液晶顯示器,根據(jù)顯示的容量可以分為 1 行 16 個字、2 行 16 個字、2 行 20 個字等,最常用的為 2 行16 個字,即我們馬上要學(xué)習(xí)的 1602 液晶模塊,下面(圖)就是 TC1602 液晶模塊的正面照片。 圖圖 2.8 1602 實物圖實物圖帶背光的液晶模塊 TC1602EL,TC1602EL 采用標(biāo)準(zhǔn)的 16 腳接口,其引腳功能如下:第 1 腳:VSS 為電源地,接 GND。第 2 腳:VDD 接 5V 正電源。第 3 腳:V

33、L 為液晶顯示器比照度調(diào)整端,接正電源時比照度最弱,接地電源時比照度最高,比照度過高時會產(chǎn)生“鬼影,使用時可以通過一個 10K的電位器調(diào)整比照度。第 4 腳:RS 為存放器選擇,高電平時選擇數(shù)據(jù)存放器、低電平時選擇指令存放器。第 5 腳:RW 為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng) RS 和 RW 共同為低電平時可以寫入指令或者顯示地址,當(dāng) RS 為低電平RW 為高電平時可以讀忙信號,當(dāng) RS 為高電平 RW 為低電平時可以寫入數(shù)據(jù)。第 6 腳:E 端為使能端,當(dāng) E 端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第 714 腳:D0D7 為 8 位雙向數(shù)據(jù)線。第 15 腳:B

34、LA 背光電源正極(+5V)輸入引腳。第 16 腳:BLK 背光電源負(fù)極,接 GND。 TC1602 液晶模塊內(nèi)帶標(biāo)準(zhǔn)字庫,內(nèi)部的字符發(fā)生存儲器CGROM已經(jīng)存儲了192 個 57 點陣字符,32 個 510 點陣字符。另外還有字符生成RAMCGRAM512 字節(jié),供用戶自定義字符。1602 液晶模塊內(nèi)部的控制器共有 11 條控制指令。它的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實現(xiàn)的。指令 1:清顯示,指令碼 01H,光標(biāo)復(fù)位到地址 00H 位置 指令 2:光標(biāo)復(fù)位,光標(biāo)返回到地址 00H 指令 3:光標(biāo)和顯示模式設(shè)置 I/D:光標(biāo)移動方向,高電平右移,低電平左移 S:屏幕上所有文字是否

35、左移或者右移。高電平表示有效,低電平那么無效指令 4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍指令 5:光標(biāo)或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標(biāo)指令 6:功能設(shè)置命令 DL:高電平時為 4 位總線,低電平時為 8 位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示 5x7 的點陣字符,高電平時顯示 5x10 的點陣字符指令 7:字符發(fā)生器 RAM 地址設(shè)置指令 8:DDRAM 地址設(shè)置指令 9:讀忙信號和光標(biāo)地址

36、 BF:為忙標(biāo)志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令 10:寫數(shù)據(jù)指令 11:讀數(shù)據(jù) 下面是 TC1602 液晶模塊的一些主要技術(shù)參數(shù):3、工作溫度Ta: 0 60C常溫/-20 75 C寬溫5、屏幕視域尺寸: 62.5 16.1mm 【TC1602EL 液晶模塊應(yīng)用編程】TC1602EL 液晶顯示模塊可以和 51 系列單片機(jī)直接接口,下面就是 S51 增強(qiáng)型實驗板的液晶接口電路 液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否那么此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。圖

37、圖 2.92.9 16021602 液晶顯示局部電路原理圖液晶顯示局部電路原理圖D0D1D2D3D4D5D6D7R SR WEVC CB AC K+B AC K-GNDVL1602P1.0P1.1P1.2P1.3P1.5P1.6P1.7P3.4P3.5P3.6P1.4AT89S51VC C4710kGND第 4 節(jié) 電路總圖圖圖 2.10 電路設(shè)計總圖電路設(shè)計總圖第三章第三章 系統(tǒng)程序設(shè)計系統(tǒng)程序設(shè)計第第 1 節(jié)節(jié) 主程序流程圖主程序流程圖開始端口初始化讀取 DS130 時間和 DS18B20 的溫度并顯示延時重讀 DS18B20 溫度顯示小時和分鐘按鍵中斷?N 中斷Y第第 2 節(jié)節(jié) 中斷效勞

38、程序中斷效勞程序第四章第四章 程序程序第第 1 節(jié)節(jié) 系統(tǒng)程序設(shè)計系統(tǒng)程序設(shè)計/*1602 液晶顯示局部子程序*/Port Definitions*sbit LcdRs= P25;sbit LcdRw= P26;sbit LcdEn = P27;/內(nèi)部等待函數(shù)*unsigned char LCD_Wait(void)LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();LcdEn=0;return DBPort;/LCD 寫入命令或數(shù)據(jù)*#define LCD_COMMAND0 / Command#define LCD_DATA1 / Data#define LCD_

39、CLEAR_SCREEN 0 x01 / 清屏#define LCD_HOMING 0 x02 / 光標(biāo)返回原點void LCD_Write(bit style, unsigned char input)LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_();/注意順序LcdEn=1;_nop_();/注意順序LcdEn=0;_nop_();LCD_Wait();/設(shè)置顯示模*#define LCD_SHOW0 x04 /顯示開#define LCD_HIDE0 x00 /顯示關(guān) #define LCD_CURSOR0 x02 /顯示光

40、標(biāo)#define LCD_NO_CURSOR0 x00 /無光標(biāo) #define LCD_FLASH0 x01 /光標(biāo)閃動#define LCD_NO_FLASH0 x00 /光標(biāo)不閃動void LCD_SetDisplay(unsigned char DisplayMode)LCD_Write(LCD_COMMAND, 0 x08|DisplayMode);/設(shè)置輸入模*#define LCD_AC_UP0 x02#define LCD_AC_DOWN0 x00 / default#define LCD_MOVE0 x01 / 畫面可平移#define LCD_NO_MOVE0 x00 /d

41、efaultvoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0 x04|InputMode);/初始化LCD*void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0 x38); /8 位數(shù)據(jù)端口,2 行顯示,5*7 點陣LCD_Write(LCD_COMMAND,0 x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /開啟顯示, 無光標(biāo)LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏LCD_

42、SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC 遞增, 畫面不動/液晶字符輸入的位置*void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0 x80|x);if(y=1)LCD_Write(LCD_COMMAND,0 x80|(x-0 x40);void Print(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;/*DS1302 時鐘局部子程序*/typedef struct _SYSTEMTI

43、ME_unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;unsigned char DateString11;unsigned char TimeString9;SYSTEMTIME;/定義的時間類型SYSTEMTIME CurrentTime;#define AM(X) X#define PM(X)(X+12) / 轉(zhuǎn)成 24 小時制#define DS1302_SECO

44、ND0 x80 /時鐘芯片的存放器位置,存放時間#define DS1302_MINUTE0 x82#define DS1302_HOUR0 x84 #define DS1302_WEEK0 x8A#define DS1302_DAY0 x86#define DS1302_MONTH0 x88#define DS1302_YEAR0 x8C void DS1302InputByte(unsigned char d) /實時時鐘寫入一字節(jié)(內(nèi)部函數(shù)) unsigned char i; ACC = d; for(i=8; i0; i-) DS1302_IO = ACC0; /相當(dāng)于匯編中的 RRC

45、 DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC 1; unsigned char DS1302OutputByte(void) /實時時鐘讀取一字節(jié)(內(nèi)部函數(shù)) unsigned char i; for(i=8; i0; i-) ACC = ACC 1; /相當(dāng)于匯編中的 RRC ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; return(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa) DS1302_RST = 0; DS13

46、02_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址,命令 DS1302InputByte(ucDa); / 寫1Byte 數(shù)據(jù) DS1302_CLK = 1; DS1302_RST = 0; unsigned char Read1302(unsigned char ucAddr)/讀取 DS1302 某地址的數(shù)據(jù) unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0 x01);/ 地址,命令 uc

47、Data = DS1302OutputByte(); / 讀 1Byte 數(shù)據(jù) DS1302_CLK = 1; DS1302_RST = 0; return(ucData);void DS1302_GetTime(SYSTEMTIME *Time) /獲取時鐘芯片的時鐘數(shù)據(jù)unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time-Second = (ReadValue&0 x70)4)*10 + (ReadValue&0 x0F);ReadValue = Read1302(DS1302_MINUTE);Ti

48、me-Minute = (ReadValue&0 x70)4)*10 + (ReadValue&0 x0F);ReadValue = Read1302(DS1302_HOUR);Time-Hour = (ReadValue&0 x70)4)*10 + (ReadValue&0 x0F);ReadValue = Read1302(DS1302_DAY);Time-Day = (ReadValue&0 x70)4)*10 + (ReadValue&0 x0F);ReadValue = Read1302(DS1302_WEEK);Time-Week =

49、 (ReadValue&0 x70)4)*10 + (ReadValue&0 x0F);ReadValue = Read1302(DS1302_MONTH);Time-Month = (ReadValue&0 x70)4)*10 + (ReadValue&0 x0F);ReadValue = Read1302(DS1302_YEAR);Time-Year = (ReadValue&0 x70)4)*10 + (ReadValue&0 x0F);void DateToStr(SYSTEMTIME *Time) /將時間年,月,日,星期數(shù)據(jù)轉(zhuǎn)換成液晶

50、顯示字符串,放到數(shù)組里 DateString if(hide_year2) /這里的 if,else 語句都是判斷位閃爍,2 就不顯示,輸出字符串為 2007/07/22 Time-DateString0 = 2; Time-DateString1 = 0; Time-DateString2 = Time-Year/10 + 0; Time-DateString3 = Time-Year%10 + 0; else Time-DateString0 = ; Time-DateString1 = ; Time-DateString2 = ; Time-DateString3 = ;Time-Dat

51、eString4 = /;if(hide_monthDateString5 = Time-Month/10 + 0; Time-DateString6 = Time-Month%10 + 0; else Time-DateString5 = ; Time-DateString6 = ; Time-DateString7 = /;if(hide_dayDateString8 = Time-Day/10 + 0; Time-DateString9 = Time-Day%10 + 0; else Time-DateString8 = ; Time-DateString9 = ; if(hide_we

52、ekWeek%10 + 0; /星期的數(shù)據(jù)另外放到 week_value數(shù)組里,跟年,月,日的分開存放,因為等一下要在最后顯示 else week_value0 = ; week_value1 = 0;Time-DateString10 = 0; /字符串末尾加 0 ,判斷結(jié)束字符void TimeToStr(SYSTEMTIME *Time) /將時,分,秒數(shù)據(jù)轉(zhuǎn)換成液晶顯示字符 if(hide_hourTimeString0 = Time-Hour/10 + 0; Time-TimeString1 = Time-Hour%10 + 0; else Time-TimeString0 = ;

53、Time-TimeString1 = ;Time-TimeString2 = :; if(hide_minTimeString3 = Time-Minute/10 + 0; Time-TimeString4 = Time-Minute%10 + 0; else Time-TimeString3 = ; Time-TimeString4 = ; Time-TimeString5 = :; if(hide_secTimeString6 = Time-Second/10 + 0; Time-TimeString7 = Time-Second%10 + 0; else Time-TimeString6

54、 = ; Time-TimeString7 = ; Time-DateString8 = 0;void Initial_DS1302(void) /時鐘芯片初始化 unsigned char Second=Read1302(DS1302_SECOND);if(Second&0 x80) /判斷時鐘芯片是否關(guān)閉 Write1302(0 x8e,0 x00); /寫入允許Write1302(0 x8c,0 x07);/寫入初始化值 07/07/25.星期:3.時間: 23:59:55Write1302(0 x88,0 x07);Write1302(0 x86,0 x25);Write130

55、2(0 x8a,0 x07);Write1302(0 x84,0 x23);Write1302(0 x82,0 x59);Write1302(0 x80,0 x55);Write1302(0 x8e,0 x80); /禁止寫入/*ds18b20 子程序*/*ds18b20 延遲子函數(shù)晶振12MHz */ void delay_18B20(unsigned int i)while(i-);/*ds18b20 初始化函數(shù)*/void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ 復(fù)位 delay_18B20(8); /稍做延時 DQ = 0;

56、/單片機(jī)將 DQ拉低 delay_18B20(80); /精確延時 大于 480us DQ = 1; /拉高總線 delay_18B20(14); x=DQ; /稍做延時后 如果 x=0 那么初始化成功 x=1 那么初始化失敗 delay_18B20(20);/*ds18b20 讀一個字節(jié)*/ unsigned char ReadOneChar(void)uchar i=0;uchar dat = 0;for (i=8;i0;i-) DQ = 0; / 給脈沖信號 dat=1; DQ = 1; / 給脈沖信號 if(DQ) dat|=0 x80; delay_18B20(4); return(

57、dat);/*ds18b20 寫一個字節(jié)*/ void WriteOneChar(uchar dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0 x01; delay_18B20(5); DQ = 1; dat=1; /*讀取 ds18b20 當(dāng)前溫度*/void ReadTemp(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0 xCC); / 跳過讀序號列號的操作WriteOneChar

58、(0 x44); / 啟動溫度轉(zhuǎn)換delay_18B20(100); / this message is wery importantInit_DS18B20();WriteOneChar(0 xCC); /跳過讀序號列號的操作WriteOneChar(0 xBE); /讀取溫度存放器兩個就是溫度delay_18B20(100);a=ReadOneChar(); /讀取溫度值低位b=ReadOneChar(); /讀取溫度值高位temp_value=b4; void temp_to_str() /溫度數(shù)據(jù)轉(zhuǎn)換成液晶字符顯示 TempBuffer0=temp_value/10+0; /十位 Te

59、mpBuffer1=temp_value%10+0; /個位 TempBuffer2=0 xdf; /溫度符號 TempBuffer3=C; TempBuffer4=0;void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;icount;i+)for(j=0;j0;delay-) for(i=0;i0 x59) /超過 59 秒,清零 temp=0; break; case 2: temp=Read1302(DS1302_MINUTE);/讀取分?jǐn)?shù) temp=temp+1; /分?jǐn)?shù)加 1 up_flag=1; if(temp0 x5

60、9) /超過 59 分,清零 temp=0; break; case 3: temp=Read1302(DS1302_HOUR);/讀取小時數(shù) temp=temp+1; /小時數(shù)加 1 up_flag=1; if(temp0 x23) /超過 23 小時,清零 temp=0; break; case 4: temp=Read1302(DS1302_WEEK);/讀取星期數(shù) temp=temp+1; /星期數(shù)加 1 up_flag=1; if(temp0 x7) temp=1; break; case 5: temp=Read1302(DS1302_DAY); /讀取日數(shù) temp=temp+1; /日數(shù)加 1 up_flag=1; if(temp0 x31) temp=1; break; case 6:

溫馨提示

  • 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

提交評論