




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程設(shè)計(jì)報(bào)告書課程名稱:專業(yè)綜合課程設(shè)計(jì)題目:基于單總線的溫度實(shí)時(shí)監(jiān)控系統(tǒng)系〔院〕:電子工程學(xué)院學(xué)期:11-12-1專業(yè)班級(jí):電子姓名:學(xué)號(hào):評(píng)語:成績(jī):簽名:日期:選題意義隨著社會(huì)的開展,科技的進(jìn)步,電子技術(shù)和微型計(jì)算機(jī)的迅速開展,以及測(cè)溫儀器在各個(gè)領(lǐng)域的應(yīng)用,智能化已是現(xiàn)代溫度監(jiān)控系統(tǒng)開展的主流方向。單片機(jī)在電子產(chǎn)品中的應(yīng)用已經(jīng)越來越廣泛。利用單片機(jī)對(duì)溫度進(jìn)行控制的技術(shù)也隨之而生,并日益開展和完善,且越來越顯示出它的優(yōu)越性。單總線技術(shù)是美國Dallas半導(dǎo)體公司近年推出的新技術(shù)。它將地址線、數(shù)據(jù)線、控制線合為1根信號(hào)線,允許在這根信號(hào)線上掛接數(shù)百個(gè)單總線器件芯片。溫度是一個(gè)重要的物理量,它反映了物體冷熱的程度,與自然界中的各種物理和化學(xué)過程相聯(lián)系。在工、農(nóng)業(yè)生產(chǎn)和日常生活中,各個(gè)環(huán)節(jié)都與溫度緊密相聯(lián),溫度的準(zhǔn)確監(jiān)測(cè)及控制占據(jù)著極其重要地位。比方,發(fā)電廠鍋爐的溫度必須控制在一定的范圍之內(nèi);許多化學(xué)反響的工藝過程必須在適當(dāng)?shù)臏囟认虏拍苷_M(jìn)行等。沒有適宜的溫度環(huán)境,許多電子設(shè)備就不能正常工作,糧倉的儲(chǔ)糧就會(huì)變質(zhì)霉?fàn)€,酒類的品質(zhì)就沒有保障??梢?,溫度的監(jiān)控是非常重要的。單總線技術(shù)是美國Dallas半導(dǎo)體公司近年推出的新技術(shù)。它將地址線、數(shù)據(jù)線、控制線合為1根信號(hào)線,允許在這根信號(hào)線上掛接數(shù)百個(gè)單總線器件芯片。單總線技術(shù)應(yīng)用于某些低速〔約100kbps以下的速率〕測(cè)控系統(tǒng)中,可以大大簡(jiǎn)化線路結(jié)構(gòu)和減少硬件開銷,可以通過PC機(jī)串行口、并行口、USB總線或單片機(jī)直接進(jìn)行測(cè)控,PC機(jī)的軟件開發(fā)也直觀、容易。本設(shè)計(jì)為基于單總線的溫度實(shí)時(shí)監(jiān)控系統(tǒng)。設(shè)計(jì)目的、要求及步驟概述2.1設(shè)計(jì)目的〔1〕對(duì)單總線設(shè)備的結(jié)構(gòu)特點(diǎn)和以單總線技術(shù)構(gòu)建起來的微型局域網(wǎng)的拓樸結(jié)構(gòu)、網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化以及設(shè)備與單總線的連接進(jìn)行闡述和研究?!?〕設(shè)計(jì)基于單總線的溫度采集電路,單總線和PC機(jī)串行口的接口電路,在電路設(shè)計(jì)時(shí)重點(diǎn)考慮單總線設(shè)備的供電問題和數(shù)據(jù)的可靠采集?!?〕用自己熟悉的計(jì)算機(jī)語言編寫溫度實(shí)時(shí)監(jiān)控系統(tǒng)軟件,軟件的界面要友好、簡(jiǎn)明、直觀。在軟件編寫時(shí)重點(diǎn)考慮溫度采集數(shù)據(jù)存儲(chǔ)、單總線設(shè)備中的CRC循環(huán)冗余碼的實(shí)現(xiàn)方法、從設(shè)備的“即時(shí)插即用〞的算法研究。2.2設(shè)計(jì)內(nèi)容及要求溫度測(cè)量范圍-50℃~+100℃。測(cè)溫分辨率不低于0.0625℃。數(shù)據(jù)傳輸距離不低于60米。溫度測(cè)量點(diǎn)不少于3。溫度采集間隔不底于10分鐘。能顯示一天實(shí)時(shí)溫度變化曲線。2.3設(shè)計(jì)步驟概述實(shí)習(xí)制作大概步驟如圖1準(zhǔn)備好要用的器件準(zhǔn)備好要用的器件進(jìn)行焊接設(shè)計(jì)電路Delphi程序設(shè)計(jì)檢測(cè)完善電路完整調(diào)試完善研究課題的要求程序檢測(cè)完善圖1電路的設(shè)計(jì)3.1硬件電路設(shè)計(jì)在硬件電路設(shè)計(jì)時(shí),應(yīng)著重考慮電子器件的供電方式,以及對(duì)器件的限壓和限流保護(hù)。因?yàn)楸敬卧O(shè)計(jì)要求利用單總線技術(shù),所以可以考慮使用寄生供電方式。設(shè)計(jì)的電路圖如下。圖2基于單總線的溫度實(shí)時(shí)監(jiān)控系統(tǒng)硬件電路總圖圖3基于單總線的溫度實(shí)時(shí)監(jiān)控系統(tǒng)硬件電路原理圖3.2軟件設(shè)計(jì)設(shè)計(jì)窗體本次設(shè)計(jì)要求軟件的可視化窗體中包含實(shí)時(shí)溫度顯示、數(shù)據(jù)記錄、存儲(chǔ)管理和ROM數(shù)據(jù),并且能將測(cè)得的數(shù)據(jù)保存到指定的數(shù)據(jù)庫中。窗體界面如下。圖4窗體界面實(shí)時(shí)溫度顯示中可以看到當(dāng)前室溫,并且可以顯示攝氏溫度和華氏溫度。數(shù)據(jù)記錄包含溫度曲線和溫度日志,可以顯示一天內(nèi)的溫度變化曲線。存儲(chǔ)管理和ROM數(shù)據(jù)用來對(duì)數(shù)據(jù)庫中已經(jīng)保存的溫度數(shù)據(jù)進(jìn)行管理,如刪除、轉(zhuǎn)移等操作。軟件編程本系統(tǒng)軟件局部采用Delphi來實(shí)現(xiàn)初始化、數(shù)據(jù)采集處理、溫度報(bào)表管理,其主程序的流程圖見圖5。圖5主程序流程圖本系統(tǒng)軟件局部共分為3個(gè)局部,分別是:1〕初始化程序。a.設(shè)置串行通信波特率;b.串行通訊方式的初始化;c.對(duì)TO,T1兩個(gè)計(jì)數(shù)器的初始化;d.中斷控制程序的初始化。此外,還負(fù)責(zé)從E2PROM中調(diào)出以前的采樣參數(shù),使器件能夠以它采樣溫度數(shù)據(jù)。2〕當(dāng)監(jiān)控到ONTIME1和NTIME2標(biāo)記時(shí)作相應(yīng)溫度的存儲(chǔ)、轉(zhuǎn)換、發(fā)送處理。ONTIME1和NTIME2的標(biāo)記主要有定時(shí)電路決定,當(dāng)?shù)竭_(dá)采樣間隔時(shí),做出相應(yīng)的處理。3〕采用動(dòng)態(tài)顯示方式即時(shí)顯示溫度,以節(jié)省電路規(guī)模,使得整個(gè)系統(tǒng)的體積變小。元器件的選擇4.1主要元器件知識(shí)DS18B20DS18B20是DALLAS公司生產(chǎn)的一線式數(shù)字溫度傳感器,具有3引腳TO-92小體積封裝形式;溫度測(cè)量范圍為-55℃~+125℃,可編程為9位~12位A/D轉(zhuǎn)換精度,測(cè)溫分辨率可達(dá)0.0625℃,被測(cè)溫度用符號(hào)擴(kuò)展的16位數(shù)字量方式串行輸出;其工作電源既可在遠(yuǎn)端引入,也可采用寄生電源方式產(chǎn)生;多個(gè)DS18B20可以并聯(lián)到3根或2根線上,只需一根端口線就能與諸多DS18B20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。以上特點(diǎn)使DS18B20非常適用于遠(yuǎn)距離多點(diǎn)溫度檢測(cè)系統(tǒng)。DS18B20內(nèi)部結(jié)構(gòu)如圖5所示,主要由4局部組成:64位ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置存放器。DS18B20的管腳排列如圖6所示,DQ為數(shù)字信號(hào)輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端,在寄生電源接線方式時(shí)接地,見圖7。圖6DS18B20的內(nèi)部結(jié)構(gòu)圖7DS18B20的管腳排列ROM中的64位序列號(hào)是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼,每個(gè)DS18B20的64位序列號(hào)均不相同。64位ROM的排的循環(huán)冗余校驗(yàn)碼〔CRC=X8+X5+X4+1〕。ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。DS18B20中的溫度傳感器完成對(duì)溫度的測(cè)量,用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號(hào)位。例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。上下溫報(bào)警觸發(fā)器TH和TL、配置存放器均由一個(gè)字節(jié)的EEPROM組成,使用一個(gè)存儲(chǔ)器功能命令可對(duì)TH、TL或配置存放器寫入。其中配置存放器的格式如下:0R1R011111MSBLSBR1、R0決定溫度轉(zhuǎn)換的精度位數(shù):R1R0=“00”,9位精度,最大轉(zhuǎn)換時(shí)間為93.75ms;R1R0=“01”,10位精度,最大轉(zhuǎn)換時(shí)間為187.5ms;R1R0=“10”,11位精度,最大轉(zhuǎn)換時(shí)間為375ms;R1R0=“11”,12位精度,最大轉(zhuǎn)換時(shí)間為750ms;未編程時(shí)默認(rèn)為12位精度。高速暫存器是一個(gè)9字節(jié)的存儲(chǔ)器。開始兩個(gè)字節(jié)包含被測(cè)溫度的數(shù)字量信息;第3、4、5字節(jié)分別是TH、TL、配置存放器的臨時(shí)拷貝,每一次上電復(fù)位時(shí)被刷新;第6、7、8字節(jié)未用,表現(xiàn)為全邏輯1;第9字節(jié)讀出的是前面所有8個(gè)字節(jié)的CRC碼,可用來保證通信正確。.2DS18B20的工作時(shí)序DS18B20的一線工作協(xié)議流程是:初始化→ROM操作指令→存儲(chǔ)器操作指令→數(shù)據(jù)傳輸。其工作時(shí)序包括初始化時(shí)序、寫時(shí)序和讀時(shí)序,如圖8〔a〕〔b〕〔c〕所示?!瞐〕初始化時(shí)序〔b〕寫時(shí)序〔c〕讀時(shí)序圖8DS18B20的工作時(shí)序圖.3DS18B20與微處理器的連接DS18B20與微處理器的連接如下列圖9所示?!瞐〕寄生電源工作方式〔b〕外接電源工作方式圖9DS18B20與微處理器的典型連接圖4.1.2 串口UART/RS232至單總線通信協(xié)議的轉(zhuǎn)接橋DS2480B.1DS2480B主要特性串口UART/RS232至單總線通信協(xié)議的轉(zhuǎn)接橋,可直接連到UART和5VRS232系統(tǒng)中,支持Dallas全系列單總線器件,如數(shù)字溫度傳感器DS18B20、A/D轉(zhuǎn)換器DS2450等;將主機(jī)從單總線時(shí)序控制中解脫出來,提供標(biāo)準(zhǔn)的、靈活的和強(qiáng)驅(qū)動(dòng)的單總線定時(shí);支持標(biāo)準(zhǔn)UART通信,支持9.6〔默認(rèn)〕、19.2、57.6和115.2kbps速率;具有較強(qiáng)的總線驅(qū)動(dòng)能力,通信距離可達(dá)300m;可編程下拉擺率控制和有源上拉,工作范圍5V,-40~+85℃,8引腳SOIC封裝。.2管腳圖及引腳說明 11234875RXDTXDPOLVPPGND1-WNCVDD圖10DS2480B的封裝和引腳DS2480B為8腳貼片式封裝,如圖10所示。引腳功能如表1所列:表1引腳功能說明引腳號(hào)引腳名稱引腳功能1GND地線21-W單總線輸入輸出端3NC懸空4VDD4.5~5.5V電壓5VPPEPROM編程電壓6POLRXD/TXD選擇端7TXD發(fā)送端8RXD接收端DS2480B工作原理框圖如圖11所示。圖11DS2480B工作原理框圖DS2480B與RS232的接口技術(shù)DS2480B與RS232的接口如圖12所示。圖12DS2480B與RS232的接口圖4.2元件清單表2元件清單序號(hào)元件個(gè)數(shù)1PC機(jī)串行口UART/RS2321個(gè)2轉(zhuǎn)接橋DS2480B1個(gè)3數(shù)字溫度傳感器DS18B201個(gè)4電容U07HF1個(gè)5穩(wěn)壓管2個(gè)6二極管M72個(gè)7電路板XF071個(gè)學(xué)習(xí)心得通過這次專業(yè)課程設(shè)計(jì),我對(duì)本專業(yè)的理論知識(shí)和動(dòng)手操作能力都有了大幅度的提高。首先從研究課題的要求和任務(wù)開始,剛拿到“基于單總線的溫度實(shí)時(shí)監(jiān)控系統(tǒng)〞這個(gè)設(shè)計(jì)題目時(shí),完全是不知所措,不知道從那下手。經(jīng)過王老師和李老師的耐心講解后,才有點(diǎn)頭緒。課后通過自己查資料和老師所給的任務(wù)書與指導(dǎo)書才真正開始搞懂題目,并且去研究它。根據(jù)指導(dǎo)書上的要求和指示,我們小組設(shè)計(jì)出了基于單總線的溫度實(shí)時(shí)監(jiān)控系統(tǒng)硬件電路。接下來就要依據(jù)設(shè)計(jì)好的電路圖,進(jìn)行硬件的焊接。說到焊接,我并不陌生,在大二的時(shí)候就焊接過收音機(jī),在專業(yè)綜合實(shí)習(xí)時(shí),又焊接過紅外線感應(yīng)開關(guān)。焊接最需要注意的是焊接的溫度和時(shí)間,焊接時(shí)要使電烙鐵的溫度高于焊錫,但是不能太高,以烙鐵接頭的松香剛剛冒煙為好,焊接的時(shí)間不能太短,因?yàn)槟菢雍更c(diǎn)的溫度太低,焊點(diǎn)融化不充分,焊點(diǎn)粗糙容易造成虛焊,而焊接時(shí)間長(zhǎng),焊錫容易流淌,使元件過熱,容易損壞,或者造成焊接短路現(xiàn)象。在軟件設(shè)計(jì)與編程的環(huán)節(jié),要求用自己熟悉的計(jì)算機(jī)語言編寫溫度實(shí)時(shí)監(jiān)控系統(tǒng)軟件。在設(shè)計(jì)之前我也考慮過關(guān)于選用什么語言的問題,在大學(xué)生涯中,我學(xué)過了C語言,Java語言和Delphi語言,在去年的計(jì)算機(jī)課程設(shè)計(jì)中,我曾用Delphi語言編寫過一個(gè)高校學(xué)生選課成績(jī)管理系統(tǒng),對(duì)Delphi言語的應(yīng)用相對(duì)靈活些,所以我決定用Delphi語言編寫程序。在本次課程設(shè)計(jì)的過程中,我還發(fā)現(xiàn)基于DS18B20數(shù)字溫度傳感器構(gòu)成的實(shí)時(shí)監(jiān)控系統(tǒng)確實(shí)具有精度高、抗干擾能力強(qiáng)、電路簡(jiǎn)單等諸多優(yōu)點(diǎn)。相比之下,傳統(tǒng)的溫度檢測(cè)系統(tǒng)采用熱敏電阻等溫度敏感元件,熱敏電阻本錢低,但需要后續(xù)信號(hào)調(diào)理、AD轉(zhuǎn)換處理電路才能將溫度信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),不但電路復(fù)雜,而且熱敏電阻的可靠性相對(duì)較差,測(cè)量溫度的精度差,很難保證熱敏電阻的一致性和線性。通過對(duì)這個(gè)專業(yè)課程設(shè)計(jì)的學(xué)習(xí),為我們掌握單總線的溫度采集電路,單總線和PC機(jī)串行口的接口電路的開發(fā)打下了堅(jiān)實(shí)的根底,還使我掌握了設(shè)計(jì)復(fù)雜電路和裝配技能,培養(yǎng)了我理論聯(lián)系實(shí)際的能力,提高了我分析問題和解決問題的能力,增強(qiáng)了獨(dú)立工作的能力。其中感觸最深的便是實(shí)踐聯(lián)系理論的重要性,當(dāng)遇到實(shí)際問題時(shí),只要認(rèn)真思考,用所學(xué)的知識(shí),再一步一步探索,是完全可以解決遇到的一般問題的。在實(shí)習(xí)過成中,要時(shí)刻保持清醒的頭腦,出現(xiàn)錯(cuò)誤,一定要認(rèn)真的冷靜的去檢查分析錯(cuò)誤,不能草草了事,這樣做出來的課程設(shè)計(jì)才能到達(dá)它真正的效果,為我們以后步入社會(huì)做好充分的準(zhǔn)備。參考文獻(xiàn)[1]DS18B20ProgrammableResolution1-WireDigitalThermometer[2]DS2480BSerial1-WireLineDriverwithLoadSensor[3]左冬紅,謝瑞和.實(shí)現(xiàn)單總線搜索ROM命令的一種算法[4]李朝青,單片機(jī)原理及接口技術(shù)(簡(jiǎn)明修訂版)[M].1998[5]李廣弟.單片機(jī)根底[M].1994[6]沙占友等.智能化集成溫度傳感器原理與應(yīng)用.2002[7]閻石.數(shù)字電子技術(shù)根底〔第三版〕[M].1989附:源程序清單{------------------------------------------------------------------------------------------------------TEMPDL32:ThisutilityusesTMEXtoviewareadthetemperaturefromaDS18B20.Itrequiresthe32-BitWindowsTMEXdriverstobepresent.Compiler:BorlandDelphi5.0}procedureTForm1.FormCreate(Sender:Tobject;Var ztbuf:array[0..200]ofChar;Typebuf:array[0..200]ofChar;i,k,RetValue:smallint;RetStr:array[0..200]ofChar;SetupDone:Boolean;PortNum,PortType:smallint;begindieer:=false;SetupDone:=FALSE;{TMSetupnotdoneyet}Label4.Caption:='';{ReaddefaultPortNumberandPortTypefromregistry}RetValue:=TMReadDefaultPort(@PortNum,@PortType);if(RetValue<1)thenTMReadDefaultPort(@PortNum,@PortType)beginShowMessage('Pleasesetportfirst');Halt;endelsebegin{readthetmexversionandtypeversion}Get_Version(@ztbuf);Label1.Caption:=StrPas(ztbuf);TMGetTypeVersion(PortType,@Typebuf);Label2.Caption:=StrPas(Typebuf);{attemptogetasession}Done:=False;RepeatSHandle:=TMExtendedStartSession(PortNum,PortType,NIL);If(SHandle>0)Thenbeginif(TMSetup(SHandle)=1)then{ThedevicethatwillbefoundisTemperatureDeviceDS18B20,soFamilyTypeissetto$28}FindFirstFamily($28,SHandle)elsebeginTMEndSession(SHandle);ShowMessage('FailtosetupMicroLan!');Halt;end;endelsebeginif(SHandle<0)thenBeginShowMessage('TheDefaultPortTypedoesnothaveadriver!');Halt;end;end;{Releasecontrolbacktowindow}Application.ProcessMessages;until(Done);Done:=False;RepeatSHandle:=TMExtendedStartSession(PortNum,PortType,NIL);If(SHandle>0)Thenbeginif(TMSetup(SHandle)=1)then{ThedevicethatwillbefoundisTemperatureDeviceDS18B20,soFamilyTypeissetto$28}FindSecondFamily($28,SHandle)elsebeginTMEndSession(SHandle);ShowMessage('FailtosetupMicroLan!');Halt;end;endelsebeginif(SHandle<0)thenBeginShowMessage('TheDefaultPortTypedoesnothaveadriver!');Halt;end;end;{Releasecontrolbacktowindow}Application.ProcessMessages;until(Done);label18.Caption:=keke1;label19.caption:=keke2;table1.Active:=true;iftable1.CanModifythenbegintable1.Append;table1.Fields[0].AsDateTime:=now;table1.Fields[1].AsString:=floattostr(diwei1);table1.Fields[2].AsFloat:=shangxian1;table1.Fields[3].AsFloat:=xiaxian1;table1.Fields[4].AsString:=floattostr(diwei2);table1.Fields[5].AsFloat:=shangxian2;table1.Fields[6].AsFloat:=xiaxian2;table1.Post;end;end;end;procedureTForm1.FindFirstFamily(family:smallint;SHandle:longint);vari,flag:smallint;romstr:string;rom:array[0..8]ofsmallint;begin{Setuptofindthefirstdevicewiththefamily'family'}if(TMFamilySearchSetup(SHandle,@stateBuf,family)=1)thenbeginif(TMNext(SHandle,@stateBuf)=1)thenbegin{Readtheromnumberbysettingrom[0]to0forreadingandusingTMRom}rom[0]:=0;TMRom(SHandle,@stateBuf,@rom);{Checkifcorrecttype}romstr:='';if((familyand$7F)=(rom[0]and$7F))thenbeginfori:=7downto0doromstr:=romstr+IntToHex(ROM[i],2);Label3.caption:='SerialROMID1:'+romstr;ReadTemperature1(SHandle);endelsebeginShowMessage('ThereisnoTemperatureDeviceontheport');halt;end;endelsebeginTMEndSession(SHandle);ShowMessage('ThereisnoTemperatureDeviceontheport');halt;end;endelsebeginTMEndSession(SHandle);ShowMessage('ThereisnoTemperatureDeviceontheport');halt;end;end;procedureTForm1.ReadTemperature1(session_handle:longint);vartsht,i,tmp1:smallint;cr,cpc,tmpf,tmp:Extended;rbuf:array[0..9]ofsmallint;st:longint;CRCByte,xiaxianbyte:Byte;begintmp:=0.00;{accessthedevice}if(TMAccess(session_handle,@StateBuf)=1)thenbegin{SendtherecallE2command(bysetting$B8tooutbyteinTMTouchByte)makesureScratchiscorrect}TMTouchByte(session_handle,$B8);{SendthestartTcommand}if(TMAccess(session_handle,@StateBuf)=1)thenbegin{PreparethestrongpullupafternextTMTouchByte}TMOneWireLevel(session_handle,LEVEL_SET,LEVEL_STRONG_PULL_UP,PRIMED_BYTE);{Sendtheconversioncommand(bysetting$44tooutbyteinTMTouchByte)}TMTouchByte(session_handle,$44);{Sleepforasecond}st:=GetTickCount+1000;While(GetTickCount<st)doTMValidSession(Session_handle);{Disablethestrongpullup}TMOneWireLevel(session_handle,LEVEL_SET,LEVEL_NORMAL,PRIMED_NONE);{verifyconversioniscompletebysetting$01tooutbitinTMTouchBitandcheckthereturnvaluewith1}if(TMTouchBit(session_handle,$01)=$01)thenbegin{Accessdevice}If(TMAccess(session_handle,@StateBuf)=1)thenbegin{Sendreadscratchcommandbysetting$BEtooutbyteinTMTouchByte}TMTouchByte(session_handle,$BE);CRC8:=0;{Readscratch(setting$FFtooutbyteinTMTouchByte)andcheckcrcforeachbyte}fori:=0to7dobeginrbuf[i]:=TMTouchByte(session_handle,$FF);CRCByte:=Byte(rbuf[i]);{thebytetorunthroughCRC8routine}CRC8:=TMCRC(1,@CRCByte,CRC8,0);end;{Checkcrc}CRCByte:=Byte(TMTouchByte(session_handle,$FF));{thebytetorunthroughCRC8routine}CRC8:=TMCRC(1,@CRCByte,CRC8,0);if(CRC8=0)thenbegin{Calculatethetemperaruretsht:=rbuf[0];if((rbuf[1]and$01)=1)thentsht:=tshtor(-256);tmp1:=Round((tsht)/2);tmp:=tmp1;cr:=rbuf[6];cpc:=rbuf[7];if(rbuf[7]<>0)thentmp:=tmp-(0.25)+(cpc-cr)/cpc;}if((rbuf[1]and$F8)=$F8)thenBEGINENDELSEBEGINcase(rbuf[4]and$60)of$00:beginfenbianlv1:=9;tmp:=(rbuf[1]and$07)*16+(rbuf[0]and$f8)/16;diwei1:=(rbuf[0]and$f8)/16;end;$20:beginfenbianlv1:=10;tmp:=(rbuf[1]and$07)*16+(rbuf[0]and$fc)/16;diwei1:=(rbuf[0]and$fc)/16;end;$40:beginfenbianlv1:=11;tmp:=(rbuf[1]and$07)*16+(rbuf[0]and$fe)/16;diwei1:=(rbuf[0]and$fe)/16;end;$60:beginfenbianlv1:=12;tmp:=(rbuf[1]and$07)*16+rbuf[0]/16;diwei1:=rbuf[0]/16;end;end;END;tmpf:=(tmp*9)/5+32;label4.caption:='Currenttemp1:'+FormatFloat('0.0000',tmp)+'Cor'+FormatFloat('0.0000',tmpf)+'F';keke1:=FormatFloat('0.0000',tmp);yuanshi1:=rbuf[4];shangxian1:=rbuf[2]and$7f;xiaxianbyte:=rbuf[3]and$80;ifxiaxianbyte=1thenxiaxian1:=(rbuf[3]and$7f)*(-1)elsexiaxian1:=rbuf[3]and$7f;MessageBeep(0);TMEndSession(session_handle);Done:=True;end;end;end;end;end;end;procedureTForm1.FindSecondFamily(family:smallint;SHandle:longint);vari,flag:smallint;romstr:string;rom:array[0..8]ofsmallint;begin{Setuptofindthefirstdevicewiththefamily'family'}if(TMFamilySearchSetup(SHandle,@stateBuf,family)=1)thenbegin{Getfirstdevice}if(TMNext(SHandle,@stateBuf)=1)thenif(TMNext(SHandle,@stateBuf)=1)thenbegin{Readtheromnumberbysettingrom[0]to0forreadingandusingTMRom}rom[0]:=0;TMRom(SHandle,@stateBuf,@rom);{Checkifcorrecttype}romstr:='';if((familyand$7F)=(rom[0]and$7F))thenbeginfori:=7downto0doromstr:=romstr+IntToHex(ROM[i],2);Label10.caption:='SerialROMID2:'+romstr;ReadTemperature2(SHandle);endelsebeginShowMessage('ThereisnoTemperatureDeviceontheport');halt;end;endelsebeginTMEndSession(SHandle);ShowMessage('ThereisnoTemperatureDeviceontheport');halt;endelsebeginTMEndSession(SHandle);ShowMessage('ThereisnoTemperatureDeviceontheport');halt;end;endelsebeginTMEndSession(SHandle);ShowMessage('ThereisnoTemperatureDeviceontheport');halt;end;end;procedureTForm1.ReadTemperature2(session_handle:longint);vartsht,i,tmp1:smallint;cr,cpc,tmpf,tmp:Extended;rbuf:array[0..9]ofsmallint;st:longint;CRCByte,xiaxianbyte:Byte;begintmp:=0.00;{accessthedevice}if(TMAccess(session_handle,@StateBuf)=1)thenbegin{SendtherecallE2command(bysetting$B8tooutbyteinTMTouchByte)makesureScratchiscorrect}TMTouchByte(session_handle,$B8);{SendthestartTcommand}if(TMAccess(session_handle,@StateBuf)=1)thenbegin{PreparethestrongpullupafternextTMTouchByte}TMOneWireLevel(session_handle,LEVEL_SET,LEVEL_STRONG_PULL_UP,PRIMED_BYTE);{Sendtheconversioncommand(bysetting$44tooutbyteinTMTouchByte)}TMTouchByte(session_handle,$44);{Sleepforasecond}st:=GetTickCount+1000;While(GetTickCount<st)doTMValidSession(Session_handle);{Disablethestrongpullup}TMOneWireLevel(session_handle,LEVEL_SET,LEVEL_NORMAL,PRIMED_NONE);{verifyconversioniscompletebysetting$01tooutbitinTMTouchBitandcheckthereturnvaluewith1}if(TMTouchBit(session_handle,$01)=$01)thenbegin{Accessdevice}If(TMAccess(session_handle,@StateBuf)=1)thenbegin{Sendreadscratchcommandbysetting$BEtooutbyteinTMTouchByte}TMTouchByte(session_handle,$BE);CRC8:=0;{Readscratch(setting$FFtooutbyteinTMTouchByte)andcheckcrcforeachbyte}fori:=0to7dobeginrbuf[i]:=TMTouchByte(session_handle,$FF);CRCByte:=Byte(rbuf[i]);{thebytetorunthroughCRC8routine}CRC8:=TMCRC(1,@CRCByte,CRC8,0);end;{Checkcrc}CRCByte:=Byte(TMTouchByte(session_handle,$FF));{thebytetorunthroughCRC8routine}CRC8:=TMCRC(1,@CRCByte,CRC8,0);if(CRC8=0)thenbegin{Calculatethetemperaruretsht:=rbuf[0];if((rbuf[1]and$01)=1)thentsht:=tshtor(-256);tmp1:=Round((tsht)/2);tmp:=tmp1;cr:=rbuf[6];cpc:=rbuf[7];if(rbuf[7]<>0)thentmp:=tmp-(0.25)+(cpc-cr)/cpc;}if((rbuf[1]and$F8)=$F8)thenBEGINENDELSEBEGINcase(rbuf[4]and$60)of$00:begintmp:=(rbuf[1]and$07)*16+(rbuf[0]and$f8)/16;fenbianlv2:=9;diwei2:=(rbuf[0]and$f8)/16;end;$20:beginfenbianlv2:=10;tmp:=(rbuf[1]and$07)*16+(rbuf[0]and$fc)/16;diwei2:=(rbuf[0]and$fc)/16;end;$40:beginfenbianlv2:=11;tmp:=(rbuf[1]and$07)*16+(rbuf[0]and$fe)/16;//11位分辨率diwei2:=(rbuf[0]and$fe)/16;end;$60:beginfenbianlv2:=12;tmp:=(rbuf[1]and$07)*16+rbuf[0]/16;//12位分辨率diwei2:=rbuf[0]/16;end;end;END;tmpf:=(tmp*9)/5+32;label11.caption:='Currenttemp2:'+FormatFloat('0.0000',tmp)+'Cor'+FormatFloat('0.0000',tmpf)+'F';keke2:=FormatFloat('0.0000',tmp);yuanshi2:=rbuf[4];shangxian2:=rbuf[2]and$7f;xiaxianbyte:=rbuf[3]and$80;ifxiaxianbyte=1thenxiaxian2:=(rbuf[3]and$7f)*(-1)elsexiaxian2:=rbuf[3]and$7f;MessageBeep(0);TMEndSession(session_handle);Done:=True;end;end;end;end;end;end;procedureTForm1.Image1Click(Sender:TObject);begindieer:=true;//全局變量用來動(dòng)態(tài)顯示溫度柱狀圖end;procedureTForm1.Button2Click(Sender:TObject);varRetValue,i:smallint;PortNum,PortType:smallint;beginif(radiobutton3.Checked)thenbeginedit9.Text:='';edit4.Text:='';edit5.Text:='';edit6.Text:='';edit7.Text:='';edit8.Text:='';RetValue:=TMReadDefaultPort(@PortNum,@PortType);SHandle:=TMExtendedStartSession(PortNum,PortType,NIL);FindFirstFamily($28,SHandle);edit9.Text:=inttostr(fenbianlv1);edit4.Text:=floattostr(gaowei1);edit5.Text:=floattostr(diwei1);edit6.Text:=floattostr(shangxian1);edit7.Text:=floattostr(xiaxian1);edit8.Text:=floattostr(yuanshi1);end;if(radiobutton4.Checked)thenbeginedit9.Text:='';edit4.Text:='';edit5.Text:='';edit6.Text:='';edit7.Text:='';edit8.Text:='';RetValue:=TMReadDefaultPort(@PortNum,@PortType);SHandle:=TMExtendedStartSession(PortNum,PortType,NIL);FindSecondFamily($28,SHandle);edit4.Text:=floattostr(gaowei2);edit9.Text:=floattostr(fenbianlv2);edit5.Text:=floattostr(diwei2);edit6.Text:=floattostr(shangxian2);edit7.Text:=floattostr(xiaxian2);edit8.Text:=floattostr(yuanshi2);end;end;procedureTForm1.Button3Click(Sender:TObject);varn,m,h:integer;o,p:single;a,b:string;beginh:=0;label24.Caption:='50';label25.Caption:='25';label23.Caption:='0';label22.Caption:='50';label26.Caption:='25';label6.Caption:='0';paintbox1.Canvas.Pixels[0,128]:=clBlack;paintbox1.Canvas.Pixels[1,127]:=clBlack;paintbox1.Canvas.Pixels[1,129]:=clBlack;paintbox1.Canvas.Pixels[2,127]:=clBlack;paintbox1.Canvas.Pixels[2,129]:=clBlack;paintbox1.Canvas.Pixels[2,128]:=clBlack;paintbox1.Canvas.MoveTo(0,45);paintbox1.Canvas.LineTo(0,230);paintbox1.Canvas.MoveTo(0,128);paintbox1.Canvas.LineTo(425,128);paintbox1.Canvas.MoveTo(0,230);paintbox1.Canvas.LineTo(425,230);paintbox1.Canvas.MoveTo(0,45);paintbox1.Canvas.LineTo(5,57);paintbox1.Canvas.MoveTo(0,135);paintbox1.Canvas.LineTo(5,147);paintbox1.Canvas.MoveTo(0,200);paintbox1.Canvas.LineTo(7,200);paintbox1.Canvas.MoveTo(0,98);paintbox1.Canvas.LineTo(7,98);paintbox1.Canvas.MoveTo(0,128);table1.Active:=true;table1.First;ifradiobutton5.Checkedthenbeginwhilenottable1.Eofdobegina:=table1.FieldValues['TempC1'];b:=table1.FieldValues['TempC2'];o:=strtofloat(a);p:=strtofloat(b);a:=FormatFloat('00',o);b:=FormatFloat('00',p);n:=128-strtoint(a);h:=h+5;Paintbox1.Canvas.LineTo(h,n);table1.Next;end;end;ifradiobutton6.Checkedthenbeginpaintbox1.Canvas.MoveTo(0,230);whilenottable1.Eofdobegina:=table1.FieldValues['TempC1'];b:=table1.FieldValues['TempC2'];o:=strtofloat(a);p:=strtofloat(b);a:=FormatFloat('00',o);b:=FormatFloat('00',p);m:=230-strtoint(b);h:=h+5;Paintbox1.Canvas.LineTo(h,m);table1.Next;end;end;end;procedureTForm1.Button1Click(Sender:TObject);varrbuf1:array[0..4]ofbyte;l,m,n:integer;o,p,q,z:smallint;RetValue,i:smallint;PortNum,PortType:smallint;rbuf:array[0..9]ofsmallint;CRCByte:Byte;st:longint;rom:array[0..8]ofsmallint;beginl:=strtoint(edit1.Text);m:=strtoint(edit2.Text);n:=strtoint(edit3.Text);ifn=9thenn:=31elseifn=10thenn:=63elseifn=11thenn:=95elseifn=12thenn:=127elsebeginshowmessage('errornumber,pleaseinputtherightnumber(9~12)');halt;end;RetValue:=TMReadDefaultPort(@PortNum,@PortType);//從這里開始不能改有關(guān)時(shí)序的問題,改了可能出錯(cuò)SHandle:=TMExtendedStartSession(PortNum,PortType,NIL);If(SHandle>0)Thenbeginif(TMSetup(SHandle)=1)thenifradiobutton1.Checked=truethen//寫入第一個(gè)溫度傳感器 if(TMFirst(SHandle,@stateBuf)=1)then begin if(TMAccess(SHandle,@StateBuf)=1)then begin //i:=TMBlockStream(SHandle,@rbuf1,4); //ifi=4then//beginif(TMTouchByte(SHandle,$4E)>0)then///$4E是寫命令且判斷是否傳遞成功beginif(TMTouchByte(SHandle,l)<0)then//傳遞溫度上限且判斷是否傳遞成功halt;if(TMTouchByte(SHandle,m)=255)then//傳遞溫度下限且判斷是否傳遞成功halt;if(TMTouchByte(SHandle,n)<0)then//傳遞精度且判斷是否傳遞成功halt;end;TMAccess(SHandle,@StateBuf);TMTouchByte(SHandle,$48);//這里是寫道E2Rom里所以用上拉電壓TMOneWireLevel(SHandle,LEVEL_SET,LEVEL_STRONG_PULL_UP,PRIMED_BYTE);st:=GetTickCount+1000;while(GetTickCount<st)do;TMOneWireLevel(SHandle,LEVEL_SET,LEVEL_NORMAL,PRIMED_NONE); //恢復(fù)正常電壓//TMEndSession(SHandle);//ifi>=0then//begin//TMTouchByte(SHandle,$B8);TMAccess(SHandle,@StateBuf);TMTouchByte(SHandle,$BE);CRC8:=0;fori:=0to7dobeginrbuf[i]:=TMTouchByte(SHandle,$FF);//CRCByte:=Byte(rbuf[i]);{thebytetorunthroughCRC8routine}//CRC8:=TMCRC(1,@CRCByte,CRC8,0);end;//end//else//showmessage('errorTM$48');//end //else //showmessage('errortmBlock'); end else showmessage('errorTmAccess'); end else showmessage('errorTMnext');ifradiobutton2.Checked=truethen//寫入第二個(gè)溫度傳感器下面就是復(fù)制的代碼if(TMFirst(SHandle,@stateBuf)=1)thenif(TMNext(SHandle,@stateBuf)=1)then begin if(TMAccess(SHandle,@StateBuf)=1)then begin //i:=TMBlockStream(SHandle,@rbuf1,4); //ifi=4then//beginif(TMTouchByte(SHandle,$4E)>0)thenbeginif(TMTouchByte(SHandle,l)<0)thenhalt;if(TMTouchByte(SHandle,m)=255)thenhalt;if(TMTouchByte
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC 63522-13:2024 EN-FR Electrical relays - Tests and measurements - Part 13: Corrosive atmospheres due to sulfur impact
- 【正版授權(quán)】 IEC 62309:2024 EN-FR Dependability of new products containing reused parts and life-extended products
- 2025-2030年中國降血脂藥行業(yè)運(yùn)營現(xiàn)狀及發(fā)展規(guī)劃分析報(bào)告
- 2025-2030年中國銀礦石市場(chǎng)運(yùn)行動(dòng)態(tài)與發(fā)展趨勢(shì)分析報(bào)告
- 2025-2030年中國鋁合金防火門窗市場(chǎng)發(fā)展?fàn)顩r及營銷戰(zhàn)略研究報(bào)告
- 2025-2030年中國鋼構(gòu)件行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及前景趨勢(shì)分析報(bào)告
- 2025-2030年中國遠(yuǎn)洋漁輪市場(chǎng)運(yùn)行格局及發(fā)展趨勢(shì)分析報(bào)告
- 2025-2030年中國轎車懸架彈簧行業(yè)發(fā)展前景及投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國美體塑身衣行業(yè)市場(chǎng)運(yùn)行狀況及發(fā)展趨勢(shì)分析報(bào)告
- 2025-2030年中國繡花機(jī)市場(chǎng)運(yùn)行動(dòng)態(tài)及發(fā)展趨勢(shì)分析報(bào)告
- 快手申訴文本
- 現(xiàn)金調(diào)撥系統(tǒng)操作手冊(cè)教學(xué)課件
- 學(xué)校物業(yè)管理宿舍管理方案995
- PFMEA-失效模式分析案例
- 荔枝依舊年年紅
- SMT貼片線項(xiàng)目可行性研究報(bào)告
- 新加坡公司法-英文版
- 第五版-FMEA-新版FMEA【第五版】
- 口腔修復(fù)學(xué)第三章牙體缺損的修復(fù)
- 建設(shè)部環(huán)衛(wèi)勞動(dòng)定額
- 2023年棗莊科技職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)模擬試題及答案解析
評(píng)論
0/150
提交評(píng)論