单片机课程设计(论文)-数字温度计的设计.doc

上传人:小小飞 文档编号:3915868 上传时间:2019-10-10 格式:DOC 页数:12 大小:362.50KB
返回 下载 相关 举报
单片机课程设计(论文)-数字温度计的设计.doc_第1页
第1页 / 共12页
单片机课程设计(论文)-数字温度计的设计.doc_第2页
第2页 / 共12页
单片机课程设计(论文)-数字温度计的设计.doc_第3页
第3页 / 共12页
单片机课程设计(论文)-数字温度计的设计.doc_第4页
第4页 / 共12页
单片机课程设计(论文)-数字温度计的设计.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《单片机课程设计(论文)-数字温度计的设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计(论文)-数字温度计的设计.doc(12页珍藏版)》请在三一文库上搜索。

1、数字温度计Digital Temperature 数字温度计的设计题 目 基于AT89S51实现 数字温度计 院 系 电子电气工程系 专 业 电子信息工程 年 级 04级电子三班 学生姓名 指导教师 2007 年 9 月 16 日摘 要:DS18B20是DALLAS公司生产的单线数字温度传感器,他具有独特的单线总线接口方式。文章详细的介绍了单线数字温度传感器DS18B20的测量原理、特性以及在温度测量中的硬件和软件设计,具有接口简单、精度高、抗干扰能力强、工作稳定可靠等特点。 关键词:DS18B20;温度传感器;单片机 1、DS18B20简介DS18B20是美国DALLAS半导体公司推出的一种

2、改进型智能温度传感器。与传统的热敏电阻相比: (1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 (2)在使用中不需要任何外围元件。 (3)温度变换功率来源于数据总线,电压范围:+3.0+5.5 V。总线本身也可以向所挂接的DS18B20供电,而无需额外电源。 (4)测温范围:-55 +125 。固有测温分辨率为0.5 。 (5)能够直接读出被测温度并且可根据实际要求通过编程可实现912位的数字读数方式。 (6)用户可自设定非易失性的报警上下限值。 (7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。

3、(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。2、DS18B20的内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。SOIC封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。DS18B20引脚分布图表1DS18B20详细引脚功能描述序号名称引脚功能描述1,2,6,7,8GND地信号3VDD可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。4DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。光刻ROM中的64位序列号是出厂前被光刻好的,它可以看

4、作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。DS18B20存储器结构图温度值分配率配置表3、DS18B20的使用方法由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B

5、20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。DS18B20的复位时序DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才

6、能完成。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.55、电路原理图基于DS18B20的数字温度计设计电路原理图7段数码管动态显示

7、电路原理图之数码管驱动电路7段数码管动态显示电路原理图之CPU和锁存电路6、软件设计单片机实现温度转换读取温度数值程序流程图 /*/* 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 i

8、nt 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-;/* 等待应答脉冲 */void RxWait(void)uint i;while(DQ);while(DQ);/ 检测到应答脉冲 i = 4;while (i0)i-;/* 读取数据的一位,满

9、足读时隙要求 */ 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;i=8;i+)j = RdBit();b = (j1);return(b);/* 写数据的一个字节,满足写1和写0的时隙要求 */void WrByte(uchar b)uint i;uchar j;bit b

10、tmp;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();/ 产生复位脉冲,初始化DS18B20RxWait(); / 等待DS18B20给出应答脉冲delay(1); / 延时WrByte(0xcc);

11、 / skip rom 命令WrByte(0x44);/ convert T 命令/* 读取温度值 */void RdTemp(void)TxReset();/ 产生复位脉冲,初始化DS18B20 RxWait(); / 等待DS18B20给出应答脉冲delay(1); / 延时WrByte(0xcc); / skip rom 命令WrByte(0xbe); / read scratchpad 命令tplsb = RdByte(); / 温度值低位字节(其中低4位为二进制的“小数”部分)tpmsb = RdByte(); / 高位值高位字节(其中高5位为符号位)/* 主程序,读取的温度值最终存

12、放在tplsb和tpmsb变量中。tplsb其中低4位为二进制的“小数”部分;tpmsb其中高5位为符号位。通过数码管输出时,需要进行到十进制有符号实数(包括小数部分)的转换。*/code(templ,tempm)char temp temp0 ;If(Tempm=Tempm|0x00 ) temp=0xff;elsetemp=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

13、%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

14、;/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+;elsecurrled=0;void time0(void) interrupt 1 display(

15、);TL0 = TIMER0L;TH0 = TIMER0H;/* 初始化子程序 */void init(a1,a2,a3)/timer0 initTL0 = TIMER0L;TH0 = TIMER0H;TR0=1;ET0=1;/test/ irq initEX0=0;IT0=0;EX1=0;IT1=0;EA=1;/输入要显示的数值val0=a1;val1=a2;val2=a3;currled=0;void main(void)dodelay(1); / 延时1msconvert(); / 启动温度转换,需要750msdelay(1000); / 延时1sRdTemp(); / 读取温度 Display(tplsb,tpmsb) code(templ,tempm); Init(); While(1) while(1);7、结语 学习利用DS18B20开发的“LCD显示温度”的控制系统中,其测温系统简单,测温精度高,连接方便,占用口线少,转换速度快,与微处理器的接口简单,给硬件设计工作带来了极大的方便,能有效地降低成本,缩短开发周期。参考文献1胡振宇,刘鲁源,杜振辉DS18B20接口的C语言程序设计J单片机与嵌入式系统应用,20022于永51单片机C语言常用模块与综合系统设计实例精讲 20073http:/www.audio-

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1