基于AT89C51数字温度报警器论文

毕业设计(论文)

学 生 姓 名: 专 业: 院 系: 设计(论文)题目: 指 导 教 师:

学 号: 应用电子技术 电子工程学院 基于AT89S51温度报警器

2013 年 6月 3日

摘要

随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。

关键词:单片机 温度计 DS18B20 AT89C51

目录

前 言 ......................................................................... 2 1. 总体设计方案 .............................................................. 3 1.1 计设要求 ................................................................. 3 1.2 数字温度计设计方案论证 ................................................... 3 1.3 总体设计框图 ............................................................ 3 2.系统组成及工作原理 ......................................................... 4 2.1 DS18B20温度传感器与单片机的接口电路 ...................................... 4 2.2 7段LED数码管电路及原理 .................................................. 8 2.3 系统整体硬件电路 ......................................................... 9 3.软件部分 .................................................................. 11 3.1主程序 .................................................................... 12 3.2读出温度子程序 ............................................................ 13 3.3温度转换命令子程序 ........................................................ 13 3.4 计算温度子程序 ........................................................... 14 3.5显示数据刷新新子程序 ...................................................... 15 3.6 PROTEUS软件和KEIL软件联合仿真建立 ....................................... 15 4.实验、调试及测试结果分析 .................................................. 16 4.1 硬件调试 ................................................................. 16 5.总结与体会 ................................................................ 17 参 考 文 献 .................................................................. 18 附录一 程序代码 ............................................................ 19 附录二 元器件清单 .......................................................... 28

前 言

随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。

目前,甲型H1N1流感入境,为了把好关,需对流动人口进行人体体温测量。由于温度传感器DS18B20具有独特的单线接口仅需要一个端口引脚进行通信,可实现多点组网功能,零待机功耗,电压范围仅为3.0~5.5V而且具有读数方便,测温范围广,测温准确的特点,最主要的是用户可定义报警设置,报警搜索命令识别并标志超过程序限定温度(温度报警条件),那么只要检测到温度超过设定的正常人体体温就会发出报警,这样就能更有效的防止流感的扩散。出于对此问题的探索,我们通过上网查阅及相关资料的收集,做了本设计。

本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,该设计控制器使用单片机AT89C51,测温传感器使用DS18B20,用4位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。

1. 总体设计方案

1.1 计设要求

(1)基本范围低于-20℃或高于70℃ (2)精度误差小于0.5℃ (3)LED数码直读显示

(4)可以任意设定温度的上下限报警功能 1.2 数字温度计设计方案论证

方案一

由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。 方案二

进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。 1.3 总体设计框图

温度计电路设计总体设计方框图如图1所示,控制器采用单片机STC89S52,温度传感器采用DS18B20,用4位LED数码管以串口传送数据实现温度显示。

图1.1 总体设计方框图

2.系统组成及工作原理

2.1 DS18B20温度传感器与单片机的接口电路

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:

●独特的单线接口仅需要一个端口引脚进行通信;

●多个DS18B20可以并联在惟一的三线上,实现多点组网功能; ●无须外部器件;

●可通过数据线供电,电压范围为3.0~5.5V; ●零待机功耗;

●温度以9或12位数字; ●用户可定义报警设置;

●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;

●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2.1所示。

图2.1 DS18B20内部结构

64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限

TO-92封装的DS18B20的引脚排列见下图2.2,其引脚功能描述见下:

1.GND地信号

2.DQ

数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。 3.VDD

可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。

图2.2 18B20管脚图

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图3所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图2.3所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。

.

.

TMR1R01

.

1111

.

图2.3 DS18B20字节定义

.

表2.1

.

.

分辨率/位温度最大转向时间/ms

93.75187.5375750

.

由表2.1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。

高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。

当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。

当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2.2是一部分温度值对应的二进制温度数据。

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。

DS18B20的测温原理,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。

表2.2 一部分温度对应值表

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图2.4 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写

存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。

.

.

.

.

图2.4 DS18B20与单片机的接口电路

2.2 7段LED数码管电路及原理

7段LED数码管是利用7个LED(发光二极管)外加一个小数点的LED组合而成的显示

设备,可以显示0~9等10个数字和小数点,使用非常广泛。

这类数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图2.5所示。图中的8个LED分别与上面那个图中的A~DP各段相对应,通过控制各个LED的亮灭来显示数字。

图2.5

还有一种比较常用的是四位数码管,内部的4个数码管共用a~dp这8根数据线,为人们的使用提供了方便,因为里面有4个数码管,所以它有4个公共端,加上a~dp,共有12个引脚,下面便是一个共阴的四位数码管的内部结构图(共阳的与之相反)。引脚排列依然是从左下角的那个脚(1脚)开始,以逆时针方向依次为1~12脚,下图中的数字与之一一对应。

2.3 系统整体硬件电路

温度计电路设计原理图如图2.6所示,控制器使用单片机STC89C52,温度传感器使用DS18B20,用8位共阳LED数码管以动态扫描法实现温度显示。

图2.6数字温度计电路原理图

3.软件部分

Keil 简介

Keil 是由美国keil software 公司出品的单片机开发工具,它是目前最流行的单片机开发工

具之一,该软甲平台主要包括:C51交叉编译器、A51宏汇编器、BL51连接/重定位器、LIB51库管理器、OH51 Intel HEX 格式文件转换器、RTX-51 实时操作系统以单片机软件仿真Dscope51,它将项目管理、源代码编译、程序调试等集成带一个功能强大的Windows 32平台中,支持51汇编、PLM和C语言的混合编程,功能强大、界面友好、易学易用。 Proteus简介

Proteus软件是来自英国Labcenter electronics 公司的EDA工具软件,是一个电子设计的教学平台、实验平台和创新平台,涵盖了电工电子实验室、电子技术实验室、单片机应用实验室等的全部功能。它是一种组合了高级原理布图、混合模式SPICE仿真、PCB设计以及自动布线进行完整的电子设计的软件。采用Proteus仿真软件进行虚拟单片机实验,可以仿真单片机及其外围器件电路,可采用仿真51系列、AVR、PIC等常用的MCU及其外围电路,具有比较明显的优势,如涉及到的实验实习内容全面、硬件投入少、学生可以自行实验、实验过程中损耗小、与工程实践最为接近等。它提供了30多个元件库,数千种元件,涉及到数字和模拟、交流和直流等,并且有丰富的仪表资源。 系统程序的设计

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。

3.1主程序

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

图3.1 主程序流程图

3.2读出温度子程序

读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图3.2示

图3.2读温度流程图

3.3温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图3.3所示。

图3.3 温度转换流程图

3.4 计算温度子程序

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

图3.4 计算温度流程图

3.5显示数据刷新新子程序

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

图3.5 显示数据刷新流程图

3.6 Proteus软件和Keil软件联合仿真建立

整个软件通过C语言编程,先在Kile C51集成开发环境下将编好的程序进行编译、调试,调试通过后会生成数码管.HEX文件,运行Proteus如图3-6模拟仿真软件,打开已绘制好的仿真电路原理图,选中单片机AT89C51,左键点击AT889C51,出现对应的对话框如图3-7在Program File 中找到已编译好的“数码管.HEX”文件,然后点击OK就可以仿真了。

图3-7

4.实验、调试及测试结果分析

4.1 硬件调试

检查印制板及焊接的质量情况,在检查无误后可通电检查LED显示器。若亮度不理想,可以调整P0口的电阻大小,一般情况取200欧电阻即可 4.2软件调试

在KeilC51编译下进行,源程序编译及仿真调试应分段或以子程序为单位逐个进行,最后结合硬件实时调试

通过以上检查后,将电路通电查看是否按要正常工作,实验最终结果显示实验成功。

5.总结与体会

在本次毕业设计的过程中,发现很多的问题,虽然以前还做过类似这样的课程设计,但

是这次毕业设计,从一无所有到最终产品的完成真的是一个很艰难的过程。我们不仅要选好材料,还要学着把这些材料合理的组织起来。所以我们要学会如何寻找和搜索自己需要的电路图。而且还要知道各个部位的作用。每个环节都不是一件简单的事。通过这次设计,也学到了许多,了解了传感器能够把自然的各种非电量转换为电信号的物理思想,并且可将报警装置应用到与自己专业相关的行业中去。有好多东西只有我们去尝试做了,才能真正的掌握,只学习理论有些东西还是很难理解的,更谈不上掌握。因此要理论与实践并重。

从这次的毕业论文设计中,我们真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,实践事检验真理的唯一标准。我们电子专业的学习更是如此,不仅要有丰富的理论知识,还要有很强的动手能力,只有理论与实践并重,我们的专业水平才能提高,这就是我们在这次毕业设计中的最大收获。

最后要感谢王晓君王老师及各位老师们在毕业设计过程中对我们毕业设计的关心和支持!

其次要向同班同学表示感谢,在我们遇到困难的时候,他们能够帮助我,俗话说,三个臭皮匠顶个诸葛亮,在大家你一点我一点的意见帮助下,我们才能顺利的完成这次设计,谢谢同窗好友们!

参 考 文 献

[1] 楼然苗,李光飞 编著 《单片机课程设计指导》 北京航空航天大学出版社 2011年第一版

[2] 张俊谟编著 单片机中级教程——原理与应用 北京航空航天大学出版社 2011年第二版

[3] 李钢,赵彦峰.1-Wire 总线数字温度传感器DS18B20 原理及应用.长安大学信息工程

学院 , 2010

[4] 刘建亭,毛善坤.DS18B20 工作原理及基于C 语言的接口设计.河南科技大

学机电工程学院 2010

[5] 陈跃东.DS18B20 集成温度传感器原理及其应用.安徽工程科技学院 2011 [6] 顾振宇 刘鲁源 杜振辉.DS18B20 接口的C 语言程序设计.天津大学 2011 [7] 周月霞 孙传友.DSl8B20 硬件连接及软件编程.传感器世界杂志 2011 [8] 魏英智. DSl8B20 在温度控制中的应用.黑龙江科技学院

[9] 张培仁.MCS-51 单片机原理与应用.北京:清华大学出版社,2011.

[10] 赵亮,侯国锐.单片机C 语言编程与实例.北京:人民邮电出版社,2011。 [11] 张粤,倪伟。DSISB20 在分布式测温系统中的应用.淮阴工学报.2010

[12] 藏荣,游风荷,周景霞.由单片机和多片DS1820 组成的多点电温度测控系2011

附录一 程序代码

//****************************************************************** // 名称:用数码管与DS18B20设计温度报警器

//****************************************************************** // 说明:本例将报警温度设为高:70℃,低:-20℃,当DS18B20感知到温度达到此 临界值时相应的LED闪烁,同时系统发出报警声。

//****************************************************************** #include #include #define uchar unsigned char #define uint unsigned int

Sbit DQ =P3^6 Sbit BEEP =P3^7 ; Sbit HI_LED =P1^4; Sbit LO_LED = P1^5;

//共阴数码管段码及空白显示 Uchar code DSY_CODE[] =

{ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F.0x00}; //温度小数位对照表

Uchar code df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};

//------------------------------------------------------------------------------ //报警温度上下限,为进行正负数比较,此处注意设为char类型 //取值范围为-128-+127,DS18B20 支持范围为-50-+125

//------------------------------------------------------------------------------

Char Alarm_Temp_HL[2] = {70,-20};

//------------------------------------------------------------------------------ uchar CurrentT = 0; //当前读取的温度整数部分

Uchar Temp_VAlue[] ={0x00,0x00} //从DS18B20读取的温度值 Uchar Display_Digit【】 、{0,0,,0,0,}; //待显示的各温度数位 Bit HI_ALarm =0 ,LO_Alarm = 0; //高低温报警标志 Bit DS18B20_TS_OK = 1; //传感器正常标志 Uint Time0_Count = 0; //定位器延时累加

//------------------------------------------------------------------------------ //延时

//------------------------------------------------------------------------------ Void Delay{uint x} (

While( --x ); )

//****************************************************************** //初始化DS18B20

//****************************************************************** Uchar Init_DS18B20 (

Uchar status; DQ =1; Delay(8); DQ =0; Delay(90); DQ =1; Delay(8); Status = DQ;

Delay(100); DQ = 1;

Return status; //初始化成功时返回 0 )

//****************************************************************** // 读一字节

//****************************************************************** Uchar ReadOneBytel (

Uchar i,dat = o DQ=1;_nop-();

For 9( I = 0 ;i

DQ = 0:;dar 》=1; DQ=1;_

nop_();

If(DQ) dat =0*80;Delay(30);DQ=1; }

Return dat; //写一字节

//--------------------------- Void WwriteOneByte(uchar dat) { uchar I;

for (i=0;i

DQ=0;DQ=dat & 0*01;delay(5);DQ=1;dat>>=1; } }

//------------------------------------- //读取温度值

//------------------------------------ Void Read_ Temperature() {

If (Init_DS18B20()==1) //DS18B20故障 DS18B20_is_ok=0; Else {

WriteOneByte(O*cc); //跳过序列号 WriteOneByte(O*44); //启动温度转换 Init_DS18B2090;

WriteOneByte(O*cc); //跳过序列号 WriteOneByte(O*BB); //读取温度寄存器 Temp_Value[2]=Radonebte(); //温度第8位 Temp_Value[1]=Radonebte(); //温度高8位 Alarm_Temp_HL[0]=ReadOneByte(); / /报警温度TH Alarm_Temp_HL[1]=ReadOneByte(); //报警温度TL Ds18b20_is_OK=1; }

//---------------------------------------------------------------------------------------------------------------------- //设置DS18B20 温度报警值

//---------------------------------------------------------------------------------------------------------------------- Void Set_A1arm_Temp_Value() [

Init_DS18B20( )

writeOneBYte(0*CC); //跳过序列号

writeOneBYte(0*4E); //将设定的温度报警值写入DS18B20 writeOneBYte(Alarm_Temp_HL{0});); // 写TL writeOneBYte(Alarm_Temp_HL{1}); // 写TL writeOneBYte(0*7f); //12位精度 Init _DS18B20( )

writeOneBYte(0*CC); //跳过序列号

writeOneBYte(0*48); //温度报警值存入DS18N20 }

//---------------------------------------------------------------------------------------------------------------------- //在数码管上显示温度

//---------------------------------------------------------------------------------------------------------------------- Void Display_Temperature( ) {

Uchar i;

Uchar t = 150; //延时值

Uchar ng =, np =0; //负数标识及负号显示位置

Char Signed_Current_Temp; //注意类型为char //如果为负数则取反加1,并设置负号标识及负号显示位置 If { (Temp_Value【1】 & 0xF8) == 0xF8) {

Temp_Value【1】 = ~Temp_Value【1】; Temp_Value【0】 = ~Temp_Value【0】 + 1;

If (Temp_Value【0】 == 0x00) Temp_Value【1】++;

Ng = 1;np =0xFD //默认负号显示在左边第2位 }

//查表得到温度小数部分

Display_Digit【0】 = df_Table{ Temp_Value[0] & 0x0F }; //获取温度整数部分(无符号)

CurrentT = { (Temp_Value[0] & 0xf0)>>) 丨 ((Temp_Value[1] & 0x07)

//高低温报警标志设置 (与定义为char类型的Alarm_Temp_HIi 比较,这样可区分正负比较) HI_ALarm = SIgned_Current_Temp >=ALarm_Temp_HL[0] ? 1:0; LO_Alarm =Signed_Current_Temp

If(DISplay_Digit[3] == 0) //高位为0则不显示 {

Display_Digit[3] = 10;

Np = 0xFB //调整负号位置 If(Display_Digit[2] == 0? (

Display_Digit[2] = 10;

Np = 0xF7;

) //调整负号位置 }

//刷新显示若干时间 For (i = 0;i

P0 =0X39; P2 = 0X7F; Delay(t) ;P2 = 0XFF; //显示C P0 = 0X63;P2 = 0XBF; Delay(t); P2 = 0xFF; //显示° P0 = DSY_CODE[Display_Digit[0]; //小数位 P2 = 0xDF; Delay(t); P2=0xFF

P0 =(DSY_code{Display_Digit[1]) 丨 0x80; //个位及小数点 P2 = 0xEF; Delay(t); P2 = 0xFF;

P0 = DSY_CODE{Display_DIgit[2]}; //十位 P2 = 0xF7; Delay(t); P2 = 0xFF

P0 = DSY_CODE{Display_Digit[3]}; //百位 P2 = 0xFB; Delay(t);P2 = 0xFF; If (ng) //如果为负则在调整后的位置显示 (

P0 = 0x40; P2 = np; Delay(t); P2 = 0XFF; ) } }

//--------------------------------------------------------------------------------------------------------------------- //定时器中断,控制警报声音

//--------------------------------------------------------------------------------------------------------------------- Void T0_INT () interrupt 1 {

TH0 = -1000 / 256 TL0 = -1000 256; BEEP = 1BEEF;

If ( ** Time()_Count == 400) {

Time()_Count = 0;

If (HT_A1arm) HI_LED = HI_LED; else HI_LED = 1; If (HT_A1arm) LO_LED = HI_LED; else HI_LED = 1; }

//-------------------------------------------------------------------------------------------------------- //

主程序

//----------------------------------------------------------------------------------------------------------- Woid main (void) {

TE = 0*82; TMOD = 0*01;

TH0 = -1000 / 256; TH0 = -1000 % 256; TR0 = 0; HI_LED = 1; L0_LED = 1;

Set_Alarm_Temp_Value( ); Read_Temperature( );

Delay(50000); Delay(50000); While(1) {

Read_Temperature( ); If ( DS18N20_IS_OK )

If (HI_Alarm ==1 || LO_Alarm ==1) TR0= 1; Else TR0 = 0;

Display_Temperature( ); } Else {

P0 = p2 0*00; }

附录二 元器件清单

毕业设计(论文)

学 生 姓 名: 专 业: 院 系: 设计(论文)题目: 指 导 教 师:

学 号: 应用电子技术 电子工程学院 基于AT89S51温度报警器

2013 年 6月 3日

摘要

随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。

关键词:单片机 温度计 DS18B20 AT89C51

目录

前 言 ......................................................................... 2 1. 总体设计方案 .............................................................. 3 1.1 计设要求 ................................................................. 3 1.2 数字温度计设计方案论证 ................................................... 3 1.3 总体设计框图 ............................................................ 3 2.系统组成及工作原理 ......................................................... 4 2.1 DS18B20温度传感器与单片机的接口电路 ...................................... 4 2.2 7段LED数码管电路及原理 .................................................. 8 2.3 系统整体硬件电路 ......................................................... 9 3.软件部分 .................................................................. 11 3.1主程序 .................................................................... 12 3.2读出温度子程序 ............................................................ 13 3.3温度转换命令子程序 ........................................................ 13 3.4 计算温度子程序 ........................................................... 14 3.5显示数据刷新新子程序 ...................................................... 15 3.6 PROTEUS软件和KEIL软件联合仿真建立 ....................................... 15 4.实验、调试及测试结果分析 .................................................. 16 4.1 硬件调试 ................................................................. 16 5.总结与体会 ................................................................ 17 参 考 文 献 .................................................................. 18 附录一 程序代码 ............................................................ 19 附录二 元器件清单 .......................................................... 28

前 言

随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。

目前,甲型H1N1流感入境,为了把好关,需对流动人口进行人体体温测量。由于温度传感器DS18B20具有独特的单线接口仅需要一个端口引脚进行通信,可实现多点组网功能,零待机功耗,电压范围仅为3.0~5.5V而且具有读数方便,测温范围广,测温准确的特点,最主要的是用户可定义报警设置,报警搜索命令识别并标志超过程序限定温度(温度报警条件),那么只要检测到温度超过设定的正常人体体温就会发出报警,这样就能更有效的防止流感的扩散。出于对此问题的探索,我们通过上网查阅及相关资料的收集,做了本设计。

本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,该设计控制器使用单片机AT89C51,测温传感器使用DS18B20,用4位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。

1. 总体设计方案

1.1 计设要求

(1)基本范围低于-20℃或高于70℃ (2)精度误差小于0.5℃ (3)LED数码直读显示

(4)可以任意设定温度的上下限报警功能 1.2 数字温度计设计方案论证

方案一

由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。 方案二

进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。 1.3 总体设计框图

温度计电路设计总体设计方框图如图1所示,控制器采用单片机STC89S52,温度传感器采用DS18B20,用4位LED数码管以串口传送数据实现温度显示。

图1.1 总体设计方框图

2.系统组成及工作原理

2.1 DS18B20温度传感器与单片机的接口电路

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:

●独特的单线接口仅需要一个端口引脚进行通信;

●多个DS18B20可以并联在惟一的三线上,实现多点组网功能; ●无须外部器件;

●可通过数据线供电,电压范围为3.0~5.5V; ●零待机功耗;

●温度以9或12位数字; ●用户可定义报警设置;

●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;

●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2.1所示。

图2.1 DS18B20内部结构

64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限

TO-92封装的DS18B20的引脚排列见下图2.2,其引脚功能描述见下:

1.GND地信号

2.DQ

数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。 3.VDD

可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。

图2.2 18B20管脚图

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图3所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图2.3所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。

.

.

TMR1R01

.

1111

.

图2.3 DS18B20字节定义

.

表2.1

.

.

分辨率/位温度最大转向时间/ms

93.75187.5375750

.

由表2.1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。

高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。

当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。

当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2.2是一部分温度值对应的二进制温度数据。

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。

DS18B20的测温原理,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。

表2.2 一部分温度对应值表

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图2.4 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写

存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。

.

.

.

.

图2.4 DS18B20与单片机的接口电路

2.2 7段LED数码管电路及原理

7段LED数码管是利用7个LED(发光二极管)外加一个小数点的LED组合而成的显示

设备,可以显示0~9等10个数字和小数点,使用非常广泛。

这类数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图2.5所示。图中的8个LED分别与上面那个图中的A~DP各段相对应,通过控制各个LED的亮灭来显示数字。

图2.5

还有一种比较常用的是四位数码管,内部的4个数码管共用a~dp这8根数据线,为人们的使用提供了方便,因为里面有4个数码管,所以它有4个公共端,加上a~dp,共有12个引脚,下面便是一个共阴的四位数码管的内部结构图(共阳的与之相反)。引脚排列依然是从左下角的那个脚(1脚)开始,以逆时针方向依次为1~12脚,下图中的数字与之一一对应。

2.3 系统整体硬件电路

温度计电路设计原理图如图2.6所示,控制器使用单片机STC89C52,温度传感器使用DS18B20,用8位共阳LED数码管以动态扫描法实现温度显示。

图2.6数字温度计电路原理图

3.软件部分

Keil 简介

Keil 是由美国keil software 公司出品的单片机开发工具,它是目前最流行的单片机开发工

具之一,该软甲平台主要包括:C51交叉编译器、A51宏汇编器、BL51连接/重定位器、LIB51库管理器、OH51 Intel HEX 格式文件转换器、RTX-51 实时操作系统以单片机软件仿真Dscope51,它将项目管理、源代码编译、程序调试等集成带一个功能强大的Windows 32平台中,支持51汇编、PLM和C语言的混合编程,功能强大、界面友好、易学易用。 Proteus简介

Proteus软件是来自英国Labcenter electronics 公司的EDA工具软件,是一个电子设计的教学平台、实验平台和创新平台,涵盖了电工电子实验室、电子技术实验室、单片机应用实验室等的全部功能。它是一种组合了高级原理布图、混合模式SPICE仿真、PCB设计以及自动布线进行完整的电子设计的软件。采用Proteus仿真软件进行虚拟单片机实验,可以仿真单片机及其外围器件电路,可采用仿真51系列、AVR、PIC等常用的MCU及其外围电路,具有比较明显的优势,如涉及到的实验实习内容全面、硬件投入少、学生可以自行实验、实验过程中损耗小、与工程实践最为接近等。它提供了30多个元件库,数千种元件,涉及到数字和模拟、交流和直流等,并且有丰富的仪表资源。 系统程序的设计

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。

3.1主程序

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

图3.1 主程序流程图

3.2读出温度子程序

读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图3.2示

图3.2读温度流程图

3.3温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图3.3所示。

图3.3 温度转换流程图

3.4 计算温度子程序

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

图3.4 计算温度流程图

3.5显示数据刷新新子程序

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

图3.5 显示数据刷新流程图

3.6 Proteus软件和Keil软件联合仿真建立

整个软件通过C语言编程,先在Kile C51集成开发环境下将编好的程序进行编译、调试,调试通过后会生成数码管.HEX文件,运行Proteus如图3-6模拟仿真软件,打开已绘制好的仿真电路原理图,选中单片机AT89C51,左键点击AT889C51,出现对应的对话框如图3-7在Program File 中找到已编译好的“数码管.HEX”文件,然后点击OK就可以仿真了。

图3-7

4.实验、调试及测试结果分析

4.1 硬件调试

检查印制板及焊接的质量情况,在检查无误后可通电检查LED显示器。若亮度不理想,可以调整P0口的电阻大小,一般情况取200欧电阻即可 4.2软件调试

在KeilC51编译下进行,源程序编译及仿真调试应分段或以子程序为单位逐个进行,最后结合硬件实时调试

通过以上检查后,将电路通电查看是否按要正常工作,实验最终结果显示实验成功。

5.总结与体会

在本次毕业设计的过程中,发现很多的问题,虽然以前还做过类似这样的课程设计,但

是这次毕业设计,从一无所有到最终产品的完成真的是一个很艰难的过程。我们不仅要选好材料,还要学着把这些材料合理的组织起来。所以我们要学会如何寻找和搜索自己需要的电路图。而且还要知道各个部位的作用。每个环节都不是一件简单的事。通过这次设计,也学到了许多,了解了传感器能够把自然的各种非电量转换为电信号的物理思想,并且可将报警装置应用到与自己专业相关的行业中去。有好多东西只有我们去尝试做了,才能真正的掌握,只学习理论有些东西还是很难理解的,更谈不上掌握。因此要理论与实践并重。

从这次的毕业论文设计中,我们真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,实践事检验真理的唯一标准。我们电子专业的学习更是如此,不仅要有丰富的理论知识,还要有很强的动手能力,只有理论与实践并重,我们的专业水平才能提高,这就是我们在这次毕业设计中的最大收获。

最后要感谢王晓君王老师及各位老师们在毕业设计过程中对我们毕业设计的关心和支持!

其次要向同班同学表示感谢,在我们遇到困难的时候,他们能够帮助我,俗话说,三个臭皮匠顶个诸葛亮,在大家你一点我一点的意见帮助下,我们才能顺利的完成这次设计,谢谢同窗好友们!

参 考 文 献

[1] 楼然苗,李光飞 编著 《单片机课程设计指导》 北京航空航天大学出版社 2011年第一版

[2] 张俊谟编著 单片机中级教程——原理与应用 北京航空航天大学出版社 2011年第二版

[3] 李钢,赵彦峰.1-Wire 总线数字温度传感器DS18B20 原理及应用.长安大学信息工程

学院 , 2010

[4] 刘建亭,毛善坤.DS18B20 工作原理及基于C 语言的接口设计.河南科技大

学机电工程学院 2010

[5] 陈跃东.DS18B20 集成温度传感器原理及其应用.安徽工程科技学院 2011 [6] 顾振宇 刘鲁源 杜振辉.DS18B20 接口的C 语言程序设计.天津大学 2011 [7] 周月霞 孙传友.DSl8B20 硬件连接及软件编程.传感器世界杂志 2011 [8] 魏英智. DSl8B20 在温度控制中的应用.黑龙江科技学院

[9] 张培仁.MCS-51 单片机原理与应用.北京:清华大学出版社,2011.

[10] 赵亮,侯国锐.单片机C 语言编程与实例.北京:人民邮电出版社,2011。 [11] 张粤,倪伟。DSISB20 在分布式测温系统中的应用.淮阴工学报.2010

[12] 藏荣,游风荷,周景霞.由单片机和多片DS1820 组成的多点电温度测控系2011

附录一 程序代码

//****************************************************************** // 名称:用数码管与DS18B20设计温度报警器

//****************************************************************** // 说明:本例将报警温度设为高:70℃,低:-20℃,当DS18B20感知到温度达到此 临界值时相应的LED闪烁,同时系统发出报警声。

//****************************************************************** #include #include #define uchar unsigned char #define uint unsigned int

Sbit DQ =P3^6 Sbit BEEP =P3^7 ; Sbit HI_LED =P1^4; Sbit LO_LED = P1^5;

//共阴数码管段码及空白显示 Uchar code DSY_CODE[] =

{ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F.0x00}; //温度小数位对照表

Uchar code df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};

//------------------------------------------------------------------------------ //报警温度上下限,为进行正负数比较,此处注意设为char类型 //取值范围为-128-+127,DS18B20 支持范围为-50-+125

//------------------------------------------------------------------------------

Char Alarm_Temp_HL[2] = {70,-20};

//------------------------------------------------------------------------------ uchar CurrentT = 0; //当前读取的温度整数部分

Uchar Temp_VAlue[] ={0x00,0x00} //从DS18B20读取的温度值 Uchar Display_Digit【】 、{0,0,,0,0,}; //待显示的各温度数位 Bit HI_ALarm =0 ,LO_Alarm = 0; //高低温报警标志 Bit DS18B20_TS_OK = 1; //传感器正常标志 Uint Time0_Count = 0; //定位器延时累加

//------------------------------------------------------------------------------ //延时

//------------------------------------------------------------------------------ Void Delay{uint x} (

While( --x ); )

//****************************************************************** //初始化DS18B20

//****************************************************************** Uchar Init_DS18B20 (

Uchar status; DQ =1; Delay(8); DQ =0; Delay(90); DQ =1; Delay(8); Status = DQ;

Delay(100); DQ = 1;

Return status; //初始化成功时返回 0 )

//****************************************************************** // 读一字节

//****************************************************************** Uchar ReadOneBytel (

Uchar i,dat = o DQ=1;_nop-();

For 9( I = 0 ;i

DQ = 0:;dar 》=1; DQ=1;_

nop_();

If(DQ) dat =0*80;Delay(30);DQ=1; }

Return dat; //写一字节

//--------------------------- Void WwriteOneByte(uchar dat) { uchar I;

for (i=0;i

DQ=0;DQ=dat & 0*01;delay(5);DQ=1;dat>>=1; } }

//------------------------------------- //读取温度值

//------------------------------------ Void Read_ Temperature() {

If (Init_DS18B20()==1) //DS18B20故障 DS18B20_is_ok=0; Else {

WriteOneByte(O*cc); //跳过序列号 WriteOneByte(O*44); //启动温度转换 Init_DS18B2090;

WriteOneByte(O*cc); //跳过序列号 WriteOneByte(O*BB); //读取温度寄存器 Temp_Value[2]=Radonebte(); //温度第8位 Temp_Value[1]=Radonebte(); //温度高8位 Alarm_Temp_HL[0]=ReadOneByte(); / /报警温度TH Alarm_Temp_HL[1]=ReadOneByte(); //报警温度TL Ds18b20_is_OK=1; }

//---------------------------------------------------------------------------------------------------------------------- //设置DS18B20 温度报警值

//---------------------------------------------------------------------------------------------------------------------- Void Set_A1arm_Temp_Value() [

Init_DS18B20( )

writeOneBYte(0*CC); //跳过序列号

writeOneBYte(0*4E); //将设定的温度报警值写入DS18B20 writeOneBYte(Alarm_Temp_HL{0});); // 写TL writeOneBYte(Alarm_Temp_HL{1}); // 写TL writeOneBYte(0*7f); //12位精度 Init _DS18B20( )

writeOneBYte(0*CC); //跳过序列号

writeOneBYte(0*48); //温度报警值存入DS18N20 }

//---------------------------------------------------------------------------------------------------------------------- //在数码管上显示温度

//---------------------------------------------------------------------------------------------------------------------- Void Display_Temperature( ) {

Uchar i;

Uchar t = 150; //延时值

Uchar ng =, np =0; //负数标识及负号显示位置

Char Signed_Current_Temp; //注意类型为char //如果为负数则取反加1,并设置负号标识及负号显示位置 If { (Temp_Value【1】 & 0xF8) == 0xF8) {

Temp_Value【1】 = ~Temp_Value【1】; Temp_Value【0】 = ~Temp_Value【0】 + 1;

If (Temp_Value【0】 == 0x00) Temp_Value【1】++;

Ng = 1;np =0xFD //默认负号显示在左边第2位 }

//查表得到温度小数部分

Display_Digit【0】 = df_Table{ Temp_Value[0] & 0x0F }; //获取温度整数部分(无符号)

CurrentT = { (Temp_Value[0] & 0xf0)>>) 丨 ((Temp_Value[1] & 0x07)

//高低温报警标志设置 (与定义为char类型的Alarm_Temp_HIi 比较,这样可区分正负比较) HI_ALarm = SIgned_Current_Temp >=ALarm_Temp_HL[0] ? 1:0; LO_Alarm =Signed_Current_Temp

If(DISplay_Digit[3] == 0) //高位为0则不显示 {

Display_Digit[3] = 10;

Np = 0xFB //调整负号位置 If(Display_Digit[2] == 0? (

Display_Digit[2] = 10;

Np = 0xF7;

) //调整负号位置 }

//刷新显示若干时间 For (i = 0;i

P0 =0X39; P2 = 0X7F; Delay(t) ;P2 = 0XFF; //显示C P0 = 0X63;P2 = 0XBF; Delay(t); P2 = 0xFF; //显示° P0 = DSY_CODE[Display_Digit[0]; //小数位 P2 = 0xDF; Delay(t); P2=0xFF

P0 =(DSY_code{Display_Digit[1]) 丨 0x80; //个位及小数点 P2 = 0xEF; Delay(t); P2 = 0xFF;

P0 = DSY_CODE{Display_DIgit[2]}; //十位 P2 = 0xF7; Delay(t); P2 = 0xFF

P0 = DSY_CODE{Display_Digit[3]}; //百位 P2 = 0xFB; Delay(t);P2 = 0xFF; If (ng) //如果为负则在调整后的位置显示 (

P0 = 0x40; P2 = np; Delay(t); P2 = 0XFF; ) } }

//--------------------------------------------------------------------------------------------------------------------- //定时器中断,控制警报声音

//--------------------------------------------------------------------------------------------------------------------- Void T0_INT () interrupt 1 {

TH0 = -1000 / 256 TL0 = -1000 256; BEEP = 1BEEF;

If ( ** Time()_Count == 400) {

Time()_Count = 0;

If (HT_A1arm) HI_LED = HI_LED; else HI_LED = 1; If (HT_A1arm) LO_LED = HI_LED; else HI_LED = 1; }

//-------------------------------------------------------------------------------------------------------- //

主程序

//----------------------------------------------------------------------------------------------------------- Woid main (void) {

TE = 0*82; TMOD = 0*01;

TH0 = -1000 / 256; TH0 = -1000 % 256; TR0 = 0; HI_LED = 1; L0_LED = 1;

Set_Alarm_Temp_Value( ); Read_Temperature( );

Delay(50000); Delay(50000); While(1) {

Read_Temperature( ); If ( DS18N20_IS_OK )

If (HI_Alarm ==1 || LO_Alarm ==1) TR0= 1; Else TR0 = 0;

Display_Temperature( ); } Else {

P0 = p2 0*00; }

附录二 元器件清单


相关内容

  • 电气自动化设计论文题目大全
  • 机电一体化 毕 业 设 计 论 文 题 目 第1-100个电气自动化毕业设计论文题目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数 ...

  • 电气自动化毕业设计论文题目
  • 电 气 自 动 化 毕 业 设 计 论 文 题 目 第1-100个电气自动化毕业设计论文题目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机 ...

  • 自动化毕业设计论文题目
  • 自 动 化 毕 业 设 计 论 文 题 目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数字气压计的设计与实现 8. 基于MSC12 ...

  • 单片机毕业设计题目
  • 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数字气压计的设计与实现 8. 基于MSC1211的温度智能温度传感器 9. 机器视觉系统 ...

  • PLC毕业设计论文题目
  • P L C 第1-100个PLC毕业设计论文题目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数字气压计的设计与实现 8. 基于MS ...

  • 通信工程毕业设计题目精选
  • 不管怎样,生活还是要继续向前走去.有的时候伤害和失败不见得是一件坏事,它会让你变得更好,孤单和失落亦是如此.每件事到最后一定会变成一件好事,只要你能够走到最后. 通信工程毕业设计题目精选 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激 ...

  • AT89C51单片机水温控制系统
  • 张鹏:基于AT89C51单片机的水温控制系统设计 正文第 1 页 共 25 页 1 引 言 1.1 单片机 1.1.1 单片机简介 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU 随机存储器RAM .只读存储器ROM .多种I/O口和中断系统.定时器/计时 ...

  • 单片机题目毕业设计
  • mcu002 ARM硬件电路板设计之外围接口电路研究mcu003 CDMA通信系统中的接入信道部分进行仿真与分析[doc格式+45页+毕业论文1.6万] mcu004 CDMA通信系统中的接入信道部分进行仿真与分析[论文+45页+1.7万+doc] mcu005 CDMA系统的研究与MATLAB仿真 ...

  • 基于单片机的智能温度检测器设计
  • 目录 第1章 绪论 .......................................................................................................................................... - ...

  • 基于AT89C51单片机的水位控制系统的课程设计
  • 基于单片机的水位控制系统设计 目录 1 概述 . .............................................................................................................. 3 2 设计的基本任务和要求 ...