溫度采集LCD12864顯示_第1頁(yè)
溫度采集LCD12864顯示_第2頁(yè)
溫度采集LCD12864顯示_第3頁(yè)
溫度采集LCD12864顯示_第4頁(yè)
溫度采集LCD12864顯示_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 基于單片機(jī)STC89C51的溫度顯示系統(tǒng)的設(shè)計(jì)引言隨著電子技術(shù),特別是隨大規(guī)模集成電路的產(chǎn)生而出現(xiàn)的微型計(jì)算機(jī)技術(shù)的飛速發(fā)展,人類(lèi)生活發(fā)生了根本性的改變。如果說(shuō)微型計(jì)算機(jī)的出現(xiàn)使現(xiàn)代科學(xué)研究得到了質(zhì)的飛躍,那么可以毫不夸張地說(shuō),單片機(jī)技術(shù)的出現(xiàn)則是給現(xiàn)代工業(yè)測(cè)控領(lǐng)域帶來(lái)了一次新的技術(shù)革命。目前,單片機(jī)以其體積小、重量輕、抗干擾能力強(qiáng)、對(duì)環(huán)境要求不高、高可靠性、高性能價(jià)格比、開(kāi)發(fā)較為容易,在工業(yè)控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、智能化儀器儀表、辦公自動(dòng)化等諸多領(lǐng)域得到極為廣泛的應(yīng)用,并已走人家庭,從洗衣機(jī)、微波爐到音響、汽車(chē),到處都可見(jiàn)到單片機(jī)的蹤影。因此,單片機(jī)技術(shù)開(kāi)發(fā)和應(yīng)用水平已逐步成為一個(gè)國(guó)家工業(yè)

2、發(fā)展水平的標(biāo)志之一。本課題研究的內(nèi)容就是以單片機(jī)為主要控制元件,通過(guò)溫度傳感器DS18B20實(shí)現(xiàn)對(duì)溫度的測(cè)量,并通過(guò)LCD12864直接顯示所測(cè)溫度。1、設(shè)計(jì)任務(wù) 用溫度傳感器DS18b20檢測(cè)空氣中的溫度,STC89C51采集DS18B20的數(shù)據(jù)并通過(guò)LCD12864顯示實(shí)時(shí)溫度。2、系統(tǒng)硬件設(shè)計(jì)2.1 系統(tǒng)方框圖見(jiàn)圖2-1.圖3-1 系統(tǒng)方框圖2.2 各模塊方案的選擇2.2.1 溫度檢測(cè)方案選擇方案一:采用熱電偶或熱敏電阻作感溫元件,但熱電偶需冷端補(bǔ)償,電路設(shè)計(jì)復(fù)雜,熱敏電阻雖然精度較高,但需要標(biāo)準(zhǔn)穩(wěn)定電阻匹配才能使用,而且重復(fù)性、可靠性都比較差。 方案二:采用集成溫度傳感器 DS18B2

3、0 。該傳感器結(jié)構(gòu)簡(jiǎn)單,不需外接電路,數(shù)據(jù)傳輸采用 one-wire??偩€,可用一根 I/O數(shù)據(jù)線即供電又傳輸數(shù)據(jù),在-10 -+85范圍內(nèi)精度為±0.5,分辨率較高,重復(fù)性和可靠性好。故采用方案二。2.2.2 顯示模塊方案的選擇方案一:采用數(shù)碼管顯示。數(shù)碼管亮度高、體積小、重量輕,但其顯示信息簡(jiǎn)單、有限,在本題目中應(yīng)用受到很大的限制。 方案二:采用液晶顯示。液晶顯示功耗低,輕便防震。采用液晶顯示界面友好清晰,操作方便,顯示信息豐富。故采用方案二2.3 單片機(jī)控制系統(tǒng)單片機(jī)作為整個(gè)硬件系統(tǒng)的核心,它既是協(xié)調(diào)整機(jī)工作的控制器,又是數(shù)據(jù)處理器。它由單片機(jī)、時(shí)鐘電路、復(fù)位電路等組成。為了簡(jiǎn)

4、化電路、降低成本、提高可靠性,本系統(tǒng)采用STC89C51作為主控制器,它是一款與MCS51完全兼容且內(nèi)部自帶有4KB的Flash存儲(chǔ)器及256KB RAM單元的芯片,因此可以不需另外擴(kuò)展EEPROM及靜態(tài)RAM就可以實(shí)現(xiàn)所需功能。單片機(jī)最小系統(tǒng)是軟硬件系統(tǒng)連接的橋梁。它包括: 單片機(jī)89C51,LCD12864液晶模塊 ,DS18B20溫度采集模塊。單片機(jī)的時(shí)鐘信號(hào)用來(lái)提供單片機(jī)片內(nèi)各種微操作的時(shí)間基準(zhǔn),時(shí)鐘信號(hào)通常用兩種電路形式得到:內(nèi)部振蕩和外部振蕩。MCS-51單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反向放大器,引腳XTALl和XTAL2分別是此放大電器的輸入端和輸出端,由于采用內(nèi)部方式時(shí)

5、,電路簡(jiǎn)單,所得的時(shí)鐘信號(hào)比較穩(wěn)定,實(shí)際使用中常采用這種方式,如圖所示在其外接晶體振蕩器(簡(jiǎn)稱(chēng)晶振)或陶瓷諧振器就構(gòu)成了內(nèi)部振蕩方式,片內(nèi)高增益反向放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起可構(gòu)成一個(gè)自激振蕩器并產(chǎn)生振蕩時(shí)鐘脈沖。下圖中外接晶體以及電容C2和C1構(gòu)成并聯(lián)諧振電路,它們起穩(wěn)定振蕩頻率、快速起振的作用,其值均為30P左右,晶振頻率選6MHz。為了初始化單片機(jī)內(nèi)部的某些特殊功能寄存器,必須采用復(fù)位的方式,復(fù)位后可使CPU及系統(tǒng)各部件處于確定的初始狀態(tài),并從初始狀態(tài)開(kāi)始正常工作。單片機(jī)的復(fù)位是靠外電路來(lái)實(shí)現(xiàn)的,在正常運(yùn)行情況下,只要RST引腳上出現(xiàn)兩個(gè)機(jī)器周期時(shí)間以上的高電平,

6、即可引起系統(tǒng)復(fù)位,但如果RST引腳上持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài)。復(fù)位操作有兩種情況,即上電復(fù)位和手動(dòng)(開(kāi)關(guān))復(fù)位。本系統(tǒng)采用上電復(fù)位方式。圖2-2中R9和Cl組成上電復(fù)位電路,其值R取為1K, C取為22F.圖3-2 單片機(jī)最小系統(tǒng)2.4 溫度檢測(cè)模塊由DALLAS半導(dǎo)體公司生產(chǎn)的DS18B20型單線智能溫度傳感器,屬于新一代適配微處理器的智能溫度傳感器,可廣泛用于工業(yè)、民用、軍事等領(lǐng)域的溫度測(cè)量及控制儀器、測(cè)控系統(tǒng)和大型設(shè)備中。它具有體積小,接口方便,傳輸距離遠(yuǎn)等特點(diǎn)。 DS18B20性能特點(diǎn) 2.4.1 DS18B20的性能特點(diǎn):采用單總線專(zhuān)用技術(shù),既可通過(guò)串行口線,也可通過(guò)其

7、它I/O口線與微機(jī)接口,無(wú)須經(jīng)過(guò)其它變換電路,直接輸出被測(cè)溫度值(9位二進(jìn)制數(shù),含符號(hào)位)。測(cè)溫范圍為-55-+125,測(cè)量分辨率為0.0625。內(nèi)含64位經(jīng)過(guò)激光修正的只讀存儲(chǔ)器ROM。適配各種單片機(jī)或系統(tǒng)機(jī)。用戶(hù)可分別設(shè)定各路溫度的上、下限。內(nèi)含寄生電源。 2.4.2 DS18B20內(nèi)部結(jié)構(gòu) DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM,溫度傳感器,非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL,高速暫存器。64位光刻ROM是出廠前被光刻好的,它可以看作是該DS18B20的地址序列號(hào)。64位ROM結(jié)構(gòu)圖如圖2所示。不同的器件地址序列號(hào)不同。 DS18B20的管腳排列如圖5-1所示。

8、圖3-4-2 DS18B20引腳分布圖2.4.3 DS18B20高速暫存器DS18B20高速暫存器共9個(gè)存儲(chǔ)單元,如表所示:序號(hào) 寄存器名稱(chēng) 作    用 序號(hào) 寄存器名稱(chēng) 0 溫度低字節(jié) 以16位補(bǔ)碼形式存放 4 配置寄存器 1 溫度高字節(jié) 5、6、7 保留 2 TH/用戶(hù)字節(jié)1 存放溫度上限 8 CRC 3 HL/用戶(hù)字節(jié)2 存放溫度下限 表3-4-3 DS18B20高速暫存器 以12位轉(zhuǎn)化為例說(shuō)明溫度高低字節(jié)存放形式及計(jì)算:12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)高低兩個(gè)8位的RAM中,二進(jìn)制中的前面5位是符號(hào)位。如果測(cè)得的溫度大于0,這5位為0

9、,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625才能得到實(shí)際溫度。 高8位 S S S S S 26 25 24 低8位 23 22 21 20 2-1 2-2 2-3 2-4 2.4.4 DS18B20控制方法 DS18B20有六條控制命令,如表所示: 指    令 約定代碼 操      作    說(shuō)      明 溫度轉(zhuǎn)換 44H 啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)

10、換 讀暫存器 BEH 讀暫存器9個(gè)字節(jié)內(nèi)容 寫(xiě)暫存器 4EH 將數(shù)據(jù)寫(xiě)入暫存器的TH、TL字節(jié) 復(fù)制暫存器 48H 把暫存器的TH、TL字節(jié)寫(xiě)到E2RAM中 重新調(diào)E2RAM B8H 把E2RAM中的TH、TL字節(jié)寫(xiě)到暫存器TH、TL字節(jié) 讀電源供電方式 B4H 啟動(dòng)DS18B20發(fā)送電源供電方式的信號(hào)給主CPU 表3-4-4 DS18B20控制命令2.4.5 DS18B20的通信協(xié)議DS18B20器件要求采用嚴(yán)格的通信協(xié)議,以保證數(shù)據(jù)的完整性。該協(xié)議定義了幾種信號(hào)類(lèi)型:復(fù)位脈沖,應(yīng)答脈沖時(shí)隙;寫(xiě)0,寫(xiě)1時(shí)隙;讀0,讀1時(shí)隙。與DS18B20的通信,是通過(guò)操作時(shí)隙完成單總線上的數(shù)據(jù)傳輸。發(fā)送所

11、有的命令和數(shù)據(jù)時(shí),都是字節(jié)的低位在前,高位在后。 復(fù)位和應(yīng)答脈沖時(shí)隙每個(gè)通信周期起始于微控制器發(fā)出的復(fù)位脈沖,其后緊跟DS18B20發(fā)出的應(yīng)答脈沖,在寫(xiě)時(shí)隙期間,主機(jī)向DS18B20器件寫(xiě)入數(shù)據(jù),而在讀時(shí)隙期間,主機(jī)讀入來(lái)自DS18B20的數(shù)據(jù)。在每一個(gè)時(shí)隙,總線只能傳輸一位數(shù)據(jù)。時(shí)序圖見(jiàn)圖圖3-4-5-1 DS18B20復(fù)位時(shí)序圖 寫(xiě)時(shí)隙當(dāng)主機(jī)將單總線DQ從邏輯高拉到邏輯低時(shí),即啟動(dòng)一個(gè)寫(xiě)時(shí)隙,所有的寫(xiě)時(shí)隙必須在60120us完成,且在每個(gè)循環(huán)之間至少需要1us的恢復(fù)時(shí)間。寫(xiě)0和寫(xiě)1時(shí)隙如圖所示。在寫(xiě)0時(shí)隙期間,微控制器在整個(gè)時(shí)隙中將總線拉低;而寫(xiě)1時(shí)隙期間,微控制器將總線拉低,然后在時(shí)隙起

12、始后15us之釋放總線。3-4-5-2 DS18B20寫(xiě)時(shí)序圖 讀時(shí)隙8B20器件僅在主機(jī)發(fā)出讀時(shí)隙時(shí),才向主機(jī)傳輸數(shù)據(jù)。所以在主機(jī)發(fā)出讀數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時(shí)隙,以便DS18B20能夠傳輸數(shù)據(jù)。所有的讀時(shí)隙至少需要60us,且在兩次獨(dú)立的讀時(shí)隙之間,至少需要1us的恢復(fù)時(shí)間。每個(gè)讀時(shí)隙都由主機(jī)發(fā)起,至少拉低總線1us。在主機(jī)發(fā)起讀時(shí)隙之后,DS18B20器件才開(kāi)始在總線上發(fā)送0或1,若DS18B20發(fā)送1,則保持總線為高電平。若發(fā)送為0,則拉低總線當(dāng)發(fā)送0時(shí),DS18B20在該時(shí)隙結(jié)束后,釋放總線,由上拉電阻將總線拉回至高電平狀態(tài)。DS18B20發(fā)出的數(shù)據(jù),在起始時(shí)隙之后保持有效時(shí)間為

13、15us。因而主機(jī)在讀時(shí)隙期間,必須釋放總線。并且在時(shí)隙起始后的15us之內(nèi)采樣總線的狀態(tài)。 3-4-5-3 DS18B20寫(xiě)讀序圖2.4.6 DS18B20的電路采用集成溫度傳感器 DS18B20 。該傳感器結(jié)構(gòu)簡(jiǎn)單,不需外接電路,數(shù)據(jù)傳輸采用 one-wire。總線,可用一根 I/O數(shù)據(jù)線即供電又傳輸數(shù)據(jù),在-10 -+85范圍內(nèi)精度為±0.5,分辨率較高,重復(fù)性和可靠性好。圖3-3 DS18B20電路DS18B20為單總線器件,數(shù)據(jù)和命令在一根線上傳輸,先向溫度傳感器寫(xiě)入轉(zhuǎn)換命令,延長(zhǎng)一段時(shí)間,再發(fā)送讀命令,將溫度值讀回單片機(jī),單片機(jī)進(jìn)行數(shù)據(jù)處理,送顯示。轉(zhuǎn)換關(guān)系為:T=tem

14、perature*6.25T為單片機(jī)要顯示的溫度,temperature為從DS18B20讀回的數(shù)字量。圖中TEM接單片機(jī)P06口2.5 液晶顯示模塊LCD12864是一款具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國(guó)標(biāo)一級(jí)、二級(jí)簡(jiǎn)體中文字庫(kù)的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為128×64, 內(nèi)置8192個(gè)16*16點(diǎn)漢字,和128個(gè)16*8點(diǎn)ASCII字符集.利用該模塊靈活的接口方式和簡(jiǎn)單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面??梢燥@示8×4行16×16點(diǎn)陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著特點(diǎn)。由該模塊構(gòu)成的液晶顯示方案

15、與同類(lèi)型的圖形點(diǎn)陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡(jiǎn)潔得多,且該模塊的價(jià)格也略低于相同點(diǎn)陣的圖形液晶模塊。2.5.1 模塊接口說(shuō)明管腳號(hào)名稱(chēng)LEVEL功能1VSS0V電源地2VDD+5V電源正(3.0V-5.5V)3VO-對(duì)比度(亮度)調(diào)整4CSH/L模組片選端,高電平有效5SIDH/L串行數(shù)據(jù)輸入端6CLKH/L串行同步時(shí)鐘:上升沿時(shí)讀取SID數(shù)據(jù)15PSBLL:端口方式17/RESETH/L復(fù)位端19AVDD背光源電壓+5V20KVSS背光源負(fù)端0V圖2.5.1 液晶模塊借口說(shuō)明2.5.2 并行接口說(shuō)明圖2.5.2 液晶并行借口說(shuō)明2.5.2 控制器接口信號(hào)說(shuō)明 RS,R/

16、W的配合選擇決定控制界面的四種模式 表2.5.2 控制界面模式BF忙標(biāo)志位字形產(chǎn)生ROM顯示數(shù)據(jù)RAM字形產(chǎn)生RAM地址計(jì)數(shù)器AC2.5.3 指令說(shuō)明2.5.3 液晶指令說(shuō)明2.5.4 讀寫(xiě)時(shí)序圖數(shù)據(jù)傳輸過(guò)程時(shí)序圖串口讀寫(xiě)時(shí)序2.5.5 液晶電路圖D0D7接單片機(jī)P2口,RES接高電平,RS、RW、LCD-E分別接P03,P04,P05口。圖2.5.5 液晶電路接口3、系統(tǒng)軟件設(shè)計(jì)3.1 C51語(yǔ)言的優(yōu)缺點(diǎn)現(xiàn)在有四種語(yǔ)言支持8051系列單片機(jī)編程,即匯編、PL/M,C和BASIC,在開(kāi)發(fā)中最常用的是匯編語(yǔ)言,但隨著程序復(fù)雜程度的提高,匯編語(yǔ)言逐漸暴露了它的不足,BASIC適合于初學(xué)者或要求編程

17、簡(jiǎn)單而對(duì)編程效率和運(yùn)行速度不高的場(chǎng)合。PL/hi對(duì)8051系列單片機(jī)來(lái)講,不支持復(fù)雜的算術(shù)運(yùn)算和浮點(diǎn)變量,無(wú)豐富的庫(kù)函數(shù)支持。C語(yǔ)言是一種源于編寫(xiě)UNIX 操作系統(tǒng)的語(yǔ)言,是一種結(jié)構(gòu)化語(yǔ)言,可產(chǎn)生緊湊代碼。為了更好地實(shí)現(xiàn)對(duì)單片機(jī)的開(kāi)發(fā),C51 應(yīng)運(yùn)而生。每個(gè)不同公司開(kāi)發(fā)的C51 不盡相同,本系統(tǒng)采用的是Keil Elektronik Gmbh 開(kāi)發(fā)的KeiluVision 3 工具軟件來(lái)進(jìn)行系統(tǒng)軟件編寫(xiě)和調(diào)試的。在嵌入式系統(tǒng)中,相對(duì)于匯編語(yǔ)言,C 語(yǔ)言作為一種高級(jí)語(yǔ)言主要存在兩個(gè)不足:一,生成的可執(zhí)行代碼冗長(zhǎng),效率不高。對(duì)于這一點(diǎn),隨著處理芯片運(yùn)算速度的提高、集成ROM 的擴(kuò)大,特別編譯系統(tǒng)的

18、不斷優(yōu)化,冗長(zhǎng)已經(jīng)不再是問(wèn)題。這也是C 在嵌入式系統(tǒng)中逐漸成為主流編程語(yǔ)言的主要原因之一。二,C 生成的可執(zhí)行代碼在時(shí)序上不容易控制,比如本系統(tǒng)中要實(shí)現(xiàn)的時(shí)序控制。一般的解決方案是在C 程序中嵌入?yún)R編語(yǔ)句,但其實(shí)只要充分挖掘C 的潛力,在時(shí)序要求嚴(yán)格的場(chǎng)合完全可以用C 語(yǔ)言實(shí)現(xiàn)。具體方法就是閱讀開(kāi)發(fā)環(huán)境給我們提供的反匯編代碼。反匯編代碼一目了然的反映了微控器的運(yùn)行時(shí)序,然后根據(jù)反匯編代碼修改C 源程序。3.2 程序設(shè)計(jì)3.2.1 程序流程圖3.2.2 液晶顯示流程圖程圖3.2.3 溫度傳感器流程圖程圖4、仿真與調(diào)試首先調(diào)試液晶程序。單片機(jī)STC89C51的P2口接液晶數(shù)據(jù)口,根據(jù)液晶手冊(cè),將R

19、S1和RE借口接高電平;RS、R/W、EN接口接單片機(jī)P03,P04,P05口,單獨(dú)調(diào)試液晶程序,將hex文件下載到單片機(jī),看看是否在液晶第一排是否顯示“溫度”,在第三排是否顯示“液晶溫度顯示”然后根據(jù)DS18B20的手冊(cè)書(shū)寫(xiě)程序,將液晶程序設(shè)為頭文件,若DS18B20程序無(wú)誤,則在液晶的第一排首位開(kāi)始會(huì)顯示“溫度”,第二排的第三個(gè)字符開(kāi)始會(huì)顯示溫度值XX,第三排不顯示,第四排首位開(kāi)始顯示“液晶溫度顯示”。如果程序有誤,則再看看芯片資料和程序的書(shū)寫(xiě)是否有出入,如有錯(cuò)誤則再更正,直至顯示正確為止。5、結(jié)論 根據(jù)題目要求,我們完成了液晶溫度顯示系統(tǒng)的設(shè)計(jì),分別寫(xiě)出了液晶12864的程序和DS18B

20、20的程序,完成了溫度檢測(cè)模塊、液晶顯示模塊的設(shè)計(jì),達(dá)到了題目的功能要求。在這個(gè)過(guò)程中,我們對(duì)LCD12864和DS18B20的芯片資料做了分析和了解,特別是液晶模塊,它的顯示量大且接口簡(jiǎn)單,占用單片機(jī)I/O口少,如果單片機(jī)的對(duì)外借口欠缺是,我們還可以在電路中使用74HC595,這樣單片機(jī)輸出數(shù)據(jù)端口可以重8位縮減到3位,大大縮小了單片機(jī)I/O口得使用。6、收獲與體會(huì)在本設(shè)計(jì)中,我們重點(diǎn)放在了液晶顯示應(yīng)用上,將液晶模塊從程序中單獨(dú)制成頭文件,對(duì)液晶的命令字和顯示做了分析,做到了可以在液晶的指定位置顯示數(shù)據(jù)。另外,本設(shè)計(jì)中我們也對(duì)我們的單片機(jī)軟件和硬件知識(shí)做了一個(gè)整體的復(fù)習(xí)。因?yàn)椋刖帉?xiě)出一個(gè)

21、系統(tǒng)的程序,就必須十分清楚硬件電路中所用芯片的工作原理以及使用它們的一些注意事項(xiàng)。在完成任務(wù)的過(guò)程中,我們先后應(yīng)用keil 3 對(duì)程序進(jìn)行編譯和修改,是開(kāi)發(fā)板上實(shí)驗(yàn),用ALtium designer 繪制電路圖和PCB圖,因而,本次實(shí)訓(xùn)中,我收獲很多,明白了看似簡(jiǎn)單的問(wèn)題也要對(duì)其進(jìn)行深入分析,特別是芯片的官方資料的理解,才能真正的掌握和運(yùn)通它。由于時(shí)間和本身知識(shí)水平的發(fā)揮,我們認(rèn)為本系統(tǒng)還有需要改進(jìn)和提高的地方,例如液晶可以顯示圖形,系統(tǒng)中可以設(shè)計(jì)報(bào)警器等。這讓我明白:在以后的學(xué)習(xí)工作中,不僅要有刻苦努力,還要有鉆研精神。附錄1、整體電路圖2、主函數(shù)#include<reg52.h>

22、;#include"yejing.h"#define uchar unsigned char#define uint unsigned int#include <intrins.h>sbit DQ = P32; /數(shù)據(jù)口define interfaceuint temp; /溫度值 variable of temperaturevoid delay2(unsigned char i) /延時(shí)函數(shù)while(-i); void Init_Ds18b20(void) /DS18B20初始化send reset and initialization commandDQ

23、 = 1; /DQ復(fù)位,不要也可行。delay2(1); /稍做延時(shí)DQ = 0; /單片機(jī)拉低總線delay2(250); /精確延時(shí),維持至少480usDQ = 1; /釋放總線,即拉高了總線delay2(100); /此處延時(shí)有足夠,確保能讓DS18B20發(fā)出存在脈沖。uchar Read_One_Byte() /讀取一個(gè)字節(jié)的數(shù)據(jù)read a byte date /讀數(shù)據(jù)時(shí),數(shù)據(jù)以字節(jié)的最低有效位先從總線移出uchar i = 0;uchar dat = 0;for(i=8;i>0;i-) DQ = 0; /將總線拉低,要在1us之后釋放總線 /單片機(jī)要在此下降沿后的15us內(nèi)讀

24、數(shù)據(jù)才會(huì)有效。 _nop_(); /至少維持了1us,表示讀時(shí)序開(kāi)始 dat >>= 1; /讓從總線上讀到的位數(shù)據(jù),依次從高位移動(dòng)到低位。 DQ = 1; /釋放總線,此后DS18B20會(huì)控制總線,把數(shù)據(jù)傳輸?shù)娇偩€上 delay2(1); /延時(shí)7us,此處參照推薦的讀時(shí)序圖,盡量把控制器采樣時(shí)間放到讀時(shí)序后的15us內(nèi)的最后部分 if(DQ) /控制器進(jìn)行采樣 dat |= 0x80; /總線為1, DQ為1,那就把dat的最高位置1;若為0,不處理,保持0 delay2(10); /此延時(shí)不能少,確保讀時(shí)序的長(zhǎng)度60us。return (dat);void Write_One

25、_Byte(uchar dat)uchar i = 0;for(i=8;i>0;i-) DQ = 0; /拉低總線 _nop_(); /至少維持了1us,表示寫(xiě)時(shí)序(包括寫(xiě)0時(shí)序或?qū)?時(shí)序)開(kāi)始 DQ = dat&0x01; /從字節(jié)的最低位開(kāi)始傳輸 /指令dat的最低位賦予給總線,必須在拉低總線后的15us內(nèi), /因?yàn)?5us后DS18B20會(huì)對(duì)總線采樣。 delay2(10); /必須讓寫(xiě)時(shí)序持續(xù)至少60us DQ = 1; /寫(xiě)完后,必須釋放總線, dat >>= 1; delay2(1);uint Get_Tmp() /獲取溫度get the temperat

26、urefloat tt;uchar a,b;Init_Ds18b20(); /初始化Write_One_Byte(0xcc); /忽略ROM指令Write_One_Byte(0x44); /溫度轉(zhuǎn)換指令I(lǐng)nit_Ds18b20(); /初始化Write_One_Byte(0xcc); /忽略ROM指令Write_One_Byte(0xbe); /讀暫存器指令a = Read_One_Byte(); /讀取到的第一個(gè)字節(jié)為溫度LSBb = Read_One_Byte(); /讀取到的第一個(gè)字節(jié)為溫度MSBtemp = b; /先把高八位有效數(shù)據(jù)賦于temptemp <<= 8; /把

27、以上8位數(shù)據(jù)從temp低八位移到高八位temp = temp|a; /兩字節(jié)合成一個(gè)整型變量tt = temp*0.0625; /得到真實(shí)十進(jìn)制溫度值,DS18B20可以精確到0.0625度 /所以讀回?cái)?shù)據(jù)的最低位代表的是0.0625度temp =(uint)( tt*10+0.5); /放大十倍,目的是將小數(shù)點(diǎn)后第一位也轉(zhuǎn)換為可顯示數(shù)字 return temp;void main()P0=0;delay(50);init();delay(10);show();while(1)display(Get_Tmp(); 液晶頭文件#ifndef _yejing_H_#define _yejing_H

28、_#define uchar unsigned char#define uint unsigned intuchar CMDAddress;sbit RS=P25;sbit RW=P21;sbit EN=P22;void delay(uchar t) /延時(shí)函數(shù) uint x,y;for(x=t;x>0;x-)for(y=110;y>0;y-);bit busy() /判忙標(biāo)志位bit flag;RS=0;RW=1;EN=1;flag=(bit)(P0&0x80);EN=0;return flag; void write_cmd(uchar cmd) /寫(xiě)命令字while(busy();RW=0;RS=0;delay(5);P0=cmd;EN=1;delay(5);EN=0;delay(5);void write_date(uchar dat) /寫(xiě)數(shù)據(jù)while(busy();RW=0;RS=1;delay(5);P0=dat;EN=1;delay(5);EN=0;delay(5);void init() /初

溫馨提示

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

評(píng)論

0/150

提交評(píng)論