LED数显温度控制器

本科毕业论文(设计)

LED 数显温度控制器

毕业设计(论文)原创性声明和使用授权说明

原创性声明

本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。

作 者 签 名: 日 期:

指导教师签名: 日 期:

使用授权说明

本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。

作者签名: 日 期:

学位论文原创性声明

本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。

作者签名: 日期: 年 月 日

学位论文版权使用授权书

本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。

涉密论文按学校规定处理。

作者签名: 日期: 年 月 日

导师签名: 日期: 年 月 日

注 意 事 项

1. 设计(论文)的内容包括:

1)封面(按教务处制定的标准封面格式制作)

2)原创性声明

3)中文摘要(300字左右)、关键词

4)外文摘要、关键词

5)目次页(附件不统一编入)

6)论文主体部分:引言(或绪论)、正文、结论

7)参考文献

8)致谢

9)附录(对论文支持必要时)

2. 论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。

3. 附件包括:任务书、开题报告、外文译文、译文原文(复印件)。

4. 文字、图表要求:

1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写

2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画

3)毕业论文须用A4单面打印,论文50页以上的双面打印

4)图表应绘制于无格子的页面上

5)软件工程类课题应有程序清单,并提供电子文档

5. 装订顺序

1)设计(论文)

2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订

摘 要

现代社会,单片机技术已经成为一种比较成熟的技术, 它已经普及到我们生活、工作、科研、各个领域中,温度也是日常生活中最基本的环境参数,它与我们的生活工作密切相关,本文主要介绍了一个基于AT89C51单片机的温度控制报警系统,采用温度传感器

DS18B20的温度上下限报警器,能够自动测量当前环境温度,由单片机AT89C2051控制,并通过三位段数码管显示提示,如果目前环境温度超过此温度,系统会发出报警。采用的单片机AT89C51做信号处理单元,其成本低廉,精确度高,LED 显示测量数值,选用红外传感器采集人体信号,经过放大整形电路后传送给单片机AT89C51来处理,最后该信号传送至LED 显示屏。

该系统能够方便的实现温度的采集和显示,并根据需要可任意设定报警温度,它使用起来非常方便,具有体积小、精度高、量程宽、灵敏度高、功耗低等优点,适用于我们日常生活和工、农业生产中的温度控制,也可以作为其他主系统的辅助扩展,当作温度处理模块嵌入其它系统中。DS18B20与AT89C51的结合实现了最简温度控制系统,该系统抗干扰能力强,结构简单,对恶劣环境下进行现场温度的控制也适合,应用前景较为广泛。

关键词:单片机;温度控制;AT89C51;DS18B20;

Abstract In modern society, Single chip technology has become a mature technology, it has spread to our lives, work, research, in various fields, the most basic environmental parameters of temperature is in daily life, and it is closely related to our life and work, this paper introduces a control alarm system based on AT89C51 single-chip microcomputer temperature. Using the temperature sensor DS18B20 upper and lower limit alarm, can automatically measure the current ambient temperature, controlled by AT89C2051, and display the prompt by three segment digital tube, if the current ambient temperature over this temperature, the system will send out alarm. Uses the monolithic integrated circuit AT89C51 to do signal processing unit, its low cost, high accuracy, LED display measured value, using infrared sensors to collect signals of the human body, to deal with after amplifying and shaping circuit and then transmitted to the single chip microcomputer AT89C51, finally the signal is transmitted to the LED display.

The system can facilitate the realization of temperature acquisition and display, and according to the need can be arbitrarily set the alarm temperature, it is very convenient to use, has the advantages of small volume, high precision, range wide, high sensitivity, low power consumption, suitable for our daily lives and industrial and agricultural production in the temperature control, can also be used as other auxiliary the main system expansion, as the temperature processing module embedded in other systems. The combination of DS18B20 and AT89C51 to achieve the most simple temperature control system, the system has strong anti-interference capacity, simple structure, control of the on-site temperature under harsh environment is suitable, more extensive application prospects.

Key words: single-chip microcomputerAT89C51; wireless transmission module; sickbed beeper

目 录

摘 要 . ................................................................................................................................................................ I Abstract . ......................................................................................................................................................... V 目 录 . ............................................................................................................................................................. VI 1 引言 ............................................................................................................................................................. 1

1.1 研究的背景与意义 ...................................................................................................................... 1

1.2 国内外研究现状 . ........................................................................................................................... 1 2 系统的设计与安排 ........................................................................................................................... 1

2.1 设计要求及预期目标 ............................................................................... 错误!未定义书签。

2.2 设计可行性 .................................................................................................... 错误!未定义书签。

2.3 设计方案及步骤 . ......................................................................................... 错误!未定义书签。 3 系统硬件的设计 . ................................................................................................................................ 2

3.1 系统硬件设计的原理框图 ...................................................................................................... 2

3.2 单片机AT89C51简介 ............................................................................................................... 2

3.3 硬件模板设计 ................................................................................................................................. 2 4 系统软件设计 ...................................................................................................................................... 3

4.1 设计的软件环境简介 ................................................................................................................. 3

4.2 单片机C 语言程序设计步骤 .............................................................. 错误!未定义书签。 5 系统检测与调试 . .............................................................................................. 错误!未定义书签。 6 总结与展望 .......................................................................................................... 错误!未定义书签。 参考文献 ..................................................................................................................... 错误!未定义书签。 附 录 . ............................................................................................................................. 错误!未定义书签。

1 引言

1.1 研究的背景与意义

无论是在日常生活中,还是在工业生产过程中温度控制都起着非常重要的作用。本次毕业设计选题的目的主要是让生活在信息发达时代的我们,把所学的知识应用于生活生产当中,熟练掌握系统总体设计的流程,方案的论证,选择,实施与完善。随着社会经济的快速发展,现在越来越多的生产部门及生产环节对温度控制精度的可靠性和稳定性等有了更高的要求。由于苛刻的生产环节对温度要求较高,而传统的温度控制器控制精度却普遍不高,已经不能满足其要求。

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

1.2 国内外研究现状

虽然温度控制系统在国内各行各业己经得到广泛应用,但从国内生产的温度控制器来说,总体发展水平仍然不高,同美国、日本、德国等先进发达国家相比,仍有着较大的差距。20世纪70年代,国外就对温度控制技术有研究。先是采用模拟式的组合仪表,采集现场信息并进行指示、记录和控制。80年代末就出现了分布式控制系统。现在正在开发和研制计算机数据采集控制系统的多因子综合控制系统。现在世界各国的温度测控技术发展很快,一些国家在实现自动化的基础上正向着完全自动化、无人化的方向发展。我国研究温度测控技术较晚,20世纪80年代开始,在吸收发达国家温度测控技术的基础上,我国工程技术人员才掌握了温度室内微机控制技术,这项技术仅限于对温度的单项环境因子的控制。我国温度测控设施的计算机应用,在总体上正从消化吸收、简单应用阶段过渡和发展。在技术上,以单片机控制的单参数单回路系统居多,尚无真正意义上的多参数综合控制系统,与发达国家相比,存在较大差距。

2 设计的内容及性能指标 本设计主要是介绍了单片机控制下的温度报警系统,详细介绍了其硬件和软件设计,并对其各功能模块做了详细介绍,其主要功能和指标如下:单片机实时检测温度传感器DS18B20的状态,并将DS18820得到的数据进行处理。上电后数码管显示当前的环境温度,通过按键可设置高低温报警值,当检测到的温度高于设置的报警值的时候,蜂鸣器报警同时报警灯闪烁,温度检测精确到0.1度。并具有掉电保存功能,数据保存在单片机内部EEPOM 中,进入设置界面后如果没有键按下系统会在15秒后自动退出设置界面。

3 系统方案比较、设计与论证

该系统主要由温度测量和温度设置及系统状态显示三部分电路组成,下面介绍实现此系统功能的方案。

3.1 主控制器模块

采用STC89C52单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。STC89C52单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K ,对于本设计也绰绰有余,更可贵的是STC89C52单片机价格非常低廉。

3.2 温度测量

采用数字温度芯片DS18B20 测量实际温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0—100 摄氏度时,最大线形偏差小于1摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器STC89C52构成的温度测量装置, 它直接输出温度的数字信号, 可直接与计算机连接。这样, 测温系统的结构就比较简单, 体积也不大。采用51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC 机通信上传数据,另外AT89C51在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。

3.3 设置温度

采用键盘输入设置温度,键盘则可以用4个按键,一个复位键,一个功能设定键,一个加减一个减键。四个键比较常用,而且用到的接口得到了极好的利用,仅需要4个接口。

3.4 显示模块

用LED 数码管实现数值的显示,LED 数码管显示相对来说比较直观、明亮,可以用动态显示和静态显示两种方法编程实现,数码管由于显示速度快,使用简单,显示效果简洁明了而得到了广泛应用。LCD 虽然其显示清晰,显示内容丰富、清晰,显示信息量大,使用方便,显示快速。但对于此系统我们不需要显示丰富的内容,而且LCD 液晶价格贵,因此我们选择用数码管显示。

3.5 电源选取

采用干电池供电。干电池价格低廉、携带方便、运用灵活,经过实验验证系统工作时,单片机、传感器的工作电压稳定能够满足系统的要求,而且电池更换方便。

3.6 报警设备的论证与选择

采用声、光同时报警,既可以利用不同颜色的等对应不同的状态判别出此时的温度处于的状况,又可以使工作人员在一定距离范围内监测到温度异常进行及时处理。

4 系统器件选择

. 温度传感器的选择

由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。这里采用DALLAS 公司的数字温度传感器DS18B20作为测温元件。

图2 外部封装形式 图3 传感器电路图

5 硬件实现及单元电路设计

5.1主控制模块

主控制最系统电路如图4所示。

图4 单片主控电路

5.2 显示模块电路

显示采用四位数码管显示,当位选打开时,送入相应的段码,则相应的数码管打开,关掉位选,打开另一个位选,送入相应的段码,则数码管打开,而每次打开关掉相应的位选时,时间间隔低于20ms ,从人类视觉的角度上看,就仿佛是全部数码管同时显示的一样。显示电路如图5

图5 数码管显示

5.3 数码管显示驱动电路

三极管8550来驱动4位数码管,不仅简单,而且价格便宜。

图6 驱动电路

5.4 温度传感器(DS18B20)电路

5.4.1 DS18B20基本介绍

DS18B20是美国DALLAS 半导体公司推出的第一片支持“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号处理器处理。DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到1mA ,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K 上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。

因此,下图电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。并且工作电源VCC 必须保证在5V ,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。

图7 温度传感器电路引脚图

5.4.2 DS18B20控制方法

DS18B20有六条控制命令:

温度转换 44H 启动DS18B20进行温度转换

读暂存器 BEH 读暂存器9个字节内容

写暂存器 4EH 将数据写入暂存器的TH 、TL 字节

复制暂存器 48H 把暂存器的TH 、TL 字节写到E2RAM 中

重新调E2RAM B8H 把E2RAM 中的TH 、TL 字节写到暂存器TH 、TL 字节

读电源供电方式 B4H 启动DS18B20发送电源供电方式的信号给主CPU

5.4.3 DS18B20供电方式

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图3.1所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个三极管来完成对总线的上拉。本设计采用电源供电方式, P2.2口接单线总线为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个上拉电阻和STC89C52的P2.2来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10 μs 。采用寄生电源供电方式是VDD 和GND 端均接地。由于单线制只有一根线,因此发送接收口必须是三状态的。主机控制DS18B20完成温度转换必须经过3个步骤:。 ● 初始化。

● ROM 操作指令。

存储器操作指令。

5.6 蜂鸣器、发光二极管报警电路

电路如图8主要是用来设定温度报警温度的、有高温和低温报警。

图8 蜂鸣器、发光二极管驱动引脚图

6 系统软件设计

6.1 程序结构分析

主程序调用了3个子程序,分别是数码管显示程序、温度信号处理程序、按键设定报警温度程序。温度信号处理程序:对温度芯片送过来的数据进行处理,进行判断和显示。数码管显示程序:向数码管的显示送数,控制系统的显示部分。按键设定程序:可以设定低温和高温报警可精确到0.1度。

6.2 系统程序流图

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s 进行一次。这样可以在一秒之内测量一次被测温度,主程序的主要功能是负责温度的实时显示,读出并处理DS18B20的当前温度值,与设定的报警温度比较,其程序流程见图9所示。

通过调用读温度子程序把存入内存储中的整数部分与小数部分开分存放在不的的两个单元中,然后通过调用显示子程序显示出来。

图9 DS18B20温度流程图

6.2.1 DS18B20初始化程序流程图

在DS18B20工作之前需要进行初始化,流程图如下:

图10 初始化程序流程图

6.2.2 读温度子程序流程图

读温度子程序的主要功能是从DS18B20中读出温度数据,移入温度暂存器保存。其程序流程图如下:

图11 温度子程序流程图

7 系统的安装与调试

7.1 安装步骤

1. 检查元件的好坏

按电路图买好元件后首先检查买回元件的好坏,按各元件的检测方法分别进行检测,一定要仔细认真。而且要认真核对原理图是否一致,在检查好后才可上件、焊件,防止出现错误焊件后不便改正。

2. 放置、焊接各元件

按原理图的位置放置各元件,在放置过程中要先放置、焊接较低的元件,后焊较高的和要求较高的元件。特别是容易损坏的元件要后焊,在焊集成芯片时连续焊接时间不要超过10s ,注意芯片的安装方向。

7.2 电路的调试

首先烧入显示程序,看显示正不正常。在调试程序时,发现有的指令用的不正确,导致电路功能不能完全实现,另外软件程序中的延时有的过长、有的过短。类似的现象还有很多就不一一列举了。

7.3 本章小结

本章的主要内容是电路的测试和调试注意事项

结 论 本温度报警器,通过单片机实时检测温度传感器DS18B20的状态,并将DS18820得到的数据进行处理。上电后数码管显示当前的环境温度,通过按键可设置高低温报警值,当检测到的温度高于设置的报警值的时候,蜂鸣器报警同时报警灯闪烁,温度检测精确到0.1度。并具有掉电保存功能,数据保存在单片机内部EEPOM 中,进入设置界面后如果没有键按下系统会在15秒后自动退出设置界面。由于采用了4节干电池供电使系统的抗干扰性得到加强。在软件上,充分利用了STC89C52的系统资源,系统运行流畅。

本设计结构简单,调试方便,系统反映快速灵活,经实验测试,该温度报警系统设计方案正确、可行,各项指标稳定、可靠。

参考文献

1曹巧媛主编. 单片机原理及应用(第二版). 北京:电子工业出版社,2002

2全国大学生电子设计竞赛组委会编. 第五届全国大学生电子设计竞赛获奖作品选编(2001), 北京:北京理工大学出版社,2003

3何力民编. 单片机高级教程. 北京:北京航空大学出版社,2000

4金发庆等编. 传感器技术与应用. 北京机械工业出版社,2002

5刘坤、宋戈、赵洪波、张宪栋编.51单片机C 语言应用开发技术大全,北京:人民邮电出版社,2008

6谭浩强著.C 程序设计.北京:清华大学出版社,2007

7王忠飞,胥芳.MCS-51 单片机原理及嵌入式系统应用[M].西安:西安电子科技大学出版社,2007.P268-273

8 Peter Van Der Linden著,徐波译.C 专家编程,人民邮电出版社,2003

附录1 整体电路原理图

附录2 部分源程序

#include

#include "eepom52.h"

#define uchar unsigned char

#define uint unsigned int

//数码管段选定义 0 1 2 3 4 5 6 7 8 9 uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //断码

//数码管位选定义

uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};

uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};

uchar smg_i = 3; //显示数码管的个位数

sbit dq = P2^4; //18b20 IO口的定义

sbit beep = P2^5; //蜂鸣器IO 口定义

uchar a_a;

uint temperature ; //

bit flag_300ms ;

uchar key_can; //按键值的变量

uchar menu_1; //菜单设计的变量

uint t_high = 300,t_low = 100;

bit flag_lj_en; //按键连加使能

bit flag_lj_3_en; //按键连3次连加后使能 加的数就越大了

uchar key_time,flag_value; //用做连加的中间变量

bit key_500ms ;

uchar flag_clock;

uchar zd_break_en,zd_break_value; //自动退出设置界面

/***********************1ms延时函数*****************************/ void delay_1ms(uint q)

{

uint i,j;

for(i=0;i

for(j=0;j

}

/***********************小延时函数*****************************/ void delay_uint(uint q)

{

while(q--);

}

/***********************数码显示函数*****************************/ void display()

{

uchar i;

for(i=0;i

{

P3 = smg_we[i]; //位选

P1 = dis_smg[i]; //段选

delay_1ms(1);

P3 = 0xff; //位选

P1 = 0xff; //消隐

}

}

/******************把数据保存到单片机内部eepom 中******************/ void write_eepom()

{

SectorErase(0x2000);

byte_write(0x2000, t_high % 256);

byte_write(0x2001, t_high / 256);

byte_write(0x2002, t_low % 256);

byte_write(0x2003, t_low / 256);

byte_write(0x2055, a_a);

}

/******************把数据从单片机内部eepom 中读出来*****************/ void read_eepom()

{

t_high = byte_read(0x2001);

t_high

t_high |= byte_read(0x2000);

t_low = byte_read(0x2003);

t_low

t_low |= byte_read(0x2002);

a_a = byte_read(0x2055);

}

/***********************18b20初始化函数*****************************/ void init_18b20()

{

bit q;

dq = 1; //把总线拿高

delay_uint(1); //15us

dq = 0; //给复位脉冲

delay_uint(80); //750us

dq = 1; //把总线拿高 等待

delay_uint(10); //110us

q = dq; //读取18b20初始化信号

delay_uint(20); //200us

dq = 1; //把总线拿高 释放总线

}

/*************写18b20内的数据***************/

void write_18b20(uchar dat)

{

uchar i;

for(i=0;i

{ //写数据是低位开始

dq = 0; //把总线拿低写时间隙开始

dq = dat & 0x01; //向18b20总线写数据了

delay_uint(5); // 60us

dq = 1; //释放总线

dat >>= 1;

}

}

/*************读取18b20内的数据***************/

uchar read_18b20()

{

uchar i,value;

for(i=0;i

{

dq = 0; //把总线拿低读时间隙开始

value >>= 1; //读数据是低位开始

dq = 1; //释放总线

if(dq == 1) //开始读写数据

value |= 0x80;

delay_uint(5); //60us 读一个时间隙最少要保持60us 的时间

}

return value; //返回数据

}

/*************读取温度的值 读出来的是小数***************/

uint read_temp()

{

uint value;

uchar low; //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序

init_18b20(); //初始化18b20

write_18b20(0xcc); //跳过64位ROM

write_18b20(0x44); //启动一次温度转换命令

delay_uint(50); //500us

init_18b20(); //初始化18b20

write_18b20(0xcc); //跳过64位ROM

write_18b20(0xbe); //发出读取暂存器命令

EA = 0;

low = read_18b20(); //读温度低字节

value = read_18b20(); //读温度高字节

EA = 1;

value

value |= low; //把读出的温度低位放到value 的低八位中

value *= 0.625; //转换到温度值 小数

return value; //返回读出的温度 带小数

}

/*************定时器0初始化程序***************/

void time_init()

{

EA = 1; //开总中断

TMOD = 0X01; //定时器0、定时器1工作方式1

ET0 = 1; //开定时器0中断

TR0 = 1; //允许定时器0定时

}

/****************独立按键处理函数************************/

void key()

{

static uchar key_new = 0,key_old = 0,key_value = 0;

if(key_new == 0)

{ //按键松开的时候做松手检测

if((P2 & 0x0f) == 0x0f)

key_value ++;

else

key_value = 0;

if(key_value >= 10)

{

write_eepom();

key_value = 0;

key_new = 1;

flag_lj_en = 0; //关闭连加使能

flag_lj_3_en = 0; //关闭3秒后使能

flag_value = 0; //清零

}

}

else

{

if((P2 & 0x0f) != 0x0f)

key_value ++; //按键按下的时候

else

key_value = 0;

if(key_value >= 7)

{

key_value = 0;

key_new = 0;

flag_lj_en = 1; //连加使能

zd_break_en = 1; //自动退出设置界使能

zd_break_value = 0; //自动退出设置界变量清零

}

}

key_can = 20;

if(key_500ms == 1)

{

key_500ms = 0;

zd_break_en = 1; //自动退出设置界使能

zd_break_value = 0; //自动退出设置界变量清零

key_new = 0;

key_old = 1;

}

if((key_new == 0) && (key_old == 1))

{

switch(P2 & 0x0f)

{

case 0x0e: key_can = 4; break; //得到k1键值

case 0x0d: key_can = 3; break; //得到k2键值

case 0x0b: key_can = 2; break; //得到k3键值

case 0x07: key_can = 1; break; //得到k4键值

}

}

key_old = key_new;

}

/****************按键处理数码管显示函数***************/

void key_with()

{

if(key_can == 4)

{

menu_1 ++;

if(menu_1 >= 3)

{

menu_1 = 0;

}

if(menu_1 == 0)

{

dis_smg[0] = smg_du[temperature % 10]; //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示 dis_smg[2] = smg_du[temperature / 100 % 10] ; //取温度的十位显示 smg_i = 3;

}

if(menu_1 == 1)

{

dis_smg[0] = smg_du[t_high % 10]; //取小数显示

dis_smg[1] = smg_du[t_high / 10 % 10] & 0x7f; //取个位显示

dis_smg[2] = smg_du[t_high / 100 % 10] ; //取low 十位显示

dis_smg[3] = 0x89;

smg_i = 4;

}

if(menu_1 == 2)

{

dis_smg[0] = smg_du[t_low % 10]; //取low 小数显示 dis_smg[1] = smg_du[t_low / 10 % 10] & 0x7f; //取个位显示

dis_smg[2] = smg_du[t_low / 100 % 10] ; //取十位显示

dis_smg[3] = 0xc7;

smg_i = 4;

}

}

if(menu_1 == 1) //设置高温报警

{

if(key_can == 3)

{

if(flag_lj_3_en == 0)

t_high ++ ; //按键按下未松开自动加三次

else

t_high += 10; //按键按下未松开自动加三次之后每次自动加10 if(t_high > 990)

t_high = 990;

dis_smg[0] = smg_du[t_high % 10]; //取小数显示

dis_smg[1] = smg_du[t_high / 10 % 10] & 0x7f; //取个位显示

dis_smg[2] = smg_du[t_high / 100 % 10] ; //取十位显示

dis_smg[3] = 0x89; //H

}

if(key_can == 1)

{

if(flag_lj_3_en == 0)

t_high -- ; //按键按下未松开自动加三次

else

t_high -= 10; //按键按下未松开自动减三次之后每次自动减10 if(t_high

t_high = t_low + 1;

dis_smg[0] = smg_du[t_high % 10]; //取小数显示

dis_smg[1] = smg_du[t_high / 10 % 10] & 0x7f; //取个位显示

dis_smg[2] = smg_du[t_high / 100 % 10] ; //取十位显示

dis_smg[3] = 0x89; //H

}

// write_eepom();

}

if(menu_1 == 2) //设置低温报警

{

if(key_can == 3)

{

if(flag_lj_3_en == 0)

t_low ++ ;

else

t_low += 10;

if(t_low >= t_high)

t_low = t_high - 1;

dis_smg[0] = smg_du[t_low % 10]; //取小数显示

dis_smg[1] = smg_du[t_low / 10 % 10] & 0x7f; //取个位显示

dis_smg[2] = smg_du[t_low / 100 % 10] ; //取十位显示

dis_smg[3] = 0xc7; //L

}

if(key_can == 1)

{

if(flag_lj_3_en == 0)

t_low -- ;

else

t_low -= 10;

if(t_low

t_low = 10;

dis_smg[0] = smg_du[t_low % 10]; //取小数显示

dis_smg[1] = smg_du[t_low / 10 % 10] & 0x7f; //取个位显示

dis_smg[2] = smg_du[t_low / 100 % 10] ; //取十位显示

dis_smg[3] = 0xc7; //L

}

// write_eepom();

}

}

/****************报警函数***************/

void clock_h_l()

{

if((temperature = t_high))

{

flag_clock = 1;

}

else

{

flag_clock = 0;

beep = 1;

}

}

void main()

{

temperature = read_temp(); //先读出温度的值

time_init(); //初始化定时器

read_eepom();

if(a_a == 0xff) //新的单片机初始单片机内问EEPOM

{

t_high = 300;

t_low = 100;

a_a = 1;

write_eepom();

}

delay_1ms(650);

temperature = read_temp(); //先读出温度的值

dis_smg[0] = smg_du[temperature % 10]; //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示

dis_smg[2] = smg_du[temperature / 100 % 10] ; //取温度的十位显示

while(1)

{

display(); //显示函数

key(); //按键程序

if(key_can

{

key_with(); //设置报警温度

}

temperature = read_temp(); //先读出温度的值

if(flag_300ms == 1) //300ms 处理一次温度程序

{

clock_h_l(); //报警函数

if(flag_clock == 1)

beep = ~beep;

flag_300ms = 0;

if(menu_1 == 0)

{

smg_i = 3;

dis_smg[0] = smg_du[temperature % 10]; //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示 dis_smg[2] = smg_du[temperature / 100 % 10] ; //取温度的十位显示 }

if(zd_break_en == 1) //自动退出设置界面程序

{

zd_break_value ++; //每300ms 加一次

if(zd_break_value > 50) //15秒后自动退出设置界面

{

menu_1 = 0;

zd_break_en = 0;

zd_break_value = 0;

}

}

}

}

}

/*************定时器0中断服务程序***************/

void time0_int() interrupt 1

{

static uchar value;

TH0 = 0x3c;

TL0 = 0xb0; // 50ms

value ++;

if(value % 6 == 0)

{

flag_300ms = 1; //300ms

value = 0;

}

if(flag_lj_en == 1) //按下按键使能

{

key_time ++;

if(key_time >= 10) //500ms

{

key_time = 0;

key_500ms = 1; //500ms

flag_value ++;

if(flag_value > 3)

{

flag_value = 10;

flag_lj_3_en = 1; //3次后1.5秒连加大些

}

}

} }

本科毕业论文(设计)

LED 数显温度控制器

毕业设计(论文)原创性声明和使用授权说明

原创性声明

本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。

作 者 签 名: 日 期:

指导教师签名: 日 期:

使用授权说明

本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。

作者签名: 日 期:

学位论文原创性声明

本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。

作者签名: 日期: 年 月 日

学位论文版权使用授权书

本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。

涉密论文按学校规定处理。

作者签名: 日期: 年 月 日

导师签名: 日期: 年 月 日

注 意 事 项

1. 设计(论文)的内容包括:

1)封面(按教务处制定的标准封面格式制作)

2)原创性声明

3)中文摘要(300字左右)、关键词

4)外文摘要、关键词

5)目次页(附件不统一编入)

6)论文主体部分:引言(或绪论)、正文、结论

7)参考文献

8)致谢

9)附录(对论文支持必要时)

2. 论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。

3. 附件包括:任务书、开题报告、外文译文、译文原文(复印件)。

4. 文字、图表要求:

1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写

2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画

3)毕业论文须用A4单面打印,论文50页以上的双面打印

4)图表应绘制于无格子的页面上

5)软件工程类课题应有程序清单,并提供电子文档

5. 装订顺序

1)设计(论文)

2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订

摘 要

现代社会,单片机技术已经成为一种比较成熟的技术, 它已经普及到我们生活、工作、科研、各个领域中,温度也是日常生活中最基本的环境参数,它与我们的生活工作密切相关,本文主要介绍了一个基于AT89C51单片机的温度控制报警系统,采用温度传感器

DS18B20的温度上下限报警器,能够自动测量当前环境温度,由单片机AT89C2051控制,并通过三位段数码管显示提示,如果目前环境温度超过此温度,系统会发出报警。采用的单片机AT89C51做信号处理单元,其成本低廉,精确度高,LED 显示测量数值,选用红外传感器采集人体信号,经过放大整形电路后传送给单片机AT89C51来处理,最后该信号传送至LED 显示屏。

该系统能够方便的实现温度的采集和显示,并根据需要可任意设定报警温度,它使用起来非常方便,具有体积小、精度高、量程宽、灵敏度高、功耗低等优点,适用于我们日常生活和工、农业生产中的温度控制,也可以作为其他主系统的辅助扩展,当作温度处理模块嵌入其它系统中。DS18B20与AT89C51的结合实现了最简温度控制系统,该系统抗干扰能力强,结构简单,对恶劣环境下进行现场温度的控制也适合,应用前景较为广泛。

关键词:单片机;温度控制;AT89C51;DS18B20;

Abstract In modern society, Single chip technology has become a mature technology, it has spread to our lives, work, research, in various fields, the most basic environmental parameters of temperature is in daily life, and it is closely related to our life and work, this paper introduces a control alarm system based on AT89C51 single-chip microcomputer temperature. Using the temperature sensor DS18B20 upper and lower limit alarm, can automatically measure the current ambient temperature, controlled by AT89C2051, and display the prompt by three segment digital tube, if the current ambient temperature over this temperature, the system will send out alarm. Uses the monolithic integrated circuit AT89C51 to do signal processing unit, its low cost, high accuracy, LED display measured value, using infrared sensors to collect signals of the human body, to deal with after amplifying and shaping circuit and then transmitted to the single chip microcomputer AT89C51, finally the signal is transmitted to the LED display.

The system can facilitate the realization of temperature acquisition and display, and according to the need can be arbitrarily set the alarm temperature, it is very convenient to use, has the advantages of small volume, high precision, range wide, high sensitivity, low power consumption, suitable for our daily lives and industrial and agricultural production in the temperature control, can also be used as other auxiliary the main system expansion, as the temperature processing module embedded in other systems. The combination of DS18B20 and AT89C51 to achieve the most simple temperature control system, the system has strong anti-interference capacity, simple structure, control of the on-site temperature under harsh environment is suitable, more extensive application prospects.

Key words: single-chip microcomputerAT89C51; wireless transmission module; sickbed beeper

目 录

摘 要 . ................................................................................................................................................................ I Abstract . ......................................................................................................................................................... V 目 录 . ............................................................................................................................................................. VI 1 引言 ............................................................................................................................................................. 1

1.1 研究的背景与意义 ...................................................................................................................... 1

1.2 国内外研究现状 . ........................................................................................................................... 1 2 系统的设计与安排 ........................................................................................................................... 1

2.1 设计要求及预期目标 ............................................................................... 错误!未定义书签。

2.2 设计可行性 .................................................................................................... 错误!未定义书签。

2.3 设计方案及步骤 . ......................................................................................... 错误!未定义书签。 3 系统硬件的设计 . ................................................................................................................................ 2

3.1 系统硬件设计的原理框图 ...................................................................................................... 2

3.2 单片机AT89C51简介 ............................................................................................................... 2

3.3 硬件模板设计 ................................................................................................................................. 2 4 系统软件设计 ...................................................................................................................................... 3

4.1 设计的软件环境简介 ................................................................................................................. 3

4.2 单片机C 语言程序设计步骤 .............................................................. 错误!未定义书签。 5 系统检测与调试 . .............................................................................................. 错误!未定义书签。 6 总结与展望 .......................................................................................................... 错误!未定义书签。 参考文献 ..................................................................................................................... 错误!未定义书签。 附 录 . ............................................................................................................................. 错误!未定义书签。

1 引言

1.1 研究的背景与意义

无论是在日常生活中,还是在工业生产过程中温度控制都起着非常重要的作用。本次毕业设计选题的目的主要是让生活在信息发达时代的我们,把所学的知识应用于生活生产当中,熟练掌握系统总体设计的流程,方案的论证,选择,实施与完善。随着社会经济的快速发展,现在越来越多的生产部门及生产环节对温度控制精度的可靠性和稳定性等有了更高的要求。由于苛刻的生产环节对温度要求较高,而传统的温度控制器控制精度却普遍不高,已经不能满足其要求。

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

1.2 国内外研究现状

虽然温度控制系统在国内各行各业己经得到广泛应用,但从国内生产的温度控制器来说,总体发展水平仍然不高,同美国、日本、德国等先进发达国家相比,仍有着较大的差距。20世纪70年代,国外就对温度控制技术有研究。先是采用模拟式的组合仪表,采集现场信息并进行指示、记录和控制。80年代末就出现了分布式控制系统。现在正在开发和研制计算机数据采集控制系统的多因子综合控制系统。现在世界各国的温度测控技术发展很快,一些国家在实现自动化的基础上正向着完全自动化、无人化的方向发展。我国研究温度测控技术较晚,20世纪80年代开始,在吸收发达国家温度测控技术的基础上,我国工程技术人员才掌握了温度室内微机控制技术,这项技术仅限于对温度的单项环境因子的控制。我国温度测控设施的计算机应用,在总体上正从消化吸收、简单应用阶段过渡和发展。在技术上,以单片机控制的单参数单回路系统居多,尚无真正意义上的多参数综合控制系统,与发达国家相比,存在较大差距。

2 设计的内容及性能指标 本设计主要是介绍了单片机控制下的温度报警系统,详细介绍了其硬件和软件设计,并对其各功能模块做了详细介绍,其主要功能和指标如下:单片机实时检测温度传感器DS18B20的状态,并将DS18820得到的数据进行处理。上电后数码管显示当前的环境温度,通过按键可设置高低温报警值,当检测到的温度高于设置的报警值的时候,蜂鸣器报警同时报警灯闪烁,温度检测精确到0.1度。并具有掉电保存功能,数据保存在单片机内部EEPOM 中,进入设置界面后如果没有键按下系统会在15秒后自动退出设置界面。

3 系统方案比较、设计与论证

该系统主要由温度测量和温度设置及系统状态显示三部分电路组成,下面介绍实现此系统功能的方案。

3.1 主控制器模块

采用STC89C52单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。STC89C52单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K ,对于本设计也绰绰有余,更可贵的是STC89C52单片机价格非常低廉。

3.2 温度测量

采用数字温度芯片DS18B20 测量实际温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0—100 摄氏度时,最大线形偏差小于1摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器STC89C52构成的温度测量装置, 它直接输出温度的数字信号, 可直接与计算机连接。这样, 测温系统的结构就比较简单, 体积也不大。采用51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC 机通信上传数据,另外AT89C51在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。

3.3 设置温度

采用键盘输入设置温度,键盘则可以用4个按键,一个复位键,一个功能设定键,一个加减一个减键。四个键比较常用,而且用到的接口得到了极好的利用,仅需要4个接口。

3.4 显示模块

用LED 数码管实现数值的显示,LED 数码管显示相对来说比较直观、明亮,可以用动态显示和静态显示两种方法编程实现,数码管由于显示速度快,使用简单,显示效果简洁明了而得到了广泛应用。LCD 虽然其显示清晰,显示内容丰富、清晰,显示信息量大,使用方便,显示快速。但对于此系统我们不需要显示丰富的内容,而且LCD 液晶价格贵,因此我们选择用数码管显示。

3.5 电源选取

采用干电池供电。干电池价格低廉、携带方便、运用灵活,经过实验验证系统工作时,单片机、传感器的工作电压稳定能够满足系统的要求,而且电池更换方便。

3.6 报警设备的论证与选择

采用声、光同时报警,既可以利用不同颜色的等对应不同的状态判别出此时的温度处于的状况,又可以使工作人员在一定距离范围内监测到温度异常进行及时处理。

4 系统器件选择

. 温度传感器的选择

由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。这里采用DALLAS 公司的数字温度传感器DS18B20作为测温元件。

图2 外部封装形式 图3 传感器电路图

5 硬件实现及单元电路设计

5.1主控制模块

主控制最系统电路如图4所示。

图4 单片主控电路

5.2 显示模块电路

显示采用四位数码管显示,当位选打开时,送入相应的段码,则相应的数码管打开,关掉位选,打开另一个位选,送入相应的段码,则数码管打开,而每次打开关掉相应的位选时,时间间隔低于20ms ,从人类视觉的角度上看,就仿佛是全部数码管同时显示的一样。显示电路如图5

图5 数码管显示

5.3 数码管显示驱动电路

三极管8550来驱动4位数码管,不仅简单,而且价格便宜。

图6 驱动电路

5.4 温度传感器(DS18B20)电路

5.4.1 DS18B20基本介绍

DS18B20是美国DALLAS 半导体公司推出的第一片支持“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号处理器处理。DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到1mA ,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K 上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。

因此,下图电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。并且工作电源VCC 必须保证在5V ,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。

图7 温度传感器电路引脚图

5.4.2 DS18B20控制方法

DS18B20有六条控制命令:

温度转换 44H 启动DS18B20进行温度转换

读暂存器 BEH 读暂存器9个字节内容

写暂存器 4EH 将数据写入暂存器的TH 、TL 字节

复制暂存器 48H 把暂存器的TH 、TL 字节写到E2RAM 中

重新调E2RAM B8H 把E2RAM 中的TH 、TL 字节写到暂存器TH 、TL 字节

读电源供电方式 B4H 启动DS18B20发送电源供电方式的信号给主CPU

5.4.3 DS18B20供电方式

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图3.1所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个三极管来完成对总线的上拉。本设计采用电源供电方式, P2.2口接单线总线为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个上拉电阻和STC89C52的P2.2来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10 μs 。采用寄生电源供电方式是VDD 和GND 端均接地。由于单线制只有一根线,因此发送接收口必须是三状态的。主机控制DS18B20完成温度转换必须经过3个步骤:。 ● 初始化。

● ROM 操作指令。

存储器操作指令。

5.6 蜂鸣器、发光二极管报警电路

电路如图8主要是用来设定温度报警温度的、有高温和低温报警。

图8 蜂鸣器、发光二极管驱动引脚图

6 系统软件设计

6.1 程序结构分析

主程序调用了3个子程序,分别是数码管显示程序、温度信号处理程序、按键设定报警温度程序。温度信号处理程序:对温度芯片送过来的数据进行处理,进行判断和显示。数码管显示程序:向数码管的显示送数,控制系统的显示部分。按键设定程序:可以设定低温和高温报警可精确到0.1度。

6.2 系统程序流图

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s 进行一次。这样可以在一秒之内测量一次被测温度,主程序的主要功能是负责温度的实时显示,读出并处理DS18B20的当前温度值,与设定的报警温度比较,其程序流程见图9所示。

通过调用读温度子程序把存入内存储中的整数部分与小数部分开分存放在不的的两个单元中,然后通过调用显示子程序显示出来。

图9 DS18B20温度流程图

6.2.1 DS18B20初始化程序流程图

在DS18B20工作之前需要进行初始化,流程图如下:

图10 初始化程序流程图

6.2.2 读温度子程序流程图

读温度子程序的主要功能是从DS18B20中读出温度数据,移入温度暂存器保存。其程序流程图如下:

图11 温度子程序流程图

7 系统的安装与调试

7.1 安装步骤

1. 检查元件的好坏

按电路图买好元件后首先检查买回元件的好坏,按各元件的检测方法分别进行检测,一定要仔细认真。而且要认真核对原理图是否一致,在检查好后才可上件、焊件,防止出现错误焊件后不便改正。

2. 放置、焊接各元件

按原理图的位置放置各元件,在放置过程中要先放置、焊接较低的元件,后焊较高的和要求较高的元件。特别是容易损坏的元件要后焊,在焊集成芯片时连续焊接时间不要超过10s ,注意芯片的安装方向。

7.2 电路的调试

首先烧入显示程序,看显示正不正常。在调试程序时,发现有的指令用的不正确,导致电路功能不能完全实现,另外软件程序中的延时有的过长、有的过短。类似的现象还有很多就不一一列举了。

7.3 本章小结

本章的主要内容是电路的测试和调试注意事项

结 论 本温度报警器,通过单片机实时检测温度传感器DS18B20的状态,并将DS18820得到的数据进行处理。上电后数码管显示当前的环境温度,通过按键可设置高低温报警值,当检测到的温度高于设置的报警值的时候,蜂鸣器报警同时报警灯闪烁,温度检测精确到0.1度。并具有掉电保存功能,数据保存在单片机内部EEPOM 中,进入设置界面后如果没有键按下系统会在15秒后自动退出设置界面。由于采用了4节干电池供电使系统的抗干扰性得到加强。在软件上,充分利用了STC89C52的系统资源,系统运行流畅。

本设计结构简单,调试方便,系统反映快速灵活,经实验测试,该温度报警系统设计方案正确、可行,各项指标稳定、可靠。

参考文献

1曹巧媛主编. 单片机原理及应用(第二版). 北京:电子工业出版社,2002

2全国大学生电子设计竞赛组委会编. 第五届全国大学生电子设计竞赛获奖作品选编(2001), 北京:北京理工大学出版社,2003

3何力民编. 单片机高级教程. 北京:北京航空大学出版社,2000

4金发庆等编. 传感器技术与应用. 北京机械工业出版社,2002

5刘坤、宋戈、赵洪波、张宪栋编.51单片机C 语言应用开发技术大全,北京:人民邮电出版社,2008

6谭浩强著.C 程序设计.北京:清华大学出版社,2007

7王忠飞,胥芳.MCS-51 单片机原理及嵌入式系统应用[M].西安:西安电子科技大学出版社,2007.P268-273

8 Peter Van Der Linden著,徐波译.C 专家编程,人民邮电出版社,2003

附录1 整体电路原理图

附录2 部分源程序

#include

#include "eepom52.h"

#define uchar unsigned char

#define uint unsigned int

//数码管段选定义 0 1 2 3 4 5 6 7 8 9 uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //断码

//数码管位选定义

uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};

uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};

uchar smg_i = 3; //显示数码管的个位数

sbit dq = P2^4; //18b20 IO口的定义

sbit beep = P2^5; //蜂鸣器IO 口定义

uchar a_a;

uint temperature ; //

bit flag_300ms ;

uchar key_can; //按键值的变量

uchar menu_1; //菜单设计的变量

uint t_high = 300,t_low = 100;

bit flag_lj_en; //按键连加使能

bit flag_lj_3_en; //按键连3次连加后使能 加的数就越大了

uchar key_time,flag_value; //用做连加的中间变量

bit key_500ms ;

uchar flag_clock;

uchar zd_break_en,zd_break_value; //自动退出设置界面

/***********************1ms延时函数*****************************/ void delay_1ms(uint q)

{

uint i,j;

for(i=0;i

for(j=0;j

}

/***********************小延时函数*****************************/ void delay_uint(uint q)

{

while(q--);

}

/***********************数码显示函数*****************************/ void display()

{

uchar i;

for(i=0;i

{

P3 = smg_we[i]; //位选

P1 = dis_smg[i]; //段选

delay_1ms(1);

P3 = 0xff; //位选

P1 = 0xff; //消隐

}

}

/******************把数据保存到单片机内部eepom 中******************/ void write_eepom()

{

SectorErase(0x2000);

byte_write(0x2000, t_high % 256);

byte_write(0x2001, t_high / 256);

byte_write(0x2002, t_low % 256);

byte_write(0x2003, t_low / 256);

byte_write(0x2055, a_a);

}

/******************把数据从单片机内部eepom 中读出来*****************/ void read_eepom()

{

t_high = byte_read(0x2001);

t_high

t_high |= byte_read(0x2000);

t_low = byte_read(0x2003);

t_low

t_low |= byte_read(0x2002);

a_a = byte_read(0x2055);

}

/***********************18b20初始化函数*****************************/ void init_18b20()

{

bit q;

dq = 1; //把总线拿高

delay_uint(1); //15us

dq = 0; //给复位脉冲

delay_uint(80); //750us

dq = 1; //把总线拿高 等待

delay_uint(10); //110us

q = dq; //读取18b20初始化信号

delay_uint(20); //200us

dq = 1; //把总线拿高 释放总线

}

/*************写18b20内的数据***************/

void write_18b20(uchar dat)

{

uchar i;

for(i=0;i

{ //写数据是低位开始

dq = 0; //把总线拿低写时间隙开始

dq = dat & 0x01; //向18b20总线写数据了

delay_uint(5); // 60us

dq = 1; //释放总线

dat >>= 1;

}

}

/*************读取18b20内的数据***************/

uchar read_18b20()

{

uchar i,value;

for(i=0;i

{

dq = 0; //把总线拿低读时间隙开始

value >>= 1; //读数据是低位开始

dq = 1; //释放总线

if(dq == 1) //开始读写数据

value |= 0x80;

delay_uint(5); //60us 读一个时间隙最少要保持60us 的时间

}

return value; //返回数据

}

/*************读取温度的值 读出来的是小数***************/

uint read_temp()

{

uint value;

uchar low; //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序

init_18b20(); //初始化18b20

write_18b20(0xcc); //跳过64位ROM

write_18b20(0x44); //启动一次温度转换命令

delay_uint(50); //500us

init_18b20(); //初始化18b20

write_18b20(0xcc); //跳过64位ROM

write_18b20(0xbe); //发出读取暂存器命令

EA = 0;

low = read_18b20(); //读温度低字节

value = read_18b20(); //读温度高字节

EA = 1;

value

value |= low; //把读出的温度低位放到value 的低八位中

value *= 0.625; //转换到温度值 小数

return value; //返回读出的温度 带小数

}

/*************定时器0初始化程序***************/

void time_init()

{

EA = 1; //开总中断

TMOD = 0X01; //定时器0、定时器1工作方式1

ET0 = 1; //开定时器0中断

TR0 = 1; //允许定时器0定时

}

/****************独立按键处理函数************************/

void key()

{

static uchar key_new = 0,key_old = 0,key_value = 0;

if(key_new == 0)

{ //按键松开的时候做松手检测

if((P2 & 0x0f) == 0x0f)

key_value ++;

else

key_value = 0;

if(key_value >= 10)

{

write_eepom();

key_value = 0;

key_new = 1;

flag_lj_en = 0; //关闭连加使能

flag_lj_3_en = 0; //关闭3秒后使能

flag_value = 0; //清零

}

}

else

{

if((P2 & 0x0f) != 0x0f)

key_value ++; //按键按下的时候

else

key_value = 0;

if(key_value >= 7)

{

key_value = 0;

key_new = 0;

flag_lj_en = 1; //连加使能

zd_break_en = 1; //自动退出设置界使能

zd_break_value = 0; //自动退出设置界变量清零

}

}

key_can = 20;

if(key_500ms == 1)

{

key_500ms = 0;

zd_break_en = 1; //自动退出设置界使能

zd_break_value = 0; //自动退出设置界变量清零

key_new = 0;

key_old = 1;

}

if((key_new == 0) && (key_old == 1))

{

switch(P2 & 0x0f)

{

case 0x0e: key_can = 4; break; //得到k1键值

case 0x0d: key_can = 3; break; //得到k2键值

case 0x0b: key_can = 2; break; //得到k3键值

case 0x07: key_can = 1; break; //得到k4键值

}

}

key_old = key_new;

}

/****************按键处理数码管显示函数***************/

void key_with()

{

if(key_can == 4)

{

menu_1 ++;

if(menu_1 >= 3)

{

menu_1 = 0;

}

if(menu_1 == 0)

{

dis_smg[0] = smg_du[temperature % 10]; //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示 dis_smg[2] = smg_du[temperature / 100 % 10] ; //取温度的十位显示 smg_i = 3;

}

if(menu_1 == 1)

{

dis_smg[0] = smg_du[t_high % 10]; //取小数显示

dis_smg[1] = smg_du[t_high / 10 % 10] & 0x7f; //取个位显示

dis_smg[2] = smg_du[t_high / 100 % 10] ; //取low 十位显示

dis_smg[3] = 0x89;

smg_i = 4;

}

if(menu_1 == 2)

{

dis_smg[0] = smg_du[t_low % 10]; //取low 小数显示 dis_smg[1] = smg_du[t_low / 10 % 10] & 0x7f; //取个位显示

dis_smg[2] = smg_du[t_low / 100 % 10] ; //取十位显示

dis_smg[3] = 0xc7;

smg_i = 4;

}

}

if(menu_1 == 1) //设置高温报警

{

if(key_can == 3)

{

if(flag_lj_3_en == 0)

t_high ++ ; //按键按下未松开自动加三次

else

t_high += 10; //按键按下未松开自动加三次之后每次自动加10 if(t_high > 990)

t_high = 990;

dis_smg[0] = smg_du[t_high % 10]; //取小数显示

dis_smg[1] = smg_du[t_high / 10 % 10] & 0x7f; //取个位显示

dis_smg[2] = smg_du[t_high / 100 % 10] ; //取十位显示

dis_smg[3] = 0x89; //H

}

if(key_can == 1)

{

if(flag_lj_3_en == 0)

t_high -- ; //按键按下未松开自动加三次

else

t_high -= 10; //按键按下未松开自动减三次之后每次自动减10 if(t_high

t_high = t_low + 1;

dis_smg[0] = smg_du[t_high % 10]; //取小数显示

dis_smg[1] = smg_du[t_high / 10 % 10] & 0x7f; //取个位显示

dis_smg[2] = smg_du[t_high / 100 % 10] ; //取十位显示

dis_smg[3] = 0x89; //H

}

// write_eepom();

}

if(menu_1 == 2) //设置低温报警

{

if(key_can == 3)

{

if(flag_lj_3_en == 0)

t_low ++ ;

else

t_low += 10;

if(t_low >= t_high)

t_low = t_high - 1;

dis_smg[0] = smg_du[t_low % 10]; //取小数显示

dis_smg[1] = smg_du[t_low / 10 % 10] & 0x7f; //取个位显示

dis_smg[2] = smg_du[t_low / 100 % 10] ; //取十位显示

dis_smg[3] = 0xc7; //L

}

if(key_can == 1)

{

if(flag_lj_3_en == 0)

t_low -- ;

else

t_low -= 10;

if(t_low

t_low = 10;

dis_smg[0] = smg_du[t_low % 10]; //取小数显示

dis_smg[1] = smg_du[t_low / 10 % 10] & 0x7f; //取个位显示

dis_smg[2] = smg_du[t_low / 100 % 10] ; //取十位显示

dis_smg[3] = 0xc7; //L

}

// write_eepom();

}

}

/****************报警函数***************/

void clock_h_l()

{

if((temperature = t_high))

{

flag_clock = 1;

}

else

{

flag_clock = 0;

beep = 1;

}

}

void main()

{

temperature = read_temp(); //先读出温度的值

time_init(); //初始化定时器

read_eepom();

if(a_a == 0xff) //新的单片机初始单片机内问EEPOM

{

t_high = 300;

t_low = 100;

a_a = 1;

write_eepom();

}

delay_1ms(650);

temperature = read_temp(); //先读出温度的值

dis_smg[0] = smg_du[temperature % 10]; //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示

dis_smg[2] = smg_du[temperature / 100 % 10] ; //取温度的十位显示

while(1)

{

display(); //显示函数

key(); //按键程序

if(key_can

{

key_with(); //设置报警温度

}

temperature = read_temp(); //先读出温度的值

if(flag_300ms == 1) //300ms 处理一次温度程序

{

clock_h_l(); //报警函数

if(flag_clock == 1)

beep = ~beep;

flag_300ms = 0;

if(menu_1 == 0)

{

smg_i = 3;

dis_smg[0] = smg_du[temperature % 10]; //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示 dis_smg[2] = smg_du[temperature / 100 % 10] ; //取温度的十位显示 }

if(zd_break_en == 1) //自动退出设置界面程序

{

zd_break_value ++; //每300ms 加一次

if(zd_break_value > 50) //15秒后自动退出设置界面

{

menu_1 = 0;

zd_break_en = 0;

zd_break_value = 0;

}

}

}

}

}

/*************定时器0中断服务程序***************/

void time0_int() interrupt 1

{

static uchar value;

TH0 = 0x3c;

TL0 = 0xb0; // 50ms

value ++;

if(value % 6 == 0)

{

flag_300ms = 1; //300ms

value = 0;

}

if(flag_lj_en == 1) //按下按键使能

{

key_time ++;

if(key_time >= 10) //500ms

{

key_time = 0;

key_500ms = 1; //500ms

flag_value ++;

if(flag_value > 3)

{

flag_value = 10;

flag_lj_3_en = 1; //3次后1.5秒连加大些

}

}

} }


相关文章

  • 电气101502班课程设计题目
  • 电气101502电子技术课程设计任务书 二十七.彩灯控制电路 设计任务与要求: 1. 设计一彩灯控制其,有八个发光二极管,它能循环显示八种图案,即:彩灯自左向右渐亮至全亮,彩灯自左向右渐灭至全灭,彩灯自右向左渐亮至全亮,彩灯自右向左渐灭至全 ...查看


  • 信息工程毕业设计(论文)1
  • B34 天津轻工职业技术学院 毕业 设计(论文) 课题 : 专业 电子信息工程技术 班级09电子信息工程 学生姓名 刘建平 学生学号 05号 指导教师 王春媚 提交日期 成绩 答辩日期 答辩成绩 答辩教师 总评成绩 摘要内容 本文介绍了一种 ...查看


  • 电子信息工程毕业设计题目大全
  • 1 压力容器液位测量 2 多功能遥控小车 3基于RS232的仓库多点温度.湿度.气 4压检测系统 5自动控制升降旗系统 6基于RS485的温度报警系统 7基于模糊算法的水温控制系统的设计 8多分机电话交换机 9简易火灾自动报警系统 10基于 ...查看


  • 自动化仪表2014
  • 工业自动化仪表 实验指导书 黄 敏 陕西科技大学电气与信息工程学院 2010. 10 目 录 实验一 热电偶测温 ······························································· ...查看


  • 八路数显抢答器研究与设计
  • 实验八 八路数显抢答器研究和设计 综合性实验 1.掌握可定时的八路数显抢答器的工作原理及其设计方法: 2.进一步熟悉74系列常用中规模集成芯片的应用,提高对硬件电路的分析能力: 3.进一步熟悉Qartus软件的使用: 4.学习较复杂的数字系 ...查看


  • 热电偶测温系统
  • <热电偶测温系统实训设计书) 系 别: 电气工程系 专 业: 电气自动化 班 级: 铁道自动化101班 组 别: 第一组 小组成员: 李舟宇 杨帅杰 卢艳茹 谢 升 指导老师: 胡国良 日 期:2012/4/12 > 目录 第一 ...查看


  • 温度报警器 1
  • 课程设计报告 基于基于AT89c52单片机温度 报警器的设计 院 系 电子信息工程学院 专 业班 级 2 姓 名 摘 要 (居中,黑体 小三字体,段前17磅,段后0磅,行距1.25) 随着传感器在生产生活中更加广泛的应用,一种新型的数字式温 ...查看


  • 苏泊尔电磁炉维修手册大全
  • 苏泊尔电磁炉维修手册大全 苏泊尔电磁炉维修手册大全 1.1电磁加热原理电磁灶是一种利用电磁感应原理将电能转换为热能的厨房电器.在电磁灶内部,由整流电路将50/60Hz的交流电压变成直流电压,再经过控制电路将直流电压转换成频率为20-40KH ...查看


  • 主变温度控制器BWY-803A.802说明书
  • 一.概况 1.温度控制器根据变压器研究所制订的JB/T6302<变压器用压力式温度计>标准的命名如下: 2配计算机方 型带接点控制数显仪 湿热带三防带Pt100铂电阻表示温度开关数量表示线性刻度液体压力式温度计变压器 2.温度控 ...查看


热门内容