资源目录
压缩包内文档预览:
编号:544833
类型:共享资源
大小:282.59KB
格式:ZIP
上传时间:2015-12-01
上传人:QQ28****1120
认证信息
个人认证
孙**(实名认证)
辽宁
IP属地:辽宁
6
积分
- 关 键 词:
-
电气电子毕业设计论文
- 资源描述:
-
毕业设计216数字温度计的设计 ,电气电子毕业设计论文
- 内容简介:
-
数字温度计 Digital Temperature 数字温度计的 设计 题 目 基于 AT89S51 实现 数字温度计 院 系 电子电气工程系 专 业 电子信息工程 年 级 04 级电子三班 学生姓名 刘玉刚 指导教师 吕晓峰 2007 年 9 月 16 日 nts数字温度计 Digital Temperature 摘 要 : DS18B20 是 DALLAS公司生产的单线数字温度传感器,他具有独特的单线总线接 口方式。文章详细的介绍了单线数字温度传感器 DS18B20 的测量原理、特性以及在温度测量中的硬件和软件设计,具有接口简单、精度高、抗干扰能力强、工作稳定可靠等特点。 关键词 : DS18B20;温度传感器;单片机 1、 DS18B20 简介 DS18B20是美国 DALLAS半导体公司推出的一种改进型智能温度传感器。与传统的热敏电阻相比 : ( 1)独特的单线接口方式: DS18B20 与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20的双向通讯。 ( 2)在使用中不需要任何外围元件。 ( 3) 温度变换功率来源于数据总线,电压范围: +3.0 +5.5 V。总线本身也可以向所挂接的 DS18B20供电,而无需额外电源。 ( 4)测温范围: -55 +125 。固有测温分辨率为 0.5 。 ( 5) 能够直接读出被测温度并且可 根据实际要求 通过编程可实现 912位的数字读数方式。 ( 6)用户可自设定非易失性的报警上下限值。 ( 7)支持多点组网功能,多个 DS18B20 可以并联在惟一的三线上,实现多点测温。 ( 8)负压特性,电源极性接反时,温度计不会因发热而 烧毁,但不能正常工作。 2、 DS18B20 的 内部结构 DS18B20内部结构主要由四部分组成: 64位光刻 ROM、温度传感器、非挥发的温度报警触发器 TH和 TL、配置寄存器。 SOIC 封装的 DS18B20 的引脚排列见图 1,其引脚功 能描述见表 1。 DS18B20 引脚分布图 表 1 DS18B20 详细引脚功能描述 序号 名称 引脚功能描述 1,2,6,7,8 GND 地信号 3 VDD 可选择的 VDD引脚。当工作于寄生电源时,此引脚必须接地。 4 DQ 数据输入 /输出引脚。开漏单总线接口引脚。当被用 着在寄生电源下,也可以向器件提供电源。 光刻 ROM中的 64位序列号是出厂前被光刻好的,它可以看作是该 DS18B20的地址序列码。 64 位光刻 ROM的排列是:开始 8位( 28H)是产品类型标号,接着的 48位是该 DS18B20 自身的序列号,最后 8位是前面 56位的循环冗余校验码( CRC=X8+X5+X4+1)。 nts数字温度计 Digital Temperature DS18B20 存储器结构图 温度值分配率配置表 3、 DS18B20 的使用方法 由于 DS18B20采用的是 1 Wire总线协议方式,即在一根数据线实现数据的双向传输,而对 AT89S51 单片机来说 ,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对 DS18B20芯片的访问。 由于 DS18B20 是在一根 I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。 DS18B20 有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和 命令的传输都是低位在先。 DS18B20的复位时序 nts数字温度计 Digital Temperature DS18B20的读时序 对于 DS18B20 的读时序分为读 0时序和读 1时序两个过程。 对于 DS18B20 的读时隙是从主机把单总线拉低之后,在 15 秒之内就得释放单总线,以让 DS18B20 把数据传输到单总线上。 DS18B20在完成一个读时序过程,至少需要 60us才能完成。 DS18B20的写时序 对于 DS18B20 的写时序仍然分为写 0时序和写 1时序两个过程。 对于 DS18B20 写 0时序和写 1时序的要求不同,当要写 0时序时,单总线要被拉低至少 60us,保证 DS18B20能够在 15us 到 45us之间能够正确地采样 IO总线上的 “0” 电平,当要写 1时序时,单总线被拉低之后,在 15us之内就得释放单总线。 4、 设计 任务 设计控制器使用单片机 AT89S51,测温传感器使用 DS18B20,用 3位共阳极 LED数码直读显示 LED数码管以串口传送数据 ,实现温度显示 . 基本范围 -50 -110 精度误差小于 0.5 5、 电路原理图 nts数字温度计 Digital Temperature 基于 DS18B20的数字温度计设计电路原理图 7 段数码管动态显示电路原理图之数码管驱动电路 nts数字温度计 Digital Temperature 7 段数码管动态显示电路原理图之 CPU 和锁存电路 6、 软件设计 单片机实现温度转换读取温度数值程序流程图 nts数字温度计 Digital Temperature /*/ /* Copyright (c) 2007-9-16, 电气系电子三班 */ /* All rights reserved. */ /* 作 者: 刘玉刚 */ /*/ #ifndef _DIGTHERMO_H / 防止 DigThermo.h 被重复引用 #define _DIGTHERMO_H #include / 引用标准库的头文件 #include #include #include #define uchar unsigned char #define uint unsigned int uchar tplsb,tpmsb; / 温度值低位、高位字节 sbit DQ = P35; / 数据通信线 DQ #endif #include DigThermo.h /* 延时 t 毫秒 */ void delay(uint t) uint i; while(t-) /* 对于 11.0592M 时钟,约延时 1ms */ for (i=0;i0) i-; DQ = 1; / 产生上升沿 i = 4; while (i0) i-; nts数字温度计 Digital Temperature /* 等待应答脉冲 */ void RxWait(void) uint i; while(DQ); while(DQ); / 检测到应答脉冲 i = 4; while (i0) i-; /* 读取数据的一位,满足读时隙要求 */ bit RdBit(void) uint i; bit b; DQ = 0; i+; DQ = 1; i+;i+; / 延时 15us 以上,读时隙下降沿后 15us, DS18B20 输出数据才有效 b = DQ; i = 8; while(i0) i-; return (b); /* 读取数据的一个字节 */ uchar RdByte(void) uchar i,j,b; b = 0; for (i=1;i1); return(b); /* 写数据的一个字节,满足写 1 和写 0 的时隙要求 */ void WrByte(uchar b) nts数字温度计 Digital Temperature uint i; uchar j; bit btmp; for(j=1;j1; / 取下一位(由低位向高位) if (btmp) /* 写 1 */ DQ = 0; i+;i+; / 延时,使得 15us 以内拉高 DQ = 1; i = 8; while(i0) i-; / 整个写 1 时隙不低于 60us else /* 写 0 */ DQ = 0; i = 8; while(i0) i-; / 保持低在 60us 到 120us 之间 DQ = 1; i+; i+; /* 启动温度转换 */ void convert(void) TxReset(); / 产生复位脉冲,初始化 DS18B20 RxWait(); / 等待 DS18B20 给出应答脉冲 delay(1); / 延时 WrByte(0xcc); / skip rom 命令 WrByte(0x44); / convert T 命令 /* 读取温度值 */ void RdTemp(void) TxReset(); / 产生复位脉冲,初始化 DS18B20 nts数字温度计 Digital Temperature RxWait(); / 等待 DS18B20 给出应答脉冲 delay(1); / 延时 WrByte(0xcc); / skip rom 命令 WrByte(0xbe); / read scratchpad 命令 tplsb = RdByte(); / 温度值低位字节(其中低 4 位为二进制的“小数”部分) tpmsb = RdByte(); / 高位值高位字节(其中高 5 位为符号位 ) /* 主程序,读取的温度值最终存放在 tplsb 和 tpmsb 变量中。 tplsb 其中低 4 位为二进制的“小数”部分; tpmsb 其中高 5 位为符号位。通过数码管输出时,需要进行到十进制有符号实数(包括小数部分)的转换。 */ code(templ,tempm) char temp temp0 ; If(Tempm=Tempm|0x00 ) temp=0xff; else temp=0x7f; tempm=4; temp0=0xff; temp0=temp0&templ; temp=temp&temp0; uchar A1,A2,A2t,A3, ser=temp/10; /分离出三位要显示的数字 SBUF=ser; A1=temp/100; A2t=temp%100; A2=A2t/10; A3=A2t%10; #define TIMER0H 0xc4; #define TIMER0L 0x00; /* 7 段数码管锁存器地址 */ #define LEDADDR 0x8000 / 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f /* 0-9 a-f 的 7 段数码管显示编码 */ Unsignedchar ledcode16=0x3F,0x0C,0x76,0x5E,0x4D,0x5B,0x7B,0x0E,0x7F,0x5F,0x6F,0x79,0x33,0x7C,0x73,0x63; /* 存放要显示的数字值 */ unsigned char val3;/ nts数字温度计 Digital Temperature unsigned currled; /* 写锁 存器的子程序 */ void wraddr(unsigned int addr,unsigned char d) unsigned char xdata *pa; pa=(unsigned char xdata *)addr; *pa=d; /* 显示子程序 */ void displaylast(void) unsigned char en3=0,2,4 ; if(valcurrled=0)&(valcurrled=0)&(currled3) currled+; else currled=0; void time0(void) interrupt 1 display(); TL0 = TIMER0L; TH0 = TIMER0H; /* 初始化子程序 */ void init(a1,a2,a3) /timer0 init TL0 = TIMER0L; TH0 = TIMER0H; TR0=1; ET0=1;/test / irq init EX0=0; IT0=0; EX1=0; nts数字温度计 Digital Temperature IT1=0; EA=1; /输入要显示的数值 val0=a1; val1=a2; val2=a3; currled=0; void main(void) do delay(1); / 延时 1ms convert(); / 启动温度转换,需要 750ms delay(1000); / 延时 1s RdTemp(); / 读取温度 Display(tplsb,tpmsb) co
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。