找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 26989|回复: 6
打印 上一主题 下一主题
收起左侧

基于单片机的数字温度计设计论文

[复制链接]
跳转到指定楼层
楼主
ID:327868 发表于 2018-5-12 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
设计(论文)题目:
基于单片机的数字温度计设计

摘 要
随着现代工农业技术的发展及人们对生活环境要求的提高,人们在生活的许多方面都有着对温度进行感知和控制的需要。而传统的温度计由于各种原因,精度不能达到我们预期的效果,随着现代微电子及信息科学的发展,数字温度计无疑成为温度计设计的最有效方案。
本文是介绍基于单片机的数字温度计的设计,该温度计由中央控制器、温度检测器、显示器及报警部分组成。该温度计的基本范围为-50℃-110℃,精度误差小于0.5℃,LCD液晶显示器直接读取温度值显示,当测量温度超出报警门限时,系统将输出光报警信号。
本文主要包括两个方面的设计:一方面是硬件电路的设计,另一方面是系统程序的设计。其中,硬件电路各部分组成如下:中央控制器采用单片机AT89S51,温度检测部分采用DS18B20温度传感器,用LCD液晶1602作为显示器。其次,系统软件程序包括主程序,温度值读取、转换及计算程序,显示数据刷新程序等。
该温度计整体功能的实现是通过温度传感器DS18B20采集温度信号送该给单片机处理,单片机再把温度数据送液晶显示器1602显示。

目  录
前  言
第一章  数字温度计的总体方案设计及论证
第二章  数字温度计硬件电路的实现
第一节  复位电路及晶振电路设计
一、复位电路
二、晶振电路
第二节  温度传感器设计
一、概述
二、DS18B20的外形及内部结构
三、DS18B20工作原理
四、DS18B20 温度测量通信协议
五、DS18B2的外部电路图
第三节  液晶显示电路设计
一、1602的引脚功能介绍
二、1602的标准字库
三、1602液晶模块内部的控制指令
四、1602的外部电路图
第三章  数字温度计软件设计流程及程序
第一节 主程序设计
第二节 温度值读取程序设计
一、DS18B20的延时程序
二、DS18B20的初始化程序
三、DS18B20的读时序程序
四、DS18B20的写时序程序
第三节 计算温度程序设计
第四节  显示数据及刷新程序设计
第四章 程序调试
结  论
结束语
参考文献
附  件
一、英文原文
二、英文翻译
三、工程设计图纸
四、源程序
    五、教学档案

前  言

  信息科学和微电子技术的飞速发展给控制领域带来了巨大的飞跃,控制技术更加趋向自动化和智能化,为无数的使用者带来了方便。在控制领域里,温度是一个常见的名词,然而它所带来的技术问题和所起的作用却是非同一般的。在控制领域中,对温度的控制有着举足轻重的作用。例如陶瓷的烧烤,只有控制住温度的适度,才能制作出一件完美的艺术品,否则只是一件废品;还有如酿酒的过程,也需要对温度进行控制。可见,在生活的许多方方面面都有着对温度进行感知和控制的需要。

温度是一个十分重要的物理量,对它的测量与控制有十分重要的意义。随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度。在人类的生活环境中,温度扮演着极其重要的角色。无论你生活在哪里,从事什么工作,无时无刻不在与温度打着交道。在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说几乎80%的工业部门都不得不考虑着温度的因素。温度对于工业如此重要,由此推进了温度传感器的发展。   

测量温度的基本方法是使用温度计直接读取温度。最常见到的测量温度的工具是各种各样的温度计,例如,水银玻璃温度计,酒精温度计,热电偶或热电阻温度计等。它们常常以刻度的形式表示温度的高低,人们必须通过读取刻度值的多少来测量温度。而在传统的模拟信号温度测量系统中,测温电路的电磁环境非常恶劣,各种干扰信号较强,模拟温度信号容易受到干扰而产生测量误差,影响测量精度,不能满足数字化时代的需求。利用单片机和温度传感器构成的电子式智能温度计精度高、抗干扰能力强,可扩展性强、集成方便得到了广泛的应用。而且可以直接测量温度,得到温度的数字值,既简单方便,又直观准确,新型数字温度传感器是温度计设计的最有效方案。

本课题就是一个对温度进行检测,采集和显示的温度检测系统。它以单片机(AT89S51)为主要控制器件,DS18B20为温度传感器,并通过LCD液晶1602直接显示所测温度的新型数字温度计。由于本人所学知识有限,设计过程中难免会出现错误,还请各位老师指正。


第一章  数字温度计的总体方案设计及论证

根据系统设计的功能,本时钟温度系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力来测量、显示温度数值。

初步确定设计系统由单片机主控模块、测温模块、显示模块、报警模块共4个模块组成,电路系统框图如图1.1所示。

图1.1 系统基本方框图

对于单片机的选择,如果用8051系列,由于它没有内部RAM,系统又需要一定的内存存储数据。AT89S51是一个低功耗、高性能CMOS 8位的单片机,片内含8k Bytes ISP的可反复擦写1000次的Flash只读程序存储器,兼容标准MCS-51指令系统及80C51引脚结构,功能强大的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。而AT89S51与AT89C51相比,外型管脚完全相同,AT89C51的HEX程序无须任何转换可直接在AT89S51运行,且AT89S51比AT89C51新增了一些功能,相比较后,在本设计中选用AT89S51更能很好的实现温度计控制功能。

测温电路可以使用热敏电阻之类的器件,利用其感温效应,将被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据处理。但是这种感温电路比较复杂,且采用热敏电阻精度低,重复性、可靠性都比较差。

如果采用温度传感器DS18B20可以减少外部硬件电路,而且可以很容易直接读取被测温度值,进而转换,还可以在高温报警,且成本低、易使用,可以很好的满足设计要求。所以本文采用传感器DS18B20代替传统的测温电路。

温度的显示可以采用LED数码管来显示,LED亮度高、醒目,但是电路复杂,占用资

源多且信息量小。而采用液晶显示器有明显的优点:工作电流比LED小几个数量级,功耗低;尺寸小,厚度约为LED的1/3;字迹清晰、美观、使人舒服;寿命长,使用方便,可得性强。故本设计采用LCD来显示温度。

第二章  数字温度计硬件电路的实现
第一节  复位电路及晶振电路设计

根据方案的设计,系统硬件电路主要由主控单片机AT80S51、温度传感器DS18B20、液晶显示器1602等组成。

影响单片机系统运行稳定性的内部因素包括复位电路和振荡源的稳定性,振荡源的稳定性主要由起振时间、频率稳定度和占空比稳定度决定,起振时间可由电路参数整定,稳定度受振荡器类型、温度和电压等参数影响。

一、复位电路

复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。在本系统中,上电复位采用电平方式开关复位,具体电路如图2.1所示。上电复位采用RC电路,其中电容为10F,电阻为10K

二、晶振电路

单片机系统里晶振的作用非常大,它结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振提供的十种频率越高,单片机运行的速度也就越快。单片机的晶振频率应低于40MHZ,本设计中采用的晶振频率为12MHZ,具体电路如2.2所示,在晶振上并联两个30F电容。



第二节  温度传感器设计

一、概述
    DS18B20温度传感器是一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:
    ①独特的单线接口仅需要一个端口引脚进行通信;
    ②多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
    ③无须外部器件;
    ④可通过数据线供电,电压范围为3.0~5.5V;
    ⑤零待机功耗;
    ⑥温度以9或12位数字;
    ⑦用户可定义报警设置;
    ⑧报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
    ⑨负电压特性,电极接反时,温度计不会因发热而烧毁,只是不能正常工作

二、DS18B20的外形及内部结构

1DS18B20引脚定义及电源工作方式

DS18B20的外形及引脚如图2.3所示。

DS18B20引脚功能的详细描述如表2.1所示。

DS18B20的电源供电方式有两种,一种为寄生电源供电方

式,另一种为外部电源工作方式。其中,在寄生电源供电方式

下,DS18B20从单线信号线上汲取能量:在信号线DQ处于高电

平期间把能量储存在内部电容里,在信号线处于低电平期间消耗

电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。   图2.3 DS18B20的引脚

其具体电路如图2.4。

                                                



表2.1  DS18B20详细引脚功能描述图
名称
引脚功能描述
GND
地信号
DQ
数据输入/输出引脚。开漏单总线接口引脚。当被用在寄生电源下,可以向器件提供电源。
VDD
可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。


                                         

图2.4 寄生电源工作方式

DS18B20独特的寄生电源方式有如下三个好处:
     ①进行远距离测温时,无需本地电源;
     ②可在没有常规电源的条件下读取ROM;
     ③电路更简洁,仅用一根I/O口实现测温
     要使DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流要达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差大。
    因此,图2.4的寄生电源电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。
    DS18B20外部电源供电方式如图2.5所示,其工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度,同时在总线理论上可以挂接任意多个DS18B20传感器,组成多点测温系统。注意:在外部供电的方式下,DS18B20的GND引脚不能悬空,否则不能转换温度,读取的温度总是85℃。

外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,本设计中使用外部电源供电方式。在外接电源方式下,可以充分发挥DS18B20宽

电源电压范围的优点,即使电源电压VCC降到3V时,依然能够保证温度量精度。

图2.5 外部电源工作方式

2、DS18B20内部结构

DS18B20内部结构如图2.6,它主要由四部分组成:64位光刻ROM、温度传感器、存储器、非挥发的温度报警触发器TH和TL。


图2.6 DS18B20内部结构图

(1)光刻ROM

光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

2)、温度传感器

DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位,12位转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中。DS18B20温度值格式如二进制表2.2所示,其中,前5位是符号位,如果测得的温度大于0,这5位为0,只要将测得的数值乘以0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于 0.0625即可得到实际温度。

例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。

表2.2 DS18B20温度值格式表

LSB

MSB          (unit=℃)             LSB

S

S

S

S

S

MSB



3)、DS18B20存储器

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器的TH、TL。

配置寄存器
DS18B20配置寄存器各字节意义如表2.3下:

表2.3  DS18B20寄存器中各位内容

BIT7

BIT6

BIT5

BIT4

BIT3

BIT2

BIT1

BIT0

TM

R1

RO

1

1

1

1

1

其中,低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。其中,R1和R0用来设置分辨率,具体设置如表2.4所示:(DS18B20出厂时被设置为12位)。

表2.4 温度分辨率设置表

RR1

RRO

分辨率

温度最大转换时间

00

00

99位

93.75ms

00

11

110位

187.5ms

11

00

111位

375ms

11

11

112位

750ms



、高速暂存存储器
     高速暂存存储器由9个字节组成,其分配如表2.5所示。当温度转换命令发布后,经转换所得的温度值以二进制补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表2.2所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。第九个字节是冗余检验字节。

表2.5 DS18B20暂存寄存器分布

寄存器内容

字节地址

温度值低位(LS Byte)

0

温度值高位(MS Byte)

1

高温限值(TH)

2

低温限值(TL)

3

配置寄存器

4

保留

5

保留

6

保留

7

CRC校验值

8



三、DS18B20工作原理
DS18B20温度值的位数因分辨率不同而不同,温度转换时的最大延时为750msDS18B20测温原理如图2.7所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

图2.7  DS18B20测温原理


四、DS18B20 温度测量通信协议

由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
  由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。

DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的

时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。
    DS18B20的复位时序如图2.8所示:

                        图2.8 DS18B20的复位时序

DS18B20的读时序如图2.9所示:

图2.9 DS18B20的读时序

对于DS18B20的读时序分为读0时序和读1时序两个过程。
  对于DS18B20的读时隙是从主机把单总线拉低之后,在15um之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。
    DS18B20的写时序如图2.10所示:


图2.10 DS18B20的写时序

对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。
  对于DS18B20写0和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样I/O总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。
    系统对 DS18B20 的各种操作必须按协议进行。根据 DS18B20 的协议规定,微控制器控制 DS18B20 完成温度的转换必须经过以下 4 个步骤 :

①每次读写前对 DS18B20 进行复位初始化。复位要求主 CPU 将数据线下拉 500us ,然后释放, DS18B20 收到信号后等待 16us~60ms 左右,然后发出60us~240us 的存在低脉冲,主 CPU 收到此信号后表示复位成功。

②发送一条 ROM 指令,具体ROM指令如表2.6所示:

表2.6 DS18B20的ROM指令集

指令名称

指令代码

指令功能

读 ROM

33H

读 DS18B20ROM 中的编码(即读 64 位地址)

ROM 匹配(符合 ROM )

55H

发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与编码相对应 DS18B20 使之作出响应,为下一步对该 DS18B20 的读写作准备

搜索 ROM

0F0H

用于确定挂接在同一总线上 DS18B20 的个数和识别 64 位 ROM 地址,为操作各器件作好准备

跳过 ROM

0CCH

忽略 64 位 ROM 地址,直接向 DS18B20 发温度变换命令,适用于单片机工作

警报搜索

0ECH

该指令执行后,只有温度超过设定值上限或下限的片子才做出响应


③发送存储器指令,具体存储器指令如表2.7所示。

④进行数据通信。

表2.7 DS18B20 的存储器指令集

指令名称

指令代码

指令功能

温度变换

44H

启动 DS18B20 进行温度转换,转换时间最长为 500us (典型为 200us ),结果存入内部 9 字节 RAM 中

读暂存器

0BEH

读内部 RAM 中 9 字节的内容

写暂存器

4EH

发出向内部 RAM 的第 3 、 4 字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据

复制暂存器

48H

将 RAM 中第 3 、 4 字节的内容复制到 EEPROM 中

重调 EEPROM

0B8H

EEPROM 中的内容恢复到 RAM 中的第 3 、4 字节

读供电方式

0B4H

读 DS18B20 的供电模式,寄生供电时 DS18B20 发送“ 0 ”,外接电源供电 DS18B20 发送“ 1 ”


五、DS18B2的外部电路图

根据设计要求,传感器的硬件电路图如图2.11所示。

图2.11 DS18B20外部电路图


三节  液晶显示电路设计

液晶屏显示模块与数码管相比,它显得更为专业、漂亮。液晶显示屏以其微功耗、体积小、显示内容丰富、超薄轻巧、使用方便等诸多优点,在通讯、仪器仪表、电子设备、家用电器等低功耗应用系统中得到越来越广泛的应用,使这些电子设备的人机界面变得越来越直观形象,目前已广泛应用于电子表、计算器、IC卡电话机、液晶电视机、便携式电脑、掌上型电子玩具、复

印机、传真机等许多方面。1602字符型液晶模块(带背光),是目前工控系统中使用最为广泛的液晶屏之一。

一、1602的引脚功能介绍

1602采用标准的16脚接口,其引脚功能如下:

第1脚:VSS为电源地,接GND。
   第2脚:VDD接5V正电源。
   第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
   第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
   第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
   第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
   第7~14脚:D0~D7为8位双向数据线。
   第15脚:BLA背光电源正极(+5V)输入引脚。
   第16脚:BLK背光源负极,接GND

二、1602的标准字库
1602液晶模块内带标准字库,内部的字符发生存储器(CGROM)已经存储了192个5×7点阵字符,这些字符如表3.1所示

另外还有字符生成RAM(CGRAM)512字节,供用户自定义字符,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。



指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁;

指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标;

指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符;

指令7:字符发生器RAM地址设置;

指令8:DDRAM地址设置;

指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙;

指令10:写数据;

指令11:读数据;

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。表3.3是1602的内部显示地址。

表3.3 1602的内部显示地址

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16


00

01

02

03

04

05

06

07

08

09

0A

0B

0C

0D

0E

0F

第一行

40

41

42

43

44

45

46

47

48

49

4A

4B

4C

4D

4E

4F

第二行


比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。

四、1602的外部电路图

根据设计要求,1602液晶显示器的硬件电路图如图3.1所示。

图3.1 LCD1602外部连接图

第三章  数字温度计软件设计流程及程序

单片机应用系统软件可采用汇编语言和C语言进行编写,由于汇编语言的可读性和可移植性都较差,采用汇编语言编写的单片机应用程序不但周期长,而且调试和排错也比较困难。为了提高编制单片机应用程序的效率,改善程序的可读性和可移植性,采用C语言无疑是一种最好的选择。C语言具有一般高级语言的特点,还能直接对计算机的硬件进行操作,表达和运算能力也较强。所以,本设计采用C语言编写程序。

第一节 主程序设计

主程序的主要功能是负责读出并处理DS18B20的测量的当前温度值、实时显示温度值。温度测量每1s进行一次,这样可以在一秒之内测量一次被测温度。系统主程序首先对系统进行初始化,然后显示开机画面。由于单片机没有停止指令,所以可以设计系统程序不断地循环执行上述显示结果。其程序流程如图3.1所示。

第二节 温度值读取程序设计

读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图2.1。温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750毫秒,在本程序设计中采用1秒显示程序延时法等待转换的完成。

由于DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了三种时序:初始化时序、读时序、写时序。我们应很好的理解和完成DS18B20各时序程序设计。

一、DS18B20的延时程序

首先,设置DS18B20的延时子程序,以利于各时序的精确延时等待,其具体程序如下。

void delay_18B20(unsigned int i)

{
while(i--);

}

该延时的指令条数为2×i+5,每一条指令的周期为2us。

二、DS18B20的初始化程序

由第二章对DS18B20的介绍可知,对DS18B20的初始化要求主 CPU 将数据线下拉 500us ,然后释放,DS18B20 收到信号后等待16us~60us 左右,然后发出 60us~240us 的存在低脉冲,主 CPU 收到此信号后表示复位成功。根据初始化时序的要求编写初始化子程序如下:

void Init_DS18B20(void)
{
  DQ = 1;                       //复位 DS18B20通信端口
  delay_18B20(8);            //稍做延时
  DQ = 0;                       //单片机将DQ拉低,准备复位DS18B20
  delay_18B20(125);          //精确延时510us

delay_18B20(125);

DQ = 1;                      //拉高数据线
  delay_18B20(4);         //稍做延时后

while(DQ)              

{

NOP() ;                  //等待DS18B20的ACK信号,如果DQ =0则初始化成功;DQ =1则初始化失败

}

}
  delay_18B20(60);

DQ=1;                   //拉高数据线,准备数据传输
}

三、DS18B20的读时序程序

DS18B20的读时序分为读0时序和读1时序两个过程,对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。由此,DS18B20的写一个字节程序如下。
    static void ReadOneChar(void)
   {
      uchar i=0;
      uchar dat = 0;
      for (i=8;i>0;i--)            //每次读取一位,8个字节需要读取8次
         {

dat>>=1;          //低位先发
             DQ = 0;          // 高电平拉成低电平时读周期开始
             NOP();              
             DQ = 1;          // 必须写一,否则读出的数据将是不预期的数据

delay_18B20(2);
if(DQ)
dat︱=0x80;  

delay_18B20(30);

DQ=1;

NOP();          //恢复一线总线

}
       return(dat);
        }

四、DS18B20的写时序程序

DS18B20的写时序仍然分为写0时序和写1时序两个过程。对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样I/O总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。由此,DS18B20的读字一个节程序如下。
    void WriteOneChar(uchar cmd)
    {
       unsigned char i=0;

for (i=8; i>0; i--)
          {

if(cmd&0x01)           //地位在前
              {DQ = 0;              //从高电平拉至低电平时,写周期的开始
                 delay_18B20(20);    //60us到120us延时
                 DQ = 1;}               //发送数据

else

{ DQ = 0;

delay_18B20(20);

DQ = 0;}

delay_18B20(30);       //等待DS18B20采样

cmd>>=1;             //从最低位到最高位传入
            }

}

第三节 计算温度程序设计

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图3.3。

   

第四节  显示数据及刷新程序设计

显示数据刷新子程序主要时对显示缓冲器中的显示数据进行刷新操作,当最高显示位为零时将符号显示位移入下一位。程序流程图如图4.1。


结  论

   温度的检测和控制是一个经典的课题,生活中的各个领域里经常需要检测和控制某一特定环境的温度,使之能够稳定在一定的温度范围之内。这就要求系统对温度的检测具有足够的精度和实时性,控制要有足够的精度,并且尽可能具有较低的成本,这样的产品才具有实用价值。DS18B20恰好具有这样的优势,由于其可直接输出数字量,不需要AD转换,测温范围大,与单片机容易接口,成为原来广为使用的热电阻、热电偶的理想替代品。因此本设计可以应用于多种温度控制场合。

本设计叙述了智能温度计的设计,包括硬件组成和软件的设计。该系统在硬件设计上主要是通过其核心控制器件AT89S51将采集到的数字温度电压值经单片机处理得到相应的温度值,送到LCD显示器,以数字形式显示测量的温度。整个系统的软件编程就是通过C语言对单片机AT89S51实现其控制功能,整个系统结构紧凑,简单可靠,操作灵活,功能强大,性能价格比高,较好的满足了现代农业生产和科研的需要。

通过仿真软件Proteus仿真后,很好的实现了温度值得显示,满足课程要求,具体的仿真图如下:

结束语

毕业设计完成了,在这个过程中使我觉得不论从理论知识还是从实际设计中都学到了不少知识。首先我要感谢我的导师刘双临老师,他在我完成论文的过程中,给予了我很大的帮助。

在论文开始的初期,由于对于温度计的认识很少,我对于论文的结构以及文献选取等方面都有很多问题,通过对温度计原理的认识,并比较多种不同的设计方案,最后确定了设计温度计的功能以及各类功能模块的器件选择。并在导师的帮助下,找到相应的各类资料,并大致整理,粗略阅读了一遍。认识到很多知识以前都没有接触过,所以制定了一个大致的计划,希望能够很好的完成论文。

在接下来的毕业设计中,由于在公司实习,相对在毕业设计的时间少了很多。主要是深入对前期温度设计方案的认识。在这期间,很多知识都是第一次接触,通过查找了很多知识,认真阅读,有了一定的认识。相对困难最大的还是硬件的设计和程序编写方面。这些都需要很多的实际设计经验,第一次设计起来觉得相当吃力,刚开始不知道从何下手。后来,通过老师的指导,在实际的设计过程中,都有了很大进步。

在毕业设计的过程中,还认识到理论知识对实践有很大的指导作用,只有在正确的理论指导下,才能设计出合乎实际需要的硬件电路。但同时,实际的应用中与理论又会有一定出入,所以要很好的掌握好理论与实际的矛盾。

这次毕业设计是对大学三年所学知识的一次实际应用与检阅,同时对自学能力提出了很高的要求,所以平时的学习离开思考,就是严重的错误,不能只为了考试而学习。并且在学习的过程中更要广阔的接触各方面的知识,才能更好的为以后的工作打好基础。

在我写论文的过程中,刘双临老师给我提供了许多资料,并对实践中出现的问题给予了耐心的解答,完稿之后在百忙中仔细阅读,给出修改意见。在设计过程中,还有很多同学给予我各方面的支持,在此对他们都表示诚挚感谢!


基于单片机的数字温度计设计(终稿).doc

1.03 MB, 下载次数: 124, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:429267 发表于 2018-11-19 16:37 | 只看该作者
有仿真程序吗

回复

使用道具 举报

板凳
ID:470695 发表于 2019-1-19 20:51 | 只看该作者
牛逼啊
回复

使用道具 举报

地板
ID:571641 发表于 2019-6-25 12:47 | 只看该作者

求仿真程序!!
回复

使用道具 举报

5#
ID:662058 发表于 2019-12-13 13:56 | 只看该作者
有源代码吗?
回复

使用道具 举报

6#
ID:662058 发表于 2019-12-14 14:11 | 只看该作者
刚刚花了5黑币已下载,里面有仿真图和源代码唯独没有原理图!大家下载需慎重啊。我算是白下了,[大哭]
回复

使用道具 举报

7#
ID:733555 发表于 2020-4-20 15:42 | 只看该作者
没有指令123吗 直接是指令4
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表