如果所万用表测温度怎么使用为120度用DS18B20(-55-125度)行不行?

当前位置: >>
DS18B20温度测量设计实验报告2
西安欧亚学院信息工程学院单片机课程设计说明书信息工程学院成绩课程设计说明书(论文)题目:温度测量 单片机课程设计 电子信息工程 电信 0901课 程 名 称: 专 班 业: 级:学 生 姓 名: 学 号: 31 3#北 603 16 10设 计 地 点: 指 导 教 师:设计起止时间:2012 年 5 月 2 日至 2012 年 5 月 22 日第1页 西安欧亚学院信息工程学院单片机课程设计说明书目 录 一、设计功能要求: ........................................................................................... 3 二、 系统总体设计方案: ................................................................................. 5 1、基本设计思想: ..................................................................................... 5 2、实施方案论述: ..................................................................................... 6 三、 系统分析与设计: ..................................................................................... 6 1、程序流程图及说明 ................................................................................. 6 2、温度计的的电路设计 ............................................................................. 9 四、 源码清单: ............................................................................................... 12 五、 改进意见与收获体会: .............................................................................. 18 六、 主要参考资料: ....................................................................................... 19第2页 西安欧亚学院信息工程学院单片机课程设计说明书一、设计功能要求:本次的设计主要是利用了数字温度传感器 DS18B20 测量温度信号,计 算 后 可 以 在 LCD 数 码 管 上 显 示 相 应 的 温 度 值 。 其 温 度 测 量 范 围 为 -55~125℃,精确到 0.5℃。 本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置 范围内时,可以报警。数字温度计所测量的温度采用数字显示,控制器使 用单片机 89C51,测温传感器使用 DS18B20,用 LCD1602 实现温度显示。 从温度传感器 DS18B20 可以很容易直接读取被测温度值,进行转换即满足 设计要求。 本次使用的单片机 89C51 和 MCS-51 是完全兼容的, 是一种带 4K 字节 闪烁可编程可擦除只读存储器 (FPEROM―Falsh Programmable and Erasable Read Only Memory)的低电压、高性能 CMOS8 位微处理器。其主要特点如 下: ? 8 位 CPU。 ? 工作频率最高为 24M。 ? 128B 数据存储器。 ? 4KB 程序存储器。 ? 程序存储器的寻址空间为 64KB。 ? 片外数据存储器的寻址空间为 64KB。 ? 128 个用户位寻址空间。 ? 21 个字节特殊功能寄存器。 ? 4 个 8 位的并行 I/O 接口:P0、P1、P2、P3。 ? 两个 16 位定时/计数器。 ? 两个优先级别的 5 个中断源。 ? 1 个全双工的串行 I/O 接口,可多机通信。 ? 111 条指令,喊乘法指令和除法指令。 ? 较强的位处理能力 。 ? 采用单一+5V 电源。 对于 89C52 而言,不同之处在于:有 256B 的数据存储器、8K 的程序 存储器、全双工串行 I/O 接口、6 个中断源、3 个 16 位定时/计数器,工作 频率可升直 33Mhz。比 51 拥有更高的性能。第3页 西安欧亚学院信息工程学院单片机课程设计说明书单片机要对 DS18B20 进行读写,主要通过如下子程序进行驱动。(1)复位:在使用 DS18B20 时,首先需要对单片机进行复位。复位时, 单片机给 DS18B20 的单总线至少 480us 的低电平信号。 DS18B20 检测到 当 此复位信号后会在 15-60us 内给出一个一个存在脉冲。 该存在脉冲是是一个 60-240us 的低电平信号。为了能够接收到此低电平,需要单片机在复位电 平结束之后将总线拉高。 (2)ROM 指令:包括读 ROM 指令,指定匹配芯片、跳跃 ROM、芯片搜 索、 报警芯片搜索。 ROM 指令为 8 位长度, 功能是对片内的 64 位光刻 ROM 进行操作。其主要目的是为了分辨总线上的多个器件。不过,在本系统中 由于只有一个 DS18B20,所以不需要进行 ID 辨识,所以可以采用一条特殊 的跳过指令。具体指令可以参看其 datasheet。 (3)发送存储器操作指令:在 ROM 指令发送给 DS18B20 后,紧接着需要 向它发送存储器操作指令,操作指令同样为 8 位,共六条,分别是写 RAM 数据、 RAM 数据、 RAM 数据复制到 EEPROM、 读 将 温度转换、 EEPROM 将 中的报警值复制到 RAM、工作方式切换。 (4)执行和读写操作:一个存储器操作指令结束后则将进行指令执行或数 据读写。如果是进行温度转换,需要等待 DS18B20 执行其指令,转换时间 一般为 500us。 DS18B20 温度值格式 默认的 12 位转化后得到的 12 位数据, 存储在 18B20 的两个 8 比特的 RAM 中,二进制中的前面 5 位是符号位,如果测得的温度大于 0,这 5 位为 0, 只要将测到的数值乘于 0.0625 即可得到实际温度;如果温度小于 0,这 5 位为 1,测到的数值需要取反加 1 再乘于 0.0625 即可得到实际温度。 如图:DS18B20 常用 ROM 指令:指 令约定代码功 能第4页 西安欧亚学院信息工程学院单片机课程设计说明书读 ROM33H读 DS1820 温度传感器 ROM 中的编码(即 64 位地 址 发出此命令之后,接着发出 64 位 ROM 编码, 访问单总线上与该编码相对应的 DS1820 使之 作出响应,为下一步对该 DS1820 的读写作准 备。 用于确定挂接在同一总线上 DS1820 的个数和 识别 64 位 ROM 地址。为操作各器件作好准备。符合 ROM55H搜索 ROM0FOH跳过 ROM0CCH忽略 64 位 ROM 地址,直接向 DS1820 发 温度变换命令。适用于单片工作。 执行后只有温度超过设定值上限或下限的 片子才做出响应。告警搜索 命令0ECH二、系统总体设计方案1、基本设计思想基本设计方案: 根据 DS18B20 的通讯协议, 单片机控制 DS18B20 完成 温度转换必须经过三个步骤:每一次读写之前都要对 DS18B20 进行复位操 作,复位成功后发送一条 ROM 指令,最后发送 RAM 指令,这样才能对 DS18B20 进行预定的操作。复位要求主 CPU 将数据线下拉 500 微秒,然后 释放,当 DS18B20 收到信号后等待 16~60 微秒左右,后发出 60~240 微 秒的存在低脉冲,主 CPU 收到此信号表示复位成功。 于是,给 DS18B20 不同的时序,可以读取温度传感器的值,根据温度 算法算出当时的温度值,在给显示部分,通过 LCD 显示出来。第5页 西安欧亚学院信息工程学院单片机课程设计说明书2、实施方案论述这个课题主要实现温度的检测以及通过数码管显示这两个大功能,以 及读取这个相对较为容易的功能。因此在温度检测这一模块上,利用 DS18B20 这一目前比较先进的温度传感器,可以很精确地感测实时温度, 对于 DS18B20 的通讯协议的控制,读取测量的温度值,经过一定的算法, 可以把温度转化为十进制,分别为高位和低位,先暂存起来。经显示模块 调用,最终在 LCD 上显示。 时钟电路 C51 主控 电路 显示电路复位电路DS18B20电路方框图二、 系统分析与设计1、程序流程图及说明主函数完成对 DS18B20 的初始化,读取温度的转换值,调用数据处理 的子程序然后再生成显示代码,再将温度显示出来,然后根据温度显示的 代码判断温度值可以判断它的值是否超出了预设的范围。然后返回到主函 数开始的位置,无论温度值是否超出预设值,程序都会返回开始的位置, 重复循环。第6页 西安欧亚学院信息工程学院单片机课程设计说明书开始始初始化、设置常量调用 DS18B20 初始化子程序读温度转换值调用数据处理子程序生成显示码显示温度值主函数流程图第7页 西安欧亚学院信息工程学院单片机课程设计说明书DQ 置 1DS18B20 位复FLAG=?1发送 OCCH 命令,跳过ROM匹配发送温度转换命令 44H延时 750us 以上DS18B20 初始化跳过ROM 匹配发送温度命令 OBEH调用读数据子程序返回 DS18B20 复位子程序第8页 西安欧亚学院信息工程学院单片机课程设计说明书DQ 置 1DQ 置 0延时至少 573msDQ 置 1短延时等待 DS18B20 回应DQ=?0FLAG 置 0 FLAG 置 1延时DQ 置 1温度值子程序第9页 西安欧亚学院信息工程学院单片机课程设计说明书2、温度计的的电路设计温度计采用 AT89C51 单片机作为微处理器,温度计系统的外围接口电 路由晶振、LCD 显示电路、复位电路、温度检测电路、LCD 驱动电路。温 度计系统的的硬件电路图如下图所示。 温度计的工作过程是:初始化其接收需要检测的温度,并一直处于检 测状态,并将检测到的温度值读取,并转化为十进制数值,通过 LCD 显示 出来,再显示温度,方便用户来读数使用记录数据。 具体实现方法是:单片机将从 P2.2 管脚读进来的数据进行处理,P0.1 到 P0.7 为数码管的段选端口,通过 RP1 的驱动对 LCD 进行驱动。硬件电路原理图第 10 页 西安欧亚学院信息工程学院单片机课程设计说明书时钟电路复位电路显示电路第 11 页 西安欧亚学院信息工程学院单片机课程设计说明书温度检测电路三、源码清单#include &reg52.h& #include &intrins.h& #define uint unsigned int #define uchar unsigned char #define delayNOP() {_nop_();_nop_();_nop_();_nop_();} sbit DQ = P3^3; sbit LCD_RS = P2^0; sbit LCD_RW = P2^1; sbit LCD_EN = P2^2; uchar code Temp_Disp_Title[]={&Current Temp : &}; uchar Current_Temp_Display_Buffer[]={& TEMP: uchar code Temperature_Char[8] = { 0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00 }; uchar code df_Table[]= {第 12 页&}; 西安欧亚学院信息工程学院单片机课程设计说明书0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9 }; uchar CurrentT = 0; uchar Temp_Value[]={0x00,0x00}; uchar Display_Digit[]={0,0,0,0}; bit DS18B20_IS_OK = 1; void DelayXus(uint x) { while(x--) { for(i=0;i&200;i++); } } bit LCD_Busy_Check() { LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN=0; } void Write_LCD_Command(uchar cmd) { while(LCD_Busy_Check()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_();第 13 页 西安欧亚学院信息工程学院单片机课程设计说明书_nop_(); P0 = delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; } void Write_LCD_Data(uchar dat) { while(LCD_Busy_Check()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; } void LCD_Initialise() { Write_LCD_Command(0x01); DelayXus(5); Write_LCD_Command(0x38); DelayXus(5); Write_LCD_Command(0x0c); DelayXus(5); Write_LCD_Command(0x06); DelayXus(5); } void Set_LCD_POS(uchar pos) { Write_LCD_Command(pos|0x80); }第 14 页 西安欧亚学院信息工程学院单片机课程设计说明书void Delay(uint x) { while(--x); } uchar Init_DS18B20() { DQ = 1; Delay(8); DQ = 0; Delay(90); DQ = 1; Delay(8); DQ = 1; } uchar ReadOneByte() { uchar i,dat=0; DQ = 1; _nop_(); for(i=0;i&8;i++) { DQ = 0; dat &&= 1; DQ = 1; _nop_(); _nop_(); if(DQ) dat |= 0X80; Delay(30); DQ = 1; }第 15 页 西安欧亚学院信息工程学院单片机课程设计说明书 } void WriteOneByte(uchar dat) { for(i=0;i&8;i++) { DQ = 0; DQ = dat& 0x01; Delay(5); DQ = 1; dat &&= 1; } } void Read_Temperature() { if(Init_DS18B20()==1) DS18B20_IS_OK=0; else { WriteOneByte(0xcc); WriteOneByte(0x44); Init_DS18B20(); WriteOneByte(0xcc); WriteOneByte(0xbe); Temp_Value[0] = ReadOneByte(); Temp_Value[1] = ReadOneByte(); DS18B20_IS_OK=1; } } void Display_Temperature() { uchar t = 150, ng = 0;第 16 页 西安欧亚学院信息工程学院单片机课程设计说明书if((Temp_Value[1]&0xf8)==0xf8) { Temp_Value[1] = ~Temp_Value[1]; Temp_Value[0] = ~Temp_Value[0]+1; if(Temp_Value[0]==0x00) Temp_Value[1]++; ng = 1; } Display_Digit[0] = df_Table[Temp_Value[0]&0x0f]; CurrentT = ((Temp_Value[0]&0xf0)&&4) | ((Temp_Value[1]&0x07)&&4); Display_Digit[3] = CurrentT/100; Display_Digit[2] = CurrentT%100/10; Display_Digit[1] = CurrentT%10; Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0'; Current_Temp_Display_Buffer[10] = '.'; Current_Temp_Display_Buffer[9] Current_Temp_Display_Buffer[8] Current_Temp_Display_Buffer[7] if(Display_Digit[3] == 0) Current_Temp_Display_Buffer[7] Current_Temp_Display_Buffer[8] if(ng) { if(Current_Temp_Display_Buffer[8] Current_Temp_Display_Buffer[8] else if(Current_Temp_Display_Buffer[7] Current_Temp_Display_Buffer[7] else Current_Temp_Display_Buffer[6] } Set_LCD_POS(0x00); for(i=0;i&16;i++) {第 17 页= Display_Digit[1] + '0'; = Display_Digit[2] + '0'; = Display_Digit[3] + '0'; = ' '; = ' ';if(Display_Digit[2] == 0&&Display_Digit[3]==0)== ' ') = '-'; == ' ') = '-'; = '-'; 西安欧亚学院信息工程学院单片机课程设计说明书Write_LCD_Data(Temp_Disp_Title[i]); } Set_LCD_POS(0x40); for(i=0;i&16;i++) { Write_LCD_Data(Current_Temp_Display_Buffer[i]); } Set_LCD_POS(0x4d); Write_LCD_Data(0x00); Set_LCD_POS(0x4e); Write_LCD_Data('C'); } void main() { LCD_Initialise(); Read_Temperature(); Delay(50000); Delay(50000); while(1) { Read_Temperature(); if(DS18B20_IS_OK) Display_Temperature(); DelayXus(100); } }五、改进意见与收获体会:可以加入自动报警系统,方便用于实际的用途,可以在实际的应用中 达到自动检测报警的效果,方便人们对于温度的检测。第 18 页 西安欧亚学院信息工程学院单片机课程设计说明书六、成员分工姓名 比例 30% 30% 40%七、主要参考资料[1]单片机原理及应用(MCS-51);蒋廷彪,刘电霆,高富强 ,方华;重庆 大学出版社; [2]单片机 C 程序设计实例指导;李光飞,李良儿,楼然苗;北京航空航天 大学出版社; [3]单片机电路设计、分析与制作;周润景,徐宏伟;丁莉机械工业出版社第 19 页
更多搜索:
All rights reserved Powered by
文档资料库内容来自网络,如有侵犯请联系客服。基于51单片机的DS18B20温度检测――――设计报告_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于51单片机的DS18B20温度检测――――设计报告
&&DS18B20传感器温度检测,内含原理图
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩19页未读,
定制HR最喜欢的简历
你可能喜欢 上传我的文档
 下载
 收藏
粉丝量:12
该文档贡献者很忙,什么也没留下。
 下载此文档
ds18b20详解及程序
下载积分:30
内容提示:ds18b20详解及程序
文档格式:PDF|
浏览次数:1679|
上传日期: 14:34:03|
文档星级:
全文阅读已结束,如果下载本文需要使用
 30 积分
下载此文档
该用户还上传了这些文档
ds18b20详解及程序
关注微信公众号DS18B20温度转换 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
DS18B20温度转换
12:48:02  
<td class="t_f" id="postmessage_单片机从DS18B20读取到温度值之后如何转换才能显示到1602上,重点讲解小数点怎么控制,通俗一些,急急急,拜托了,这个问题已经困扰我很久了。。。。
已退回1积分
16:27:39  
disdata[0]=temp/;//百位数& && &
& &disdata[1]=temp%x30;//十位数& &&&
& &disdata[2]=temp%100/10+0x30;//个位数& &
& &disdata[3]=temp%10+0x30;//小数位& && &&&
其中temp是从温度读取函数里读取出来的温度值!当然了,想18B20正常工作,还得需要初始化函数,位读取函数,字节读取函数,写字节函数。要在1602上显示就简单了,首先是写入地址,接着写入数据就OK了!write-com(0x80);write-dat(disdata[0])!
17:08:35  
& && && && && && && && &&&
助理工程师
20:02:22  
以下内容来源于《51单片机轻松入门—基于STC15W4K系列》
<font color="#.2&&单只DS18B20的温度检测
例19.1 单只DS18B20的温度检测,测温范围 -55~+125度,1602液晶显示,1602写单字符方式写入数据。R/C时钟频率:22.1184MHz。程序移植时只需要修改DS18B20.H中的18B20信号引脚定义与myfun.c中的延时函数参数保证延时时间基本准确即可,程序运行结果如图19-11所示。
& && &&&图19-11&&单只18B20测温结果
//单只DS18B20的温度检测,测温范围-55 ~ +125度,1602液晶显示。#include &STC15W4K.H& #include &DS18b20.h&#include &myfun.h&#include &LCD1602.h& & && && && && && && && && &&&// flag=0表示正温,flag=1表示负温。unsigned char baiw,shiw,& && && & // 百位、十位、个位 ASCII码unsigned char point_1,point_2,point_3,point_4;& & // 小数点后1、2、3、4位ASCII码//****************温度数据处理函数************************/void gettemp()& && && && && && && && &&&// 读取温度值 {& && && && && && && && &&&unsigned int temp0,temp1,& && &// 存放小数、整数、符号,10000倍小数值& &&&unsigned char temh,& && && && &// 存放原始高字节与低字节& && &&&temp=DS18B20_ReadTemperature();& &&&// 从18B20中读取2字节原始温度值& &&&flag=0; & &&&if ((temp&0xf800)!=0)& && &&&// 如果是负温,将补码取反加1变为原码& &&&{& && && &temp=~temp +1;& && && &flag=1;& &&&}&&& &&&temh=temp/256;& && && && && & // 高字节(5位符号+3位数据)& &&&teml=temp%256;& && && && && & // 低字节(4位整数+4位小数)& &&&temp0=teml&0x0F;& && && && &&&// 4 位小数& & temp1=(temh&&4)|(teml&&4);& &// 8 位整数(最高一位符号0不用管)& &&&& &&&baiw=temp1/100+48;& && && && &// 百位ASCII码&&& &&&shiw=(temp1%100)/10+48;& && & // 十位 ASCII码 & &&&gew=(temp1%100)%10+48;& && &&&// 个位 ASCII码&&& &&&temp=temp0*625;& && && && && &// 将结果中的小数乘以分辨温度0.0625& && && && && && && && && && && &// 扩大10000倍进行输出,不用浮点,同样可以保留4位小数精度& &&&point_1=temp/1000+48;& && && &// 小数点后1位ASCII码& &&&point_2=(temp%;& &// 小数点后2位ASCII码& &&&point_3=(temp%100)/10+48;& &&&// 小数点后3位ASCII码& &&&point_4=temp%10+48;& && && &&&// 小数点后4位ASCII码}void main(){& & unsigned char xPos,yP& & unsigned char *s=&Now tempis:&;& & port_mode();& && && && && &&&// 所有IO口设为准双向弱上拉方式。& & xPos=0;& && && && && && && &&&// xPos表示水平右移字符数(0-15)& & yPos=0;& && && && && && && &&&// yPos表示垂直下移字符数(0-1)& & delay100ms();& && && && && &&&// 等待LCD1602上电时内部复位& & LCD1602_Init();& & WriteString(xPos,yPos,s);& &&&// X坐标、Y坐标、字符串,屏幕左上角为坐标原点& & & & DS18B20_SetResolution(3); //设置DS18B20的分辨率为12位(默认值,新器件可以不作任何设置)& & while(1)& & {& && &&&gettemp();& && &&&if(flag)& && &// 负温度& && &&&{ & && && && &WriteChar(0,1,'-');& && &&&}& && &&&if(!flag)& &&&// 正温度& && &&&{& && && && &WriteChar(0,1,'+');& && &&&}& && & & && &&&WriteChar(1,1,baiw);WriteChar(2,1,shiw); WriteChar(3,1,gew); WriteChar(4,1,'.');& && &&&WriteChar(5,1,point_1); WriteChar(6,1,point_2); WriteChar(7,1,point_3);& && &&&WriteChar(8,1,point_4);& && &&&SetCur(NoCur);& && &&&//有显示无光标& & }}
本帖子中包含更多资源
才可以下载或查看,没有帐号?
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司

我要回帖

更多关于 用温度计测量水的温度 的文章

 

随机推荐