DS18B20溫度傳感器測溫通過數(shù)碼管顯示(上傳)_第1頁
DS18B20溫度傳感器測溫通過數(shù)碼管顯示(上傳)_第2頁
DS18B20溫度傳感器測溫通過數(shù)碼管顯示(上傳)_第3頁
DS18B20溫度傳感器測溫通過數(shù)碼管顯示(上傳)_第4頁
DS18B20溫度傳感器測溫通過數(shù)碼管顯示(上傳)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、DS18B20溫度傳感器測溫通過數(shù)碼管顯示(詳盡版)/*- 名稱:DS18B20溫度傳感器數(shù)碼管顯示 編寫:JR 日期:2017.12 修改:無 內(nèi)容:利用DS18B20溫度傳感器測量溫度-40+100,通過數(shù)碼管顯示單片機開發(fā)板使用“金容電子(-*/#include<reg52.h>#include<stdio.h>#include<intrins.h>#include"delayus.h"#define uchar unsigned char#define uint unsigned intsbit DQ=P22; /溫度傳感器信號線

2、sbit dula=P26; /數(shù)碼管段選線sbit wela=P27; /數(shù)碼管位選線sbit beep=P23; /數(shù)碼管位選線uint temper;uchar a1,a2,a3,a4,a5,n;uint aaa,num;uint warn_l=3000; /低溫-40報警,測試溫度乘以100uint warn_h=10000; /高溫100報警,測試溫度乘以100float ttt;void disp(uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5);const uchar table=0x3f,0x0

3、6,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x40,0x00;/不帶小數(shù)點0-9編碼const uchar table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef; /帶小數(shù)點0-9編碼uchar data temp_data2=0x00,0x00; /讀出溫度暫放void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/*18B20復位初始化函數(shù)1、將數(shù)據(jù)線拉高到12、延時2us(該時間要求不是很嚴格,但是要盡可能

4、短一點)3、將數(shù)據(jù)線拉低到04、延時750us(該時間范圍可以在480960us)5、將數(shù)據(jù)線拉高到16、延時等待(70us),如果初始化成功則在1560us內(nèi)產(chǎn)生一個由18B20返回的低電平0,據(jù)該狀態(tài)可以確定它的存在。但是應注意,不能無限的等待,不然會使程序進入死循環(huán),所以要進行超時判斷。7、若CPU讀到數(shù)據(jù)線上的低電平0后,還要進行延時,其延時時間從發(fā)出高電平算起(第5步的時間算起最少要480us)。8、將數(shù)據(jù)線再次拉高到1后結(jié)束*/void dsreset()uchar st=1;DQ=1; /拉高數(shù)據(jù)線_nop_();_nop_();while(st)DQ=0; /控制器向DS18B

5、20發(fā)低電平脈沖delayus(81); /延時750us左右DQ=1; /控制器拉高總線delay70us(); /延時70usif(DQ=1)st=1;else st=0;delayus(54); /延時500us等待/*向DS18B20寫一個字節(jié)函數(shù)1、將數(shù)據(jù)線置低電平02、延時15us3、按從低位到高位的順序發(fā)送數(shù)據(jù)(一次只發(fā)送一位)4、延時45us5、將數(shù)據(jù)線拉高到16、重復15步驟,直到發(fā)送完整個字節(jié)7、最后將數(shù)據(jù)線拉高到1*/void tempwritebyte(uchar date)uchar i,temp;DQ=1; /因為寫之前需要置0,所以先置為高電平_nop_();_n

6、op_(); for(i=8;i>0;i-) /一位一位的寫 temp=date&0x01; /取數(shù)據(jù)最低位DQ=0;delay20us(); /延時20usif(temp=1) /判斷數(shù)據(jù)為1還是0DQ=1; /如果為1則發(fā)送1,即DQ=1;如果是0則保持,因為之前DQ已經(jīng)置為0,所以不用判斷。delay45us(); DQ=1;date=date>>1; /*讀1個字節(jié)數(shù)據(jù)函數(shù)1、將數(shù)據(jù)線拉高到12、延時2us3、將數(shù)據(jù)線拉低到04、延時6us5、將數(shù)據(jù)線拉高到16、延時4us7、讀數(shù)據(jù)線的狀態(tài)得到一個狀態(tài)位,并進行數(shù)據(jù)處理。8、延時30us9、重復17步驟,直到

7、讀取完一個字節(jié)(一個字節(jié)共8位需要循環(huán)8次)。*/uchar tempread() /uchar為帶返回值的函數(shù),void不帶uchar i,date;static bit j; /定義靜態(tài)變量 位for(i=8;i>0;i-)date=date>>1; /讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在date里DQ=1; /將數(shù)據(jù)線拉高到1_nop_();_nop_(); /延時2usDQ=0; /將數(shù)據(jù)線拉低到0_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/延時6usDQ=1; /將數(shù)據(jù)線拉高到1_nop_();_nop_

8、();_nop_();_nop_();/延時4usj=DQ;if(j=1)date=date|0x80;/1000 0000delay30us();return(date);void get_tem()dsreset(); /復位tempwritebyte(0xCC); /跳過ROMtempwritebyte(0x44); /溫度轉(zhuǎn)換dsreset(); /每次操作ROM之前要先復位,然后執(zhí)行跳過或其他指令tempwritebyte(0xCC);tempwritebyte(0xBE); /讀暫存器 temp_data0=tempread(); /第0位,溫度值低8位;RAM共9個字節(jié),從0開始

9、自動讀temp_data1=tempread(); /第1位,溫度值高8位aaa=temp_data1;aaa<<=8;aaa=aaa|temp_data0; / 兩字節(jié)合成一個整型變量。work_aaa()n=0;if(aaa>63488) / 溫度值正負判斷63448=1111 1000 0000 0000aaa=65536-aaa;n=1; / 負溫度求補碼,標志位置1ttt=aaa*6.25; /0.0625*100=6.25temper=(int)ttt;a1=temper/10000; /對1000求模,取萬位a2=temper%10000/1000; /對100

10、00求余對1000求模,取千位a3=temper%1000/100; /對1000求余再對100求模,取百位a4=temper%100/10; /取小數(shù)十位a5=temper%10; /取個位for(num=100;num>0;num-) if(n=1) /負溫度if(ttt>warn_l) /超溫報警beep=0;delay(100);beep=1;delay(100);if(a2!=0)disp(11,10,a2,a3,a4,a5);else disp(11,11,10,a3,a4,a5);else /正溫度if(ttt>warn_h) /超溫報警beep=0;delay

11、(100);beep=1;delay(100);if(a1=0&&a2=0)disp(11,11,11,a3,a4,a5);if(a1=0&&a2!=0)disp(11,11,a2,a3,a4,a5);if(a1!=0)disp(11,a1,a2,a3,a4,a5);void disp(uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5)wela=1;P0=0xFE;wela=0;dula=1;P0=tablenum0;/顯示第一個數(shù)碼管顯示'-'號dula=0;de

12、lay(2);wela=1;P0=0xFD;wela=0;dula=1;P0=tablenum1;/顯示第二個數(shù)碼管dula=0;delay(2);wela=1;P0=0xFB;wela=0;dula=1;P0=tablenum2;/顯示第三個數(shù)碼管dula=0;delay(2);wela=1;P0=0xF7;wela=0;dula=1;P0=table1num3;/顯示第四個數(shù)碼管dula=0;delay(2);wela=1;P0=0xEF;wela=0;dula=1;P0=tablenum4;/顯示第五個數(shù)碼管dula=0;delay(2);wela=1;P0=0xDF;wela=0;du

13、la=1;P0=tablenum5;/顯示第六個數(shù)碼管dula=0;delay(2);void disp1(uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5)wela=1;P0=0xFE;wela=0;dula=1;P0=tablenum0;/顯示第一個數(shù)碼管顯示'-'號dula=0;delay(2);wela=1;P0=0xFD;wela=0;dula=1;P0=tablenum1;/顯示第二個數(shù)碼管dula=0;delay(2);wela=1;P0=0xFB;wela=0;dula=1;P0=

14、tablenum2;/顯示第三個數(shù)碼管dula=0;delay(2);wela=1;P0=0xF7;wela=0;dula=1;P0=tablenum3;/顯示第四個數(shù)碼管dula=0;delay(2);wela=1;P0=0xEF;wela=0;dula=1;P0=tablenum4;/顯示第五個數(shù)碼管dula=0;delay(2);wela=1;P0=0xDF;wela=0;dula=1;P0=tablenum5;/顯示第六個數(shù)碼管dula=0;delay(2);void main()uchar j;get_tem();for(j=0;j<10;j+)wela=1;P0=0x00;w

15、ela=0;dula=1;P0=tablej;/顯示第一個數(shù)碼管顯示'-'號delay(500);dula=0;while(1)get_tem();work_aaa();/* 程序名; _delayus_h_* 功 能: DS18B20的c51編程頭文件 * 編程者:ZPZ* 編程時間:2017/1 * 說 明:us延時程序 */#ifndef _delayus_h_/定義頭文件#define _delayus_h_#define uint unsigned int /變量類型宏定義,用uint表示無符號整形(16位)#define uchar unsigned charvoi

16、d delayus(uint t) /t=54時,延時500us;t=81時延時745us while(t-);void delay15us() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();void delay20us() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_n

17、op_();void delay30us() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();void delay45us() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop

18、_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();void delay70us() _nop_();_nop_();

溫馨提示

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

最新文檔

評論

0/150

提交評論