资源描述
湖南机电职业技术学院
毕业设计
课题名称 基于DS18B20多路温度采集系统设计
院 系 电气工程学院
学生姓名 禹涛
专 业 机电一体化
班 级 机电1202
指引教师 朱光耀
评阅教师
10月23日
目 录
毕业设计(论文)任务书 - 2 -
毕业设计(论文)进度筹划表 - 3 -
摘 要 - 4 -
1 绪论 - 5 -
1.1 课题研究背景和意义 - 5 -
1.2 本设计重要规定 - 5 -
2 系统方案设计与选型 - 6 -
3 重要硬件简介 - 6 -
3.1 DS18B20 - 6 -
3.2 AT89C51 - 10 -
3.3 LCD1602 - 10 -
3.4 DS1302 -11 -
3.5 24C02C - 11 -
4 软件简介 -12 -
4.1 Proteus - 12 -
4.2 Keil - 12 -
5 硬件设计 - 12 -
5.1温度采集电路 - 13 -
5.2 单片机最小系统 - 13 -
5.3 按键输入电路 - 14 -
5.4 报警电路 - 15 -
5.5 LCD显示电路 - 14 -
5.6 24C02存储电路 - 16 -
5.7 DS1302时钟电路 - 17 -
5.8 串行通讯电路 - 18 -
6 软件设计 - 18 -
6.1 功能概述 - 18 -
6.2 系统软件流程图 - 19 -
7 实验成果 - 19 -
7.1 温度显示仿真 - 19 -
7.2 温度存储与串行通讯 - 20 -
总 结 - 21 -
参 考 文 献 - 22 -
致 谢 - 23 -
附录A 电路原理图 - 24 -
附录B 重要程序 - 25 -
毕业设计(论文)任务书
题目:基于DS18B20多路温度采集系统设计
任务与规定:
以MCS-51系列单片机为解决器,运用数字式测温仪DS18B20实现对4路温度检测;运用显示装置显示4路温度,并能实现温度超限报警,便于送到计算机解决系统,进行必要控制,重要技术指标有:
1、采集路数,4路;
2、测温精度较高,达0.10C;
3、采样时间,每隔一秒采样一次;
4、可以通过键盘设立系统参数,用四行中文显示温度;
5、温度可存储。
基本规定
1、硬件系统设计:涉及MCS-51I/O接口,LED显示电路,信号输入解决和输出驱动电路设计。
2、软件某些设计:涉及系统流程图,系统初始化编程和功能软件编程
3、系统调试:在硬、软件设计好前提下,进行系统安装、调试并改进,直到达到控制规定为止
毕业设计(论文)进度筹划表
日期
工作内容
执行状况
指引教师
签 字
9月25号—9月27号
阐述毕业设计实行方案。
9月28号—9月30号
查找DS18B20多路温度采集系统方面知识,完毕草稿。
10月7号—10月14号
向导师提出可行想法,与导师共同拟定设计。通过实验和文献获取所需数据。
11月6号—11月16号
通过重复验证,拟定设计可行性,完善论文。
11月17号— 11月20号
完毕论文最后作者声明某些,申请答辩交由导师打分。
指引教
师对进
度筹划
实行情
况总评
签名
年 月 日
摘 要
本文基于DS18B20设计了一种多路温度数据采集系统,系统重要由单片机电路和一组DS18B20 数字传感器构成,同步具备温度显示、数据存储和串行通讯模块。软件方面,咱们采用keil软件对程序进行编写以及调试,硬件方面,咱们通过Proteus软件对硬件电路进行仿真以及测试,该系统构造简朴,功耗较低,测温范畴为- 55℃~ + 125℃,通过LCD1602显示所测温度。同步,可以实现高低温报警,若所测温度超过设定范畴,有关器件就会自动报警。咱们也可以通过对按键解决来变化显示不同通道温度。咱们还可以把测得温度存储到24C02芯片中,并且可以实现串行通讯,把温度传送到上位机。该系统硬件分为3某些:DS18B20 温度测量模块、单片机模块、温度显示模块、数据存储模块、上位机与单片机通讯接口电路。系统测温精度可以达到±0.5 ℃,并且能稳定与单片机和上位机通讯。
核心词:DS18B20、多路温度测控、高低温报警、串行通讯
1 绪论
1.1 课题研究背景和意义
在工业生产中,电流、电压、温度、压力、流量、流速和开关量都是惯用重要被控参数。其中,温度控制也越来越重要。在工业生产诸多领域中,人们都需要对各类加热炉、热解决炉、反映炉和锅炉中温度进行检测和控制。采用单片机对温度进行控制不但具备控制以便、简朴和灵活性大等长处,并且可以大幅度提高被控温度技术指标,从而大大提高产品质量和数量。因而,单片机对温度控制问题是工业生产中经常会遇到控制问题。
当前应用温度检测系统大多采用由模仿温度传感器、多路模仿开关、A/D转换器及单片机等构成传播系统。这种温度采集系统需要大量测温电缆,才干把现场传感器信号送到采集卡上.安装和拆卸繁杂,成本也高。同步线路上传送是模仿信号,易受干扰和损耗,测量误差也比较大,不利于控制者依照温度变化及时做出决定。针对这种状况,本文提出一种采用数字化单总线技术温度采集系统,并运用Proteus和Keil软件对设计电路进行综合虚拟仿真,实现了温度实时测量和显示。
1.2 本设计重要规定
设计一多路温度测控系统,能实现8路及以上温度点测量和实时显示,可依照设定上下限输出报警及显示,具备RS485或RS232总线接口。设计完整电路原理图和编写有关程序。 用MCS-51系列单片机或其他CPU作为控制器设计一完整测控仪器,涉及如下内容:
温度可采用原则系列热电耦或原则热电阻或DS18B20;
用LCD1602显示或用LED显示;
用输入按键可以暂停、转换、通道显示;
日历时钟显示;
数据记录存贮功能
RS485或RS232通讯
PROTEUS仿真以上一种功能
2 系统方案设计与选型
系统重要由硬件和软件两大某些构成,当接受到系统发出温度转换命令后, DS18B20开始进行温度转换操作并把转化后成果放到16 位暂存寄存器中温度寄存器内, 然后与系统进行数据通信,系统将温度读出并驱动LCD显示。如果温度值低于设定下限值或高于设定上限值,则自动启动报警装置。
同步,基于本设计设计规定,存储芯片选用了24C02C,时钟芯片选用了DS1302,显示模块选取是LCD显示。
由于DS18B20 单总线通信功能是分时完毕,它有严格时隙概念,因而读写时序很重要。该系统构造图
单 片 机
按键输入电路
测温电路
时钟电路
显示电路
串行通讯
报警电路
图1、系统构造图
3 重要硬件简介
3.1 DS18B20
DSl820数字温度计是美国Dallas公司生产数字温度计,它提供9位(二进制)温度读数,批示器件温度。信息通过单线接口送入DSl8B20或从DSl8B20送出,因而从主机CPU到DSl8B20仅需一条线。DSl820电源可以由数据线自身提供而不需要外部电源。由于每一种DSl820在出厂时已经给定了唯一序号,因而任意多DSl820可以存储在同一条单线总线上。这容许在许多不同地方放置温度敏感器件。DSl820测量范畴从-55到+125,增量值为0.5,可在l s(典型值)内把温度变换成数字。每一种DSl820涉及一种唯一64位长序号,该序号值存储在DSl820内部ROM(只读存贮器)中。开始8位是产品类型编码(DSl820编码均为10H)。接着48位是每个器件唯一序号,最后8位是前面56位CRC(CRC=X8+X5+X4+1)码。下图为DS18B20实物图。
图2、DS18B20
DS1820方框图(图1)
存储器和控制逻辑
64位ROM和单线端口
暂存器
温度传感器
内部VDD
上限触发TH
下限触发TL
电源探测
8位CRC产生器
DS1820温度转换期间强上拉供电(图2)
+5V DS1820
μP
+5V
GND VDD
4.7K I/O
图3、DS18B20内部构造
温度/数据关系(表1)
TEMPERATURE
DIGITAL OUTPUT
(Binary)
DIGITAL OUTPUT
(Hex)
+125℃
0000 0111 1101 0000
07D0h
+85℃
0000 0101 0101 0000
0550h*
+25.0625℃
0000 0001 1001 0001
0191h
+10.125℃
0000 0000 1010 0010
00A2h
+0.5℃
0000 0000 0000 1000
0008h
+0℃
0000 0000 0000 0000
0000h
—0.5℃
1111 1111 1111 1000
FFF8h
—10.125℃
1111 1111 0101 1110
FF5Eh
—25.0625℃
1111 1110 0101 1111
FF6Fh
—55℃
1111 1100 1001 0000
FC90h
依照DS18B20通讯合同,主机控制DS18B20完毕温度转换必要通过三个环节:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才干对DS18B20进行预定操作。复位规定主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒存在低脉冲,主CPU收到此信号表达复位成功。
指令
商定代码
功能
读ROM
33H
读DS1820ROM中编码(即64位地址)
符合ROM
55H
发出此命令之后,接着发出64位ROM编码,访问单线总线上与该编码相相应DS1820使之作出响应,为下一步对该DS1820读写作准备。
搜索ROM
OFOH
用于拟定挂接在同一总线上DS1820D个数和辨认64位ROM地址,为操作各器件作好准备。
跳过ROM
OCCH
忽视64位ROM地址,直接向DS1820发温度变换命令,合用于单片工作。
告警搜索命令
OECE
执行后,只有温度超过设定值上限或下限片子才做出响应。
指 令
商定代码
功能
温度变换
44H
启动DS1820进行温度转换,转换时间最长500m,(典型为200m),成果存入内部9字节RAM中。
读暂存器
OBEH
读内部RAM中9字节内容
写暂存器
4EH
发出向内部RAM第3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节数据
复制暂存器
48H
将RAM中第3、4字内容复制到EPRAM中
重调EPRAM
OBBH
将EPRAM中内容恢复到RAM中第3、4字节
读供电方式
OB4H
读DS1820供电模式,寄生供电时DS1820发送“0”,外接电源供电DS1820发送“1”。
图4、DS18B20内部指令
3.2 AT89C51
AT89C51是美国ATMEL公司生产低电压,高性能CMOS8位单片机,片内含4k bytes可重复擦写只读程序存储器(PEROM)和128 bytes随机存取数据存储器(RAM),器件采用ATMEL公司高密度、非易失性存储技术生产,兼容原则MCS-51指令系统,片内置通用8位中央解决器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比应用场合,可灵活应用于各种控制领域。ATC9C51实物图如图3。重要参数如下:
·与MCS-51产品指令系统完全兼容
·4k字节可重擦写Flash闪速存储器
·1000次擦写周期
·全静态操作:0Hz-24MHz
·三级加密程序存储器
·128×8字节内部RAM 图5丶单片机
·32个可编程I/O口线
·2个16位定期/计数器
·6个中断源
·可编程串行UART通道
·低功耗空闲和掉电模式
3.3 LCD1602
由于液晶显示屏每一种点在收到信号后就始终保持那种色彩和亮度,恒定发光,而不像阴极射线管显示屏(CRT)那样需要不断刷新新亮点。因而,液晶显示屏画质高且不会闪烁。数字式接口液晶显示屏都是数字式,和单片机系统接口更加简朴可靠,操作更加以便。体积小、重量轻液晶显示屏通过显示屏上电极控制液晶分子状态来达到显示目,在重量上比相似显示面积老式显示屏要轻得多。功耗低相对而言,液晶显示屏功耗重要消耗在其内部电极和驱动IC上,因而耗电量比其他显示屏要少得多。LCD1602实物图如图4,重要参数如下:
·显示容量:16×2个字符
·芯片工作电压:4.5—5.5V 图6丶
·工作电流:2.0mA(5.0V)
·模块最佳工作电压:5.0V
·字符尺寸:2.95×4.35(W×H)mm
3.4 DS1302
DS1302 是美国DALLAS公司推出一种高性能、低功耗、带RAM实时时钟芯片,它可以对年、月、日、时、分、秒进行计时,具备闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送各种字节时钟信号或RAM数据。DS1302内部有一种31×8用于暂时性存储数据RAM寄存器。DS1302是DS1202升级产品,与DS1202兼容,但增长了主电源/后背电源双电源引脚,同步提供了对后背电源进行涓细电流充电能力。
X1,X2 32.768kHz晶振引脚
GND/RST 地/复位
SCLK 串行时钟
VCC1 电池引脚
VCC2 主电源引脚
3.5 24C02C
24C02是低工作电压2K位串行电可擦除只读存储器,内部组织为256个字节,每个字节8 位,该芯片被广泛应用于低电压及低功耗工商业领域。
重要特性
工作电压:1.8V~5.5V
输入/输出引脚兼容5V
应用在内部构造:256x8(2K)
二线串行接口
输入引脚经施密特触发器滤波抑制噪声
双向数据传播合同
兼容400KHz(1.8V,2.5V,2.7V,3.6V )
支持硬件写保护
高可靠性:读写次数:1,000,000 次– 数据保存:100 年
4 软件简介
4.1 Proteus
Proteus是英国Labeenter electronics公司研发EDA工具软件。Proteus不但是模仿电路、数字电路、模/数混合电路设计与仿真平台,更是当前世界最先进、最完整各种型号微控制器系统设计与仿真平台。它真正实现了在计算机上完毕从原理图设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成PCB完整电子设计与研发过程。Proteus产品系列也包括了革命性VSM技术,可以对基于微控制器设计连同所有外围电子器件一起仿真。
4.2 Keil
Keil C51美国Keil Software公司出品51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、构造性、可读性、可维护性上有明显优势,因而易学易用。Keil提供了涉及C编译器、宏汇编、连接器、库管理和一种功能强大仿真调试器等在内完整开发方案,通过一种集成开发环境(uVision)将这些某些组合在一起。运营Keil软件需要WIN98、NT、WIN、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你不二之选,虽然不使用C语言而仅用汇编语言编程,其以便易用集成环境、强大软件仿真调试工具也会令你事半功倍。
5 硬件设计
系统硬件设计涉及温度采集设计、单片机控制电路设计、通信接口电路设计。采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机解决及控制,省去老式测温办法诸多外围电路。且该芯片物理化学性很稳定,它能用做工业测温元件,此元件线形较好。DS18B20 最大特点之一采用了单总线数据传播,由数字温度计DS18B20和单片机构成温度测量装置,它直接输出温度数字信号,可直接与计算机连接。这样,测温系统构造就比较简朴,体积也不大。采用DS1302时钟芯片可以以便地得到系统时间并且输出以便。采用了24C02这种应用广泛芯片进行数据存储。采用51单片机控制,软件编程自由度大,可通过编程实现各种各样算术算法和逻辑控制,并且体积小,硬件实现简朴,安装以便。该系统运用单片机控制温度传感器DS18B20进行实时温度检测并显示,可以实现迅速测量环境温度,并可以依照需要设定上下限报警温度。
下面分别简介了各个硬件某些电路连接图。
5.1温度采集电路
采用DS18B20一线制芯片,其中1脚接地,3接电源,2为数据传播线,每个传感器有一种独立光刻地址,用于区别数据传播顺序。理论上说,这个电路最多能连接8个DS18B20,但是要连接更多,DQ端需要外加驱动电源。
图7.温度采集电路
5.2 单片机最小系统
单片机最小系统涉及51系列单片机、晶振电路、复位电路。如下所示:
图8.单片机最小系统
5.3 按键输入电路
按键输入如下,其中按下“开始/暂停”按钮LCD开始显示通道温度,“通道+”用于向上切换测量通道,“通道-”用于向下切换测量通道。
图9.按键输入电路
5.4 报警电路
如下所示,LED-H为当高限报警时报警,LED-L为当低限报警时报警。
图10.报警电路
5.5 LCD显示电路
本设计中,LCD只用了四线,实现四线显示。
图11.LCD显示电路
5.6 24C02存储电路
图12.24C02电路
5.7 DS1302时钟电路
图13.DS1302电路
5.8 串行通讯电路
图14.串行通讯电路
图中模仿了一种上位机和一种RS232串行接口。
6 软件设计
6.1 功能概述
本系统软件由C语言编写,程序重要功能是负责温度实时测量、显示、存储并读出存储器中当前温度值给上位机。
6.2 系统软件流程图
开始
执行初始化程序
系统时间为2MS
获取温度值
扫描按键
显示、发送、存储温度,并判断报警
N
Y
系统时间为2MS
系统时间为2MS
系统时间为2MS
T0,T1计数器
图15.系统软件流程图
7 实验成果
7.1 温度显示仿真
图中可以看出,LCD第一行显示“0 27.0”表达0通道温度为27.0度,第二行显示“22:04:19”表达测量温度时时间。
图16.温度显示仿真
7.2 温度存储与串行通讯
如图所示,左边对话框为24C02内存空间,其中“00 00 1B 00”意义是“00”为0通道,“00”为正温度,“1B”为十六进制温度(27),“00”为小数某些为0。右边对话框中模仿是上位机显示,也是十六进制表达。
图17. 温度存储与串行通讯
总 结
通过两周多设计以及调试,实现实验某些设计规定,能读出并显示DS18B20采集温度,并且可以实现高低温报警,可以实现温度数据存储和串行通讯,能通过对按键解决来切换需要显示通道温度,使得1条总线上可以读取到8个温度传感器温度值并将其依次显示在液晶屏幕上,同步液晶屏幕可以清晰显示温度传感器温度值详细时间。
我在这为期两周多设计性实验中,咱们在教师指引下,有把所学理论知识与实践相结合起来,从理论中得出结论,从而提高自己实际动手能力和独立思考能力。我但愿自己能在此后进一步学习中设计出更好,力求创新,努力地提高自己,谋求更大进步!最后用一句话来结束吧。“实践是检查真理唯一原则”。
参 考 文 献
[1]DS18B20、lcd LM1602阐明书、DS1302阐明书、24C02阐明书;
[2] 黄惟公等 单片机原理与应用技术 西安电子科大出版社 ;
[3]周润景等 基于PROTEUS电路及单片机系统设计与仿真 北航出版社 .5
[4]常敏等 单片机应用程序开发与实践 电子工业出版社 ;
[5]马建国、孟宪元.电子设计自动化技术基本.清华大学出版 ,
[6]姜威.实用电子系统设计基本,
[7]姜威.单片机系统PROTEUS设计与仿真 ,
[8]陈小忠 等 单片机接口技术实用子程序.北京:人民邮电出版社 .9
[9]徐爱钧,彭秀华编著 Keil Cx51 V7.0单片机高档语言编程与μ Vision2应用实践 北京: 电子工业出版
致 谢
为期两周课程设计也接近了尾声。本次课程设计完毕,凝聚着许多人关怀和协助。
一方面要感谢我敬爱指引教师朱光耀。她们在学术上精心指引和严格规定,在系统研究和调试过程中予以及时协助。在完毕设计期间给我许多协助和建议,她们兢兢业业、对工作认真负责态度为咱们做出了好表率,时刻鞭策着咱们向她们学习。这些使我课程设计得以顺利完毕,并勉励着咱们在此后人生道路上不断开拓进取,勇往直前。在此,我再一次对教师培养和关怀表达诚挚谢意!
同步,非常感谢我同窗们,在与她们共同窗习、工作、生活过程中,她们予以了我及时协助和建议,开拓了我思路。我对她们致以真诚谢意和衷心祝愿。
最后,向所有协助过我人致以最诚挚谢意!
附录A 电路原理图
附录B 重要程序
IIC驱动电路:
#include"iic.h"
uchar slaw=0xa0;
uchar slar=0xa1;
void delay(uchar n)
{
uchar i;
for(i=0;i<n;i++)
{
nop;
}
}
/***********************************
功能:毫秒延时函数
参数:当晶振为11.0592时x为毫秒数
********************************/
void delayms(unsigned int x)
{
uchar j;
while(x--)
{
for(j=0;j<113;j++){;}
}
}
/*********************************** 功能:起始信号函数
阐明:
***********************************/
void sta(void)
{
SDA=0;
SCL=1;
SDA=1;
delay(4);
SDA=0;
SCL=0;
delay(4);
}
/***********************************
功能:停止信号函数
阐明:
***********************************/
void stop()
{
SDA=0; //SDA初始化为低电平“0” _n
SCL=1; /*这两句顺序不可以变化*/
delay(4);
SDA=1;
delay(4);
}
/*发送应答位函数*/
void ack()
{
SDA=0;
SCL=1;
nop;
SCL=0;
SDA=1;
}
/*发送应答非位函数*/
void nack()
{
SDA=1;
SCL=1;
nop;
SCL=0;
SDA=0;
}
/*********************************** 功能:应答检查
参数:返回检查值 =1表达返回异常
阐明:每次发送一种数据后,从即会发送一种0信号应答
这里先让SDA=1;没有返回值 则始终=1 应答异常
***********************************/
bit cack()
{
bit rdflag;
SDA=1; //先释放SDA
SCL=1;
nop;nop;
if(SDA==1)
{
rdflag=1;
}
else
{
rdflag=0;
}
SCL=0;
return rdflag;
}
/***********************************
功能:写入当前位置一种字节函数 写入顺序7--0;
阐明:调用此函数前使用sta(void);已经让SCL为0
在上升沿写入数据
***********************************/
void WrbytCurrent(uchar dat)
{
uchar i;
for (i=0;i<8;i++)
{
nop;
SDA=(bit)(dat&0x80);
nop;
SCL=1;
dat<<=1;
nop;nop;
SCL=0;
}
}
/***********************************
功能:在address写入一种字节函数 写入位顺序7--0;
阐明:调用此函数前使用sta(void);已经让SCL为0
在上升沿读取数据
***********************************/
void wrbyt(uchar address,uchar dat)
{
bit flag;
do
{
sta(); //开始
WrbytCurrent(slaw);
flag=cack(); //应答
}while(flag==1);
WrbytCurrent(address);
flag=cack(); //应答
while(flag==1);
WrbytCurrent(dat);
flag=cack(); //应答
while(flag==1);
stop();
delayms(5);
}
void WriteSetN(uchar address,uchar wr[],uchar n)
{
uchar i;
bit flag;
do
{
sta(); //开始
WrbytCurrent(slaw); //器件地址
flag=cack(); //应答
}while(flag==1); //始终发送到应答成功
WrbytCurrent(address); //数据地址
flag=cack(); //应答
while(flag==1);
for(i=0;i<n;i++) //从address开始写入n个字节数
{
WrbytCurrent(wr[i]);
flag=cack(); //应答
while(flag==1);
}
stop();
delayms(5);
}
/***********************************
功能:读取当前位置一种字节函数 读取顺序7--0;
阐明:调用此函数前使用sta(void);已经让SCL为0
在下降沿读取数据
***********************************/
uchar RdbytCurrent()
{
uchar dat,i;
for(i=0;i<8;i++)
{
SCL=1;
nop;nop;
dat=(dat<<1)|SDA;
SCL=0;
nop;nop;
}
return dat;
}
uchar ReadByte(uchar address)
{
uchar dat;
sta(); //开始
WrbytCurrent(slaw); //器件地址
ack(); //应答
WrbytCurrent(address); //写入数据地址
ack();
sta(); //应答
WrbytCurrent(slar); //器件地址
ack();
dat=RdbytCurrent(); //读取数据
nack();
stop();
delayms(5);
return dat;
}
Timer.c驱动函数:
#include<reg52.h>
#include"const.h"
#include"Timer.h"
bit g_systTime2Ms=0;
bit g_time10Ms=0;
bit g_time50Ms=0;
void Timer0_com_Init()
{
TMOD=0X21;
SCON=0xd0;
TH0=0XF8;
TL0=0XCC;
ET0=1
展开阅读全文