基于单片机和DSB的多路温度控制系统_毕业设计论文 .pdf
大学毕业论文(设计)基于单片机的多路温度控制系统Microcontroller-based Multi-channel Temperature Control System 申请学位:工学学士学位院系:光电信息学院专业:电子信息工程名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 42 页 - - - - - - - - - 基于单片机的多路温度控制系统姓名:导师: 201x 年 5 月 20 日大学名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 42 页 - - - - - - - - - 烟台大学毕业论文(设计)任务书院(系) :光电信息科学技术学院姓名学号毕业届别专业电子信息工程毕业论文(设计)题目基于单片机的多路温度控制系统指导教师学历职称讲师所学专业通信 与信 息 系统具体要求 ( 主要内容、基本要求、主要参考资料等):主要内容: 学习单片机 STC89C52 和温度传感器 DS18B20 的相关知识,结合单片机的理论与应用知识 , 使用单片机控制两路传感器并联进行温度采集和报警控制。基本要求: 培养学生解决实际问题的能力及初步的理论研究能力;查阅文献资料、调查收集信息的能力;独立思考,认真钻研,提出方案并论证方案的能力;设计、计算、绘图能力;实验数据分析与处理的能力;外文阅读、计算机应用能力;撰写实验报告、设计说明书、技术总结和论文的能力;语言表达、思辨能力。参考资料:新概念 51 单片机 C语言教程;单片机原理及接口技术;DALLAS 公司的 DS18B20 的数据手册进度安排:2012-2013-1 学期: 1416周,确定指导教师,选题。2012-2013-2 学期:14周查阅资料、学习相关软件,确定设计方案;58周系统硬件设计;911周系统软件设计及系统调试;1213周撰写、修改毕业论文;1415周系统验收、论文答辩。指导教师(签字):年月日院(系)意见:教学院长(主任)(签字) :年月日备注:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 42 页 - - - - - - - - - 摘要 在计算机技术广泛应用的今天单片机也得到了广泛的使用,应用单片机的产品已经出现在我们日常生活的每个角落。本次设计器材主要有STC89C52 单片机、DS18B20 温度传感器、LED共阴数码管。本次设计先是通过Keil 软件进行编程生成Hex文件,然后下载到单片机中进而控制 DS18B20 温度采集并通过数码管显示。 本文重点完成了单片机基本的I/O口的功能实现、 DS18B20的功能实现与特点、温度传感器的软件读写程序、数码管位选段选实现程序、独立键盘控制两路温度的显示和温度报警的实现。 关键词 STC89C52单片机; DS18B20 ;LED ;独立键盘名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 42 页 - - - - - - - - - Abstract In the age of computer technique,the microcontroller has also been widely used,and we can see the products of microcontroller everywhere in our daily life.The equipment used of The design,contain STC89C52 microcontroller,DS18B20 temperature sensor,common cathode LED.This design first run through Keil software,producing Hex file,and then downloaded to the MCU to control DS18B20 temperature collecting and through digital tube display.This paper mainly introduces the single chip microcomputer of the realization of the function of the basic I/O port,the functions and features of DS18B20,the temperature sensor of the software to read and write procedures,digital tube location and passage chose program,two way independent keyboard control display of temperature and temperature alarm. Key words STC89C52 microcontroller; DS18B20; LED; Separate keyboard 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 42 页 - - - - - - - - - 目录1 绪论. . 12 系统的设计方案 . . 22.1 设计任务 . . 22.2 设计原理 . . 23 器件的选择 . . 43.1 单片机 STC89C52 . . 43.2 DS18B20 . . 44 模块设计 . . 74.1 晶振电路和复位电路 . . 74.2 温度采集电路 . . 74.3 键盘单元 . . 74.4 显示电路 . . 75 系统硬件实现 . . 96 软件实现 . . 126.1 DS18B20 工作时序 . 126.2 程序实现 . . 136.2.1 DS18B20 的指令集: . 136.2.2 编程 . . 14结 论. . 17致 谢. . 18参 考 文 献. . 19附录 . . 20名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 42 页 - - - - - - - - - 1 绪论在此科技迅速发展的年代, 在人们的生产和生活中已经广泛使用温度采集控制,人们采集温度通常使用温度计,而人们控制温度的方式一般是通过通风或者人工操作加热或降温,可是控制效果不好、时效性也不好,而且工作员工的工作硬度比较大。 虽然现在相当一部分用户的温度传感器是用半导体二极管充当,但这样做有不好的交换性和太好的成绩。因为对温度要求较高的行业比较多,并且引发事故的多数是由于环境温度变化不合理造成,并且还有很多操作人员安全收到威胁的情况, 所以,将数字温度测量及控制设备安装在不安全环境的某些特定位置,在温度超过某范围就报警。本设计由于使用了智能温度传感器进行控制,这种传感器具有比较高的测量精度,简单的操作,并且还具有比较便宜的价格,本设计是一个基于单片机的数字温度采集及控制系统。随着社会的发展, 愈来愈多的行业需要进行温度的采集及控制,致使本课题变得很重要。温度传感器DS18B20 所采集的温度先发送至单片机STC89C52 ,然后 STC89C52 对数据进行进一步的分析处理,进而使其能在LED数码管上表示出来,并通过温度控制相连的报警或其他系统。通过学习该课程使我们全面的了解单片机和温度传感器、 掌握此传感器与单片机各模块电路的连接线路和程序的编写的过程,从而锻炼我们在使用单片机进行各种设计方面的实践活动和动手能力。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 42 页 - - - - - - - - - 2 系统的设计方案2.1 设计任务本次设计主要是通过按键选择两路DS18B20 进行温度采集,并传到主机进行处理,然后主机把处理好的温度值发送到数码管上显示并控制温度报警。而在本次设计中, 两路温度传感器采用与主机的单总线进行并联方式,这样就需要对两路温度传感器分开进行处理。 这里就用到了温度传感器的匹配ROM 编码命令进行对两路温度传感器的识别, 此时用独立键盘进行控制选择哪一路温度传感器进行温度采集。2.2 设计原理根据系统的设计要求, DS18B20 作用此次设计使用的数字温度传感器和单片机则使用 STC89C52 。当主机 STC89C52 给从机 DS18B20 发送采集温度命令后,从机 DS18B20 响应主机并进行模数转换,发往主机STC89C52 自己所测得的二进制温度数据;单片机对从机 DS18B20 发送来的温度数据按照自己存储的程序进行处理,使之变成十进制温度数值,并通过单总线发送到数码管(LED )显示,蜂鸣器根据温度数值来进行报警; 由键盘控制电路选择对哪路DS18B20 发送读取温度命令,进而数码管显示。系统设计框图如图2.1 图 2.1 设计原理图STC89C52 温度控制系统报警电路显示电路温度传感器键盘设定名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 42 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 42 页 - - - - - - - - - 3 器件的选择3.1 单片机 STC89C52 STC89C521作为本 次设 计使用的单片机 (引脚图如图 3.1 ) ,一是 因 为 本 人 手 中 有 现 成 的STC89C52 单片机的开发板,可以方便调试和使用,二是STC89C52 单片机和市面流行的单片机一样,容易上手,并且特性比较好。此设计使用到单片机的P0 口作为数据线控制四位共阴数码管的段选而来传输数据, 使用单片机的 P2 的 2.3.4口连接 74LS138译码器的输入引脚来控制四位数码管的位选,使用P37 口连接两个DS18B20 的数据线引脚, 使用 P20连接一个独立按键来控制传感器的选择。图 3.1 单片机引脚本3.2 DS18B20DS18B202温度传感器(如图3.2 )是美国 Dallas公司的一线器件, 它内部结构主要由四部分 (如图 3.3 )组成: 64 位光刻 ROM 、温度传感器、非挥发的温度存储器、配置寄存器;即使用单一的数据线与主机进行数据交换。DS18B20由于其各方面都优点使它得到公众的认可,而得到广泛的使用。本次设计使用两个 DS18B20 都与单片机 STC89C52 的一个 I/O 口相连,利用他们两个 ROM 序列号的不同来控制它们分别进行温度的采集和控制。图3.2 DS18B20 引脚名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 42 页 - - - - - - - - - 图 3.3 DS18B20 内部结构光刻 ROM (如图 3.4 )在出厂前64 位编码号就被光刻设置好了,并且每个DS18B20 的 ROM 序列号都是世上唯一存在的。单片机可以通过单一的总线与多个DS18B20 相连并互不影响低采集温度正是基于每个DS18B20 ROM 的数据都不同的原理。图 3.4 DS18B20ROM 编码DS18B20 中的温度传感器(如图3.5 ) ,以 16 位的二进制值来保存采集的数据,S为符号标志位 。图 3.5 DS18B20 温度传感器配置寄存器(图3.6 )主要是用于通过R1和 R0来设置 DS18B20的分辨率(DS18B20 出厂默认设置为 12) ,他们的对应关系如图3.7 。图 3.6 配置寄存器名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 42 页 - - - - - - - - - 图 3.7 DS18B20 分辨率设置图 3.8 高速暂存存储器高速暂存存储器 RAM (如图 3.8 )由 9 个字节组成, 主要用于存储温度数据、设置高低温阀值和校验。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 42 页 - - - - - - - - - 4 模块设计4.1 晶振电路和复位电路晶振电路和复位电路如图4.1和 4.2 。晶振电路中本次设计使用的是STC89C52 的片内时钟振荡方式,器件数值大小如图4.1 所示。单片机的晶振采用11.0592MHZ ,此频率对应的振荡周期即为单片机的振荡周期,外加两个的电容选取大小为30pF的,振荡器的作用主要是产生时钟振荡,这个电路即可产生自激振荡。对于复位电路, STC89C52 采用的是更加直接和简单的复位( 如图 4.2) 。RST是复位输入引脚,在按下按键后,系统自动复位,非常容易,而上拉电阻起到限流作用,保护电路。图 4.1 晶振电路图 4.2 复位电路4.2 温度采集电路温度采集电路即使DS18B20 和单片机连接,如图4.3 。本次设计中使用DS18B20与的 P37 口相连的方式 , 由于STC89C52 单片机的 P37口没有内置上拉电阻,所以使用它时需要接上拉电阻。 本次设计中采用两路DS18B20 的数据线都与 P37相连的并联的单总线方式。图4.3DS18B20连接电路4.3 键盘单元本次设计使用了一个独立按键,按键开关状态通常是需要去抖后确定的,本次设计中采用的方法是,在检测到有键按下时,不是去先执行原程序,而是先执行一个时间很小的延时程序,然后再次检测该键是否还是按下状态的软件去抖,如该键还是按下状态则输入此键按下的信息,从而达到去抖动功效。4.4 显示电路本次设计并没有采用现在比较流行的LCD液晶显示器,而是采用了价格比较名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 42 页 - - - - - - - - - 便宜并容易操作的LED数码管显示器( 如图 4.4) 。本部分电路是使用锁存器 74LS573 连接单片机和四段数码管,单片机通过 P0口数据线将要显示的数值先送达锁存器74LS573 ,再由74LS573 传输到数码管显示,从而控制数码管的段选,进而实现数码管上显示传输来的数据, 而通过 P2的三个图 4.4 共阴数码管3 I/O口经过 138 译码器控制数码管的位选线来控制显示数码管的位。而在控制数码股的位选上, 采用了 74LS138译码器(如图 4.5 ) ,P2的 2.3.4口连接译码器的三个输入引脚,前四个输出引脚连接4 位数码管。图 4.5 74LS138 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 42 页 - - - - - - - - - 5 系统硬件实现本次设计使用到的器件如表1 表 1 器件的使用表器件名称数量STC89C52单片机1个12M晶振1个独立键盘2个共阴数码管4位万通板1个DS18B20 2个74LS138 1个74LS573 1个蜂鸣器1个电阻若干导线若干电容若干STC89C52 的 P37与两路 DS18B20 的数据连接时(如图 5.1 )以并联形式。本次设计使用P2 口的 2.3.4口来控制74LS138 译码器来控制四位数码管,从而达到节约使用单片机I/O 口资源,具体连接电路如图 5.2 ,译码器的真值表如表2。图图 5.1 传感器并联表 2 74LS1384译码器的真值表名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 42 页 - - - - - - - - - 输入输出STA /STB /STC A2 A1 A0 /Y0 /Y1 /Y2 /Y3 /Y4 /Y5 /Y6 /Y7 H H H H H H H H H H H H H H H H H H L H H H H H H H H H L L L L L L H H H H H H H H L L L L H H L H H H H H H H L L L H L H H L H H H H H H L L L H H H H H L H H H H H L L H L L H H H H L H H H H L L H L H H H H H H L H H H L L H H L H H H H H H L H H L L H H H H H H H H H H L 图 5.2译码器的连接系统总体连接实现的效果图如图5.3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 42 页 - - - - - - - - - 图 5.3 系统硬件连接效果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 42 页 - - - - - - - - - 6 软件实现6.1 DS18B20 工作时序DS18B20 按协议执行的工作流程:初始化时序 ROM 操作指令存储器操作指令数据传输。 其工作时序包括:初始化时序;写时序;读时序图 6.1 初始化时序初始化时序 (如图 6.1) :主机先向数据线发出一个低脉冲,然后将其恢复, 而主机此后对总线进行检测, 如有器件存在并应答那么总线会是低电平,否则总线是高电平。 从机 DS18B20上电后一直检测总线,如果在总线上有500s 左右低电平,则DS18B20 会对主机应答即将总线将拉低60240微秒,告诉主机自己已做好准备;否则它会一直进行检测。主机操作 DS18B20 是通过向其发送写与读命令控制的,而这些命令都是单独一位一位写和读的,即向DS18B20 的写 0、写 1、读 0 和读 1,一下就是这些时序。对 DS18B20 写时序 (如图 6.2 ) :主机进行写周期时, 先将总线拉低 1 微秒以表示写周期的开始, 此时若想写0 则继续拉低总线,若想写1 则释放总线为高,写周期至少60 微妙;而从机在写周期开始 15 微秒后就检测总线,在总线被拉低1 微秒后,从机采样到总线为高则为 1,否则为 0 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 42 页 - - - - - - - - - 图 6.2 写周期时序主机为 STC89C52 ,从机为 DS18B20 ,写周期最长不超过120s,最少为 60s。DS18B20 读时序 (如图 6.3 ) :从机在检测到主机拉低总线1 微秒后读周期开始, 从机将数据送到总线, 送1 则将总线释放为高,送0 则继续拉低总线,读周期至少60 微秒;主机在读周期开始后的 15 微秒内检测总线电平,高则读1,低则读 0。主机为 STC89C52 ,从机为 DS18B20 ,完成一个读时序过程,同样也需要至少60us。图 6.3 读周期时序6.2 程序实现6.2.1 DS18B20 的指令集:主机必须按协议对 DS18B20进行各种读写操作,根据DS18B20 协议的规定,单片机需经过以下 4 个步骤对 DS18B20 进行温度采集:(1)每次对 DS18B20 进行读写操作之前,都必须对其进行复位初始化。(2)发送一条 ROM 指令(如图 6.4 )名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 42 页 - - - - - - - - - 图 6.4ROM操作指令(3)发送存储器指令(如图6.5 )图 6.5 存储器指令(4)单片机 STC89C52 接受 DS18B20 传来的温度数据6.2.2 编程根据系统流程图 6.6 进行编程如附录程序, 这样我们可以清楚了解本次设计的程序编写过程。开始名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 42 页 - - - - - - - - - 选择 B传感器选 A片是否图 6.6 系统设计流程图1. 读 ROM 编码过程,在进行本次实验前需要预先读出两路DS18B20 的 ROM 编码以区别两个 DS18B20 , 此时需要借助单片机的串口调试助手。先对系统初始化,单 片 机 定 时器中断初始化DS18B20 的初始化按 键 输 入 来选择 DS18B20 发 A片传感器 ROM 码进行匹配进而控制 A片发 B片传感器 ROM 码进行匹配进而控制 B片启动温度转换单片机接受和处理数据并用 LED显示温 度 值是 否大于 26蜂鸣器报警结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 42 页 - - - - - - - - - 然后使用程序借助串口调试助手分别读取两个ROM 编码,然后将 ROM 编码固化到系统编程中。2. 对单片机定时器初始化时对定时器设定初值TH1 = 0 xD8; TL1 = 0 xF0;以时定时器每 10000 个时钟周期中断一次,故定时每经过10000*1us=10ms时间中断一次。3.DS18B20的操作,对 DS18B20 初始化,进而确定其存在并且已经准备好,如附录void Init18b20 (void);对 DS18B20 进行读字节操作附录子程序的unsigned char ReadByte (void) 对 DS18B20 进行写字节操作即附录程序void WriteByte (unsigned char idata wr) 对 DS18B20 读写字节操作前都需要先对其进行初始化,而当其执行完温度转换命令后将温度值以二进制存放在高速暂存存储器的低两个字节,然后向单片机发送数据,此时单片机需要先将这低两个字节的温度数据整合为一个数据如附录程序中的 void GemTemp (void) ,然后再将温度值经过取小数和取整数部分后转换为十进制数值并经显示电路显示。4. 由于本次设计使用到了两路DS18B20 ,程序控制它们读取温度时需要先对它们的 ROM 编码进行匹配,即先向总线发送匹配ROM 的命令 WriteByte (0 x55)随即发送其中一个DS18B20的 ROM 序列号,然后发送温度转换命令WriteByte (0 x44) ; 然后再发送匹配 ROM 的命令 WriteByte (0 x55) 随即仍发送这个 DS18B20的序列号,然后发送读温度命令WriteByte (0 xBE)后,这样既能读取这个DS18B20 测得到温度。这里对总线发送匹配命令接着发送其中一个的序列号后,只有与这个序列号匹配的 DS18B20才会响应主机的进行温度采集。程序写好之后再 Keil软件中进行编译运行生成Hex文件,再经过单片机烧录工具下载到单片机中,系统就可以实现。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 42 页 - - - - - - - - - 结 论毕业设计选题时之所以选择多路温度采集控制系统,主要是旨在学习时下应用广泛的单片机,再者是因为对温度采集系统感兴趣。设计起初,我先是对STC89C52 单片机进行学习了解,后搜集并学习DS18B20的数据手册,接着学习了共阴数码管和独立键盘的使用方法。本次设计使用单片机控制温度传感器测试温度和数码管的显示以及蜂鸣器的报警,实现了以单总线方式相连两路温度传感器并能实时采集和显示两点的温度而且进行高温度的蜂鸣器报警。在此次实践中本人学习了相关器件的使用,锻炼了动手和独立解决问题的能力;并且在Keil软件编程中反复调试程序,也锻炼了本人的耐心,虚心接受并检查错误。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 42 页 - - - - - - - - - 致 谢在本次设计开始时, 导师晋老师对本人讲解了本次设计的基本过程和注意事项,让我有了总体设计轮廓。 并且还给我指导每个阶段的学习,给我了很大帮助和支持。通过本次毕业设计,从论文选题到搜集资料,从写提纲到开始动手进行设计,从开始调试程序到最后程序能正常运行,期间经历了喜悦、烦躁、痛苦和开心。在这毕业设计结束之时,论文得以顺利完成,非常要感谢导师的指导,还有几位同学的帮助。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 42 页 - - - - - - - - - 参 考 文 献1 李朝青 . 单片机原理及接口技术北京北京航天航空大学出版社20052Dallas.DS18B20 数据手册3 郭天祥 . 新概念 51 单片机 C 语言教程北京电子工业出版社20094 余孟尝 . 数字电子技术基础简明教程北京高等教育出版社版社2006名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 42 页 - - - - - - - - - 附录#include #include extern GetTemp(); /声 明 引 用 外部函数extern unsigned int idata Temperature; / 声 明 引用外部变量void delay(unsigned int i);/else I0 sbit LS138A=P22; /管脚定义sbit LS138B=P23; sbit LS138C=P24; sbit D18B20=P37; #define NOP() _nop_() /* 定义空指令 */ #define _Nop() _nop_() /*定义空指令 */ sbit key=P20; sbit ming=P15; / 此表为 LED 的字模 , 共阴数码管 0-9 - Unsigned char code Disp_Tab = 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x40; unsigned long LedOut5,LedNumVal,temp,tem; void system_Ini() TMOD|= 0 x11; TH1 = 0 xD8; /10000个机器周期( 10000*1s) TL1 = 0 xF0; IE = 0 x8A; TR1 = 1; bit flag; unsigned int idata Temperature; unsigned char idata temp_buff9; / 存储读取的字节, read scratchpad为 9 字节, read rom ID为 8 字节unsigned char idata id_buff28=0 x28,0 xE2,0 x70,0 xB4,0 x03,0 x00,0 x00,0 x4F; unsigned char idata id_buff18=0 x28,0 x29,0 xBB,0 xBF,0 x03,0 x00,0 x00,0 xEE; unsigned char idata *p,TIM; unsigned char idata crc_data; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 42 页 - - - - - - - - - void TempDelay (unsigned char idata us)/ 延时处理 while(us-); void Init18b20 (void) /18B20初始化 D18B20=1; _nop_(); D18B20=0; TempDelay(80); /delay 530 uS/80 _nop_(); D18B20=1; TempDelay(4); /delay 35 uS/4 _nop_(); _nop_(); _nop_(); if(D18B20=0) flag = 1; /detect 1820 success! else flag = 0; /detect 1820 fail! TempDelay(20); /131 uS _nop_(); _nop_(); D18B20 = 1; void WriteByte (unsigned char idata wr) /向 18B20单字节写入 unsigned char idata i; if(flag=1) for (i=0;i= 1; unsigned char ReadByte (void) /读 18B20的单字节 unsigned char idata i,u=0; if(flag=1) for(i=0;i= 1; D18B20 = 1; _nop_(); if(D18B20=1) u |= 0 x80; TempDelay (8); /一个读周期至少60s _nop_(); return(u); void read_bytes (unsigned char idata j) /读数据 unsigned char idata i; for(i=0;ij;i+) *p = ReadByte(); p+; void GemTemp (void) /读取温度 read_bytes (9); Temperature = temp_buff1*0 x100 + temp_buff0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 28 页,共 42 页 - - - - - - - - - TempDelay(1); void Config18b20 (void) /重新配置报警限定值和分辨率 Init18b20(); WriteByte(0 xcc); /skip rom WriteByte(0 x4e); /write scratchpad WriteByte(0 x19); /上限 WriteByte(0 x1a); /下限 WriteByte(0 x7f); /set 11 bit (0.125) Init18b20(); WriteByte(0 xcc); /skip rom WriteByte(0 x48); /保存设定值 Init18b20(); WriteByte(0 xcc); /skip rom WriteByte(0 xb8); /回调设定值 void TemperatuerResult(void) /获取温度 unsigned char idata i; Config18b20(); Init18b20 (); WriteByte(0 x55); /match rom if(key=0) for(i=0;i8;i+) WriteByte(id_buff1i); / 发 rom编码 else if(key=1) for(i=0;i8;i+) WriteByte(id_buff2i); / 连 37 发 rom编码 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 29 页,共 42 页 - - - - - - - - - WriteByte(0 x44); /Temperature convert Init18b20 (); WriteByte(0 x55); /match rom if(key=0) for(i=0;i8;i+) WriteByte(id_buff1i); / 发 rom编码 else if(key=1) for(i=0;i=26) ming=0; elseming=1; LedNumVal=temp; /把实际温度送到LedNumVal变量中 LedOut0=Disp_TabLedNumVal%1000/100; LedOut1=Disp_TabLedNumVal%100/10; LedOut2=Disp_TabLedNumVal%10/1; / 个位 LedOut3=Disp_Tabtem; /小数位 for(i=0; i 0; i-) for(j = 200; j 0; j-); /* t1 (10ms)中断 中断*/ void T1zd(void) interrupt 3 TH1 = 0 xD8; /10 TL1 = 0 xF0; TIM+; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 32 页,共 42 页 - - - - - - - - - 毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知, 除文中特别加以标注和致谢的地方外, 不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者签 名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文; 在不以赢利为目的前提下, 学校可以公布论文的部分或全部内容。作者签名:日期:名师资料总