0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Proteus教程第四講:DS18B20溫度測(cè)量

Harmony&嵌入式學(xué)習(xí) ? 來(lái)源:Harmony&嵌入式學(xué)習(xí) ? 作者:Harmony&嵌入式學(xué) ? 2023-06-14 11:19 ? 次閱讀

視頻教程:https://www.bilibili.com/video/BV1bf4y1U7ff

傳感器基本概念

1、按傳感器的物理量分類(lèi):可分為位移、溫度、速度、流量、力、氣體成份等傳感器。 2、按傳感器工作原理分類(lèi):可分為電阻、電感、光柵、電壓、電容、霍爾、光電、熱電偶等傳感器。 3、按傳感器輸出信號(hào)的性質(zhì)分類(lèi):可分為:輸出為開(kāi)關(guān)量“1”和"0”或“開(kāi)”和“關(guān)”的開(kāi)關(guān)型傳感器;輸出為模擬型傳感器;輸出為脈沖或代碼的數(shù)字型傳感器。

poYBAGSJMYWAUDCzAAHmfCj2wRQ511.pngpoYBAGSJMY2AZje8AAPXUYMBm0I165.png
#include "reg52.h"			 //此文件中定義了單片機(jī)的一些特殊功能寄存器
#define uchar unsigned char
#define uint unsigned int
typedef unsigned int u16;	  //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
typedef unsigned char u8;
#define uchar unsigned char
#define uint unsigned int
#define SEG P0
sbit SCAN1 = P2^0;
sbit SCAN2 = P2^1;
sbit SCAN3 = P2^2;
sbit SCAN4 = P2^3;
uchar number;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int display=0;//數(shù)碼管刷新

void delay_ms(uint j)                        //1ms
{
        uchar i=250;
        for(;j>0;j--)
{
                while(--i);
                i=249;
                while(--i);
                i=250;
        }
}
sbit DQ=P3^7; 				//數(shù)據(jù)傳輸線(xiàn)接單片機(jī)的相應(yīng)的引腳 
unsigned char tempL=0; 		//設(shè)全局變量
unsigned char tempH=0; 
unsigned int sdata;			//測(cè)量到的溫度的整數(shù)部分
unsigned char xiaoshu1;		//小數(shù)第一位
unsigned char xiaoshu2;		//小數(shù)第二位
unsigned char xiaoshu;		//兩位小數(shù)
bit fg=1;        			//溫度正負(fù)標(biāo)志
uint T_H;
void delay(unsigned char i)
{
	for(i;i>0;i--);
}
void Init_DS18B20(void) 
{
	unsigned char x=0;
	DQ=1; 					//DQ先置高 
	delay(8); 				//稍延時(shí)
	DQ=0; 					//發(fā)送復(fù)位脈沖 
	delay(80); 				//延時(shí)(>480us) 
	DQ=1; 					//拉高數(shù)據(jù)線(xiàn) 
	delay(5); 				//等待(15~60us) 
	x=DQ; 					//用X的值來(lái)判斷初始化有沒(méi)有成功,18B20存在的話(huà)X=0,否則X=1 
	delay(20); 
}

//讀一個(gè)字節(jié)
ReadOneChar(void)  			//主機(jī)數(shù)據(jù)線(xiàn)先從高拉至低電平1us以上,再使數(shù)據(jù)線(xiàn)升為高電平,從而產(chǎn)生讀信號(hào)
{
	unsigned char i=0; 		//每個(gè)讀周期最短的持續(xù)時(shí)間為60us,各個(gè)讀周期之間必須有1us以上的高電平恢復(fù)期
	unsigned char dat=0; 
	for (i=8;i>0;i--) 		//一個(gè)字節(jié)有8位 
	{
		DQ=1; 
		delay(1); 
		DQ=0;
		dat>>=1; 
		DQ=1; 
		if(DQ) 
		dat|=0x80; 
		delay(4);
	} 
	return(dat);
}

//寫(xiě)一個(gè)字節(jié)
void WriteOneChar(unsigned char dat) 
{ 
	unsigned char i=0; 		//數(shù)據(jù)線(xiàn)從高電平拉至低電平,產(chǎn)生寫(xiě)起始信號(hào)。15us之內(nèi)將所需寫(xiě)的位送到數(shù)據(jù)線(xiàn)上,
	for(i=8;i>0;i--) 		//在15~60us之間對(duì)數(shù)據(jù)線(xiàn)進(jìn)行采樣,如果是高電平就寫(xiě)1,低寫(xiě)0發(fā)生。 
	{
		DQ=0; 				//在開(kāi)始另一個(gè)寫(xiě)周期前必須有1us以上的高電平恢復(fù)期。 
		DQ=dat&0x01; 
		delay(5); 
		DQ=1; 
		dat>>=1;
	} 
	delay(4);
}

//讀溫度值(低位放tempL;高位放tempH;)
void ReadTemperature(void) 
{ 
	Init_DS18B20(); 					//初始化
	WriteOneChar(0xcc); 				//跳過(guò)讀序列號(hào)的操作
	WriteOneChar(0x44); 				//啟動(dòng)溫度轉(zhuǎn)換
	delay(125); 						//轉(zhuǎn)換需要一點(diǎn)時(shí)間,延時(shí) 
	Init_DS18B20(); 					//初始化
	WriteOneChar(0xcc); 				//跳過(guò)讀序列號(hào)的操作 
	WriteOneChar(0xbe); 				//讀溫度寄存器(頭兩個(gè)值分別為溫度的低位和高位) 
	tempL=ReadOneChar(); 				//讀出溫度的低位LSB
	tempH=ReadOneChar(); 				//讀出溫度的高位MSB	
	if(tempH>0x7f)      				//最高位為1時(shí)溫度是負(fù)
	{
		tempL=~tempL;					//補(bǔ)碼轉(zhuǎn)換,取反加一
		tempH=~tempH+1;       
		fg=0;      						//讀取溫度為負(fù)時(shí)fg=0
	}
	sdata = tempL/16+tempH*16;      	//整數(shù)部分
	xiaoshu1 = (tempL&0x0f)*10/16; 		//小數(shù)第一位
	xiaoshu2 = (tempL&0x0f)*100/16%10;	//小數(shù)第二位
	xiaoshu=xiaoshu1*10+xiaoshu2; 		//小數(shù)兩位
	/*
	if(fg==0)
	{
		sdata=sdata-15;
		xiaoshu1=xiaoshu1-9;
	}
	*/
}
	
void main()
{
	TMOD |= 0x01;	  //開(kāi)啟定時(shí)器0  0x10時(shí)使用定時(shí)器1  0x11時(shí)啟動(dòng)兩個(gè)
	TH0=0XFC;	//給定時(shí)器賦初值,定時(shí)1ms   TH1
	TL0=0X18;	 //TL1
	EA=1;            //總中斷打開(kāi)
	ET0=1;           //定時(shí)器0中斷打開(kāi)    ET1
	TR0=1;           //定時(shí)器0開(kāi)關(guān)打開(kāi)    TR1
	while(1)
	{
		ReadTemperature();
		delay_ms(500);
	}
}

void Timer0() interrupt 1     //參考上圖  定時(shí)器1時(shí)為3
{
	static uint i;   //定義一個(gè)自變形變量
	TH0=0XFC;	//給定時(shí)器賦初值,定時(shí)1ms    TH1
	TL0=0X18;   //TL1
	i++;
	if(i==4)
	{
		i=0;
	SEG = 0XFF;
	switch(number)
	{

     case 0:SCAN4=1;SCAN3=0;SCAN2=0;SCAN1=0;SEG=distab[sdata%10];break;
	
     case 1:SCAN4=0;SCAN3=1;SCAN2=0;SCAN1=0;;SEG=distab[sdata/10];break;

     case 2:SCAN4=0;SCAN3=0;SCAN2=1;SCAN1=0;SEG=distab[0];break;

     case 3:SCAN4=0;SCAN3=0;SCAN2=0;SCAN1=1;;SEG=distab[0];break;

     default:break;
			
    }		
		number++;
    if(number>3)number=0;
	}	
}


審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2551

    文章

    51097

    瀏覽量

    753527
  • 溫度測(cè)量
    +關(guān)注

    關(guān)注

    0

    文章

    199

    瀏覽量

    28248
  • Proteus
    +關(guān)注

    關(guān)注

    79

    文章

    1692

    瀏覽量

    106575
  • DS18B20
    +關(guān)注

    關(guān)注

    10

    文章

    779

    瀏覽量

    80858
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于DS18B20和LabVIEW的多點(diǎn)溫度測(cè)量系統(tǒng)

    今天我們一起完成一個(gè)比較完整的作品,基于DS18B20和LabVIEW的多點(diǎn)溫度測(cè)量系統(tǒng)。我重點(diǎn)介紹實(shí)現(xiàn)多點(diǎn)DS18B20溫度驅(qū)動(dòng)模塊的思路
    發(fā)表于 09-26 10:28 ?1772次閱讀

    DS18B20 數(shù)字溫度計(jì)特點(diǎn)

    一.DS18B20特點(diǎn) DS18B20 數(shù)字溫度計(jì)提供12位(二進(jìn)制)溫度讀數(shù)的數(shù)字型傳感器。傳感器僅需要單總線(xiàn)接口與CPU連接,實(shí)現(xiàn)信號(hào)送入 DS
    的頭像 發(fā)表于 09-11 11:19 ?2841次閱讀
    <b class='flag-5'>DS18B20</b> 數(shù)字<b class='flag-5'>溫度</b>計(jì)特點(diǎn)

    數(shù)字溫度傳感器DS18B20的設(shè)計(jì)及應(yīng)用

    數(shù)字溫度傳感器DS18B20的設(shè)計(jì)及應(yīng)用 1引言 DS18B20是DALLAS公司生產(chǎn)的一線(xiàn)式數(shù)字溫度傳感器,具有3引腳TO-92小體積封裝形式;
    發(fā)表于 04-02 18:00 ?2826次閱讀
    數(shù)字<b class='flag-5'>溫度</b>傳感器<b class='flag-5'>DS18B20</b>的設(shè)計(jì)及應(yīng)用

    DS18B20完成溫度檢測(cè)的技巧

    介紹了DS18B20 溫度傳感器 的結(jié)構(gòu)和特點(diǎn)以及用DS18B20溫度傳感器進(jìn)行溫度檢測(cè)的方法和技巧.
    發(fā)表于 08-23 10:44 ?190次下載
    <b class='flag-5'>DS18B20</b>完成<b class='flag-5'>溫度</b>檢測(cè)的技巧

    DS18B20溫度測(cè)試實(shí)驗(yàn)

    基于單片機(jī)STC89C52的DS18B20數(shù)字溫度計(jì),測(cè)量實(shí)時(shí)溫度。
    發(fā)表于 12-31 14:36 ?10次下載

    ds18b20—設(shè)置溫度限制

    ds18b20設(shè)置報(bào)警溫度,ds18b20內(nèi)部有能夠設(shè)置報(bào)警最低溫度、最高溫度和位數(shù),能夠通過(guò)程序進(jìn)行設(shè)置
    發(fā)表于 07-25 10:58 ?4次下載

    基于8051的Proteus仿真-1602LCD與DS18B20

    基于8051的Proteus仿真-1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器
    發(fā)表于 05-12 10:11 ?66次下載

    基于8051的Proteus仿真-DS18B20溫度傳感器實(shí)驗(yàn)

    基于8051的Proteus仿真-DS18B20溫度傳感器實(shí)驗(yàn)
    發(fā)表于 09-01 23:28 ?61次下載

    基于8051的Proteus仿真-數(shù)碼管與DS18B20設(shè)計(jì)溫度

    基于8051的Proteus仿真-數(shù)碼管與DS18B20設(shè)計(jì)溫度報(bào)警器
    發(fā)表于 09-01 23:37 ?71次下載

    智能溫度傳感器DS18B20的原理與應(yīng)用

    DS18B20是DALLAS公司生產(chǎn)的單線(xiàn)數(shù)字溫度傳感器,他具有獨(dú)特的單線(xiàn)總線(xiàn)接口方式。文章詳細(xì)的介紹了單線(xiàn)數(shù)字溫度傳感器DS18B20測(cè)量
    發(fā)表于 10-11 18:19 ?49次下載

    基于DS18B20溫度測(cè)量系統(tǒng)_杜海龍

    基于DS18B20溫度測(cè)量系統(tǒng)_杜海龍
    發(fā)表于 03-19 11:45 ?15次下載

    Verilog實(shí)現(xiàn)DS18B20測(cè)量溫度以及LCD屏幕的顯示程序和工程文件

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用DS18B20和LM595FPGA實(shí)現(xiàn)ds18b20測(cè)量溫度以及LCD屏幕的顯示工程文件免費(fèi)下載。
    發(fā)表于 01-06 08:00 ?14次下載
    Verilog實(shí)現(xiàn)<b class='flag-5'>DS18B20</b><b class='flag-5'>測(cè)量</b><b class='flag-5'>溫度</b>以及LCD屏幕的顯示程序和工程文件

    使用proteus實(shí)現(xiàn)溫度傳感器DS18B20的仿真資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用proteus實(shí)現(xiàn)溫度傳感器DS18B20的仿真資料免費(fèi)下載。
    發(fā)表于 03-06 17:16 ?75次下載
    使用<b class='flag-5'>proteus</b>實(shí)現(xiàn)<b class='flag-5'>溫度</b>傳感器<b class='flag-5'>DS18B20</b>的仿真資料免費(fèi)下載

    ds18b20的特性_ds18b20溫度傳感器應(yīng)用

    本文首先介紹了ds18b20的特性,其次介紹了DS18B20工作原理,最后介紹了ds18b20溫度傳感器應(yīng)用。
    發(fā)表于 04-24 09:10 ?1.1w次閱讀
    <b class='flag-5'>ds18b20</b>的特性_<b class='flag-5'>ds18b20</b><b class='flag-5'>溫度</b>傳感器應(yīng)用

    ds18b20溫度傳感器如何使用

    Devices的一部分)生產(chǎn)的數(shù)字溫度傳感器。它能夠提供9位至12位的溫度測(cè)量數(shù)據(jù),具有高精度和可編程分辨率。DS18B20溫度
    的頭像 發(fā)表于 09-03 16:51 ?669次閱讀