基于DS18B20的51单片机LCD1602液晶显示测温系统.docx

上传人:b****3 文档编号:4138565 上传时间:2022-11-28 格式:DOCX 页数:42 大小:387.45KB
下载 相关 举报
基于DS18B20的51单片机LCD1602液晶显示测温系统.docx_第1页
第1页 / 共42页
基于DS18B20的51单片机LCD1602液晶显示测温系统.docx_第2页
第2页 / 共42页
基于DS18B20的51单片机LCD1602液晶显示测温系统.docx_第3页
第3页 / 共42页
基于DS18B20的51单片机LCD1602液晶显示测温系统.docx_第4页
第4页 / 共42页
基于DS18B20的51单片机LCD1602液晶显示测温系统.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

基于DS18B20的51单片机LCD1602液晶显示测温系统.docx

《基于DS18B20的51单片机LCD1602液晶显示测温系统.docx》由会员分享,可在线阅读,更多相关《基于DS18B20的51单片机LCD1602液晶显示测温系统.docx(42页珍藏版)》请在冰豆网上搜索。

基于DS18B20的51单片机LCD1602液晶显示测温系统.docx

基于DS18B20的51单片机LCD1602液晶显示测温系统

 

 

《单片机原理及应用》

课程设计报告

LCD1602液晶显示18b20温控实验

专业:

电气工程及其自动化

班级:

10电工(3)班

*******

****************

提交日期:

2013-06-21

 

第一部分设计任务

1.1设计题目及求要求……………………………………………………………………3

1.2.1方案一…………………………………………………………………3

1.2.4方案分析………………………………………………………………3

第二部分设计方案

2.1总体设计方案说明……………………………………………………3

2.2实物电路图………………………………………………………………4

第三部分电路设计与器件选择

3.1DS18B20工作原理和功能说明······························……4

3.2LCD1602工作原理和功能说明……………………………………………16

第四部分 4.1实验程序………………………………………………………28

第五部分 5.1课程设计总结(心得体会)…………………………………34

第六部分6.1参考文献………………………………………………………34

 

1.1设计题目及求要求

用电子元器件和单片机通过编写程序做成能实时显示温度的仪器。

 

1.2.1方案

用通用型1602液晶显示器和DS18B20温度传感器组成温度显示仪,并编写程序用51单片机来控制和连接1602液晶显示器和DS18B20温度传感器。

1.2.2方案分析

1602液晶显示器能显示ASCII码字符,数字、大小写字母、和各种符号。

而且其体积小、功耗低、显示操作简单,显示值清晰,正常温度范围为-20~+60。

DS18B20温度传感器采用单总线协议,与单片机接口仅需用一个I/O接口无需任何外部元件,直接将环境温度转化成数字信号,从而大大简化了传感器于微处理机的接口。

DS18B20温度传感器支持多点组网功能,多个DS18B20可以并联在唯一的三线上,其测试范围在-50~+125.C。

测试结果直接输出数字温度信号,以“一位总线”串行传送给CPU,同时可传送CRC效验码,具有极强的抗干扰纠错能力。

电源板极性接反时,芯片不会因发热而烧毁。

且它具有微型化、低功耗、高新能、抗干扰能力强、一赔微处理器等优点。

考虑到1602液晶显示器和DS18B20温度传感器有诸多优点,顾用二者来完成实验。

 

2.1总体设计方案说明

分别用DS18B20温度传感器和1602液晶显示器来测试温度和现实数据。

编写程序和利用51单片机来控制电路。

 

2.2实物电路图

 

3.1DS18B20的工作原理

①DS18B20数字温度传感器概述

DS18B20数字温度传感器是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。

因此用它来组成一个测温系统,具有

线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

DS18B20产品的特点

●只要求一个端口即可实现通信。

●在DS18B20中的每个器件上都有独一无二的序列号。

●实际应用中不需要外部任何元器件即可实现测温。

●测量温度范围在-55.C到+125.C之间。

●数字温度计的分辨率用户可以从9位到12位选择。

●内部有温度上、下限告警设置。

TO-92封装的DS18B20的引脚排列见右图,其引脚功能描述见表

序号

名称

引脚功能描述

1

GND

地信号

2

DQ

数字输入输出引脚,开漏单总线接口引脚,当使用寄生电源时,可向电源提供电源

3

VDD

可选择的VDD引脚,当工作于寄生电源时,该引脚必须接地

表3-2 DS18B20详细引脚功能描述

②DS18B20的内部结构

 

DS18B20的内部框图下图所示,DS18B20的内部有64位的ROM单元,和9字节的暂存器单元。

64位ROM存储器件独一无二的序列号。

暂存器包含两字节(0和1字节)的温度寄存器,用于存储温度传感器的数字输出。

暂存器还提供一字节的上线警报触发(TH)和下线警报触发(TL)寄存器(2和3字节),和一字节的配置寄存器(4字节),使用者可以通过配置寄存器来设置温度转换的精度。

暂存器的5、6和7字节器件内部保留使用。

第八字节含有循环冗余码(CRC)。

使用寄生电源时,DS18B20不需额外的供电电源;当总线为高电平时,功率由单总线上的上拉电阻通过DQ引脚提供;高电平总线信号同时也向内部电容CPP充电,CPP在总线低电平时为器件供电。

(字节5~8就不用看了)。

图为暂存器

暂存器介绍

A.温度寄存器(0和1字节)

DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:

用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。

这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

DS18B20的温度操作是使用16位,也就是说分辨率是0.0625。

BIT15~BIT11是符号位,为了就是表示转换的值是正数还是负数。

█要求出正数的十进制值,必须将读取到的LSB字节,MSB字节进行整合处理,然后乘以0.0625即可。

Eg:

假设从,字节0读取到0xD0赋值于Temp1,而字节1读取到0x07赋值于Temp2,然后求出十进制值。

unsignedintTemp1,Temp2,Temperature;

Temp1=0xD0;//低八位

Temp2=0x07;//高八位

Temperature=((Temp2<<8)|Temp1)*0.0625;//又或者

Temperature=(Temp1+Temp2*256)*0.0625;//Temperature=125

█在这里我们遇见了一个问题,就是如何求出负数的值呢?

我们必须判断BIT11~15是否是1,然后人为置一负数标志。

Eg.假设从,字节0读取到0x90赋值于Temp1,而字节1读取到0xFC赋值于Temp2,然后求出该值是不是负数,和转换成十进制值。

unsignedintTemp1,Temp2,Temperature;

unsignedcharMinus_Flag=0;

Temp1=0x90;//低八位

Temp2=0xFC;//高八位

//Temperature=(Temp1+Temp2*256)*0.0625;//Temperature=64656

//很明显不是我们想要的答案

if(Temp2&0xFC)//判断符号位是否为1

{

Minus_Flag=1;//负数标志置一

Temperature=((Temp2<<8)|Temp1)//高八位第八位进行整合

Temperature=((~Temperature)+1);//求反,补一

Temperature*=0.0625;//求出十进制

}//Temperature=55;

else

{

Minus_Flag=0;

Temperature=((Temp2<<8)|Temp1)*0.0625;

}

█如果我要求出小数点的值的话,那么我应该这样做。

Eg:

假设从,字节0读取到0xA2赋值于Temp1,而字节1读取到0x00赋值于Temp2,

然后求出十进制值,要求连同小数点也求出。

unsignedintTemp1,Temp2,Temperature;

Temp1=0x90;//低八位

Temp2=0xFC;//高八位

//实际值为10.125

//Temperature=((Temp2<<8)|Temp1)*0.0625;//10,无小数点

Temperature=((Temp2<<8)|Temp1)*(0.0625*10);//101,一位小数点

//Temperature=((Temp2<<8)|Temp1)*(0.0625*100);//1012,二位小数点

█如以上的例题,我们可以先将0.0625乘以10,然后再乘以整合后的Temperature变量,就可以求出后面一个小数点的值(求出更多的小数点,方法都是以此类推)。

得出的结果是101,然后再利用简单的算法,求出每一位的值。

unsingedcharTen,One,Dot1

Ten=Temperature/100;//1

One=Temperature%100/10;//0

Dot1=%10;//1

求出负数的思路也一样,只不过多出人为置一负数标志,求反补一的动作而已。

自己发挥想象力吧。

B.字节2~3:

TH和TL配置

TH与TL就是所谓的温度最高界限,和温度最低界限的配置。

可以使用软件来试验。

C字节4:

配置寄存器

BIT7出厂的时候就已经设置为0,用户不建议去更改。

而R1与R0位组合了四个不同的转换精度,00为9位转换精度而转换时间是93.75ms,01为10位转换精度而转换时间是187.5ms,10为11位转换精度而转换时间是375ms,11为12位转换精度而转换时间是750ms(默认)。

该寄存器还是留默认的好,毕竟转换精度表示了转换的质量。

低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。

在DS18B20出厂时该位被设置为0,用户不要去改动。

R1和R0用来设置分辨率,如下表所示:

(DS18B20出厂时被设置为12位)

表3-6R1与R0确定传感器分辨率设置表

R1

R0

传感器精度/bit

转换时间/ms

0

0

9

93.75

0

1

10

187.5

1

0

11

375

1

1

12

750

D.字节5~7,保留位,8:

CRC

光刻ROM介绍

光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。

64位光刻ROM的排列是:

开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。

光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

DS18B20温度传感器的存储器介绍

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

2DS18B20的工作过程

DS18B20一般都是充当从机的角色,而单片机就是主机。

单片机通过一线总线访问DS18B20的话,需要经过以下几个步骤:

①DS18B20复位(初始化),DS18B20复位。

在某种意义上就是一次访问DS18B20的开始,或者可说成是开始信号。

②执行ROM指令(ROM命令跟随着需要交换的数据);ROM指令,也就是访问,搜索,匹配,DS18B20个别的64位序列号的动作。

在单点情况下,可以直接跳过ROM指令。

(而跳过ROM指令的字节是0xCC,后面介绍)

③执行DS18B20功能指令(RAM指令),功能命令跟随着需要交换的数据。

DS18B20复位(初始化)

在初始化过程中,主机通过拉低单总线至少480µs,以产生复位脉冲(TX)。

然后主机释放总线并进入接收(RX)模式。

当总线被释放后,5kΩ的上拉电阻将单总线拉高。

DS18B20检测到这个上升沿后,延时15µs~60µs,通过拉低总线60µs~240µs产生应答脉冲。

DS18B20功能指令有很多种,数据手册里有更详细的介绍。

这里仅列出比较常用的几个DS18B20功能指令。

0x44:

开始转换温度。

转换好的温度会储存到暂存器字节0和1。

0xEE:

读暂存指令。

读暂存指令,会从暂存器0到9,一个一个字节读取,如果要停止的话,必须写下DS18B20复位。

访问DS18B20必须严格遵守这一命令序列,如果丢失任何一步或序列混乱,DS18B20都不会响应主机(除了SearchROM和AlarmSearch这两个命令,在这两个命令后,主机都必须返回到第一步)。

一般上我们都是使用单点,也就是说单线总线上仅有一个DS18B20存在而已。

所以我们无需刻意读取ROM里边的序列号来,然后匹配那个DS18B20?

而是更直接的,跳过ROM指令,然后直接执行DS18B20功能指令。

ROM命令:

ROM命令通过每个器件64-bit的ROM码,使主机指定某一特定器件(如果有多个器件挂在总线上)与之进行通信。

DS18B20的ROM如表3-4所示,每个ROM命令都是8bit长。

功能命令:

主机通过功能命令对DS18B20进行读/写Scratchpad存储器,或者启动温度转换。

DS18B20的功能命令如表3-7所示。

指令

协议

功能

读ROM

33H

读DS18B20中的编码(即64位地址)

符合ROM

55H

发出此命令后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS18B20,使之作出响应,为下一步对该DS18B20的读写作准备

搜索ROM

0F0H

用于确定挂接在同一总线上DS18B20的个数和识别64位ROM地址,为操作各器件作好准备

跳过ROM

0CCH

忽略64位ROM地址,直接向DS18B20V温度转换命令,适用于单个DS18B20工作

报警搜索命令

0ECH

执行后,只有温度超过庙宇值上限或下限的片子才做出响应

温度转换

44H

启动DS18B20进行温度转换,转换时间最长为500ms(典型为200ms),结果丰入内部9字节RAM中

读暂存器

BEH

读内部RAM中9字节的内容

写暂存器

4EH

发出向内部RAM的第3、4字节写上、下温度数据命令,紧该温度命令之后,传达两字节的数据

复制暂存器

48H

将RAM中第3、4字内容复制到E2PROM中

重调E2PROM

0B8H

将E2PROM中内容恢复到RAM中的第3、4字节

读供电方式

0B4H

读DS18B20的供电模式,寄生供电时DS18B20发送“0”,外部供电时DS18B20发送“1”

表3-7

DS18B20的信号方式

DS18B20采用严格的单总线通信协议,以保证数据的完整性。

该协议定义了几种信号类型:

复位脉冲、应答脉冲、写和读。

除了应答脉冲所有这些信号都由主机发出同步信号。

总线上传输的所有数据和命令都是以字节的低位在前。

a.初始化序列:

复位脉冲和应答脉冲

初始化波形如图3-8所示。

 

DS18B20的复位时序如下:

1.单片机拉低总线480us~950us,然后释放总线(拉高电平)。

这时DS18B20会拉低信号,大约60~240us表示应答。

2.DS18B20拉低电平的60~240us之间,单片机读取总线的电平,如果是低电平,那么表示复位成功,DS18B20拉低电平60~240us之后,会释放总线。

C程序举例

//DS1820C51子程序

//这里以11.0592M晶体为例,不同的晶体速度可能需要调整延时的时间

//sbitDQ=P2^1;//根据实际情况定义端口

voiddsreset()//18B20复位,初始化函数

{

uinti;

ds=0;

i=103;

while(i>0)i--;

ds=1;

i=4;

while(i>0)i--;

}DS18B20所有的数据交换都由一个初始化序列开始。

由主机发出的复位脉冲和跟在其后的由DS18B20发出的应答脉冲构成。

当DS18B20发出响应主机的应答脉冲时,即向主机表明它已处在总线上并且准备工作。

b.读和写时序

在写时序期间,主机向DS18B20写入指令;而在读时序期间,主机读入来自DS18B20的指令。

在每一个时序,总线只能传输一位数据。

读/写时序如图3-9所示。

●写时序

存在两种写时序:

“写1”和“写0”。

主机在写1时序向DS18B20写入逻辑1,而在写0时序向DS18B20写入逻辑0。

所有写时序至少需要60µs,且在两次写时序之间至少需要1µs的恢复时间。

两种写时序均以主机拉低总线开始。

在写时序开始后的15µs~60µs期间,DS18B20采样总线的状态。

如果总线为高电平,则逻辑1被写入DS18B20;如果总线为低电平,则逻辑0被写入DS18B20。

●写时序

DS18B20写步骤如下:

1.单片机拉低电平大约10~15us,。

2.单片机持续送指定电平大约20~45us的时间。

3.释放总线

如果要读或者写一个字节,就要重复以上的步骤八次。

使用for循环,和数据变量的左移和或运算,实现一个字节读与写。

函数延迟的时间,必须模拟非常准确,因为单线总线对时序的要求敏感点。

//向1-WIRE总线上写一个字节

voidtempwritebyte(BYTEdat)//向18B20写一个字节数据

{

uinti;

BYTEj;

bittestb;

for(j=1;j<=8;j++)

{

testb=dat&0x01;

dat=dat>>1;

if(testb)//写1

{

ds=0;

i++;i++;

ds=1;

i=8;while(i>0)i--;

}

else

{

ds=0;//写0

i=8;while(i>0)i--;

ds=1;

i++;i++;

}

}

}}

●读时序

DS18B20读步骤如下:

1.在读取的时候单片机拉低电平大约1us

2.单片机释放总线,然后读取总线电平。

这时候DS18B20会送出电平。

3.读取电平过后,延迟大约40~45微妙

//从1-wire总线上读取一个字节

bittempreadbit(void)//读1位函数

{

uinti;

bitdat;

ds=0;i++;//i++起延时作用

ds=1;i++;i++;

dat=ds;

i=8;while(i>0)i--;

return(dat);

}

BYTEtempread(void)//读1个字节

{

BYTEi,j,dat;

dat=0;

for(i=1;i<=8;i++)

{

j=tempreadbit();

dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里

}

return(dat);

}A.DS18B20开始转换:

1.DS18B20复位。

2.写入跳过ROM的字节命令,0xCC。

3.写入开始转换的功能命令,0x44。

4.延迟大约750~900毫秒

B.DS18B20读暂存数据:

1.DS18B20复位。

2.写入跳过ROM的字节命令,0xCC。

3.写入读暂存的功能命令,0xee。

4.读入第0个字节LSByte,转换结果的低八位。

5.读入第1个字节MSByte,转换结果的高八位。

6.DS18B20复位,表示读取暂存结束。

//读取温度

voidtempchange(void)//DS18B20开始获取温度并转换

{

dsreset();

delay

(1);

tempwritebyte(0xcc);//写跳过读ROM指令

tempwritebyte(0x44);//写温度转换指令

}

uintget_temp()//读取寄存器中存储的温度数据

{

BYTEa,b;

dsreset();

delay

(1);

tempwritebyte(0xcc);

tempwritebyte(0xbe);

a=tempread();//读低8位

b=tempread();//读高8位

temp=b;

temp<<=8;//两个字节组合为1个字

temp=temp|a;

temp=temp*(0.625);//温度值扩大10倍,精确到1位小数

returntemp;//temp是整型

}

voidds1820disp(uinttemp1)//温度值显示

{

disdata[0]=temp1/1000+0x30;//百位数

disdata[1]=temp1%1000/100+0x30;//十位数

disdata[2]=temp1%100/10+0x30;//个位数

disdata[3]=0x2e;

disdata[4]=temp1%10+0x30;//小数位

}

简单归纳

单线总线高电平为闲置状态。

单片机访问DS18B20必须遵守,DS18B20复位-->执行ROM指令-->执行DS18B20功能指令。

而在单点上,可以直接跳过ROM指令。

DS18B20的转换精度默认为12位,而分辨率是0.0625。

DS18B20温度读取函数参考步骤:

A.DS18B20开始转换:

1.DS18B20复位。

2.写入跳过ROM的字节命令,0xCC。

3.写入开始转换的功能命令,0x44。

4.延迟大约750~900毫秒

B.DS18B20读暂存数据:

1.DS18B20复位。

2.写入跳过ROM的字节命令,0xCC。

3.写入读暂存的功能命令,0xee。

4.读入第0个字节LSByte,转换结果的低八位。

5.读入第1个字节MSByte,转换结果的高八位。

6.DS18B20复位,表示读取暂存结束。

C.数据求出十进制:

1.整合LSByte和MSByte的数据

2.判断是否为正负数(可选)

3.求得十进制值。

正数乘以0.0625,一位小数点乘以0.625,二位小数点乘以6.25。

4.十进制的“个位”求出。

DS18B20的应用电路

DS18B20测温系统具有测温系统简单、测温精度高、连接方便、占用口线少等优点。

下面就是DS18B20几个不同应用方式下的测温电路图:

1.DS18B20寄生电源供电方式电路图

如下图所示,在寄生电源供电方式下,DS18B20从单线信号线上汲取能量:

在信号线DQ处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。

  

 

独特的寄生电源方式有三个好处:

  1)进行远距离测温时,无需本地电源

  2)可以在没有常规电源的条件下读取ROM

  3)电路更加简洁,仅用一根I/O口实现测温

  要想使DS18B20进行精确的温度转换,I/O线必

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1