DS18B20數(shù)字溫度計是顯示范圍為0.0~ +99.9的測量溫度的儀器。
中文名稱 | DS18B20數(shù)字溫度計 | 用途 | 測量溫度 |
---|---|---|---|
顯示方式 | 數(shù)碼管 | 顯示范圍 | 0.0~ +99.9 |
DS18B20數(shù)字溫度計畢業(yè)設(shè)計
//通過DS18B20測試當(dāng)前環(huán)境溫度, 并通過數(shù)碼管顯示當(dāng)前溫度值, 目前顯示范圍: 0.0~ +99.9度#include#include #define uchar unsigned char#define uint unsigned int#define DATAPORT P0 //定義P0口為Led數(shù)據(jù)口//#define SETTEMP P1 //定義P1口為設(shè)定溫度#define SELECT P2 //定義P2口為選擇信號sbit L1 = P1^1; //燈作為電機(jī)sbit L2 = P1^2;sbit L3 = P1^3;sbit DQ = P3^4; //定義ds18b20通信端口 char Num={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9int temp1,temp2,ID=0,set=0,blink;int temp1=27,xs=5; //定義整數(shù)和小數(shù)unsigned int max,mid,min,flag;/////////////////////下面是小板的地址///大板對應(yīng)為0xc700,0xc600,0xc500////#define led_data XBYTE[0xe000] //顯示數(shù)據(jù)端口#define led_sel XBYTE[0xc000] //顯示器選擇端#define key_addr XBYTE[0xa000] //按鍵端口 //uchar d={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0x0F8,0x80,0x90};//仿真時用到/*********延時>K*1ms,*//////*12.000mhz>11.0596有誤差********/void delayms(int ms){ uchar i;while(ms--){ for(i=250;i>0;i--);}}/***********ds18b20延遲子函數(shù)(晶振11.0596MHz )*******/void delay_18B20(unsigned int i){while(i--);}/**********ds18b20初始化函數(shù)**********************/void Init_DS18B20(void) {unsigned char x=0;DQ = 1; //DQ復(fù)位 ds18b20通信端口 delay_18B20(8); //稍做延時DQ = 0; //單片機(jī)將DQ拉低delay_18B20(80); //精確延時 大于 480usDQ = 1; //拉高總線delay_18B20(4);x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗delay_18B20(20);}/***********ds18b20讀一個字節(jié)**************/unsigned char ReadOneChar(void){uchar i=0;uchar dat = 0;for (i=8;i>0;i--){ DQ = 0; // 高電平拉成低電平時讀周期開始 dat>>=1; DQ = 1; // 給脈沖信號 if(DQ) dat|=0x80; // | * delay_18B20(4);} return(dat);}/*************ds18b20寫一個字節(jié)****************/void WriteOneChar(uchar dat){ unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; //從高電平拉至低電平時,寫周期的開始 DQ = dat&0x01; //數(shù)據(jù)的最低位先寫入 delay_18B20(5); //60us到120us延時 DQ = 1; dat>>=1; //從最低位到最高位傳入}}/**************讀取ds18b20當(dāng)前溫度************/void ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳過讀序號列號的操作WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換delay_18B20(100); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳過讀序號列號的操作WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度delay_18B20(100);a=ReadOneChar(); //讀取溫度值低位b=ReadOneChar(); //讀取溫度值高位temp1=b</高8位中后三位數(shù)的值temp1+=(a&0xf0)>>4; //低8位中的高4位值加上高8位中后三位數(shù)的值 temp1室溫整數(shù)值temp2=a&0x0f; //小數(shù)的值// temp=((b*256+a)>>4); //當(dāng)前采集溫度值除16得 實(shí)際溫度值 xs=temp2*0.0625*10; //小數(shù)位,若為0.5則算為5來顯示 xs小數(shù)//上、下限溫度值可自動保存,掉電不會丟失。?//寫暫存存儲器 寫暫存存儲器 復(fù)制暫存存儲器 ??}//////////////////////////////////////////////////////////////////////顯示//////////////////////////////////////////void display(int T){ led_sel=0xef; //選通LED4 1 led_data=0x01; delayms(1); led_sel=0xf7; //3 燈 c led_data=0x39; delayms(1); led_sel=0xfb; //2 燈 //小數(shù)位 led_data=0x3f; delayms(1); led_sel=0xfd; //1 燈 led_data=Num[T%10]+128; delayms(1); led_sel=0xfe; //0 燈 led_data=Num[T/10]; delayms(1); led_sel=0xef; //選通LED4 1 led_data=0x00; delayms(1);/* for(i=12;i>0;i--){ led_sel=0x00; // led_data=0x00; delayms(1);}*/}/*void displaymax(void){ int i;for(i=12;i>0;i--){ led_sel=0xef; //選通LED4 1 led_data=0x01; delayms(1); led_sel=0xf7; //3 燈 c led_data=0x39; delayms(1); led_sel=0xfb; //2 燈 //小數(shù)位 led_data=0x3f; delayms(1); led_sel=0xfd; //1 燈 led_data=Num[max%10]+128; delayms(1); led_sel=0xfe; //0 燈 led_data=Num[max/10]; delayms(1);}for(i=12;i>0;i--){ led_sel=0x00; // led_data=0x00; delayms(1);}}void displaymid(void){ int i;for(i=12;i>0;i--){ led_sel=0xef; //選通LED4 2 led_data=0x40; delayms(1); led_sel=0xf7; //3 燈 c led_data=0x39; delayms(1); led_sel=0xfb; //2 燈 //小數(shù)位 led_data=0x3f; delayms(1); led_sel=0xfd; //1 燈 led_data=Num[mid%10]+128; delayms(1); led_sel=0xfe; //0 燈 led_data=Num[mid/10]; delayms(1);}for(i=12;i>0;i--){ led_sel=0x00; // led_data=0x00; delayms(1);}}void displaymin(void){ int i;for(i=12;i>0;i--){ led_sel=0xef; //選通LED4 3 led_data=0x08; delayms(1); led_sel=0xf7; //3 燈 c led_data=0x39; delayms(1); led_sel=0xfb; //2 燈 //小數(shù)位 led_data=0x3f; delayms(1); led_sel=0xfd; //1 燈 //個位 led_data=Num[min%10]+128; delayms(1); led_sel=0xfe; //0 燈 十位 led_data=Num[min/10]; delayms(1);}for(i=12;i>0;i--){ led_sel=0x00; // led_data=0x00; delayms(1);}}*//////加一//////////////////////increase() { if(ID==1) { max++; if(max>=60) { max=60; } } /* if(ID==2) { if(mid<max-2) { mid++; } else {mid=max-2;} }*/ if(ID==3) { if(min///////////減一/////////////////decrease() { if(ID==1) { if(max>mid+2) { max--; } else{max=mid+2;} } /* if(ID==2) { if(mid>min+2) { mid--; } else {mid=min+2;} }*/ if(ID==3) { min--; if(min////////////////////按鍵////按鍵////按鍵////按鍵////按鍵////按鍵//////////void key(void){ if(key_addr==0xf7) //k4 { delayms(10); if(key_addr==0xf7) { if(set==1) // K4 雙重功能 {ID=0;set=0;goto loop;} if(set==0) { ID=5;set=1; led_sel=0x00; //不顯示 led_data=0x00; delayms(1); } while(key_addr==0xfe); } } loop: delayms(1); if(key_addr==0xfe&&ID>=1) //選通K1第一次按下K1時 進(jìn)入設(shè)定上下限溫度 { delayms(10); if(key_addr==0xfe) { ID++; if(ID>=4) { ID=1; } while(key_addr==0xfe); } } if(ID==1) { display(max); if(key_addr==0xfd) //選通K2 加 { delayms(20); if(key_addr==0xfd) { increase(); display(max); } while(key_addr==0xfd); } if(key_addr==0xfb) //K3 減 { delayms(20); if(key_addr==0xfb) { decrease(); display(max); while(key_addr==0xfb); } } } if(ID==2) { display(mid); if(key_addr==0xfd) //選通K2 { delayms(20); if(key_addr==0xfd) { increase(); display(mid); } while(key_addr==0xfd); } if(key_addr==0xfb) //K3 { delayms(20); if(key_addr==0xfb) { decrease(); display(mid); while(key_addr==0xfb); } } } if(ID==3) { display(min); if(key_addr==0xfd) //選通K2 { delayms(20); if(key_addr==0xfd) { increase(); display(min); } while(key_addr==0xfd); } if(key_addr==0xfb) //K3 { delayms(20); if(key_addr==0xfb) { decrease(); display(min); while(key_addr==0xfb); } } } }//////////////////////////////////////////////////////////////////顯示//////////////////////////顯示DS18B20測出的溫度///////////////////////////////////void displaytemp()//顯示DS18B20測出的溫度{ led_sel=0xf7; //3 燈 c led_data=0x39; delayms(1); led_sel=0xfb; //2 燈 //小數(shù)位 led_data=Num[xs]; delayms(1); led_sel=0xfd; //1 燈 //個位 led_data=Num[temp1%10]+128; delayms(1); led_sel=0xfe; //0 燈 十位 led_data=Num[temp1/10]; delayms(1);}///////////o燈//////燈/////temp1為實(shí)測溫度//////燈//////燈//////燈///////void motor(void){ if(temp1>=max) //高溫,開三個電機(jī) //頻繁啟動與停止? //3 { L1=0;L2=0;L3=0; flag=1; } if(max>temp1&&temp1/3 { L1=0;L2=0;L3=0; } if(max-1>temp1&&temp1>=mid) //2 { L1=0;L2=0;L3=1;flag=3; } if(mid>temp1&&temp1>=mid-1&&flag==3) //2// { L1=0;L2=0;L3=1; } if(mid-1>temp1&&temp1>=min) //1 { L1=0;L2=1;L3=1;flag=5; } if(min>temp1&&temp1>=min-1&&flag==5) //1 { L1=0;L2=1;L3=1; } if(min>temp1) //0 { L1=1;L2=1;L3=1;flag=7; } if(min>temp1&&temp1>=min-1&&flag==7) //0 { L1=1;L2=1;L3=1; } if(mid>temp1&&temp1>=mid-1&&flag==5) //1 { L1=0;L2=1;L3=1; } if(max>temp1&&temp1<=max-1&&flag==3) //2 { L1=0;L2=0;L3=1; } }///////////////////////主函數(shù)////////////////////////////void main(void){ max=30; //上下限初始化 min=20;
while(1){ mid=(max+min)/2; motor(); key(); if(ID==0) displaytemp(); // ReadTemperature();}}
DS18B20數(shù)字溫度計畢業(yè)設(shè)計任務(wù)書怎么寫?
控制器采用單片機(jī)AT89C51,溫度傳感器采用DS18B20,用4位共陽LED數(shù)碼管以動態(tài)掃描實(shí)現(xiàn)溫度顯示。任務(wù)書該怎么寫?格式應(yīng)為:XXXX具有什么功能,如何實(shí)現(xiàn)。
方法 集成溫度傳感器LM35靈敏度為l0mv/℃,即溫度為10℃時,輸出電壓為100mv. 常溫下測溫精度為+/-0.5℃以內(nèi),消耗電流最大也只有70uA,自身發(fā)熱對測旦精度也...
市場報價 1、武漢永盛科技有限公司 ds1數(shù)字溫度計。型號:F53-2B,價格:2100元 2、溫州市泰利工藝品廠 ds1數(shù)字溫度計,型號:52-2,價格:1600元 3、深圳市樂買宜電子有限公司 d...
格式:pdf
大?。?span id="gak2y2y" class="single-tag-height">837KB
頁數(shù): 19頁
評分: 4.6
We will continue to im prove the compa ny's inter nal control system, and steady impr ovement in a bility to manag e and control, optimize busi ness processes, to e nsure smooth pr oce sses, re sponsibilitie s in place ; to further strengthe n inter nal control s, play a contr ol post indepe nde nt oversig ht role of evaluation com plying wit h third-party responsi bility; to a ctively make use of
格式:pdf
大?。?span id="skscomk" class="single-tag-height">837KB
頁數(shù): 36頁
評分: 4.5
1 題 目:基于 DS1820組件的 數(shù)字溫度計設(shè)計 摘要: 隨著時代的進(jìn)步和發(fā)展傳感器技術(shù)已經(jīng)普及到我們生活、工作、科研、各個領(lǐng)域,已經(jīng) 成為一種比較成熟的技術(shù) , 本文主要介紹了一個基于 DS1820組件的測溫系統(tǒng),詳細(xì)描述了利 用數(shù)字溫度傳感器 DS1820開發(fā)測溫系統(tǒng)的過程, 重點(diǎn)對傳感器在單片機(jī)下的硬件連接, 軟件 編程以及各模塊系統(tǒng)流程進(jìn)行了詳盡分析, 對各部分的電路也一一進(jìn)行了介紹 ,該系統(tǒng)可以方 便的實(shí)現(xiàn)實(shí)現(xiàn)溫度采集和顯示,并可根據(jù)需要任意設(shè)定上下限報警溫度,它使用起來相當(dāng)方 便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點(diǎn),適合于我們?nèi)粘I詈凸ぁ?農(nóng)業(yè)生產(chǎn)中的溫度測量,也可以當(dāng)作溫度處理模塊嵌入其它系統(tǒng)中,作為其他主系統(tǒng)的輔助 擴(kuò)展。 DS1820與 AT89C51結(jié)合實(shí)現(xiàn)最簡溫度檢測系統(tǒng),該系統(tǒng)結(jié)構(gòu)簡單,抗干擾能力強(qiáng),適 合于惡劣環(huán)境下進(jìn)行現(xiàn)場溫度測量或遠(yuǎn)程
DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:
64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。
DQ為數(shù)字信號輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。
光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標(biāo)號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8 X5 X4 1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個DS18B20的目的。
DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號位。
這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進(jìn)制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。
例如 125℃的數(shù)字輸出為07D0H, 25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FE6FH,-55℃的數(shù)字輸出為FC90H。
DS18B20溫度傳感器的內(nèi)部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的E2RAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。
暫存存儲器包含了8個連續(xù)字節(jié),前兩個字節(jié)是測得的溫度信息,第一個字節(jié)的內(nèi)容是溫度的低八位,第二個字節(jié)是溫度的高八位。第三個和第四個字節(jié)是TH、TL的易失性拷貝,第五個字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個字節(jié)的內(nèi)容在每一次上電復(fù)位時被刷新。第六、七、八個字節(jié)用于內(nèi)部計算。第九個字節(jié)是冗余檢驗(yàn)字節(jié)。
該字節(jié)各位的意義如下:
TM R1 R0 1 1 1 1 1
低五位一直都是1 ,TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設(shè)置為0,用戶不要去改動。R1和R0用來設(shè)置分辨率,如下表所示:(DS18B20出廠時被設(shè)置為12位)
分辨率設(shè)置表:
R1 R0 分辨率 溫度最大轉(zhuǎn)換時間
0 0 9位 93.75ms
0 1 10位 187.5ms
1 0 11位 375ms
1 1 12位 750ms
根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號表示復(fù)位成功。
數(shù)字溫度計采用進(jìn)口芯片組裝精度高、高穩(wěn)定性,誤差≤0.5%, 內(nèi)電源、微功耗、不銹鋼外殼,防護(hù)堅固,美觀精致。
數(shù)字溫度計采用進(jìn)口高精度、低溫漂、超低功耗集成電路和寬溫型液晶顯示器,內(nèi)置高能量電池連續(xù)工作≥5年無需敷設(shè)供電電纜,是一種精度高、穩(wěn)定性好、適用性極強(qiáng)的新型現(xiàn)場溫度顯示儀。是傳統(tǒng)現(xiàn)場指針雙金屬溫度計的理想替代產(chǎn)品,廣泛應(yīng)用于各類工礦企業(yè),大專院校,科研院所。
溫度數(shù)我們?nèi)粘Ia(chǎn)和生活中實(shí)時在接觸到的物理量,但是它是看不到的,僅憑感覺只能感覺到大概的溫度值,傳統(tǒng)的指針式的溫度計雖然能指示溫度,但是精度低,使用不夠方便,顯示不夠直觀,數(shù)字溫度計的出現(xiàn)可以讓人們直觀的了解自己想知道的溫度到底是多少度。
數(shù)字溫度計采用溫度敏感元件也就是溫度傳感器(如鉑電阻,熱電偶,半導(dǎo)體,熱敏電阻等),將溫度的變化轉(zhuǎn)換成電信號的變化,如電壓和電流的變化,溫度變化和電信號的變化有一定的關(guān)系,如線性關(guān)系,一定的曲線關(guān)系等,這個電信號可以使用模數(shù)轉(zhuǎn)換的電路即AD轉(zhuǎn)換電路將模擬信號轉(zhuǎn)換為數(shù)字信號,數(shù)字信號再送給處理單元,如單片機(jī)或者PC機(jī)等,處理單元經(jīng)過內(nèi)部的軟件計算將這個數(shù)字信號和溫度聯(lián)系起來,成為可以顯示出來的溫度數(shù)值,如25.0攝氏度,然后通過顯示單元,如LED,LCD或者電腦屏幕等顯示出來給人觀察。這樣就完成了數(shù)字溫度計的基本測溫功能。
數(shù)字溫度計根據(jù)使用的傳感器的不同,AD轉(zhuǎn)換電路,及處理單元的不同,它的精度,穩(wěn)定性,測溫范圍等都有區(qū)別,這就要根據(jù)實(shí)際情況選擇符合規(guī)格的數(shù)字溫度計。
數(shù)字溫度計有手持式,盤裝式,及醫(yī)用的小體積的等等。
最早的溫度計是在1593年由意大利科學(xué)家伽利略(1564~1642)發(fā)明的。他的第一只溫度計是一根一端敞口的玻璃管,另一端帶有核桃大的玻璃泡。使用時先給玻璃泡加熱,然后把玻璃管插入水中。隨著溫度的變化,玻璃管中的水面就會上下移動,根據(jù)移動的多少就可以判定溫度的變化和溫度的高低。溫度計有熱脹冷縮的作用所以這種溫度計,受外界大氣壓強(qiáng)等環(huán)境因素的影響較大,所以測量誤差大。
后來伽利略的學(xué)生和其他科學(xué)家,在這個基礎(chǔ)上反復(fù)改進(jìn),如把玻璃管倒過來,把液體放在管內(nèi),把玻璃管封閉等。比較突出的是法國人布利奧在1659年制造的溫度計,他把玻璃泡的體積縮小,并把測溫物質(zhì)改為水銀,這樣的溫度計已具備了溫度計的雛形。以后荷蘭人華倫海特在1709年利用酒精,在1714年又利用水銀作為測量物質(zhì),制造了更精確的溫度計。他觀察了水的沸騰溫度、水和冰混合時的溫度、鹽水和冰混合時的溫度;經(jīng)過反復(fù)實(shí)驗(yàn)與核準(zhǔn),最后把一定濃度的鹽水凝固時的溫度定為0℉,把純水凝固時的溫度定為32℉,把標(biāo)準(zhǔn)大氣壓下水沸騰的溫度定為212℉,用℉代表華氏溫度,這就是華氏溫度計。
在華氏溫度計出現(xiàn)的同時,法國人列繆爾(1683~1757)也設(shè)計制造了一種溫度計。他認(rèn)為水銀的膨脹系數(shù)太小,不宜做測溫物質(zhì)。他專心研究用酒精作為測溫物質(zhì)的優(yōu)點(diǎn)。他反復(fù)實(shí)踐發(fā)現(xiàn),含有1/5水的酒精,在水的結(jié)冰溫度和沸騰溫度之間,其體積的膨脹是從1000個體積單位增大到1080個體積單位。因此他把冰點(diǎn)和沸點(diǎn)之間分成80份,定為自己溫度計的溫度分度,這就是列氏溫度計。"para" label-module="para">
華氏溫度計制成后又經(jīng)過30多年,瑞典人攝爾修斯于1742年改進(jìn)了華倫海特溫度計的刻度,他把水的沸點(diǎn)定為0度,把水的冰點(diǎn)定為100度。后來他的同事施勒默爾把兩個溫度點(diǎn)的數(shù)值又倒過來,就成了百分溫度,即攝氏溫度,用℃表示。華氏溫度與攝氏溫度的關(guān)系為
℉=9/5℃ 32,或℃=5/9(℉-32)。
英、美國家多用華氏溫度,德國多用列氏溫度,而世界科技界和工農(nóng)業(yè)生產(chǎn)中,以及我國、法國等大多數(shù)國家則多用攝氏溫度。