版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Yeelink物聯(lián)網(wǎng)溫度遠(yuǎn)程采集系統(tǒng)摘要 隨著網(wǎng)絡(luò)的飛速發(fā)展,許多新興產(chǎn)業(yè)涌現(xiàn)并蓬勃發(fā)展,億聯(lián)物聯(lián)網(wǎng)平臺(tái)正是在這股浪潮下應(yīng)運(yùn)而生。Yeelink是一個(gè)開(kāi)放的通用物聯(lián)網(wǎng)平臺(tái),主要提供傳感器數(shù)據(jù)的訪問(wèn)、存儲(chǔ)和展示服務(wù),為所有開(kāi)源軟硬件愛(ài)好者和制造企業(yè)提供物聯(lián)網(wǎng)項(xiàng)目的平臺(tái)。它使硬件和制造商能夠交付支持物聯(lián)網(wǎng)的電子產(chǎn)品,而無(wú)需關(guān)心服務(wù)器實(shí)施細(xì)節(jié)和運(yùn)維。Yeelink平臺(tái)最大的特點(diǎn)是不僅可以提供數(shù)據(jù)的上游功能,還可以實(shí)現(xiàn)家電的控制功能?;丶仪耙磦€(gè)熱水澡,還是需要提前開(kāi)空調(diào)?很簡(jiǎn)單,用手機(jī)的智能APP,幾分鐘就搞定了。簡(jiǎn)單來(lái)說(shuō),你可以將你收集到的數(shù)據(jù)提交給Yeelink,Yeelink會(huì)以一定的形式展示出來(lái)。比如我們采集體溫?cái)?shù)據(jù)并提交,這樣無(wú)論您身在何處,只要能上網(wǎng),就可以實(shí)時(shí)在線監(jiān)測(cè)體溫?cái)?shù)值。本次培訓(xùn)內(nèi)容是通過(guò)數(shù)字溫度傳感器將實(shí)時(shí)采集的溫度顯示在數(shù)碼管上,通過(guò)串口致到PC,PC通過(guò)yeelink串口轉(zhuǎn)發(fā)工具發(fā)布到互聯(lián)網(wǎng)。關(guān)鍵詞:溫度、傳感器、yeelink、物聯(lián)網(wǎng)、遠(yuǎn)程采集目錄TOC\o"1-5"\h\z\u實(shí)習(xí)任務(wù)書(shū)總線,主要應(yīng)用于18B20芯片。需要溫度傳感器才能使它們能夠像可以調(diào)試、更改和控制外部鍵盤一樣發(fā)揮作用。主要原則 系統(tǒng)整體硬件電路包括傳感器采集電路、溫度顯示電路、單片機(jī)主板電路等。主控制器顯示電路顯示電路采用3位共陽(yáng)極LED數(shù)碼管,從P3口的RXD和TXD串口輸出段碼。溫度感應(yīng)器DS18B20溫度傳感器是達(dá)拉斯半導(dǎo)體公司新推出的改進(jìn)型智能溫度傳感器。與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它可以直接讀取被測(cè)溫度,并可根據(jù)實(shí)際需要通過(guò)簡(jiǎn)單的編程進(jìn)行編程。實(shí)現(xiàn)9~12位的數(shù)值讀取方式。DS18B20的性能特點(diǎn)如下:●獨(dú)特的單線接口,僅需一個(gè)端口引腳即可通信;●可將多臺(tái)DS18B20并聯(lián)在單根三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;●無(wú)需外接設(shè)備;●可數(shù)據(jù)線供電,電壓范圍3.0~5.5V;●零待機(jī)功耗;●9位或12位溫度;●用戶自定義報(bào)警設(shè)置;●報(bào)警搜索命令識(shí)別和標(biāo)記超出編程溫度限制的設(shè)備(溫度報(bào)警條件);●負(fù)電壓特性,當(dāng)電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作;DS18B20采用3腳PR-35封裝或8腳SOIC封裝,其結(jié)構(gòu)框圖如圖2所示。CC64位ROM和單線接口高速緩存存儲(chǔ)器與控制邏輯溫度傳感器高溫觸發(fā)器TH低溫觸發(fā)器TL配置寄存器8位CRC發(fā)生器VddI/OI/O圖2DS18B20部分結(jié)構(gòu)64位ROM結(jié)構(gòu)的前8位是產(chǎn)品型號(hào),后面是每個(gè)設(shè)備的唯一序列號(hào),共48位,后8位是前56位的CRC校驗(yàn)碼,這也是多個(gè)DS18B20進(jìn)行通信的單線。的原因。溫度報(bào)警觸發(fā)器TH和TL可以通過(guò)軟件寫(xiě)入用戶報(bào)警的上限和下限。DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存RAM和一個(gè)非易失性電可擦除EERAM。高速暫存RAM的結(jié)構(gòu)是一個(gè)8字節(jié)的內(nèi)存,結(jié)構(gòu)如圖3所示。前2個(gè)字節(jié)包含測(cè)量的溫度信息,第三和第四個(gè)字節(jié)是TH和TL的副本,分別是是易失性的,每次電源重置時(shí)都會(huì)刷新。第五個(gè)字節(jié)為配置寄存器,其內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時(shí),寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度值。該字節(jié)每一位的定義如圖3所示。低5位始終為1。TM為工作模式位,用于設(shè)置DS18B20處于工作模式還是測(cè)試模式。DS18B20出廠時(shí)該位設(shè)置為0,用戶需要更改。R1和R0決定了溫度轉(zhuǎn)換的精度。,設(shè)置分辨率。溫度LSB溫度MSBTH用戶字節(jié)1TL用戶字節(jié)2配置寄存器預(yù)訂預(yù)訂預(yù)訂CRC圖3DS18B20字節(jié)定義從表1可以看出DS18B20的溫度轉(zhuǎn)換時(shí)間比較長(zhǎng),分辨率越高,需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間越長(zhǎng)。因此,在實(shí)際應(yīng)用中,應(yīng)考慮分辨率和轉(zhuǎn)換時(shí)間之間的權(quán)衡。高速暫存器RAM的第6、7和8字節(jié)保留,均為邏輯1。第9個(gè)字節(jié)讀出前8個(gè)字節(jié)的所有CRC碼,可以用來(lái)校驗(yàn)數(shù)據(jù),保證通訊數(shù)據(jù)的正確性。DS18B20收到溫度轉(zhuǎn)換命令后,開(kāi)始轉(zhuǎn)換。轉(zhuǎn)換完成后,溫度值以16位符號(hào)擴(kuò)展二進(jìn)制補(bǔ)碼的形式存入高速暫存存儲(chǔ)器的第1和第2字節(jié)。單片機(jī)可以通過(guò)單線接口讀取數(shù)據(jù)。讀取數(shù)據(jù)時(shí),低位在前,高位在后。數(shù)據(jù)格式以0.0625°C/LSB的形式表示。當(dāng)符號(hào)位S=0時(shí),表示測(cè)得的溫度值為正值,二進(jìn)制位可直接轉(zhuǎn)換為十進(jìn)制;當(dāng)符號(hào)位S=1時(shí),表示測(cè)得的溫度值為負(fù)值,必須先轉(zhuǎn)換補(bǔ)碼。成為原始碼,然后計(jì)算十進(jìn)制值。表2是一些溫度值對(duì)應(yīng)的二進(jìn)制溫度數(shù)據(jù)。表1DS18B20溫度轉(zhuǎn)換時(shí)間表DS18B20完成溫度轉(zhuǎn)換后,將測(cè)得的溫度值與RAM中的TH和TL字節(jié)進(jìn)行比較。如果T>TH或T<TL,則設(shè)置設(shè)備的報(bào)警標(biāo)志位,并響應(yīng)上位機(jī)發(fā)出的報(bào)警搜索命令。因此,可以使用多個(gè)DS18B20同時(shí)測(cè)量溫度并進(jìn)行報(bào)警搜索。循環(huán)冗余校驗(yàn)碼(CRC)存儲(chǔ)在64位ROM的最高有效字節(jié)中。主機(jī)ROM的前56位用于計(jì)算CRC值,并與存儲(chǔ)在DS18B20中的CRC值進(jìn)行比較,判斷主機(jī)接收到的ROM數(shù)據(jù)是否正確。DS18B20的測(cè)溫原理如下。裝置中的低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用來(lái)產(chǎn)生固定頻率的脈沖信號(hào)送入減法計(jì)數(shù)器1;高溫度系數(shù)晶體振蕩器的振蕩頻率隨溫度變化。顯著改變,產(chǎn)生的信號(hào)被用作遞減計(jì)數(shù)器2的脈沖輸入。器件中還有一個(gè)計(jì)數(shù)門。當(dāng)計(jì)數(shù)門打開(kāi)時(shí),DS18B20對(duì)低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù),完成溫度測(cè)量。計(jì)數(shù)門的開(kāi)啟時(shí)間由高溫度系數(shù)振蕩器決定。每次測(cè)量前,先將一個(gè)對(duì)應(yīng)于-55℃的基數(shù)分別放入減法計(jì)數(shù)器1和溫度寄存器中。計(jì)數(shù)器1和溫度寄存器預(yù)置在-對(duì)應(yīng)于55°C的基值中。減法計(jì)數(shù)器1對(duì)低溫系數(shù)晶體振蕩器產(chǎn)生的脈沖信號(hào)進(jìn)行遞減計(jì)數(shù)。當(dāng)減法計(jì)數(shù)器1的預(yù)置值減為0時(shí),溫度寄存器的值會(huì)加1,減法計(jì)數(shù)器1的預(yù)置值會(huì)被重新加載。減法計(jì)數(shù)器1重新開(kāi)始計(jì)數(shù)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào),并重復(fù)這個(gè)循環(huán),直到減法計(jì)數(shù)器計(jì)數(shù)到0,停止溫度寄存器的累加。此時(shí)溫度寄存器中的值為測(cè)得的溫度值。其輸出用于校正減法計(jì)數(shù)器的預(yù)設(shè)值。只要計(jì)數(shù)器的門沒(méi)有關(guān)閉,就重復(fù)上述過(guò)程,直到溫度寄存器值近似于測(cè)量的溫度值。表2部分溫度對(duì)應(yīng)值表溫度/℃二進(jìn)制表示十六進(jìn)制表示+125000001111101000007D0H+8500000101010100000550H+25.062500000001100100000191H+10.125000000001010000100A2H+0.500000000000000100008H000000000000010000000H-0.51111111111110000FFF8H-10.1251111111101011110FF5EH-25.06251111111001101111FE6FH-551111110010010000FC90H另外,由于DS18B20單線通訊功能及時(shí)完成,具有嚴(yán)格的時(shí)隙概念,所以讀寫(xiě)時(shí)序非常重要。系統(tǒng)按照協(xié)議對(duì)DS18B20進(jìn)行各種操作。操作協(xié)議為:初始化DS18B20(致復(fù)位脈沖)→致ROM功能命令→致內(nèi)存操作命令→處理數(shù)據(jù)。
圖4DS18B20與單片機(jī)的接口電路DS18B20溫度傳感器與微控制器的接口電路DS18B20可以通過(guò)兩種方式供電。一是采用供電方式。此時(shí)DS18B20的第1腳接地,第2腳為信號(hào)線,第3腳接電源。另一種是寄生供電方式。如圖4所示,單線總線連接到單片機(jī)端口。為了保證在有效的DS18B20時(shí)鐘周期內(nèi)提供足夠的電流,可以使用一個(gè)MOSFET來(lái)完成總線的上拉。DS18B20在寫(xiě)存儲(chǔ)器操作和溫度A/D轉(zhuǎn)換操作時(shí),總線上必須有強(qiáng)上拉,最大上拉時(shí)間為10us。使用寄生供電模式時(shí),VDD端接地。由于單線系統(tǒng)只有一根線,因此傳輸接口必須是三態(tài)的。ZLG7290芯片ZLG7290功能及功能介紹ZLG7290可直接驅(qū)動(dòng)8位共陰極數(shù)碼管(或64個(gè)獨(dú)立LED),也可掃描管理多達(dá)64個(gè)按鍵。其中八個(gè)也可以用作功能鍵,就像計(jì)算機(jī)鍵盤上的Ctrl、Shift和Alt鍵一樣。此外,ZLG7290B還配備了連擊計(jì)數(shù)器,可以讓按鍵持續(xù)有效,按下后不松手。使用I2C總線方法,與微控制器的接口只需要兩條信號(hào)線??煽刂茠呙栉粩?shù),可控制任意數(shù)碼管閃爍。引腳說(shuō)明如下:ZLG7290使用說(shuō)明ZLG7290B是一款基于I2C總線接口的芯片。主控單片機(jī)ADUC831作為主器件時(shí),沒(méi)有I2C總線功能,所以需要使用SPI總線的引腳來(lái)模擬I2C總線。具體連接如下:ZLG7290BADUC831GNDDGND斯達(dá)瑪斯SCL時(shí)鐘/INTINT0VCCDVDD但是,這種連接并不是唯一的,它只在正在編寫(xiě)的軟件中需要。其實(shí)中斷可以根據(jù)你選擇的中斷來(lái)確定。接地(GND)和電源(VCC)也可以從電源連接。使用的電源是5V。編譯軟件采用WSD,主要用于AD系列芯片。只需下載帶有HEX擴(kuò)展名的文件。ZLG7290的工作原理ZLG7290的核心是ZLG7290B芯片,采用I2C接口,可直接驅(qū)動(dòng)8位共陰極數(shù)碼管,最多可同時(shí)掃描管理64個(gè)按鍵,人機(jī)功能資源非常豐富對(duì)話。除了自動(dòng)消除抖動(dòng)功能外,還具有段閃、段亮、段熄滅、功能鍵、組合鍵計(jì)數(shù)等強(qiáng)大功能,可提供10種數(shù)字和21種字母。將顯示數(shù)據(jù)直接寫(xiě)入顯示緩存,無(wú)需外接元件即可直接驅(qū)動(dòng)數(shù)碼管,還可以擴(kuò)展驅(qū)動(dòng)電壓和電流。此外,ZLG7290B的電路簡(jiǎn)單易用。當(dāng)用戶按鍵時(shí),ZLG7290的INT引腳會(huì)產(chǎn)生一個(gè)低電平中斷請(qǐng)求信號(hào)。讀取鍵值后,中斷信號(hào)會(huì)自動(dòng)取消。一般情況下,單片機(jī)只需要判斷INT引腳就可以得到鍵盤輸入信息。微控制器可以通過(guò)兩種方式獲取用戶的鍵盤輸入信息。一種是中斷方式,優(yōu)點(diǎn)是抗干擾能力強(qiáng),缺點(diǎn)是占用單片機(jī)的外部中斷源。第二種是查詢法,即通過(guò)不斷查詢INT管腳來(lái)判斷是否有按鍵被按下,這種方法可以省去一條單片機(jī)的I/O口線,但代價(jià)是I2C總線頻繁活動(dòng)狀態(tài)并消耗電流。而且不利于抗干擾。系統(tǒng)組成框圖蜂鳴報(bào)警器蜂鳴報(bào)警器ZLG7290數(shù)碼管顯示DS18B20DS18B20溫度傳感器8051單片機(jī)芯片系統(tǒng)原理介紹在數(shù)字溫度計(jì)系統(tǒng)框圖中,DS18B20溫度傳感器主要用于采集溫度;ZLG-7290按鍵電路用于控制和調(diào)整時(shí)間,數(shù)碼管顯示時(shí)間方便讀數(shù),蜂鳴器用于報(bào)警。軟件流程圖主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示,讀出并處理DS18B20測(cè)量的當(dāng)前溫度值,每1s進(jìn)行一次溫度測(cè)量。這樣就可以在一秒鐘內(nèi)測(cè)量一次被測(cè)溫度。程序流程如圖所示。Y發(fā)Y發(fā)DS18B20復(fù)位命令發(fā)跳過(guò)ROM命令發(fā)讀取溫度命令讀取操作,CRC校驗(yàn)9字節(jié)完?CRC校驗(yàn)正?確?移入溫度暫存器結(jié)束NNY初始化調(diào)用顯示子程序1S到?初次上電讀出溫度值溫度計(jì)算處理顯示數(shù)據(jù)刷新發(fā)溫度轉(zhuǎn)換開(kāi)始命令NYNY主程序流程圖 讀取溫度流程圖軟件項(xiàng)目程序列表和注釋#include<reg52.h>#include<intrins.h>#definezlg72900x70/*ZLG7290的IIC地址*/#defineucharunsignedchar/*宏定義*/#defineuint無(wú)符號(hào)整數(shù)#define_Nop()_nop_()/*定義空指令*/uchardisp_buf[8]={0,0,0,0,0,0,0,0};/*顯示緩沖區(qū)*/uchartemp[2];/*存儲(chǔ)溫度的數(shù)組*/uchar代碼采樣[]={0,20,29,38,47,56};/*端口位定義*/位SDA=P1^7;/*模擬I2C數(shù)據(jù)傳輸位*/位SCL=P1^6;/*模擬I2C時(shí)鐘控制位*/sbitDQ=P3^3;/*18B20數(shù)據(jù)線引腳*/位KEY_INT=P3^2;位BEEP=P3^5;位確認(rèn);/*確認(rèn)標(biāo)志*/ucharg;uchart1;uchart2;uchar1=1;uchar鍵;ucharchange_disp=0;/*IIC啟動(dòng)*//************************************************************************啟動(dòng)IIC總線功能****************************************************************************/無(wú)效Start_I2c(){SDA=1;/*致開(kāi)始條件的數(shù)據(jù)信號(hào)*/_Nop();SCL=1;_Nop();/*啟動(dòng)條件建立時(shí)間大于4.7us,延遲*/_Nop();_Nop();_Nop();_Nop();SDA=0;/*致開(kāi)始信號(hào)*/_Nop();/*啟動(dòng)條件鎖定時(shí)間大于4μs*/_Nop();_Nop();_Nop();_Nop();SCL=0;/*鉗位I2C總線,準(zhǔn)備致或接收數(shù)據(jù)*/_Nop();_Nop();}/************************************************************************結(jié)束IIC總線功能****************************************************************************/無(wú)效Stop_I2c(){SDA=0;/*致結(jié)束條件的數(shù)據(jù)信號(hào)*/_Nop();/*致結(jié)束條件的時(shí)鐘信號(hào)*/SCL=1;/*結(jié)束條件建立時(shí)間大于4μs*/_Nop();_Nop();_Nop();_Nop();_Nop();SDA=1;/*致I2C總線結(jié)束信號(hào)*/_Nop();_Nop();_Nop();_Nop();}/************************************************************************字節(jié)數(shù)據(jù)傳輸功能****************************************************************************/無(wú)效致字節(jié)(ucharc){ ucharBitCnt; for(BitCnt=0;BitCnt<8;BitCnt++)/*要傳輸?shù)臄?shù)據(jù)長(zhǎng)度為8位*/{if((c<<BitCnt)&0x80)SDA=1;/*確定致位*/否則SDA=0;_Nop();SCL=1;/*設(shè)置時(shí)鐘線為高,通知從機(jī)開(kāi)始接收數(shù)據(jù)位*/_Nop();_Nop();/*確保時(shí)鐘高電平周期大于4μs*/_Nop();_Nop();_Nop();SCL=0;}_Nop();_Nop();SDA=1;/*致8位后釋放數(shù)據(jù)線,準(zhǔn)備接收響應(yīng)位*/_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();如果(SDA==1)確認(rèn)=0;否則ack=1;/*判斷是否收到確認(rèn)信號(hào)*/SCL=0;_Nop();_Nop();}/************************************************************************字節(jié)數(shù)據(jù)傳輸功能****************************************************************************/ucharRcvByte(){ ucharretc; ucharBitCnt; retc=0; SDA=1;/*設(shè)置數(shù)據(jù)線為輸入模式*/ for(BitCnt=0;BitCnt<8;BitCnt++){_Nop();SCL=0;/*設(shè)置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位*/_Nop();_Nop();/*時(shí)鐘低電平周期大于4.7μs*/_Nop();_Nop();_Nop();SCL=1;/*設(shè)置時(shí)鐘線為高,使數(shù)據(jù)線上的數(shù)據(jù)有效*/_Nop();_Nop();retc=retc<<1;如果(SDA==1)retc=retc+1;/*讀取數(shù)據(jù)位,將接收到的數(shù)據(jù)位放入retc*/_Nop();_Nop();}SCL=0;_Nop();_Nop();返回(返回);}/*********************************************************************響應(yīng)函數(shù)原型:voidAck_I2c(bita);****************************************************************************/無(wú)效Ack_I2c(位a){如果(a==0)SDA=0;/*在此處致響應(yīng)或不響應(yīng)信號(hào)*/否則SDA=1;_Nop();_Nop();_Nop();SCL=1;_Nop();_Nop();/*時(shí)鐘低電平周期大于4μs*/_Nop();_Nop();_Nop(); SCL=0; /*清除時(shí)鐘線并鉗位I2C總線繼續(xù)接收*/_Nop();_Nop();}/************************************************************************向無(wú)子地址設(shè)備致字節(jié)數(shù)據(jù)功能****************************************************************************/位ISendByte(ucharsla,ucharc){開(kāi)始_I2c(); /*啟動(dòng)總線*/致字節(jié)(SLA); /*致設(shè)備地址*/如果(確認(rèn)==0)返回(0);致字節(jié)(c); /*致數(shù)據(jù)*/如果(確認(rèn)==0)返回(0);停止_I2c(); /*結(jié)束總線*/返回(1);}/************************************************************************致多字節(jié)數(shù)據(jù)函數(shù)到帶有子地址的設(shè)備****************************************************************************/位ISendStr(ucharsla,ucharsuba,uchar*s,ucharno){uchar我; 開(kāi)始_I2c(); /*啟動(dòng)總線*/致字節(jié)(SLA); /*致設(shè)備地址*/如果(確認(rèn)==0)返回(0);致字節(jié)(suba); /*致設(shè)備子地址*/如果(確認(rèn)==0)返回(0);for(i=0;i<no;i++){致字節(jié)(*s);/*致數(shù)據(jù)*/如果(確認(rèn)==0)返回(0);s++;}停止_I2c();/*結(jié)束總線*/返回(1);}/************************************************************************讀取字節(jié)數(shù)據(jù)功能到無(wú)子地址設(shè)備****************************************************************************/位IRcvByte(ucharsla,uchar*c){開(kāi)始_I2c();/*啟動(dòng)總線*/致字節(jié)(SLA+1);/*致設(shè)備地址*/如果(確認(rèn)==0)返回(0);*c=RcvByte();/*讀取數(shù)據(jù)*/Ack_I2c(1);/*致非應(yīng)答位*/停止_I2c();/*結(jié)束總線*/返回(1);}/************************************************************************從子尋址設(shè)備讀取多字節(jié)數(shù)據(jù)函數(shù)****************************************************************************/位IRcvStr(ucharsla,ucharsuba,uchar*s,ucharno){uchar我;開(kāi)始_I2c();/*啟動(dòng)總線*/致字節(jié)(SLA);/*致設(shè)備地址*/如果(確認(rèn)==0)返回(0);致字節(jié)(suba);/*致設(shè)備子地址*/如果(確認(rèn)==0)返回(0);開(kāi)始_I2c();致字節(jié)(SLA+1);如果(確認(rèn)==0)返回(0);for(i=0;i<no-1;i++){*s=RcvByte();/*致數(shù)據(jù)*/Ack_I2c(0);/*致答案位*/s++;}*s=RcvByte();Ack_I2c(1);/*致未經(jīng)請(qǐng)求的位*/停止_I2c();/*結(jié)束總線*/返回(1);}/*IIC完成*//*zlg7290開(kāi)始*/無(wú)效延遲MS(無(wú)符號(hào)字符我){飛行j,k;for(k=0;k<i;k++)for(j=0;j<60;j++);}無(wú)效延遲(){飛行i,j;對(duì)于(i=0;i<100;i++)for(j=0;j<100;j++);}/******************************************************************************Hàn?ùmínchēng:ZLG7290_SendCmd************************************************************************************/flyZLG7290_SendCmd(flyData1,flyData2){浮動(dòng)數(shù)據(jù)[2];數(shù)據(jù)[0]=數(shù)據(jù)1;數(shù)據(jù)[1]=數(shù)據(jù)2;ISendStr(zlg7290,0x07,Data,2);延遲MS(10);返回1;}/****************************************************************************函數(shù)名稱:ZLG7290_SendBuf********************************************************************************/無(wú)效ZLG7290_SendBuf(uchar*disp_buf,ucharnum){uchar我;for(i=0;i<num;i++){ZLG7290_SendCmd(0x60+i,*disp_buf);disp_buf++;}}/****************************************************************************函數(shù)名稱:ZLG7290_GetKey********************************************************************************/ucharZLG7290_GetKey(){uchar接收;接收=0;IRcvStr(zlg7290,1,&rece,1);延遲MS(10);返回收據(jù);}/*zlg7290完成*//*18b20開(kāi)始*/無(wú)效延遲(uintus){而(我們--);}無(wú)效重置(無(wú)效)/*重置*/{ucharx=0;DQ=1;延遲(8);/*稍微延遲一下*/DQ=0; 延遲(80);/*精確延遲大于480us*/DQ=1;/*拉高總線*/延遲(14);x=DQ;延遲(20);DQ=1;}/************************從DS18B20讀取一個(gè)字節(jié)****************/ucharreadbyte(void) /*讀取1個(gè)字節(jié)*/{uchari=0;uchar數(shù)據(jù)=0;對(duì)于(i=8;i>0;i--){DQ=0;數(shù)據(jù)>>=1;DQ=1;如果(DQ)數(shù)據(jù)|=0x80;延遲(4);}返回(數(shù)據(jù));}/************************向DS18B20寫(xiě)入一個(gè)字節(jié)***************************/voidwritebyte(uchardat) /*寫(xiě)1個(gè)字節(jié)*/{uchari=0;對(duì)于(i=8;i>0;i--){DQ=0;DQ=dat&0x01;延遲(cn1);DQ=1;數(shù)據(jù)>>=1;}延遲(4);}/************************CPU讀取溫度值**************************/voidreadtemp(void)/*讀取溫度*/{uchara=0,b=0;重置();寫(xiě)字節(jié)(0xCC);寫(xiě)字節(jié)(0x4E);寫(xiě)字節(jié)(0x55);/*警報(bào)0--100*/寫(xiě)字節(jié)(0x00);寫(xiě)字節(jié)(0xff);/*分辨率0.0625*/重置();寫(xiě)字節(jié)(0xCC);/*跳過(guò)序列號(hào)*/寫(xiě)字節(jié)(0x48);/*保存設(shè)置*/重置();寫(xiě)字節(jié)(0xCC);寫(xiě)字節(jié)(0xB8);/*回調(diào)溫度*/ 重置();寫(xiě)字節(jié)(0xCC);/*跳過(guò)讀取序列號(hào)列號(hào)的操作*/寫(xiě)字節(jié)(0x44); /*開(kāi)始溫度轉(zhuǎn)換*/延遲(500);重置();寫(xiě)字節(jié)(0xCC); /*跳過(guò)讀取序列號(hào)列號(hào)的操作*/寫(xiě)字節(jié)(0xBE); /*讀取溫度寄存器等(一共可以讀取9個(gè)寄存器)前兩個(gè)是溫度*/ a=readbyte();/*低階*/b=讀字節(jié)();/*高階*/脾氣[0]=a&0x0f; /*小數(shù)部分的LSB數(shù)量*/脾氣[0]=脾氣[0]>>2; g=脾氣[0]; g=g*25; a=a>>4; /*低位右移2位,丟棄低位部分的低兩位*/ 脾氣[1]=b<<4;/*高位左移6位, 丟棄高位前5位符號(hào)位和符號(hào)位后1位*/ 脾氣[1]=脾氣[1]|a;/*獲取整數(shù)部分*/ /*0.25*100*LSB是小數(shù)部分*/}/*18b20完成*/無(wú)效的主要(){TMOD=0x20;TL1=0xfd;TH1=0xfd;SCON=0x52;TR1=1; 而(1){uchar我,米;uint[13]; 浮動(dòng)t;讀臨時(shí)(); 如果(更改_disp) {t1=采樣[cn1];/*顯示值*/disp_buf[0]=t1%10;disp_buf[1]=t1/10%10;disp_buf[2]=31;disp_buf[3]=31;disp_buf[4]=31;disp_buf[5]=31;disp_buf[6]=31;disp_buf[7]=31;ZLG7290_SendBuf(disp_buf,8);如果(KEY_INT==0) {KEY=ZLG7290_GetKey(); 開(kāi)關(guān)(鑰匙) {案例4: if(cn1==5) cn1=1; 別的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- CCAA - 2024年12月環(huán)境管理體系基礎(chǔ)答案及解析 - 詳解版(65題)
- 福建省福州市連江縣2025-2026學(xué)年七年級(jí)(上)期末道德與法治試卷(含答案)
- 老年終末期患者生命質(zhì)量提升策略
- 毛衫套口工安全生產(chǎn)能力水平考核試卷含答案
- 我國(guó)上市公司海外并購(gòu)融資模式的創(chuàng)新路徑探究
- 尿素裝置操作工崗前安全生產(chǎn)能力考核試卷含答案
- 繼電器封裝工崗前進(jìn)階考核試卷含答案
- 2026安徽中煤三建二十九工程處人員招聘3人備考題庫(kù)參考答案詳解
- 高空外墻清洗員崗前安全強(qiáng)化考核試卷含答案
- 2026云南昭通市鎮(zhèn)雄聯(lián)通公司招聘10人備考題庫(kù)及完整答案詳解1套
- 地下礦山頂板管理安全培訓(xùn)課件
- 監(jiān)獄消防培訓(xùn) 課件
- 道路建設(shè)工程設(shè)計(jì)合同協(xié)議書(shū)范本
- 2025年安徽阜陽(yáng)市人民醫(yī)院校園招聘42人筆試模擬試題參考答案詳解
- 2024~2025學(xué)年江蘇省揚(yáng)州市樹(shù)人集團(tuán)九年級(jí)上學(xué)期期末語(yǔ)文試卷
- 2026屆江蘇省南京溧水區(qū)四校聯(lián)考中考一模物理試題含解析
- 民用建筑熱工設(shè)計(jì)規(guī)范
- 學(xué)堂在線 雨課堂 學(xué)堂云 唐宋詞鑒賞 期末考試答案
- 2025至2030中國(guó)輻射監(jiān)測(cè)儀表市場(chǎng)投資效益與企業(yè)經(jīng)營(yíng)發(fā)展分析報(bào)告
- 產(chǎn)品認(rèn)證標(biāo)志管理制度
- 廣州西關(guān)大屋介紹
評(píng)論
0/150
提交評(píng)論