DS18B20温度传感器课程设计报告材料.docx
《DS18B20温度传感器课程设计报告材料.docx》由会员分享,可在线阅读,更多相关《DS18B20温度传感器课程设计报告材料.docx(23页珍藏版)》请在冰豆网上搜索。
DS18B20温度传感器课程设计报告材料
合用标准文案
单片机课程设计报告
设计题目:
DS18B20温度传感器
班级:
09电信〔2〕班
姓名:
xxx
学号:
xxx
指导教师:
xxx
调试地址:
xxx
优异文档
合用标准文案
一、归纳3
二、内容3
1、课程设计题目3
2、课程设计目的3
3、设计任务和要求3
4、正文4
〔一〕、方案选择与论证4
三、系统的详尽设计与实现6
〔1〕、系统的整体设计方案6
〔2〕、硬件电路设计6
a、单片机控制模块6
b、温度传感器模块7
四、软件设计13
1、主程序13
2、读出温度子程序13
3、温度变换命令子程序13
4、计算温度子程序14
五、完满程序以下:
14
六、设计领悟19
七、参照文件20
优异文档
合用标准文案
一、归纳
2021年6月14日随着时代的进步和睁开,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。
本文主要介绍了一个基于89S51单片机的测温系统,详尽描述了利用液晶显示器件传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽解析,特别是数字温度传感DS18B20的数据采集过程。
对各局部的电路也一一进行了介绍,该系统能够方便的实现实现温度采集和显示,并可依照需要任意设定上下限报警温度,它使用起来相当方便,拥有精度高、量程宽、矫捷度高、体积小、功耗低等优点,适合于我们平时生活和工、农业生产中的温度测量,也能够看作温度办理模块嵌入其他系统中,作为其他主系统的辅助扩展。
DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗搅乱能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用远景。
重点词:
单片机AT89C51、DS18B20温度传感器、液晶显示LCD1602。
二、内容
1、课程设计题目
基于DS18B20的温度传感器
2、课程设计目的
经过基于MCS-51系列单片机AT89C51和DS18B20温度传感器检测温度,熟悉芯片的使用,温度传感器的功能,数码显示管的使用,汇编语言的设计;
而且把我们这一年所学的数字和模拟电子技术、检测技术、单片机应用等知识,经过理论联系实质,从题目解析、电路设计调试、程序编制调试到传感器的选定等这一完满的实验过程,培养了学生正确的设计思想,使学生充分发挥主观能动性,去独立解决实责问题,以到达提升学生的综合能力、着手能力、文件资料查阅能力的作用,为毕业设计和今后工作打下一个优异的基础。
3、设计任务和要求
以MCS-51系列单片机为核心器件,组成一个数字温度计,采用数字温度传感器DS18B20为检测器件,进行单点温度检测,检测精度为±0.5摄氏度。
温度显示采用LCD1602显示,两位整数,一位小数。
优异文档
合用标准文案
系统整体仿真图
板上实现收效图
4、正文
〔一〕、方案选择与论证
依照设计任务的整体要求,本系统能够划分为以下几个根本模块,针对各个模
优异文档
合用标准文案
块的功能要求,分别有以下一些不相同的设计方案:
〔1〕、温度传感模块
方案一:
采用热敏电阻,热敏电阻精度、重复性、可靠性较差,对于检测
1
摄氏度的信号是不合用的,也不能够满足测量范围。
在温度测量系统中,也常采用单片温度传感器,比方AD590,LM35等。
但这些芯片输出的都是模拟信号,必定经过A/D变换后才能送给计算机,这样就使测温系统的硬件结构较复杂。
别的,这种测温系统难以实现多点测温,也要用到复杂的算法,必然程度上也增加了软件实现的难度。
方案二:
采用单总线数字温度传感器DS18B20测量温度,直接输出数字信号。
便于单片机办理及控制,节约硬件电路。
且该芯片的物理化学性很牢固,此元件
线形性能好,在0—100摄氏度时,最大线形偏差小于1摄氏度。
DS18B20的最
大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器
AT89C51组成的温度装置,它直接输出温度的数字信号到微控制器。
每只DS18B20拥有一个独有的不能更正的64位序列号,依照序列号可接见不相同的器件。
这样
一条总线上可挂接多个DS18B20传感器,实现多点温度测量,轻松的组建传感网络。
综上解析,我们采用第二种方案。
温度传感模块仿真图
(2)、显示模块
方案一:
采用8位段数码管,将单片机获得的数据经过数码管显示出来。
该方案简单易行,但所需的元件很多,且不简单进行操作,可读性差,一旦设定后很难再参加其他的功能,显示格式受限制,且大耗电量大,不宜用电池给系统供电。
方案二:
采用液晶显示器件,液晶显示平稳、省电、雅观,更简单实现题目要求,对后续的园艺通兼容性高,只要将软件作更正即可,可操作性强,也易于读数,采用RT1602两行十六个字符的显示,能同时显示其他的信息如日期、时间、星期、温度。
综上解析,我们采用了第二个方案
优异文档
合用标准文案
显示模块仿真图
三、系统的详尽设计与实现
〔1〕、系统的整体设计方案
采用AT89S52单片机作为控制核心对温度传感器DS18B20控制,读取温度信号并进行计算办理,并送到液晶显示器LCD1602显示。
依照系统设计功能的要求,确定系统由3个模块组成:
主控制器、测温电路和显示电路。
数字温度计整体电路结构框图如图下所示。
(2〕、硬件电路设计a、单片机控制模块
该模块由AT89C51单片机组成在设计方面,AT89C51的EA接高电平,其外
围电路供应能使之工作的晶振脉冲、复位按键,四个I/O分别接8路的单列IP座方便与外面设备连接。
当AT89C51芯片接到来自温度传感器的信号时,其内部程序将依照信号的种类进行办理,而且将办理的结果送到显示模块,发送控制信号控制各模块。
优异文档
合用标准文案
b、温度传感器模块
DS18B20相关资料
1、DS18B20原理与解析
DS18B20是美国DALLAS半导体公司继DS1820此后最新推出的一种改良型智能温度传感器。
与传统的热敏电阻对照,它能够直接读出被测温度而且可依照实
际要求经过简单的编程实现9~12位的数字值读数方式。
能够分别在93.75ms
和750ms内完成9位和12位的数字量,而且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线〔单线接口〕读写,温度变换功率本源于数据总线,总线自己也能够向所挂接的DS18B20供电,而无需额外电源。
所以使用DS18B20可使系统结构更趋简单,可靠性更高。
他在测温精度、变换时间、传输距离、分辨率等方面较DS1820有了很大的改良,给用户带来了更方便的使用和更令人满意的收效。
以下是DS18B20的特点:
〔1〕独到的单线接口方式:
DS18B20与微办理器连接时仅需要一条口线即可实现微办理
器与DS18B20的双向通讯。
〔2〕在使用中不需要任何外面元件。
〔3〕可用数据线供电,电压范围:
+3.0~+5.5V。
〔4〕测温范围:
-55-+125℃。
固有测温分辨率为0.5℃。
〔5〕经过编程可实现9-12位的数字读数方式。
〔6〕用户可自设定非易失性的报警上下限值。
〔7〕支持多点组网功能,多个DS18B20能够并联在独一的三线上,实现多点测温。
〔8〕负压特点,电源极性接反时,温度计不会因发热而烧毁,但不能够正常工作。
优异文档
合用标准文案
2、DS18B20的测温原理
DS18B20的测温原理上图所示,图中低温度系数晶振的振荡频率受温度的影响
很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温
度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图
中还隐含着计数门,当计数门翻开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。
计数门的开启时间由高温度系数振
荡器来决定,每次测量前,第一将-55℃所对应的基数分别置入减法计数器1和温度存放器中,减法计数器1和温度存放器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度存放器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,这样循环直到减法计数器2计数到0时,停止温度存放器值的累加,此时温度存放器中的数值即为所测温度。
图中的斜率累加器用于补偿和修正测温过
程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就
重复上述过程,直至温度存放器值到达被测温度值,这就是DS18B20的测温原
理。
别的,由于DS18B20单线通讯功能是分时完成的,他有严格的时隙看法,
所以读写时序很重要。
系统对DS18B20的各种操作必定按协议进行。
操作协议
为:
初始化DS18B20〔发复位脉冲〕→发ROM功能命令→发储藏器操作命令→
办理数据。
DS18B20工作过程一般依照以下协议:
初始化——ROM操作命令
——储藏器操作命令——办理数据
①初始化
单总线上的所有办理均从初始化序列开始。
初始化序列包括总线主机发出一复
位脉冲,接着由隶属器件送出存在脉冲。
存在脉冲让总线控制器知道DS1820在总线上且已准备好操作。
②ROM操作命令
一旦总线主机检测到隶属器件的存在,它便能够发出器件ROM操作命令之一。
所有ROM操作命令均为8位长。
这些命令以下:
ReadROM(读ROM)[33h]
此命令赞同总线主机读DS18B20的8位产品系列编码,独一的48位序列号,
以及8位的CRC。
此命令只幸亏总线上仅有一个DS18B20的情况下能够使用。
如
优异文档
合用标准文案
果总线上存在多于一个的隶属器件,那么当所有从片企图同时发送时将发生数据矛盾的现象〔漏极开路会产生线与的结果〕。
MatchROM(吻合ROM)[55h]
此命令后继以64位的ROM数据序列,赞同总线主机对多点总线上特定的DS1寻址。
只有与64位ROM序列严格吻合的DS18B20才能对后继的存贮器操作命令作出响应。
所有与64位ROM序列不符的从片将等待复位脉冲。
此命令在总线上有单个或多个器件的情况下均可使用。
SkipROM(跳过ROM)[CCh]
在单点总线系统中,此命令经过赞同总线主机不供应64位ROM编码而接见
储藏器操作来节约时间。
若是在总线上存在多于一个的隶属器件而且在SkipROM命令此后发出读命令,那么由于多个从片同时发送数据,会在总线上发生
数据矛盾〔漏极开路下拉会产生线与的收效〕。
SearchROM(找寻ROM)[F0h]
当系统开始工作时,总线主机可能不知道单线总线上的器件个数也许不知道
其64位
ROM编码。
找寻ROM命令赞同总线控制器用消除法鉴别总线上的所有从机的64位编码。
AlarmSearch(告警找寻)[ECh]
此命令的流程与找寻ROM命令相同。
但是,仅在近来一次温度测量出现告警的情况下,DS18B20才对此命令作出响应。
告警的条件定义为温度高于TH或低
于TL。
只要DS18B20一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值也许改变TH或TL的设置,使得测量值再一次位于赞同的范围之内。
储藏在EEPROM内的触发器值用于告警。
③储藏器操作命令
WriteScratchpad〔写暂储存藏器〕[4Eh]
这个命令向DS18B20的暂存器中写入数据,开始地址在地址2。
接下来写入
的两个字节将被存到暂存器中的地址地址2和3。
能够在任何时辰发出复位命令
来中止写入。
ReadScratchpad〔读暂储存藏器〕[BEh]
这个命令读取暂存器的内容。
读取将从字节0开始,素来进行下去,直到第9〔字节8,CRC〕字节读完。
若是不想读完整部字节,控制器能够在任何时间发出复位命令来中止读取。
CopyScratchpad〔复制暂储存藏器〕[48h]
这条命令把暂存器的内容拷贝到DS18B20的E2储藏器里,即把温度报警触发字节存入非易失性储藏器里。
若是总线控制器在这条命令此后随着发出读时间
隙,而DS18B20又正在忙于把暂存器拷贝到E2储藏器,DS18B20就会输出一个
“0〞,若是拷贝结束的话,DS18B20那么输出“1〞。
若是使用寄生电源,总线控制器必定在这条命令发出后马上起动强上拉并最
少保持10ms。
ConvertT〔温度变换〕[44h]
这条命令启动一次温度变换而无需其他数据。
温度变换命令被执行,此后DS18B20保持等待状态。
若是总线控制器在这条命令此后随着发出读时缝隙,而DS18B20又忙于做时间变换的话,DS18B20将在总线上输出“0〞,假设温度变换完成,那么输出“1〞。
若是使用寄生电源,总线控制器必定在发出这条命令后马上起
优异文档
合用标准文案
动强上拉,并保持500ms。
RecallE2〔重新调整E2〕[B8h]
这条命令把储藏在E2中温度触发器的值重新调至暂储存藏器。
这种重新调出的操作在对DS18B20上电时也自动发生,所以只要器件一上电,暂储存藏器内就有了有效的数据。
在这条命令发出此后,对于所发出的第一个读数据时间片,器件会输出温度变换忙的表记:
“0〞=忙,“1〞=准备就绪。
ReadPowerSupply〔读电源〕[B4h]
对于在此命令发送至DS18B20此后所发出的第一读数据的时间片,器件都会给出其电源方式的信号:
“0〞=寄生电源供电,“1〞=外面电源供电。
④办理数据
DS18B20的高速暂储存藏器由9个字节组成,其分配如图3所示。
当温度变换命
令宣布后,经变换所得的温度值以二字节补码形式存放在高速暂储存藏器的第0和第1个字节。
单片机可经过单线接口读到该数据,读取时低位在前,高位在后。
DS18B20温度数据表
上表是DS18B20温度采集转变后获得的12位数据,储藏在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,若是测得的温度大于或等于0,这5位为0,只要将测到的数值乘于0.0625即可获得实质温度;若是温度小于0,
这5位为1,测到的数值需要取反加1再乘于0.0625即可获得实质温度。
温度变换计算方法举例:
比方当DS18B20采集到+125℃的实质温度后,输出为07D0H,那么:
实质温度=07D0H
╳0.0625=2000╳0.0625=1250C。
比方当DS18B20采集到-55℃的实质温度后,输出为FC90H,那么应先将11位数据位取反加1得370H〔符号位不变,也不作为计算〕,那么:
实质温度=370H╳0.0625=880╳0.0625=550C。
2、显示模块LCD1602资料〔这里主要介绍下指令说明及时序〕
优异文档
合用标准文案
1602液晶模块内部的控制器共有
11条控制指令,如表10-14所示:
序号
指令
RS
R/WD7
D6
D5
D4
D3
D2
D1
D0
1
清显示
0
0
0
0
0
0
0
0
0
1
2
光标返回
0
0
0
0
0
0
0
0
1
*
3
置输入模式
0
0
0
0
0
0
0
1
I/D
S
4
显示开/关控制
0
0
0
0
0
0
1
D
C
B
5
光标或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符发生计贮器地
0
0
0
1
字符发生计贮器地址
址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志或地址
0
1
BF
计数器地址
10
写数到CGRAM
或
0
要写的数据内容
DDRAM〕
1
11
从CGRAM或DDRAM
1
读出的数据内容
读数
1
表10-14:
控制命令表
1602液晶模块的读写操作、屏幕和光标的操作都是经过指令编程来实现的。
〔说明:
1为高电平、0为低电平〕
指令1:
清显示,指令码01H,光标复位到地址00H地址。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标搬动方向,高电平右移,低电平左移S:
屏幕上所有文字可否左移也许右移。
高电平表示有效,低电平那么无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电
平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标可否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时搬动显示的文字,低电平时搬动光标。
优异文档
合用标准文案
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能够接收命令也许数据,若是为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
与HD44780相兼容的芯片晌序表以下:
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
输入
RS=L,R/W=L,D0—D7=指令码,E=输出
无
高脉冲
读数据
输入
RS=H,R/W=H,E=H
输出
D0—D7=数据
写数据
输入
RS=H,R/W=L,D0—D7=数据,E=输出
无
高脉冲
表10-15:
根本操作时序表
读写操作时序如图10-55和10-56所示:
图10-55读操作时序
优异文档
合用标准文案
图10-56写操作时序
四、软件设计
系统程序主要包括主程序、读出温度子程序、温度变换子程序、计算温度子程序、显示等等。
1、主程序
主要功能是完成DS18B20的初始化工作,并进行读温度,将温度转变为为压缩BCD码并在显示器上显示传感器所测得的实质温度。
2、读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需要进行CRC校验,校验有错时不进行温度数据的改写。
其程序流程图以以下列图所示。
3、温度变换命令子程序
温度变换命令子程序主若是发温度变换开始命令,当采用12位辩白率时变换
优异文档
合用标准文案
时间约为750ms,在本程序设计中采用1s显示程序延时法等待变换的完成。
流程图图以下
4、计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的变换运算,并进行温度值正负的判断。
流程图以下:
五、完满程序以下:
#include
#include
优异文档
合用标准文案
typedefunsignedcharuint8;
#defineuintunsignedint
#defineucharunsignedchar
sbitDQ=P3^3;//定义DQ引脚为
ucharcodeBw[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//百位编码
ucharcode
Xsw[16]={0x30,0x31,0x31,0x32,0x33,0x33,0x34,0x34,0x35,0x36,0x36,0x37,0x38,0
x38,0x39,0x39};//小数位编码
sbitRS=P2^0;
sbitRW=P2^1;
sbitEN=P2^2;
sbitBUSY=P0^7;
ucharwendu;
uchartemp_g,temp_d;
unsignedcharcodeword1[]={"Temperature:
"};
voiddelay(uintxms)
{
uinti,j;
for(i=xms;i>0;--i)
for(j=110;j>0;--j);
}
voidDelayus(intt)//在11.059MHz的晶振条件下调用本函数需要24μs,此后
每次计数需16μs
{
ints;
for(s=0;s}
等待繁忙标志
voidwait(void)
{
P0=0xFF;
do
{
RS=0;
RW=1;
EN=0;
EN=1;
}while(BUSY==1);
EN=0;
}
写数据
优异文档
合用标准文案
voidw_dat(uint8dat)
{
wait();
EN=0;
P0=dat;
RS=1;
RW=0;
EN=1;
EN=0;
}
写命令
voidw_cmd(uint8cmd)
{
wait();
EN=0;
P0=cmd;
RS=0;
RW=0;
EN=1;
EN=0;
}
发送字符串到LCD
voidw_string(uint8addr_start,uint8*p)
{
w_cmd(addr_start);
while(*p!
='\0')
{
w_dat(*p++);
}
}
初始化1602
voidInit_LCD1602(void)
{
w_cmd(0x38);//16*2