概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx

上传人:b****2 文档编号:4249202 上传时间:2023-05-03 格式:DOCX 页数:17 大小:64.02KB
下载 相关 举报
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第1页
第1页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第2页
第2页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第3页
第3页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第4页
第4页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第5页
第5页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第6页
第6页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第7页
第7页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第8页
第8页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第9页
第9页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第10页
第10页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第11页
第11页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第12页
第12页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第13页
第13页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第14页
第14页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第15页
第15页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第16页
第16页 / 共17页
概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx

《概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx(17页珍藏版)》请在冰点文库上搜索。

概述 DS18B20数字温度传感器接线方便Word文档下载推荐.docx

一线总线"

串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力

9、负压特性:

电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

2.DS18B20工作原理

DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。

DS18B20测温原理如图3所示。

图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。

高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。

计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。

图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

图2:

DS18B20测温原理框图

3.系统结构框图

单片机系统框图

4.C语言程序

#include<

reg52.h>

stdio.h>

#include"

18b20.h"

1602.h"

delay.h"

bitReadTempFlag;

//定义读时间标志

voidInit_Timer0(void);

//定时器初始化

/*------------------------------------------------

串口通讯初始化

------------------------------------------------*/

voidUART_Init(void)

{

SCON=0x50;

//SCON:

模式1

TMOD|=0x20;

//TMOD:

timer1,mode2,8-bit重装

TH1=0xFD;

//TH1:

重装值9600波特率晶振11.0592MHz

TR1=1;

//TR1:

timer1打开

TI=1;

}

voidmain(void)

{

inttemp;

floattemperature;

chardisplaytemp[16];

//定义显示区域临时存储数组

LCD_Init();

//初始化液晶

DelayMs(20);

//延时有助于稳定

LCD_Clear();

//清屏

Init_Timer0();

UART_Init();

Lcd_User_Chr();

//写入自定义字符

LCD_Write_Char(13,1,0x01);

//写入温度右上角点

LCD_Write_Char(14,1,'

C'

);

//写入字符C

while

(1)//主循环

{

if(ReadTempFlag==1)

ReadTempFlag=0;

temp=ReadTemperature();

temperature=(float)temp*0.0625;

sprintf(displaytemp,"

Temp%7.1f"

temperature);

//打印温度值

LCD_Write_String(0,1,displaytemp);

//显示第二行

}

}

}

定时器初始化子程序

voidInit_Timer0(void)

TMOD|=0x01;

//使用模式1,16位定时器,使用"

|"

符号可以在使用多个定时器时不受影响

//TH0=0x00;

//给定初值

//TL0=0x00;

EA=1;

//总中断打开

ET0=1;

//定时器中断打开

TR0=1;

//定时器开关打开

定时器中断子程序

voidTimer0_isr(void)interrupt1

staticunsignedintnum;

TH0=(65536-2000)/256;

//重新赋值2ms

TL0=(65536-2000)%256;

num++;

if(num==300)//

num=0;

ReadTempFlag=1;

//读标志位置1

sbitRS=P2^4;

//定义端口

sbitRW=P2^5;

sbitEN=P2^6;

#defineRS_CLRRS=0

#defineRS_SETRS=1

#defineRW_CLRRW=0

#defineRW_SETRW=1

#defineEN_CLREN=0

#defineEN_SETEN=1

#defineDataPortP0

判忙函数

bitLCD_Check_Busy(void)

{

DataPort=0xFF;

RS_CLR;

RW_SET;

EN_CLR;

_nop_();

EN_SET;

return(bit)(DataPort&

0x80);

写入命令函数

voidLCD_Write_Com(unsignedcharcom)

//while(LCD_Check_Busy());

//忙则等待

DelayMs(5);

RW_CLR;

DataPort=com;

写入数据函数

voidLCD_Write_Data(unsignedcharData)

//while(LCD_Check_Busy());

RS_SET;

DataPort=Data;

清屏函数

voidLCD_Clear(void)

LCD_Write_Com(0x01);

写入字符串函数

voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s)

if(y==0)

{

LCD_Write_Com(0x80+x);

//表示第一行

}

else

LCD_Write_Com(0xC0+x);

//表示第二行

}

while(*s)

LCD_Write_Data(*s);

s++;

写入字符函数

voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData)

LCD_Write_Com(0x80+x);

LCD_Write_Data(Data);

初始化函数

voidLCD_Init(void)

LCD_Write_Com(0x38);

/*显示模式设置*/

LCD_Write_Com(0x08);

/*显示关闭*/

/*显示清屏*/

LCD_Write_Com(0x06);

/*显示光标移动设置*/

LCD_Write_Com(0x0C);

/*显示开及光标设置*/

/*------------------------------------------------

设定二个自定义字符,LCD1602中自定义字符的地址为0x00--0x07,

即可定义8个字符

这里我们设定把一个自定义字符放在0x00位置(000),

另一个放在0x01位子(001)

voidLcd_User_Chr(void)

{//第一个自定义字符

LCD_Write_Com(0x40);

//"

01000000"

第1行地址(D7D6为地址设定命令形式D5D4D3为字符存放位置(0--7),D2D1D0为字符行地址(0--7))

LCD_Write_Data(0x00);

XXX11111"

第1行数据(D7D6D5为XXX,表示为任意数(一般用000),D4D3D2D1D0为字符行数据(1-点亮,0-熄灭)

LCD_Write_Com(0x41);

01000001"

第2行地址

LCD_Write_Data(0x04);

XXX10001"

第2行数据

LCD_Write_Com(0x42);

01000010"

第3行地址

LCD_Write_Data(0x0e);

XXX10101"

第3行数据

LCD_Write_Com(0x43);

01000011"

第4行地址

第4行数据

LCD_Write_Com(0x44);

01000100"

第5行地址

第5行数据

LCD_Write_Com(0x45);

01000101"

第6行地址

LCD_Write_Data(0x1f);

XXX01010"

第6行数据

LCD_Write_Com(0x46);

01000110"

第7行地址

第7行数据

LCD_Write_Com(0x47);

01000111"

第8行地址

XXX00000"

第8行数据

//第二个自定义字符

LCD_Write_Com(0x48);

01001000"

第1行地址

LCD_Write_Data(0x03);

XXX00001"

第1行数据

LCD_Write_Com(0x49);

01001001"

XXX11011"

LCD_Write_Com(0x4a);

01001010"

XXX11101"

LCD_Write_Com(0x4b);

01001011"

XXX11001"

LCD_Write_Com(0x4c);

01001100"

LCD_Write_Com(0x4d);

01001101"

LCD_Write_Com(0x4e);

01001110"

LCD_Write_Com(0x4f);

01001111"

第8行数据

}

#include"

18b20初始化

bitInit_DS18B20(void)

bitdat=0;

DQ=1;

//DQ复位

DelayUs2x(5);

//稍做延时

DQ=0;

//单片机将DQ拉低

DelayUs2x(200);

//精确延时大于480us小于960us

//拉高总线

DelayUs2x(50);

//15~60us后接收60-240us的存在脉冲

dat=DQ;

//如果x=0则初始化成功,x=1则初始化失败

DelayUs2x(25);

//稍作延时返回

returndat;

读取一个字节

unsignedcharReadOneChar(void)

unsignedchari=0;

unsignedchardat=0;

for(i=8;

i>

0;

i--)

//给脉冲信号

dat>

>

=1;

if(DQ)

dat|=0x80;

return(dat);

写入一个字节

voidWriteOneChar(unsignedchardat)

unsignedchari=0;

for(i=8;

i>

i--)

DQ=dat&

0x01;

DelayUs2x(25);

读取温度

unsignedintReadTemperature(void)

unsignedchara=0;

unsignedintb=0;

unsignedintt=0;

Init_DS18B20();

WriteOneChar(0xCC);

//跳过读序号列号的操作

WriteOneChar(0x44);

//启动温度转换

DelayMs(10);

//跳过读序号列号的操作

WriteOneChar(0xBE);

//读取温度寄存器等(共可读9个寄存器)前两个就是温度

a=ReadOneChar();

//低位

b=ReadOneChar();

//高位

b<

<

=8;

t=a+b;

return(t);

uS延时函数,含有输入参数unsignedchart,无返回值

unsignedchar是定义无符号字符变量,其值的范围是

0~255这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下T=tx2+5uS

voidDelayUs2x(unsignedchart)

while(--t);

mS延时函数,含有输入参数unsignedchart,无返回值

0~255这里使用晶振12M,精确延时请使用汇编

voidDelayMs(unsignedchart)

while(t--)

//大致延时1mS

DelayUs2x(245);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2