1、 基于DS18B20室内数字温度计日常生活中人们需要测量各种各样的温度。环境温度对工业、农业、商业都有很大的影响。传统的测温仪测量费时,准确度也较低,数字温度计与传统的温度计相比,具有读数速度快,测温范围广,其输出温度采用数字显示,便于用户使用。随着单片机技术的不断发展,单片机在日用电子产品中的应用越来越广泛,本设计所介绍的数字温度计使用单片机stc89C51,测温传感器使用DS18B20,用数码管实现温度显示,利用DS18B20和一片stc89C51单片机即可构成一个简洁但功能强大的低电压温度测量控制系统。 一、设计前言1.1 设计目的1理论联系实际,单片机应用,尝试设计案例程序2对主要元件
2、功能有所了解3学会用C语言编写程序4培养设计项目程序流程图的思想5掌握项目中所使用到的元器件的硬件原理,并用Proteus软件仿真,并用protell99se画PCB1.2设计内容1所设计实验装置以MCS-51系列单片机为核心器件,组成一个数字式温度计。2所设计实验装置能够利用数码管直接显示出外界温度及温度变化。3所设计实验装置测试外界温度误差范围在0.5之间。4手机充电器作稳压电源。1.3设计要求1独立设计原理图及相应的硬件电路。2独立焊接电路板并对电路板调试。3针对选择的设计题目,设计系统软件。软件要做到:操作方便,实用性强,稳定可靠。4设计说明书格式规范,层次合理,重点突出。并附上设计原
3、理图、电路板图及相应的源程序。 二、设计方案2.1方案论证鉴于此设计题目,以下想到两种可能方案:方案一 热敏电阻由于此设计是测温电路,所以想到使用热敏电阻,利用它的感温效应,在实验过程中记录在其温度变化时的电压或电流,进行A/D转换后,就可以用单片机进行数据处理,在显示电路上,就可以将被测温度显示出来。方案二 温度传感器此设计利用温度传感器,采用一只温度传感器DS18B20,控制器单片机AT89S51,用液晶显示器显示温度。此传感器可以直接读取被测温度的数值,进行转换,就可以满足设计的要求。总结以上两种方案,方案一中的A/D转换电路,感温电路比较复杂。而方案二比较简单,温度变化的数值可以很容易
4、的读出,因此我们将采用方案二。方案二的温度计电路设计总体方框图如图2-1所示。单片机复位时钟振荡显示温度传感器主 控 制 器图2-1方案设计2.2设计原则一般系统的设计原则包含安全性,操作性的便利性,实时性,通用性和经济性1安全可靠首先要选用高性能的stc89C51单片机,保证在恶劣的工业环境下能正常运行。其次是设计可靠的控制方案,并具备各种安全保护措施,如报警,事故预测,事故处理和不间断电源等。2操纵维护方便操作方便表现在操作简单,直观形象和使于掌握且不强求操作要掌握计算机知识才能操作。3实时性强选用高性能的stc89C51单片机实时性,表现在内部和外部事件能及时的响应,并作出相应处理。4通
5、用性好系统设计时应考虑能适应不同的设备和各种不同设备控制对象。5经济性 三、软件3.1分析论证看到此设计题目,首先想到两种可能的设计方案,几度思考之后我们选择了第二种,即利用传感器DS18B20来显示温度本设计以检测温度并显示温度提供上下限报警为目的,按照系统设计功能的要求,确定系统由3个模块组成:主控器、测温电路,及显示电路。主控器:系统以DS18B20为传感器用以将温度模拟量转化为数字量以总线传入单片机,以stc89S52为主芯片,在主芯片对DS18B20传入的温度值进行处理,由单片机程序控制,将经处理后的温度由数码管显示出来。端口定义:以单片机stc89C51为核心,充分利用其功能,来实
6、现控制电路各个部件和谐有效的完成。首先正确定义各个端口是首先实验程序进行最重要的事。只有正确定义了端口,才能在单片机的各个引脚功能下有效的完成。定义引脚之后便要申明变量,正确的申明变量也非常重要,特别是变量的类别,关系到数据的正确的显示问题,例如此项目中温度的申明类型,就应该选择整型。延时程序:前奏准备好后便开始编写程序,延时程序在项目中是必须存在的,其效果可达到让实验现象更加形象,清楚的显示出来,对实验的检测起到至关重要的作用,不可忽略。而且延时的适当性对实验而言也是一个关键因素,太快或太慢会影响现象的效果,达不到预测的效果。测温电路:主要利用DS18B20传感器来感触温度的变化,并在数码管
7、显示屏上显示出来。查阅资料得知DS18B20传感器的温度范围在55+125之间变化,但是室温一般不会太高也不会太低,因此我们设定一个两位数的显示,首先设定十、个的显示及其位置,。显示电路:主要利用两位数码管显示温度,根据我们学习的知识,共阳极数码管要进行驱动,此处用9012三极管驱动。稳压电源:手机充电器输出直流5v通过以上几个模块的结合,利用Keil软件编写程序,调试成功后烧进已经做好的硬件设备即可。3.3源程序清单#include reg51.h#include ds18b20.h/引入DS18B20头文件/变量定义:unsigned char ly_dis2;/定义显示缓冲区code u
8、nsigned char table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90/表:共阳数码管 0-9 unsigned char l_posit=0;/显示位置/引脚定义:)sbit SMG_s = P20;/定义数码管阳级控制脚(十位)sbit SMG_g = P21;/定义数码管阳级控制脚(个位)/函数声明:void display(void);/显示函数,显示缓冲区内容void delay(void); /主函数,C语言的入口函数:void main()unsigned int i=0;char ltemp;while(1)if
9、(i=0)/先发转换命令,再读数值,以减少速度慢带来的显示抖动tmpchange(); /温度转换if(i=100)ltemp=tmp()/16;/得到十进制温度值,因为DS18B20可以精确到0.0625度,这里取整数显示if(ltemp1)l_posit=0;/延时子函数,短暂延时void delay(void)unsigned char i=10;while(i-); */*/* DS18B20 宏定义*/#define uchar unsigned char#define uint unsigned int/*IO引脚定义*/sbit DS=P30; /定义DS18B20接口/*延时子
10、函数 */void delayb(uint count) uint i; while(count) i=200; while(i0) i-; count-; /*DS18B20初始化*/void dsreset(void) uint i; DS=0; i=103; while(i0)i-; DS=1; i=4; while(i0)i-;/*读一位*/bit tmpreadbit(void) uint i; bit dat; DS=0; i+; /小延时一下 DS=1; i+;i+; dat=DS; i=8; while(i0)i-; return (dat);/*读一个字节*/uchar tm
11、pread(void) uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tmpreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好/一个字节在DAT里 return(dat); /将一个字节数据返回/*写一个字节*/void tmpwritebyte(uchar dat) uint i; uchar j; bit testb; for(j=1;j1; if(testb) / 写1部分 DS=0; i+;i+; DS=1; i=8; while(i0)i-; else DS=0; /写0部分 i=8; while(i0)i-; DS=1;
12、 i+;i+; /*发送温度转换命令*/void tmpchange(void) dsreset(); /初始化DS18B20 delayb(1); /延时 tmpwritebyte(0xcc); / 跳过序列号命令 tmpwritebyte(0x44); /发送温度转换命令/*获得温度*/int tmp() int temp; uchar a,b; dsreset(); delayb(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); /发送读取数据命令 a=tmpread(); /连续读两个字节数据 b=tmpread(); temp=b; temp=8
13、; temp=temp|a; /两字节合成一个整型变量。 return temp; /返回温度值/*读取温度传感器的序列号*/*void readrom()/本程序中没有用到此函数 uchar sn1,sn2; dsreset(); delayb(1); tmpwritebyte(0x33); sn1=tmpread(); sn2=tmpread();*/四、硬件4.1原理图如图4-1为主系统图,图4-2为按键电路图,图4-3为蜂鸣器原理图,图4-4 1602显示电路,图4-5 DS18B20传感电路图,4-6为5V稳压电源电路图。图4-1主系统图图4-5 DS18B20传感电路4.2元件功能
14、说明4.2.1 元件清单4.2.2 主系统stc89c51是一个低功耗,高性能8位单片机,片内含4k Bytes ISP (In-system programmable)的可反复擦写1000次的Flash 只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。4.2.3 DS18B20传感器1DS18B20的外形和内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器T
15、H和TL、配置寄存器。2DS18B20引脚定义:(1)DQ为数字信号输入/输出端;(2)GND为电源地;(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。3DS18B20工作原理DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当
16、计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+12
17、5的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FE6FH,-55的数字输出为FC90H 。DS18B20温度数据表如表4-4所示:表4-4:DS18B20温度数据表TEMPERTUREDIGALOUTPUT(Binary)DIGITALOUTPUT(Hex)+1250000 0111 1101 000007D0h+850000 0101 0101 00000550h+25.06250000 0001 1001 000101991h+10.1250000 0000 1010 001000A2h+0.50000 0000 0000 10000008h
18、00000 0000 0000 0000000h-0.51111 1111 1111 1000FFF8h-10.1251111 1111 0101 1110Ff5Eh-25.06251111 1110 0110 1111FE6Fh-551111 1100 1001 0000FC90h4DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器 TH、TL和结构寄存器。配置寄存器各位字节的意义如下表4-5:表4-5: 配置寄存器结构TMR1R011低五位一直都是1,TM是测试模式位,用于设置DS
19、18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用 户不要去改动。R1和R0用来设置分辨率,如下表4-6所示:(DS18B20出厂时被设置为12位)表4-6: 温度分辨率设置表R1R0分辨率温度最大转换时间009位93.75ms0110位187.5ms1011位375ms1112位750ms5高速暂存存储器 高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在 高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。对应的温度计算: 当符号位S=0时,直接
20、将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。表4-7是对应的一部分温度值。第九个字节是冗余检验字节。表4-7 DS18B20暂存寄存器分布存储器内容字节地址温度值低位(LS Byte)0温度值高位(MS Byte)1高温限值(TH)2低温限值(TL)3配置寄存器4保留5保留6保留7CRC校验值6根据DS18B20的通讯协议 主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放
21、,当DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。RAM指令表如4-8所示:表4-8 RAM指令表指定约定代码功能温度变换44H启动DS18B20进行温度转换,12位转换时最长为750ms(9位93.75ms)。结果存入内部9字节RAM中读暂存取0BEH读内部RAM中9字节的内容写暂存取4EH发出向内部RAM的3写上、下.4字节送两字节数据限温度数据命令,紧跟该命令之后,是传送两字节的数据复制暂存48H将ROM中第3、4字节的内容复制到EEPROM中重调EEPROM0B8H将EEPROM中内容恢复到ROM中的第3、4字节读供电方
22、式0B4H读DS18B20的供电模式。寄生供电时DS18B20发送“0”,外接电源供电DS18B20发送“1”五、参考文献1李广弟等.单片机基础M.北京航空航天出版社,2001.6.第1版190-195页。2王东峰等.单片机C语言应用100例M.电子工业出版社,2009.4.第3版67-87页。3陈海宴.51单片机原理及应用M.北京航空航天大学出版2010.5.第4版112-132页。4刘守义等.单片机技术基础M.西安电子科技大学出版社,2007.2.第5版46-68页。5钟富昭等.8051单片机典型模块设计与应用M.人民邮电2007.3.第2版58-69页。6 李平等.单片机入门与开发M.机械工业出版社,2008.6.第4版66-88页。