收藏 分享(赏)

河南理工大学多机温度检测系统设计_3.doc

上传人:dreamzhangning 文档编号:5751903 上传时间:2019-03-15 格式:DOC 页数:30 大小:431KB
下载 相关 举报
河南理工大学多机温度检测系统设计_3.doc_第1页
第1页 / 共30页
河南理工大学多机温度检测系统设计_3.doc_第2页
第2页 / 共30页
河南理工大学多机温度检测系统设计_3.doc_第3页
第3页 / 共30页
河南理工大学多机温度检测系统设计_3.doc_第4页
第4页 / 共30页
河南理工大学多机温度检测系统设计_3.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、河南理工大学河南理工大学单片机应用与仿真训练设计报告题目:多机温度检测系统设计姓 名: 卢超 学 号: 3212080103xx 专业班级: 电气本 12-03 指导老师: 王 莉 所在学院: 电气工程与自动化学院 2013 年 05 月 20 日摘要在生产生活中,温度是一个很重要的量,所以温度检测是不可缺少的。在单片机的应用中,一个很重要的应用就是对温度进行检测。本设计首先介绍温度测量的相关知识,接着介绍实现温度检测所必须的器件,并且给出硬件的原理图,然后逐步分析程序的各个主要模块以及程序的全貌,最后将总结一下本设计的技巧。本设计是以 AT89S52 单片机为控制核心,利用新型一线制温度传感

2、器 DS18B20 测量温度值,实现环境温度的检测和报警。系统测温范围为-40+85,测量精度为 0.5。用户可以自定义报警上、下限,一旦温度超过极限值,单片机便启动声光报警。该系统精度高、测温范围广、报警及时,可广泛应用于基于单片机的测温报警场合。系统抗干扰性强、设计灵活方便,适合在恶劣的环境下进行温度测量。系统硬件电路包括传感器数据采集、温度显示、模式选择、上、下限报警主电路等。整个装置的控制核心是 AT89S52 单片机。温度传感器 DS18B20 采用外部电源供电,传感器输出引脚直接和单片机相连。电路支持模式选择功能,可以选择设定报警极限值或显示当前温度值。当被测温度越限时,报警主电路

3、产生声光报警。拨动开关可以对设定报警极限值进行写保护。采用 2 片单片机,组成多机温度检测系统;下位单片机采集温度,通过串行通信传送至上位单片机;上位单片机用数码管显示温度大小;基本范围 0100;精度误差小于 0.5;可以任意设定温度的上下限报警功能关键字:AT89S52;DS18B20 温度传感器;数码管;测温报警3目录摘要 21. 概述 .41 系统概述 .42 系统方案设计 52.1 主控制部分设计 .52.2 传感器部分设计 63 系统总体方案及硬件设计 .113.1 AT89S52 单片机的最小相系统 113.2 DS18B20 的 I/O 接线图 123.3 数据显示部分 .12

4、3.4 整体电路 .124 软件设计 154.1 概述 .154.2 主程序方案 .164.3 DS18B20 的相处理子程序 .164.4 各模块工作流程图 .175 Proteus 软件仿真 .276 课程设计技巧总结 297 参考文献 301. 概述1.1 设计应用背景在现代社会,不管是在工农业生产还是在人们的日常生活中,对温度的测量及控制都扮演着很重要的角色。首先让我们了解一下多点温度检测系统在各个方面的应用领域:电力、电讯设备之过热故障预知检测,空调系统的温度检测,保全与监视系统之应用,医疗与健诊的温度测试,化工、机械等设备温度过热测。温度检测系统应用十分广阔。单片机的产生,使计算机

5、正式形成了通用计算机系统和嵌入式计算机系统的分支。温度检测系统的应用遍布社会生活的各个层面。1.2 系统概述本设计运用主从分布式思想,由上位机,下位机多点温度数据采集,组成两级分布式多点温度测量的巡回检测系统。该系统采用 RS-232 串行通讯标准,通过上位机控制下位机进行现场温度采集。温度值由下位机单独工作,实时显示当前各点的温度值,对各点进行控制。上位机采用的是单片机基于数字温度传感器 DS18B20 的系统。DS18B20 利用单总线的特点可以方便的实现多点温度的测量,轻松的组建传感器网络,系统的抗干扰性好、设计灵活、方便,而且适合于在恶劣的环境下进行现场温度测量。本系统可以应用在大型工

6、业及民用常温多点监测场合。如粮食仓储系统、楼宇自动化系统、温控制程生产线之温度影像检测、医疗与健诊的温度测试、空调系统的温度检测、石化、机械等。温度检测系统有则共同的特点:测量点多、环境复杂、布线分散、现场离监控室远等。若采用一般温度传感器采集温度信号,则需要设计信号调理电路、A/D 转换及相应的接口电路,才能把传感器输出的模拟信号转换成数字信号送到计算机去处理。这样,由于各种因素会造成检测系统较大的偏差;又因为检测环境复杂、测量点多、信号传输距离远及各种干扰的影响,会使检测系统的稳定性和可靠性下降 。所以多点温度检测系统的设计的关键在于两部分:温度传感器的选择和主控单元的设计。温度传感器应用

7、范围广泛、使用数量庞大,5也高居各类传感器之首。2 系统方案设计2.1 主控制部分设计此设计采用 AT89S52 八位单片机实现。单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。而且体积小,硬件实现简单,安装方便。既可以单独对多 DS18B20 控制工作,还可以与 PC 机通信.运用主从分布式思想,由一台上位机,下位机多点温度数据采集,组成两级分布式多点温度测量的巡回检测系统,实现远程控制。另外 AT89S52 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟 2.1.1 对 STC 功能的认识AT89S52 是一种低功耗、高性能 CMOS8 位微控

8、制器,具有 8K 在系统可编程Flash 存储器。89C51 产品指令和引脚完全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程 Flash,使得 AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52 具有以下标准功能: 8k 字节 Flash,256 字节RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。另外, 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模

9、式下,CPU停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。图 1 AT89S522.2 传感器部分设计该设计采用温度芯片 DS18B20 作为传感器测量温度。在多点测温系统中,传统的测温方法是将模拟信号远距离采样进行 AD 转换,而为了获得较高的测温精度,就必须采用措施解决由长线传输,多点测量切换及放大电路零点漂移等造成的误差补偿问题。采用数字温度芯片 DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它

10、能用做工业测温元件,此元件线形较好。在 0100 摄氏度时,最大线形偏差小于 1 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计 DS18B20 和微控制器 AT89S52 构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大,且由于 AT89S52 可以带多个 DSB18B20,因此可以非常容易实现多点测量.轻松的组建传感器网络。采用温度芯片 DS18B20 测量温度,可以体现系统芯片化这个趋势。部分功能电路的集成,使总体电路更简洁,搭建电路和焊接电路时更快。而且,集成块的使用,有效地避免外界的干扰,提高测量

11、电路的精确度。所以集成芯片的使用将成为电路发展的一种趋势。本方案应用这一温度芯片,也是顺应这一趋7势。综上所述,温度传感器以及主控部分都采用第二方案。系统采用针对传统温度测温系统测温点少,系统兼容性及扩展性较差的特点,运用分布式通讯的思想。设计一种可以用于大规模多点温度测量的巡回检测系统。该系统采用的是 RS-232 串行通讯的标准,通过上位机进行现场的温度采集,温度数据既可以由下位机模块实时显示,也可以送回上位机进行数据处理,具有巡检速度快,扩展性好,成本低的特点。2.2.1 温度传感器 DS18B20 介绍在本设计中使用的温度传感器是 DS18B20,下面对 DS18B20 做简单的介绍。

12、如图 1 所示,DS18B20 一线式数字温度传感器,由 DS18B20 的外观图可见,它有 3 个管脚 TO92 小体积封装形式,脚 GND 接地,脚 DQ 是一线总线,是数字信号输入输出端,和单片机相连接,由单片机控制,管脚 VDD 是电源,外接供电电源。测温分辨率可达0.0625,被测温度用符号扩展的 16 位数字量方式串行输出。其工作电源既可在远端引入,也可采用寄生电源方式产生。CPU 只需一根端口线就能与诸多 DS18B20 通信,占用微处理器的端口少,可节省大量的引线和逻辑电路。DS18B20 的主要特性适应电压范围更宽,电压范围:3.05.5V ,在寄生电源方式下可由数据线供电。

13、独特的单线接口方式,DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。DS18B20 支持多点组网功能,多个 DS18B20 可以并联在唯一的三线上,实现组网多点测温。DS18B20 在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。温范围55125,在-10+85 时精度为0.5。可编程的分辨率为 912 位,对应的可分辨温度分别为 0.5、0.25、0.125和0.0625,可实现高精度测温。在 9 位分辨率时最多在 93.75ms 内把温度转换为数字,12 位分辨率时最多在 750ms 内把温度值转换为数字,

14、速度更快。DS18B20 的外观图图 1 DS18B20 的外观图DS18B20 内部结构主要由四部分组成:64 位光刻 ROM、温度传感器、非挥发的温度报警触发器 TH 和 TL、配置寄存器。DS18B20 的外形及管脚排列如上图。DS18B20 引脚定义: DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端(在寄生电源接线方式时接地) 。图 2: DS18B20 内部结构图DS18B20 有 4 个主要的数据部件:光刻 ROM 中的 64 位序列号是出厂前被光刻好的,它可以看作是该 DS18B20 的地址序列码。64 位光刻 ROM 的排列是:开始 8 位(28H

15、)是产品类型标号,接着的 48 位是该 DS18B20 自身的序列号,最后 8 位是前面 56 位的循环冗余校验码(CRC=X8+X5+X4+1) 。光刻 ROM 的作用是使每一个 DS18B20 都各不相同,这样就可以实现一根总线上挂接多个 DS18B20 的目的。DS18B20 中的温度传感器可完成对温度的测量,以 12 位转化为例:用 16 位符号扩展的二进制补码读数形式提供,以 0.0625/LSB 形式表达,其中 S 为符9号位。表 1: DS18B20 温度值格式表这是 12 位转化后得到的 12 位数据,存储在 18B20 的两个 8 比特的 RAM 中,二进制中的前面 5 位是

16、符号位,如果测得的温度大于 0,这 5 位为 0,只要将测到的数值乘于 0.0625 即可得到实际温度;如果温度小于 0,这 5 位为 1,测到的数值需要取反加 1 再乘于 0.0625 即可得到实际温度。表 2: DS18B20 温度数据表例如+125的数字输出为 07D0H(0x7D),+25.0625的数字输出为 0191H,-25.0625的数字输出为 FE6FH,-55的数字输出为 FC90H。DS18B20 温度传感器的存储器DS18B20 温度传感器的内部存储器包括一个高速暂存 RAM 和一个非易失性的可电擦除的 EEPRAM,后者存放高温度和低温度触发器 TH、TL 和结构寄存

17、器。配置寄存器 该字节各位的意义如下:表 3: 配置寄存器结构TM R1 R0 1 1 1 1 1低五位一直都是“1“,TM 是测试模式位,用于设置 DS18B20 在工作模式还是在测试模式。在 DS18B20 出厂时该位被设置为 0,用户不要去改动。R1 和 R0 用来设置分辨率,如下表所示:(DS18B20 出厂时被设置为 12 位)表 4: 温度分辨率设置表R1 R0 分辨率 温度最大转换时间0 0 9 位 93.75ms0 1 10 位 187.5ms1 0 11 位 375ms1 1 12 位 750ms高速暂存存储器高速暂存存储器由 9 个字节组成,其分配如表 5 所示。当温度转换

18、命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第 0 和第 1 个字节。 单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表 1 所示。对应的温度计算:当符号位 S=0 时,直接将二进制位转换为十进制;当 S =1 时,先将补码变为原码,再计算十进制值。表 2 是对应的一部分温度值。第九个字节是冗余检验字节。表 5: DS18B20 暂存寄存器分布寄存器内容 字节地址温度值低位 (LS Byte) 0温度值高位 (MS Byte) 1高温限值(TH) 2低温限值(TL) 3配置寄存器 4保留 5保留 6保留 7CRC 校验值 8根据 DS18B20 的

19、通讯协议,主机(单片机)控制 DS18B20 完成温度转换必11须经过三个步骤:每一次读写之前都要对 DS18B20 进行复位操作,复位成功后发送一条 ROM 指令,最后发送 RAM 指令,这样才能对 DS18B20 进行预定的操作。复位要求主 CPU 将数据线下拉 500 微秒,然后释放,当 DS18B20 收到信号后等待 1660 微秒左右后发出 60240 微秒的存在低脉冲,主 CPU 收到此信号表示复位成功。表 6: ROM 指令表指 令 约定代码 功 能读 ROM 33H 读 DS1820 温度传感器 ROM 中的编码(即 64 位地址)符合 ROM 55H发出此命令之后,接着发出

20、64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。搜索 ROM 0FOH 用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。跳过 ROM 0CCH 忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。告警搜索命令 0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。表 7: RAM 指令表指 令 约定代码 功 能温度变换 44H启动 DS1820 进行温度转换,12 位转换时最长为750ms(9 位为 93.75ms)。结果存入内部

21、 9 字节 RAM 中读暂存器 0BEH 读内部 RAM 中 9 字节的内容写暂存器 4EH发出向内部 RAM 的 3、4 字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。复制暂存器 48H 将 RAM 中第 3 、4 字节的内容复制到 EEPROM 中。重调EEPROM 0B8H 将 EEPROM 中内容恢复到 RAM 中的第 3 、4 字节。读供电方式 0B4H读 DS1820 的供电模式。寄生供电时 DS1820 发送“ 0 ” ,外接电源供电 DS1820 发送“1”DS18B20 工作原理DS18B20 的读写时序和测温原理与 DS1820 相同,只是得到的温度值的位

22、数因分辨率不同而不同,且温度转换时的延时时间由 2s 减为 750ms。 DS18B20 测温原理如图 3 所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器 1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器 2 的脉冲输入。计数器 1 和温度寄存器被预置在55所对应的一个基数值。计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当计数器 1 的预置值减到 0 时,温度寄存器的值将加 1,计数器 1 的预置将重新被装入,计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器 2 计数到 0 时,停止温度寄存器

23、值的累加,此时温度寄存器中的数值即为所测温度。图 3 中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器 1 的预置值。2.2.2 DS18B20 温度检测DS18B20 连接从机的 P1.6 对温度进行检测。DS18B20 采用寄生电源供电方式,如下图所示。单片机端口接单线总线,为保证在有效的 DS18B20 时钟周期内提供足够的电流,可用一个 MOSFET 管来完成对总线的上拉。当 DS18B20 处于写存储器操作和温度 A/D 转化操作时,总线上必须有强的上拉,上拉开启时间最长为 500ms。采用寄生电源供电方式时,VDD 和 GND 端均接地。由于单线制只有一根线,因

24、此发送接口必须是三态的。对 DS18B20 的设计,需要注意以下问题(1)对硬件结构简单的单线数字温度传感器 DS18B20 进行操作,需要用较为复杂的程序完成。编制程序时必须严格按芯片数据手册提供的有关操作顺序进行,读、写时间片程序要严格按要求编写。尤其在使用 DS18B20 的高测温分辨力时,对时序及电气特性参数要求更高。(2)有多个测温点时,应考虑系统能实现传感器出错自动指示,进行自动DS18B20 序列号和自动排序,以减少调试和维护工作量。13(3)测温电缆线建议采用屏蔽 4 芯双绞线,其中一对线接地线与信号线,另一组接 VCC 和地线,屏蔽层在源端单点接地。DS18B20 在三线制应

25、用时,应将其三线焊接牢固;在两线应用时,应将 VCC 与 GND 接在一起,焊接牢固。若VCC 脱开未接,传感器只送 85.0 的温度值。(4)实际应用时,要注意单线的驱动能力,不能挂接过多的 DS18B20,同时还应注意最远接线距离。另外还应根据实际情况选择其接线拓扑结构。3 系统总体方案及硬件设计3.1 AT89S51 单片机的最小相系统图 2 AT89S52 最小相系统153.2 DS18B20 的 I/O 接线图图 3 DS18B20 接线图3.3 数据显示部分图 4 数据显示部分3.4 整体电路见附件二:系统原理图4 软件设计4.1 概述整个系统的功能是由硬件电路配合软件来实现的,当

26、硬件基本定型后,软件的功能也就基本定下来了。从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。每一个执行软件也就是一个小的功能执行模块。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。各执行模块规划好后,就可以规划监控程序了。首先要根据系统的总体功能和键盘设置选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。4.2 主程序方案主程序调用了数码管显示程序、温度测试程序、中断控制程序、单

27、片机与PC 机串口通讯等程序。温度测试程序:对温度芯片送过来的数据进行处理,进行判断和显示。数码管显示程序:向数码的显示送数,控制系统的显示部分。中断控制程序:实现循环显示功能。串口通讯程序:实现 PC 机与单片机通讯,将温度数据传送给 PC 机将各个功能程序以子程序的形式写好,当写主程序的时候,只需要调用子程序,然后在寄存器的分配上作一下调整,消除开 始系 统 初 始 化系 统 硬 件 测 试 程 序串 口 通 讯 子 程 序温 度 显 示 子 程 序拨 码 开 关 扫 描 子 程 序温 度 测 试 及 处 理 子 程 序开 始系 统 初 始 化系 统 硬 件 测 试 程 序串 口 通 讯

28、子 程 序温 度 显 示 子 程 序拨 码 开 关 扫 描 子 程 序温 度 测 试 及 处 理 子 程 序17寄存器冲突和 I/O 冲突即可。程序应该尽可能多的使用调用指令代替跳转指令。因为跳转指令使得程序难以看懂各程序段之间的结构关系。而调用指令则不同,调用指令使得程序结构清晰,无论是修改还是维护都比较方便。将功能程序段写成子程序的形式,除了方便调用之外,还有一个好处那就是以后写程序的时候如果要用到,就可以直接调用这个单元功能模块。4.3 DS18B20 的相处理子程序 4.3.1 DS18B20 初始化子程序 DS18B20 的使用必须遵循初始化到 ROM 操作命令到存储器操作命令的规定

29、协议。每完成一次测温,要重新进行初始化。单片机先发一个复位脉冲,保持低电平时间最少 480s ,最多不能超过 960s。然后,单片机释放总线,等待 DS18B20 的应答。DS18B20 在接收到复位脉冲后等待 1560s 发出应答脉冲,应答脉冲持续 60240s。 4.3.2 DS18B20 写控制字子程序 当主机把数据线从逻辑高电平拉到逻辑低电平的时候,写时间开始。写一位数据最少需要 60s,两个数据位之间最少有 1s 的间隔。I/O 总线拉低后,DS18B20 在 15s 后开始采样,如果线上是高电平,就写 1,如果线上是低电平,就写 0,写时间需要 1575s,且在 2 次独立的写时间

30、之间至少需要 1s 的恢复时间。 4.3.3 DS18B20 读出温度子程序 当主机把数据线从高电平拉到低电平时,读时间开始。读出温度子程序的主要功能是读出 RAM 中的 9 字节,在读出时需进行 CRC 校验,校验有错时不进行温度数据的改写。读时间需 1560 s,且在 2 次独立的读时间之间至少需要 1 s 的恢复时间。DSl8B20 在读时间开始 15s 后开始采样总线电平。 4.3.4 DS18B20 温度转换子程序 温度转换命令子程序主要是发温度转换开始命令,DS18B20 用 12 位存贮温度值,最高位为符号位,低四位为小数,最高精度可达 0.0625 度。温度数据转换完成的任务是

31、把用二进制表示的温度转换成 1 个字节的两位压缩 BCD 码。转换的方法有两种,一种是通过计算,另一种是通过查表,该装置设计方案采用前者。计算温度子程序温度读取值进行 BCD 码的转换运算,并进行温度值正负的判断。 4.4 各模块工作流程图4.4.1 上位机工作过程等待串口中断响应中断并接收数据中断请求判断是否等于上下限值相应指示灯亮( 上 - 红 )( 下 - 绿 )四位数是否发送完毕显示当前温度是否图 5 上位机工作流程图194.4.2 DS18B20 工作过程1 8 B 2 0 初始化初始化成功否跳过读序号列号操作是启动温度转换跳过读序号列号操作读取温度寄存器处理读数图 6 DS18B2

32、0 工作流程图本次通讯中,测控系统分位上位机和下位机之间的通信,系统中单片机负责数据采集、处理和控制,上位机进行现场可视化检测,通信协议采用半双工异步串行通信方式,通过 RS232 的 RTS 信号进行收发转换,传输数据采用二进制数据,上位机与下位机之间采用主从式通讯。4.4.3 下位机接收过程读取当前温度实现温度转换判断是否有键按下判断增减键增加上限值并显示减小上线值并显示G = 0U P = 0D W = 0判断增减键增加上限值并显示减小上线值并显示U P = 0 D W = 0与当前温度值比较与当前温度值比较判断是否超限发出报警信号是 否发送当前温度图 7 下位机工作流程图下位机采用的是

33、单片机基于数字温度传感器 DS18B20 的系统。DS18B20 利用单总线的特点可以方便的实现多点温度的测量,轻松的组建传感器网络,系统的抗干扰性好、设计灵活、方便,而且适合于在恶劣的环境下进行现场温度测21量。本系统可以应用在大型工业及民用常温多点监测场合。如粮食仓储系统、楼宇自动化系统、温控制程生产线之温度影像检测、医疗与健诊的温度测试、空调系统的温度检测、石化、机械等。源程序代码:上位机源程序#includeunsigned char t=0,0,tt1=0,0,0,0,0,tt24,flag=1;unsigned char *pt; /用来存放温度值,测温程序就是通过这个数组与主函数

34、通信的unsigned char code dotcode=0,25,50,75;sbit DQ = P16;sbit UP=P10;sbit DW=P11;sbit G=P12;void delay(unsigned char i)while(i-);void delay_18B20(unsigned int i)while(i-);/*ds18b20 初始化函数 */void Init_DS18B20(void) unsigned char x=0;DQ = 1; /DQ 复位delay_18B20(8); /稍做延时DQ = 0; /单片机将 DQ 拉低delay_18B20(80);

35、/精确延时 大于 480usDQ = 1; /拉高总线delay_18B20(14);x=DQ; /稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败delay_18B20(20);/*ds18b20 读一个字节 */ unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);return(dat);/*ds18b20 写一个字节 */ v

36、oid WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = datdelay_18B20(5);DQ = 1;dat=1;/*读取 ds18b20 当前温度*/unsigned char *ReadTemperature(char TH,char TL,unsigned char RS)unsigned char tt=0,0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x4E); / /写入“写暂存器“ 命令,修

37、改 TH 和 TL 和分辩率配置寄存器/先写 TH,再写 TL,最后写配置寄存器WriteOneChar(TH); /写入想设定的温度报警上限WriteOneChar(TL); /写入想设定的温度报警下限WriteOneChar(RS); /写配置寄存器,格式为 0 R1 R0 1,1 1 1 1/R1R0=00 分辨率娄 9 位,R1R0=11 分辨率为 12 位 23delay_18B20(80); / this message is very importantInit_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44

38、); / 启动温度转换delay_18B20(80); / this message is wery importantInit_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读 9 个寄存器) 前两个就是温度delay_18B20(80);tt0=ReadOneChar(); /读取温度值低位tt1=ReadOneChar(); /读取温度值高位return(tt);void init()SCON=0X40; /多机通信方式,接收允许PCON=0X00; /波特率加倍TMOD=0x20; /定

39、时器 1,模式 2TH1=0xf3;TL1=0xf3; /定时器初值TR1=1; /启动定时器 1void senddata(unsigned char tt2)int i;init();for(i=0;i=4; /右移 4 位x=x /和前面两句就是取出 t0的高四位t1=t1|x; /将高低字节的有效值的整数部分拼成一个字节 tt10=(t1%100)/10; /分离出十位tt11=(t1%100)%10; /分离出个位t0=t0 /取有效的两位小数t0=2; /左移两位,以便查表x=t0;y=dotcodex; /查表换算成实际的小数tt12=y/10; /分离出十分位tt13=y%10

40、; /分离出百分位if(G=0|UP=0|DW=0) /是否改变温度上、下限flag=0;if(G=0)if(UP=0)TH+;if(DW=0)TH-;if(TH=100|TH=100|TL=(TH/10)tt11=10;tt12=10;tt13=10;if(tt10#include#define uint unsigned int#define uchar unsigned charuchar code tab =0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c;uchar code tab1=0xfe,0xfd,0xfb

41、,0xf7;uchar code tt14;uchar b,num=0,i;sbit RE=P10;sbit LENG=P11;sbit P0_7=P07;void delay(unsigned int i)while(i-); void UART_Init(void)SCON = 0x50 ; /SCON: serail mode 1, 8-bit UART, enable ucvr PCON |= 0x00; /SMOD=0;/波特率加倍 TMOD=0x20; /定时器 1,模式 2TH1=0xf3;TL1=0xf3;TR1=1;ES=1;EA=1;void show(uchar tt14

42、) /数码管显示for(num=0;num4;num+)b=tt1num;P2=tab1num;if(num=1)P0=tabb;P0_7=1;27elseP0=tabb;delay(600);void main()UART_Init();while(1);void INT_UartRcv(void) interrupt 4 /串口通信服务子函数uchar Rcv=0;uchar tt4;if(RI)RI=0; Rcv=SBUF;tti=Rcv;i+;if(tt0=10)RE=0;else RE=1;if(tt0=11)LENG=0;elseLENG=1;if(i=4)show(tt);i=0

43、;return;5 Proteus 软件仿真见 proteus 软件仿真图:系统原理图XTAL218XTAL119ALE301PSN29RST9P0./AD039.1/18P0.2/AD237.3/36P0.4/AD435.5/54P0.6/AD63.7/72P1.01.2P1.23.34P1.45.56P1.67.78P3.0/RXD10.1/TP3.2/IN012./IT13P3.4/014P3.7/RD17.6/W6.5/T15P2.7/A1528P2.0/A821.1/9P2./A023.3/14P2.4/A225.5/136.6/47U1AT89C51XTAL218XTAL119AL

44、E301PSN29RST9P0./AD039.1/18P0.2/AD237.3/36P0.4/AD435.5/54P0.6/AD63.7/72P1.01.2P1.23.34P1.45.56P1.67.78P3.0/RXD10.1/TP3.2/IN012./IT13P3.4/014P3.7/RD17.6/W6.5/T15P2.7/A1528P2.0/A821.1/9P2./A023.3/14P2.4/A225.5/136.6/47U2AT89C51X1CRYSTAL X2CRYSTALC130pfC230pfC330pfC430pfC610uFR34.7k +5V234567891RP1RESP

45、ACK-8+5VR510k31.0DQ2VC3GN1U3DS18B20D1LED-RED2LED-RED R810kR910kC710uFR110k附图 1 系统原理图proteus 软件仿真图:XTAL218XTAL119ALE301PSN29RST9P0./AD039.1/18P0.2/AD237.3/36P0.4/AD435.5/54P0.6/AD63.7/72P1.01.2P1.23.34P1.45.56P1.67.78P3.0/RXD10.1/TP3.2/IN012./IT13P3.4/014P3.7/RD17.6/W6.5/T15P2.7/A1528P2.0/A821.1/9P2.

46、/A023.3/14P2.4/A225.5/136.6/47U1AT89C51XTAL218XTAL119ALE301PSN29RST9P0./AD039.1/18P0.2/AD237.3/36P0.4/AD435.5/54P0.6/AD63.7/72P1.01.2P1.23.34P1.45.56P1.67.78P3.0/RXD10.1/TP3.2/IN012./IT13P3.4/014P3.7/RD17.6/W6.5/T15P2.7/A1528P2.0/A821.1/9P2./A023.3/14P2.4/A225.5/136.6/47U2AT89C51X1CRYSTAL X2CRYSTALC

47、130pfC230pfC330pfC430pfC610uFR34.7k +5V234567891RP1RESPACK-8+5VR510k31.0DQ2VC3GN1U3DS18B20D1LED-RED2LED-RED R810k910kC710uFR110k附图 2 系统正常测温6 课程设计技巧总结本设计是单片机进行温度检测的实例,也是单片机与 DS18B20 通信的实例,应该注意以下几点。很多简单设备使用一线通信,数据采用移位的方式进行读写,以位为单位读入和书写。使用一线通讯设备的时候需要注意时序问题,置位、复位、读出数据、写入数据需要注意延时。使用数码管来显示结果的时候要把十六进制数转化成十

48、进制数,然后查表显示出来,注意对数码管操作时,数码管不宜闪烁过快,否则容易损坏。7 参考文献(1) 单片机原理及应用技术 余发山,王福忠主编 ,徐州;中国矿业大学出版社 2008.(2) 数字温度传感器 DS18B20 及其应用.pdf(3)余永权. ATMEL 89系列单片机应用技术M. 北京:北京航空航天大学出版社2002.(4)贾振国. DS1820 及高精度温度测量的实现J.电子技术应用,2000(1):58 - 59.1余发山,王福忠 单片机原理及应用技术 徐州: 中国矿业大学出版社, 20082张靖武.单片机原理应用与PROTEUS仿真. 电子工业出版社,20093郭天祥 新概念 51 单片机 C 语言教程 北京: 电子工业出版社, 20094戴胜华,蒋大明.单片机原理与应用.北京:清华大学出版社,20055张毅刚.单片机原理及应用.高等教育出版社,20046马忠梅.单片机的C语言应用程序设计(第三版).北京航空航天大学出版

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报