ds18b20数字温度计的设计Word下载.docx

上传人:b****6 文档编号:16215876 上传时间:2022-11-21 格式:DOCX 页数:23 大小:304.45KB
下载 相关 举报
ds18b20数字温度计的设计Word下载.docx_第1页
第1页 / 共23页
ds18b20数字温度计的设计Word下载.docx_第2页
第2页 / 共23页
ds18b20数字温度计的设计Word下载.docx_第3页
第3页 / 共23页
ds18b20数字温度计的设计Word下载.docx_第4页
第4页 / 共23页
ds18b20数字温度计的设计Word下载.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

ds18b20数字温度计的设计Word下载.docx

《ds18b20数字温度计的设计Word下载.docx》由会员分享,可在线阅读,更多相关《ds18b20数字温度计的设计Word下载.docx(23页珍藏版)》请在冰豆网上搜索。

ds18b20数字温度计的设计Word下载.docx

2.1设计目的4

2.2系统的设计方案4

2.3系体的总体框图设计5

3分模块设计与分析5

3.1主要器件说明5

3.1.1主控制器5

3.1.2显示器6

3.1.3DS18B20的使用6

3.1.4MAX7221的说明8

3.2各部分电路说明9

3.2.1单片机控制部分9

3.2.2显示部分电路9

3.2.3时钟调节与报警9

3.2.4DS18B20电路9

3.3主板电路10

4电路的仿真与程序流程10

4.1protues的仿真与原理图的绘制10

4.2keil的调试11

4.3程序流程图12

总结14

参考文献15

致谢16

附录:

源程序17

1前言

温度控制系统广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等,常用的控制电路根据应用场合和所要求的性能指标有所不同,在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题。

这类控制对象惯性大,滞后现象严重,存在很多不确定的因素,难以建立精确的数学模型,从而导致控制系统性能不佳,甚至出现控制不稳定、失控现象。

传统的继电器调温电路简单实用,但由于继电器动作频繁,可能会因触点不良而影响正常工作。

控制领域还大量采用传统的PID控制方式,但PID控制对象的模型难以建立,并且当扰动因素不明确时,参数调整不便仍是普遍存在的问题。

而采用数字温度传感器DS18B20,因其内部集成了A/D转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。

数字温度传感器DS18B20只用一个引脚即可与单片机进行通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。

由于DS18B20芯片的小型化,更加可以通过单跳数据线就可以和主电路连接,故可以把数字温度传感器DS18B20做成探头,探入到狭小的地方,增加了实用性。

更能串接多个数字温度传感器DS18B20进行范围的温度检测。

2总体概要设计

2.1设计目的

1.使用DS18B20测出环境温度。

2.并用数码管显示温度,精确度为1℃。

3.同时能够用数码管显示当前时间。

4.按键可以调节时间的分钟,小时。

5.设有温度报警电路。

6.温度测量范围是-55℃—128℃。

2.2系统的设计方案

以DS18B20为温度传感器获取环境温度,通过其内部的读写存储器读写到单片机上,并通过51单片机外接的led数码管显示出来,并设有温度报警。

同时将利用单片机内部的定时器显示当时时间。

2.3系体的总体框图设计

温度计电路设计方案

总体设计方框图如图1所示,控制器采用单片机AT89C51,温度传感器采用DS18B20,用4位LED数码管以串口传送数据实现温度显示。

图1.1单片机的框架设计图

3分模块设计与分析

3.1主要器件说明

3.1.1主控制器

单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

如图2.1所示。

本设计中主要用到的管脚:

VCC:

供电电压。

GND:

接地。

图2.1单片机的管脚图

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

一次写1时,被定义为高阻输入。

P0用于数码管的段位驱动,使用P0口时要外接上拉电路。

P1.0:

MAX7221的串行数据输入端。

P1.1:

MAX7221的片选端。

P1.2:

MAX7221的时钟输入端。

P1.5—P1.7:

时钟的清零,小时调节,分钟调节。

P2.0—P2.3:

数码管的片选端。

P3.0:

喇叭的报警端。

P3.1:

发光二极管的输入端。

P3.7:

DS18B20的DQ端。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

3.1.2显示器

显示电路采用3位共阳LED数码管,利用动态扫描方式,从P0口输出段码,P2口的P2.5、P2.6、P2.7输出位码。

LED数码有共阳和共阴两种,把这些LED发光二极管的正极接到一块(一般是拼成一个8字加一个小数点)而作为一个引脚,为共阳管。

如下图2.2、2.3所示:

图2.2数码管外部显示图2.3数码管的内部结构

3.1.3DS18B20的使用

(1)DS18B20简介:

DS18B20温度传感器是采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片,经焊接,外加不锈钢保护管封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

其常用的连接方式如图2.4所示:

图2.4DS18B20的连接方式

(2)1——wire协议

图2.5DS18B20复位时序

初始化时序包括一个主机发出的复位脉冲以及从机的应答脉冲,这一过程如上图2.5所示,复位脉冲是一个480us-960us的低电平,然后释放总线将总线拉至高电平,时间持续15us-60us。

之后,从机开始向总线发出一个应答脉冲,该脉冲是一个60us-240us的低电平信号,表示从机已准备好。

在初始化过程中,主机接收脉冲的时间最少为480us[5]。

图2.6DS18B20的写时序

DS18B20的写时序如图2.6所示,分为写0和写1时序两个过程,主机把单线总线从高电平拉到低电平时,表示一个写周期的开始。

当要写0时序时,单总线要被拉至至少60us,保证DS18B20在15us-45us之间能够正确地采样总线上的低电平;

当要写1时序时,单总线被拉低以后,在15us之内就得释放单总线,将总线拉为高电平。

此外,两个写周期之间至少要有1us的恢复时间[6]。

3.1.4MAX7221的说明

MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。

其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。

只有一个外部寄存器用来设置各个LED的段电流。

MAX7221与SPI™、QSPI™以及MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。

一个方便的四线串行接口可以联接所有通用的微处理器。

每个数据可以寻址在更新时不需要改写所有的显示。

MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。

整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。

MAX7221的典型电路应用图如下图:

图2.7MAX7221的连接方式

3.2各部分电路说明

3.2.1单片机控制部分

在本设计中,采用了AT89C51单片机作为本电路的核心电路的设计。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

3.2.2显示部分电路

(1)用数码管通过单片机的P0与P2口输出当前温度,P2口P2.0-P2.3作为数码管的片选端,用P0的8个管脚作为段选。

(2)用MAX7221芯片作为8管脚的数码管输入,数码管显示的是当前时间。

用12MHz的晶振。

3.2.3时钟调节与报警

(1)当温度高于一定的值时,喇叭会发出声音,二极管会亮。

只有但物体温度小于该值时,一切又会恢复正常。

(我定的是94度)

(2)通过三个按键调节数字时钟,第一个按键时钟归零,初始化时钟。

第二个按键调节时钟的分钟,每按一次分钟时加一,达到60后重新归零。

第三个按键调节小时数,每按一次时钟加一,达到24自动归零。

3.2.4DS18B20电路

如右图,加电阻为4.7的上拉电阻,DQ口接单片机P3.7的管脚。

图2.8DS18B2连线图

3.3主板电路

设计原理如下:

通过单片机的P3^7的管脚与ds18b20的DQ相连,再通过1—wire总线协义将环境温度读取出来,再通过P0脚将温度显示在四位数码管上,并设置温度的报警系统。

同时再将此时的时间显示出来。

为节省管脚,使用MAX7221芯片。

原理图如下:

图2.9完整原理图

4电路的仿真与程序流程

4.1protues的仿真与原理图的绘制

Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU 

的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。

因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。

对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。

Proteus提供了比较丰富的测试信号用于电路的测试。

这些测试信号包括模拟信号和数字信号。

对于单片机硬件电路和软件的调试,Proteus提供了两种方法:

一种是系统总体执行效果,一种是对软件的分步调试以看具体的执行情况。

对于总体执行效果的调试方法,只需要执行debug菜单下的execute菜单项或F12 

快捷键启动执行,用debug菜单下的pauseanimation菜单项或pause键暂停系统的运行;

或用debug菜单下的stopanimation菜单项或shift-break组合键停止系统的运行。

其运行方式也可以选择工具栏中的相应工具进行。

对于软件的分步调试,应先执行debug菜单下的start/restartdebugging菜单项命令,此时可以选择stepover、stepinto和stepout命令执行程序(可以用快捷键F10、F11和ctrl+F11),执行的效果是单句执行、进入子程序执行和跳出子程序执行。

在执行了start/restartdebuging命令后,在debug菜单的下面要出现仿真中所涉及到的软件列表和单片机的系统资源等,可供调试时分析和查看。

运行proteus的ISIS程序后,进入该仿真软件的主界面。

在工作前,要设置view菜单下的捕捉对齐和system下的颜色、图形界面大小等项目。

通过工具栏中的p(从库中选择元件命令)命令,在pickdevices窗口中选择电路所需的元件,放置元件并调整其相对位置,元件参数设置,元器件间连线,编写程序;

在source菜单的Definecodegenerationtools菜单命令下,选择程序编译的工具、路径、扩展名等项目;

在source菜单的Add/removesourcefiles命令下,加入单片机硬件电路的对应程序;

通过debug菜单的相应命令仿真程序和电路的运行情况。

4.2keil的调试

KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统。

与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。

Keil可以完成编辑、编译、连接、调试、仿真等整个开发流程。

KeiluVision2ADE是Keilsoftware公司的产品,它集项目管理、编译工具、代码编写工具、代码调试以及完全仿真于一体,适合个人开发或人数少、对开发过程的管理还不成熟的开发团体。

uVision2本身自带项目管理器,其开发流程步骤如下:

·

开启uVision2,建立工程文件并且从器件数据库里挑选出项目实际使用的器件。

建立一个新的源文件,并且把这个源文件添加到工程中去。

为单片机添加并且设置启动代码。

设置硬件相关的选项。

编译整个工程并且生成下载到存储器用的HEX文件。

4.3程序流程图

Yes

No

No

图3.1程序框架图

图3.2proteus仿真结果

由上述可以综合通过proteus,keil以及源程序仿真出如下所示的实验结果(仿真源程序见附录):

总结

本系统采用采用单片机和数字温度转换器DS18B20来实现,具有主机接口简单,结构灵活,调试方便等特点,实验结果表明这种测温系统转换速度快、精度高。

这次实习不仅巩固了以前所学过的知识,而且学到了很多在书本上没有的知识。

在设计的过程中,我们经常遇到问题,可以说是困难重重,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次并毕业设计之后,一定把以前所学过的知识重新温故。

不管是在以后的工作或学习中,我都会全力以赴,积极思考,勇于探索,不断创新。

在设计中还有很多问题有待解决,例如仍没有用ds1302等时钟芯片设计导致时钟精度不高。

大量使用数码管没有用lcd显示器,使得资源浪费。

更没有设计多点温度采集,温度没有普遍性。

我想在以后我会继续查找各方面资料、请教老师、与同学共同探讨,一起来解决这些问题。

同时在以后的日子里我会慢慢改正在这次毕业设计中所犯的错误、把学过的知识掌握的更加牢固。

参考文献

[1]张克,张哲,杨莉.采用高精度数字温度计替代标准水银温度计的探讨[J].计量学报,2007(9):

99-102.

[2]赵涵漠.水银温度计:

我们身边的定时炸弹[J].教师博览,2010(4):

60-61.

[3]张璇.基于51单片机的红外测温仪的设计与实现[J].硅谷,2010(19):

22—25

[4]张毅刚.MCS-51单片机应用设计[M].哈尔滨:

哈尔滨工业大学出版社,2003:

78-79.

[5]刘坤,宋弋,赵红波,等.51单片机C语言应用开发技术大全[M].北京:

人民邮电出版社,2008.78-80.

[6]李华.MCS􀀁

51系列单片机实用接口技术[M].北京:

北京航空航天大学出版社,2002.33—35

[7]宏晶科技.STC系列单片机器件手册[EB/OL].[2009-02-02].

[8]周明德,蒋本珊,微机原理与接口技术(第二版)[M].北京:

人民邮电出版社,2007,1-103

致谢

首先感谢我的导师刘经佑老师!

经过半年的忙碌和工作,本次毕业设计已经接近尾声,通过这次设计,把自己所学的理论知识运用于实践,受益非浅。

对单片机有了更深的认识,对我以后独自处理问题有了很大的帮助。

在整个毕业设计过程中,我的指导老师刘老师一直给予我们很多的关注和指导,勤勉教学,诲人不倦,帮助我顺利的完成这次设计任务。

还要感谢我的同学,他们在本次设计中不辞辛苦,多次帮我解答了我毕业设计中的疑难问题。

源程序

#include<

reg51.h>

#defineucharunsignedchar

sbitDQ=P3^7;

sbitvoice=P3^0;

sbitlight=P3^1;

sbitdin=P1^0;

//MAX7221数据输入端

sbitcs=P1^1;

//MAX7221片选输入端

sbitclk=P1^2;

sbitkey_rst=P1^5;

sbitkey_min=P1^6;

sbitkey_hour=P1^7;

//sbitkey_clr=P3^6;

//unsignedintflag;

unsignedinttemp;

unsignedcharsecond;

unsignedcharminute;

unsignedcharhour;

unsignedchardis[4]={0,0,0,0};

unsignedcharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0xff,0xbf};

//分别为0-9,不显示,负号

unsignedcharled1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

//带小数点显示

ucharcodedispcode[]={

0x7e,0x30,0x6d,0x79,//’0’,’1’,’2’,’3’

0x33,0x5b,0x5f,0x70,//’4’,’5’,’6’,’7’

0x7f,0x7b,0x01,0x00//’8’,’9’,’-’,无显示

};

unsignedcharstr2[8]={"

"

voiddelay(unsignedinti)//如果i是unsigendchar类型,则会出现错误结果

{

while(i--);

}

voidInit(void)//初始化

//unsignedcharflag=0;

DQ=0;

//单片机将DQ拉低

delay(100);

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

DQ=1;

//拉高总线

delay(30);

//flag=DQ;

//稍做延时后如果flag=0则初始化成功flag=1则初始化失败

//delay(20);

unsignedcharRead(void)//读字节

unsignedchari=0;

unsignedchardat=0;

for(i=8;

i>

0;

i--)

{

//给脉冲信号

dat>

>

=1;

if(DQ)

dat|=0x80;

delay(5);

}

return(dat);

voidWrite(unsignedchardat)//写字节

i>

i--)

DQ=dat&

0x01;

voidDisplay(unsignedinttemp)//显示程序

{

if(temp<

=0x0800)

{temp>

=4;

//右移4位,相当于乘0.0625,将温度化为十进制

temp*=10;

//扩大10倍,显示一位小数

dis[0]=temp/1000;

//千位

dis[1]=temp%1000/100;

//百位

dis[2]=temp%1000%100/10;

//十位

dis[3]=temp%1000%100%10;

//个位

else

temp=~temp;

temp+=1;

temp>

dis[0]=0x0c;

//负数

dis[1]=temp%100/10;

dis[2]=temp%100%10;

//十位

dis[3]=0;

//个位

P2=0x01;

//先片选,在段选,反过来就不能正常显示

P0=led[dis[0]];

delay(200);

P2=0x02;

P0=led[dis[1]];

delay(200);

P2=0x04;

P0=led1[dis[2]];

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

当前位置:首页 > 教学研究 > 教学案例设计

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

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