基于传感器的温度报警器的设计 - 图文

更新时间:2024-01-02 05:47:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

郑州大学西亚斯国际学院

本科毕业论文(设计)

题 目:基于传感器的温度报警器

指导老师:武丽 职 称:硕士

姓名:李洁 学号:20091524107 专业:电子信息工程(嵌入式方向) 班级:09嵌入式一班 院(系):电子信息工程学院 完成时间:2013年4月25日

基于传感器的温度报警器

摘 要

温度是人们日常生活中息息相关的物理量,温度的监测控制在各个领域都有重要意义。本自动温度控制报警器的设计采用现今流行的STC89C52RC单片机,配以DS18B20数字温度传感器,该温度传感器具有可自行设置温度上下限功能。单片机将检测到的温度信号与设定的温度上、下限进行比较,由此作出判断是否报警。此设计加入了液晶显示器可实时显示温度,使得整个设计更加完整而灵活。该设计可以应用于温室,能对温室的温度进行智能监控。

关键词 温度箱/STC89C52RC/单片机/控制/报警

I

SENSOR-BASED TEMPERATURE ALARM

ABSTRACT

The temperature is constantly in the daily life of physical and temperature controls in various fields have a positive meaning. The temperature was designed with the now popular STC89C52RC SCM, and with DS18B20 digital temperature sensor. The temperature sensor can set up their own temperature collars. SCM will detect that the temperature of the input signal and temperature, the lower comparisons this judgment whether to activate the relay to open the equipment. The design also includes commonly used digital display and control state lights commonly used circuit, making the whole design more complete, more flexible. The design has been applied to someone, to someone intelligent temperature control.

KEY WORDS Temperature, STC89C52RC, SCM, Control, Alarm

II

目 录

中文摘要 ................................................ Ⅰ

英文摘要 ........................................................ Ⅱ 1 引言 ................................................... 1 1.1 课题背景 .......................................... 1 1.2 研究内容和意义 .................................... 1 2 芯片介绍 ............................................... 2 2.1 DS18B20概述

2.1.1 DS18B20封装形式及引脚功能 .................... 2 2.1.2 DS18B20内部结构 .............................. 4 2.1.3 DS18B20供电方式 .............................. 6 2.1.4 DS18B20的测温原理 ............................ 7 2.1.5 DS18B20的ROM命令 ............................ 8 2.2 AT89C52概述..................................... 10 2.2.1 单片机AT89C52介绍 .......................... 10 2.2.2 主要功能特性 ................................ 11 3 系统硬件设计 .......................................... 13 3.1 单片机最小系统的设计 ............................. 13 3.2 温度采集电路的设计 ............................... 14 3.3 LED显示报警电路的设计 ............................ 15 总 结 .................................................. 15

III

致谢 .................................................... 16 参考文献 ................................................ 18 附录 .................................................... 19 附录1:总电路图...................................... 19 附录2:原器件清单 .................................... 19 附录3:温度报警器部分程序

............................ 20 IV

1引言

1.1 课题背景

当今社会温度的测量与控制系统在生产与生活的各个领域中扮着越来越重要的角色,大到纺织厂,工业冶炼,环境检测,电力机房,冷冻库,粮仓,医疗卫生等方面,小到家庭冰箱,空调,电饭煲,太阳能热水器等方面都得到了广泛的应用,温度控制系统的广泛应用也使得这方面研究意义非常的重要。

在某些特定环境内使用自动温度报警器来对温度进行实时监测并做到超温报警很有必要,使用单片机来实时控制温度报警系统则是其中的一种重要方式。

1.2 研究内容和意义

本温度报警器以STC89C52RC单片机为控制核心,由一数字温度传感器DS18B20测量被控温度,结合7段LED以及驱动LED的74LS245组合而成。当被测量值超出预设范围则发出警报,且精度高,适用于大多数工业生产以及教育教学领域。

温度是一种最基本的环境参数,它是与人类的生活、工作关系最密切的物理量,也是各门学科与工程研究设计中经常遇到和必须精确测量的物理量。从工业炉温、环境气温到人体温度;从空间、海洋到家用电器,各个技术领域都离不开测温和控温。因此,研究温度的测量和控制方法具有重要的意义。

数字温度传感器 STC89C52RC 单片机 译码显示电路 双限报警系统 图1-1 设计原理

1

2 芯片介绍

2.1 DS18B20概述

DS18B20是美国达拉斯(Dallas)公司生产的一种单数字温度传感器芯片,不同于传统的热敏电阻,DS18B20能将被测信号直接转换为串行数字信号来供单片机处理,通过对DS18B20编程可以实现9~12位的温度读数,可在93.75ms内完成9位和750ms内完成12位的数字量。其测温范围-55℃~+125℃,分辨率可达0.0625℃,在-10℃~+85℃范围内测量精度为±0.5℃。DS18B20具有体积小、功耗低、抗干扰能力强的、易于连接微处理器等特点,且测温方便,只需一根I/O口线即可与单片机交换信息,其读写和温度转换的功率可直接来源于数据总线,不需额外电源。除此,每片DS18B20在它的内部ROM中存放有唯一的产品序列号,单片机能很简单的就识别这个序列号。如此,DS18B20特别适合构成多点温度测控系统,只需多个芯片挂于一条单线总线上即可。

2.1.1 DS18B20封装形式及引脚功能

当前温度传感器种类繁多,其中美国达拉斯公司生产的DS18B20性能和品

质尤其优越,因此我们设计中选用该元件。其正常工作电压为3.0~5.5V,测温范围为零下55摄氏度(华氏-67度)到125摄氏度(华氏257度)。本元件有两种封装规格,一种是8引脚SIOC封装,另外一种是T0-92封装,其外形和普通TO-92封装的几乎一样,但是该封装下元件仅有三个引脚:VCC、GND和DQ(数据传输线)在使用的过程中该元件比较方便使用。其两种封装格式和外形如图2-1所示。

2

图2-1 DS18B20封装形式和引脚功能

如图2-1所示,DS18B20的外形如一只三极管,引脚名称及作用如下: GND:接地端。

DQ:数据输入/输出脚,与TTL电平兼容。

VDD:可接电源,也可接地。因为每只DS18B20都可以设置成两种供电方式, 即数据总线供电方式和外部供电方式。采用数据总线供电方式时VDD接地,可以节省一根传输线,但完成数据测量的时间较长;采用外部供电方式则VDD接+5V,多用一根导线,但测量速度较快。

3

2.1.2 DS18B20内部结构

64位ROM和单线接口 DQ 内部电源C 存储和控制逻辑 温度传感器 高温触发器低温触发器匹配寄存器 8位CRC发生 高速缓存器 VDD 电源检

图2-2 DS18B20内部结构

图2-2中出示了DS18B20的主要内部部件,下面对DS18B20内部部分进行简单的描述[4]: (1)64位ROM:

64位ROM是由厂家使用激光刻录的一个64位二进制ROM代码,是该芯片的标识号,如表2-1所示:

表2-1 64位ROM标识

8位循环冗余检验 MSB LSB

48位序列号 MSB LSB 8位分类编号(10H) MSB LSB 第1个8位表示产品分类编号,DS18B20的分类号为10H;接着为48位序列号。它是一个大于281*1012的十进制编码,作为该芯片的唯一标示代码;最后8位为前56位的CRC循环冗余校验码,由于每个芯片的64位ROM代码不同,因此在单总线上能够并接多个DS18B20进行多点温度实习检验。 (2)温度传感器:

温度传感器是DS18B20的核心部分,该功能部件可完成对温度的测量通过软件编程可将-55~125℃范围内的温度值按9位、10位、11位、12位的分辨率进行量化,以上的分辨率都包括一个符号位,因此对应的温度量化值分别为0.5℃、

4

0.25℃、0.125℃、0.0625℃,即最高分辨率为0.0625℃。芯片出厂时默认为12位的转换精度。当接收到温度转换命令(44H)后,开始转换,转换完成后的温度以16位带符号扩展的的二进制补码形式表示,存储在高速缓存器RAM的第0,1字节中,二进制数的前5位是符号位。如果测得的温度大于0,这5位为0,只要将测得的数值乘上0.0625即可得到实际温度;如果温度小于0,这5位为1,测得的数值需要取反加1再乘上0.0625即可得到实际温度。 (3)高速缓存器:

DS18B20内部的高速缓存器包括一个高速暂存器RAM和一个非易失性可电擦除的EEPROM。非易失性可点擦除EEPROM用来存放高温触发器TH、低温触发器TL和配置寄存器中的信息。 (4)配置寄存器:

配置寄存器的内容用于确定温度值的数字转换率。DS18B20工作是按此寄存器的分辨率将温度转换为相应精度的数值,它是高速缓存器的第5个字节,该字节定义如表2-2所示:

表2-2 匹配寄存器

TM R0 R1 1 1 1 1 1 TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在DS18B20出厂时该位被设置为0,用户不要去改动;R1和R0用来设置分辨率;其余5位均固定为1。DS18B20分辨率的设置如表2-3所示:

表2-3 DS18B20分辨率的设置

R1 0 0 1 1 R0 0 1 0 1 分辨率 9位 10位 11位 12位 最大转换时 /ms 93.75 187.5 375 750 DS18B20依靠一个单线端口通讯。在单线端口条件下,必须先建立ROM 操作协议,才能进行存储器和控制操作。因此,控制器必须首先提供下面5个ROM 操作命令之一:

1)读ROM;

5

2)匹配ROM; 3)搜索ROM; 4)跳过ROM; 5)报警搜索。

这些命令对每个器件的激光ROM 部分进行操作,在单线总线上挂有多个器件时,可以区分出单个器件,同时可以向总线控制器指明有多少器件或是什么型号的器件。成功执行完一条ROM 操作序列后,即可进行存储器和控制操作,控制器可以提供6条存储器和控制操作指令中的任一条。一条控制操作命令指示DS18B20完成一次温度测量。测量结果放在DS18B20的暂存器里,用一条读暂存器内容的存储器操作命令可以把暂存器中数据读出。温度报警触发器TH 和TL 各由一个EEPROM字节构成。如果没有对DS18B20使用报警搜索命令,这些寄存器可以做为一般用途的用户存储器使用。可以用一条存储器操作命令对TH 和TL 进行写入,对这些寄存器的读出需要通过暂存器。所有数据都是以最低有效位在前的方式进行读写。

2.1.3 DS18B20供电方式

DS18B20可以采用外部电源供电和寄生电源供电两种模式。外部电源供电模式是将DS18B20的GND直接接地,DQ与但单总线相连作为信号线,VDD与外部电源正极相连。如图2-3所示:

单片机 VCC DS18B20 4.7K DQ VDD 其它单线器件 外部+5V电源 图2-3 DS18B20外部供电方式

6

2.1.4 DS18B20的测温原理

DS18B20的测温原理如图2-4所示, 其主要由斜率累加器、温度系数振荡器、减法计数器、温度存储器等功能部件组成。

斜坡累加器 预置 低温度系数振荡器 计数器 比较 LSB置位|清0

增加 预置 ∝∝ 高温度系数振荡计数器 温度寄存器 ∝ 停止 图2-4 DS18B20的测温原理

DS18B20是这样测温的:用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。计数器被预置到对应于-55℃的一个值。如果计数器在门周期结束前到达0,则温度寄存器(同样被预置到-55℃)的值增加,表明所测温度大于-55℃。同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。然后计数器又开始计数直到0,如果门周期仍未结束,将重复这一过程。

斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨率。这是通过改变计数器对温度每增加一度所需计数的的值来实现的。因此,要想获得所需的分辨力,必须同时知道在给定温度下计数器的值和每一度的计数值。

DS18B20内部对此计算的结果可提供0.5℃的分辨率。温度以16bit带符号位扩展的二进制补码形式读出,表2-4 给出了温度值和输出数据的关系。数据通过单线接口以串行方式传输。DS18B20测温范围-55℃~+125℃,以1.0℃递增。

7

表2-4 温度数据关系

温度℃ +125 +25 +0.5 0 -0.5 -25 -55 数据输出(二进制) 00000000 11111010 00000000 00110010 00000000 00000001 00000000 00000000 11111111 11111111 11111111 11001110 11111111 10010010 数据输出(十六进制) 00FA 0032 0001 0000 FFFF FFCE FF92 S18B20遵循单总线协议,每次测温时都必须有4个过程[6]: ? 初始化;

? 传送ROM 操作命令; ? 传送ROM操作命令; ? 数据交换;

2.1.5 DS18B20的ROM命令

read ROM(读ROM):

命令代码为33H,允许主设备读出DS18B20的64位二进制ROM代码。该命令只适用于总线上存在单个DS18B20. Match ROM(匹配ROM):

命令代码为55H,若总线上有多个从设备时,适用该命令可选中某一指定的DS18B20,即只有和64位二进制ROM代码完全匹配的DS18B20才能响应其操作。 Skip ROM(跳过ROM):

命令代码为CCH,在启动所有DS18B20转换之前或系统只有一个DS18B20时,该命令将允许主设备不提供64位二进制ROM代码就适用存储器操作命令。 Search ROM(搜索ROM):

命令代码为F0H,当系统初次启动时,主设备可能不知纵向上有多少个从设备或者它们的ROM代码,适用该命令可确定系统中的从设备个数及其RON代码。 Alarm ROM(报警搜索ROM):

8

命令代码为ECH,该命令用于鉴别和定位系统中超出程序设定的报警温度值。

Write scratchpad(写暂存器):

命令代码为4EH,允许主设备向DS18B20的暂存器写入两个字节的数据,其中第一个字节写入TH中,第二个字节写入TL中。可以在任何时刻发出复位命令终止数据的写入。

Read scratchpad(读暂存器):

命令代码为BEH,允许主设备读取暂存器中的内容。从第一个字节开始直到读完第九个字节CRC读完。也可以在任何时刻发出复位命令中止数据的读取操作。

Copy scratchpad(复制暂存器):

命令代码为48H,将温度报警触发器TH和TL中的字节复制到非易失性EEPROM。若主机在该命令之后又发出读操作,而DS18B20又忙于将暂存器中的内容复制到EEPROM时,DS18B20就会输出一个“0”,若复制结束,则DS18B20输出一个“1”。

Convert T(温度转换):

命令代码为44H,启动一次温度转换,若主机在该命令之后又发出其它操作,而DS18B20又忙于温度转换,DS18B20就会输出一个“0”,若转换结束,则DS18B20输出一个“1”。

Recall E2(拷回暂存器):

命令代码为B8H。将温度报警触发器TH和TL中的字节从EEPROM中拷回到暂存器中。该操作是在DS18B20上电时自动执行,若执行该命令后又发出读操作,DS18B20会输出温度转换忙标识:0为忙,1完成。 Read power supply(读电源使用模式):

命令代码为B4H。主设备将该命令发给DS18B20后发出读操作,DS18B20会返回它的电源使用模式:0为寄生电源,1为外部电源。

9

2.2 STC89C52RC单片机介绍

2.2.1 单片机AT89C52介绍

本次设计采用宏晶公司生产的高性能8051单片机,之所以选择STC89C52RC单片机是因为此单片机具有加密性强,超强抗干扰,超低功耗(正常工作模式下只有4mA-7mA),最主要的是此单片机编程无需编程器,无需仿真器,只需要STC-ISP下载软件即可提供程序的烧录[2],具体电路如图2-5。

图2-5 单片机在线编程典型线路

80C51单片机最初是由英特尔公司开发设计的,但后来英特尔公司把51 核的设计方案卖给了几家大的电子设计生产商,譬如 SST、飞利浦、艾特梅尔等大公司。如是市面上出现了各式各样的但均以51 为内核的单片机,倒是Intel 公司自己的单片机却显得逊色了。这些各大电子生产商推出的单片机都兼容51 指令、并在51 的基础上扩展一些功能而内部结构是与51 一致的。

80C51有40个引脚,4个8位并行I/O口,1个全双工异步串行口,同时内含5个中断源,2个优先级,2个16位定时/计数器。80C51的存储器系统由8K的程序存储器(掩膜ROM),和128B的数据存储器(RAM)组成。

80C51单片机的基本组成框图见图2-6.

10

XTAL2时钟电路XTAL1RAM128BSFR 21个定时个/计数器2VccCPUROM/EPROM/Flash 4KB总线控制中断系统5个中断源2个优先级串行口全双工1个4个并行口VssRSTEAPSENALEP0P1P2P3图2-6 80C51单片机结构

市面上出售的单片机主要有宏晶公司的STC89C52RC和艾特梅尔公司的AT89S52,本次设计采用的是STC89C52RC,DIP40封装,其各个引脚分布及功能如图2.6。设计中我们使用P0口发送数据给液晶显示屏,P1.2口作为温度采集口,P2口负责报警已经LED灯、继电器控制,其中P2.6和P2.7分别控制单液晶显示器的RS和EN.

2.2.2 主要功能特性

1.兼容MCS51指令系统;

2.28k可反复擦写(大于1000次)Flash ROM; 3.32个双向I/O口; 4.256x8bit内部RAM;

5.3个16位可编程定时/计数器中断; 6.时钟频率0-24MHz;

7.2个串行中断,可编程UART串行通道; 8.2个外部中断源,共8个中断源; 9.2个读写中断口线,3级加密位;

10.低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;

11

11.各引脚及其功能: VCC/GND:电源/接地引脚;

P0口:P0是一个8位漏极开路的双向I/O端口,对端口写1时引脚作高阻抗输入端;当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种工作模式下,P0口不具有内部上拉作用。对内部Flash程序存储器编程时,p0口用来接收指令字节;在校验程序和输出指令字节时,要求外接上拉电阻。

P1口:P1是一个带有内部上拉电阻的8位双向I/0端口,输出时可驱动4个TTL逻辑电平。端口置1时,内部上拉电阻将端口拉到高电平,作输入口用; 此外,P1.0、P1.1可以分别被用作定时器/计数器2的外部计数输入(P1.0/T2)和触发输入(P1.1/T2EX);在Flash编程和校验时,p1口接收低8位地址字节。 P2口:P2是一个具有内部上拉电阻的8位双向I/0口,输出时能驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作为输入用; P2口在存取外部存储器时,可作为高位地址输出;内部Flash程序存储器编程时,接收高8位地址和控制信息。

P3口:P3是一个带有内部上拉电阻的8位双向I/0端口,输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。 P3引脚功能复用见表2-5:

表2-5 P3引脚功能复用

P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 串行通讯输入(RXD) 串行通讯输出(TXD) 外部中断0( INT0) 外部中断1(INT1) 定时器0输入(T0) 定时器1输入(T1) 外部数据存储器写选通WR 外部数据存储器写选通RD 12

RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期(即24个周期)以上高电平将使单片机复位。当RST保持高电平,52芯片便循环复位。复位后P0~P3口全置1,管脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。

XTAL1、XTAL2 :XTAL1是片内振荡器的反相放大器和内部时钟发生电路的输入端,XTAL2则是输出端,晶振频率可在1MHz至24MHz之间选择,电容取30PF左右。

ALE/PROG:访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低8位字节,即便不访问外部存储器,ALE端仍会以不变的频率输出脉冲信号(1/6振荡频率),当访问外部数据存储器时,会出现一个ALE脉冲;

PSEN:该引脚是外部程序存储器的选通信号输出端。当AT89S52由外部程序存储器取指令或数据时,每个机器周期输出两个脉冲,即两次有效。当访问外部数据存储器时,则不会有脉冲输出。

EA/Vpp:外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。要使AT89S52只访问外部程序存储器(地址为0000H-FFFFH), 这时该引脚必须保持低电平。

3 系统硬件设计

3.1 单片机最小系统的设计

单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。本次课程设计中选用AT89C52式单片机,其最小系统主要由电复位、振荡电路组成。单片机的最小系统如图3-1所示。

单片机的复位电路原理是在单片机的复位引脚RST上电阻和电容,实现上电复位。当复位电平持续两个时钟周期以上时复位有效。复位电路由按键复位和

13

上电复位两部分组成,上电复位是在复位引脚上连接一个电容到VCC,再连接一个电阻到GND;按键复位是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。

AT89C51单片机使用12MHZ的晶振最为振荡源,由于单片机内部有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容一般在15pF至50pF之间。外部晶振结合单片机内部电路产生单片机所需的时钟频率。

3.2 温度采集电路的设计

温度采集电路部分,采用数字温度传感器DS18B20进行温度采集。DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3个引脚;温度侧量范围为-55℃—+125℃,测量精度为0.5℃;被测温度用符号扩展的16位数字量方式串行输出;CPU只需用一个端口线就可以与DS18B20通信。温度采集电路如图3-2所示。

14

图3-2 温度采集电路

3.3 LED显示报警电路的设计

LED数码管与单片机的P0口相连,单片机将采集到的温度值转化为与数码管对应的数据,通过P0口输出显示。即信号通过译码管的端口a、b、c、d、e、f、g 、dp 端来控制每段译码管的亮灭与否,同时通过端口1、2、3、4 四个端口来控制四个译码管。在本次设计中,用集成芯片74HC245驱动数码管。同时当采集到的温度值超过所设置的范围时,单片机会输出一信号,通过三极管放大后驱动蜂鸣器发出报警信号。LED数码管报警电路。

15

总 结

本设计是以温度采集及控制过程设计为总目标,以AT89C52单片机最小应用系统为总控制中心,辅助设计有温度采样电路、A/D转换接口、加热电路、LED数码管动态串行显示器等。 本设计的重点、难点是:

(1) 要掌握温度传感器的原理、结构、应用等;

(2) 考虑从非电量信号到电量信号的电路实现原理以及与单片机的接口; (3) 熟悉MCS-51编程的技术,实现单片机对温度的调节控制; (4) 整体电路的仿真调试。

本次设计优点:采用的单片机AT89C51 性价比高;热敏电阻温度传感器转化温度的方法非常简洁且精度高、测试范围较广。

由于时间及精力所限,对温度控制系统做了整体设计,具体实现了其中的温度报警部分设计,即温度控制系统的采集、显示及报警模块。

16

致 谢

本报警器的设计工作是在我的指导老师武丽精心指导和悉心关怀下完成的,在我的设计工作中倾注着指导老师辛勤的汗水和心血。在我的设计过程中,武丽老师给我很大的帮助,给我提出设计要求,在软件流程中给我提出了宝贵的意见,一步一步指导我,教会我熟悉设计系统需要做的每一步工作和具体的步骤。在这里向她表示深深的感谢。导师的严谨治学态度、渊博的知识、无私的奉献精神使我深受的启迪。从尊敬的老师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理。在此我要向我的老师致以最衷心的感谢和深深的敬意。在多年的学习生活中,还得到了许多学院领导和老师的热情关心和帮助。

最后,向所有关心和帮助过我的领导、老师、同学和朋友表示由衷的谢意。 衷心地感谢在百忙之中评阅我的论文和参加答辩的各位老师!

17

参考文献

[1] 郭天祥.新概念51单片机C语言教程.北京:电子工业出版社,2009. P342-P354 [2] 李建忠.单片机原理与应用.西安:西安电子科技大学出版社,2009. P16-P50 [3] 阎实. 数字电子技术基础.北京:高等教育出版社,1983. P178-P182 [4] 谭浩强. C语言程序设计(第三版).北京:清华大学出版社,2005. P49-P86 [5] 喻宗泉, 喻晗编著.单片机原理与应用技术.北京:机械工业出版社,1998 [6] 何立民主编.单片机应用系统设计.北京:北京航空航天大学出版社,1990 [7] 李华主编.MCS-51系列单片机实用接口技术.北京:北京航空航天大学出版 社,1993

[8] 邹丽新等主编.单片微型计算机接口技术.苏州:苏州大学出版社,2002 [9] 孙涵芳、徐爱卿主编.MCS-51单片机的原理与应用.北京:北京航空航天大学 出版社,1996

18

附 录

附录1:总电路图

附录2:原器件清单

序号 1 2 3 4 5 编号 R1 R2 R3 RP1 C1、C2 名称 电阻 电阻 电阻 排阻 电容 型号 4.7K 100K 5K 5K 33P 数量 1 1 1 1 2 19

6 7 8 9 10 11 12 13 14 C3 S1 X1 Q1 LS1 U1 U2 U3 U4 电容 按键开关 晶振 三极管 蜂鸣器 51单片机 温度传感器 集成芯片 4位7段数码管 100u 12M PNP AT89C52 DS18B20 74HC245 共阳 1 1 1 1 1 1 1 1 1 附录3:温度报警器部分程序

#include #include #define uchar unsigned char #define uint unsigned int sbit DQ=P3^7;

sbit beep=P3^0;

void reset(); //DS18B20复位函数 void write_byte(uchar val); //DS18B20写命令函数 uchar read_byte(void); //DS18B20读1字节函数 void read_temp(); //温度读取函数 void LED_display(); void alarm();

uchar tempH,tempL,num;

uchar table[10]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~9的LED字符编码 uchar setValue_low=15;

20

uchar setValue_high=30; main() { while(1) {

read_temp(); LED_display(); alarm(); } }

void delay(uint t) {

for(;t>0;t--); }

void reset() //DS18B20的复位{

uchar presence=1; while(presence) {

while(presence) {

DQ=1;_nop_();_nop_(); DQ=0; delay(50); DQ=1; delay(6); presence=DQ; } delay(45); presence=~DQ;

21

} DQ=1; }

void write_byte(uchar val) { uchar i; for(i=8;i>0;i--) {

DQ=1;_nop_();_nop_();

DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_(); DQ=val&0x01; delay(6); val=val>>1; } DQ=1; _nop_(); }

uchar read_byte(void) { uchar i; uchar value=0; for(i=8;i>0;i--) {

DQ=1;_nop_();_nop_(); value>>=1; DQ=0;

_nop_();_nop_();_nop_();_nop_(); DQ=1;_nop_();_nop_();_nop_();_nop_(); if(DQ)

//DS18B20写一个字节

//DS18B20读一个字节

value|=0x80;

22

delay(6); } DQ=1; return(value); }

void read_temp() { uchar ch1,ch2; reset();

write_byte(0xcc); write_byte(0x44); reset();

write_byte(0xcc); write_byte(0xbe);

ch1=read_byte(); //DS18B20的温度数值是16位的二进制,精度高,最后四位

是温度的小数部分,最高五位为符号位(即正负温度)

ch2=read_byte();

num=(ch2<<4)|(ch1>>4); //只取温度值的中间八位,小数部分舍去,符号位舍去四位。 tempH=num/10;

//温度的十位

//温度的个位

//从DS18B20读取温度值

tempL=num-tempH*10; }

void LED_display() { P2=0x0; P2=2;

P0=table[tempL]; delay(50); P2=0x0; P2=1;

//显示检测的温度

23

P0=table[tempH]; delay(50); P2=0x0; }

void alarm() {

if(setValue_low<=num && setValue_high>=num) beep=1; else }

beep=~beep;

//在温度允许范围,不报警

//报警

24

本文来源:https://www.bwwdw.com/article/cqfx.html

Top