温度检测报警器单片机课程设计.docx

上传人:b****8 文档编号:9125416 上传时间:2023-02-03 格式:DOCX 页数:22 大小:391.08KB
下载 相关 举报
温度检测报警器单片机课程设计.docx_第1页
第1页 / 共22页
温度检测报警器单片机课程设计.docx_第2页
第2页 / 共22页
温度检测报警器单片机课程设计.docx_第3页
第3页 / 共22页
温度检测报警器单片机课程设计.docx_第4页
第4页 / 共22页
温度检测报警器单片机课程设计.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

温度检测报警器单片机课程设计.docx

《温度检测报警器单片机课程设计.docx》由会员分享,可在线阅读,更多相关《温度检测报警器单片机课程设计.docx(22页珍藏版)》请在冰豆网上搜索。

温度检测报警器单片机课程设计.docx

温度检测报警器单片机课程设计

目录

前言1

1硬件设计与系统总体方案2

1.1系统总体方案2

1.2硬件系统设计2

1.2.1单片机简介2

1.2.2温度传感器工作原理4

1.2.3时钟电路设计6

1.2.4复位电路设计6

2软件模块设计7

2.1主程序7

2.2主程序流程图8

2.3DS18B20软件设计流程图8

2.3.1读温度子程序设计流程图8

2.3.2温度转换命令程序设计9

3系统调试10

3.1硬件系统调试10

3.1.1不加电源检测10

3.1.2静态检测10

3.2软件系统调试10

3.2.1静态调试10

3.2.2动态调试10

4设计总结11

附录12

参考文献19

前言

温度是一个十分重要的物理量,对它的测量与控制有十分重要的意义。

随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度。

在控制领域中,对温度的控制有着举足轻重的作用。

例如陶瓷的烧烤,只有控制住温度的适度,才能制作出一件完美的艺术品,否则只是一件废品;还有如酿酒的过程,也需要对温度进行控制。

可见,在生活的许多方方面面都有着对温度进行感知和控制的需要。

本次设计的目的就是基于AT89C51单片机设计一个温度检测,报警的系统,该系统能实时采集周围的温度信息进行显示,程序内部设定有报警上下限,根据应用环境不同可设定不同的报警上下限。

该系统实现了对温度的自动监测,为设备的正常运行提供了条件,在工业中具有一定的实用价值和广泛的应用前景。

 

1硬件设计与系统总体方案

1.1系统总体方案

本设计的题目为温度监测报警系统,因为要用单片机去完成程序控制以及数据转换,故外围电路设计较简单。

硬件设计可分为:

核心控制CPU、环境温度采集、数码管显示、超限报警灯。

其系统框图如图1.1-1所示。

图1.1-1温度监测报警设计系统框图

基于图1.1-1框图介绍,可了解到温度监测报警设计的各个模块。

每个模块均由一个核心器件,对于该器件的选择在某种程度上决定了设计方案的选择。

由于是利用单片机控制电路,因此在电路中,单片机控制处理器为核心器件。

在本设计中可使用STC89C2051、STC89C51以及凌阳公司生产的16位单片机等。

考虑到各种因素,本设计选用STC89C51单片机作为核心控制CPU。

要设计温度监测便要有温度采集,可以采集温度的途径较多,文中采用达拉斯公司生产的单线数字温度传感器DS18B20,其可使温度信号直接转换成串行数字信号供微处理器处理,且外围电路简单、实现方便。

显示技术是传递视觉信息的技术,由于LED数码管显示器的寿命较长、价格低廉且显示清晰,所以在设计中选择LED显示环境温度。

1.2硬件系统设计

本设计硬件系统主要包括温度传感器、时钟电路、复位电路以及控制核心单片机等几个模块,下面将对所涉及的模块进行逐一介绍。

1.2.1单片机简介

本设计采用STC89C51单片机作为控制核心,STC89C51单片机是采用8051核的ISP在系统可编程芯片,片内含8KB的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及8051引脚结构。

此款单片机是单时钟的兼容8051内核单片机,是高速/低功耗的新一代8051单片机。

其引脚图如图1.2.1-1所示。

图1.2.1-1STC89C51单片机引脚功能图

单片机STC89C52引脚说明:

VCC:

供电电压。

GND:

接地。

P0口:

P0口为一个8位漏极开路双向I/O口,每脚可吸收8TTL门流。

当P1口的管脚第一次写1时,定义为高阻输入。

P0口能够用于外部程序数据存储器,它可以被定义为数据/地址的八位。

在FLASH编程时,P0口作为原码输入口;当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:

P1口是一个P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。

当对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

当作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

此外,P1.0和P1.2分别作为定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。

在Flash编程和校验时,P1口接收低8位地址字节。

P2口:

P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TT逻辑电平。

对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

当作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

在访问外部程序存储器或用16位地址读取外部数据存储器(如执行MOVX@DPTR)时,P2口送出高8位地址。

在这种应用中,P2口使用很强的内部上拉发送1。

在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。

在Flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

P3口:

P3口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。

对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

当作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

P3口也作为AT89S52特殊功能(第二功能)使用。

RST:

复位输入。

在晶振工作时,RST脚持续两个机器周期高电平将使单片机复位。

看门狗计时完成后,RST脚输出96个晶振周期的高电平。

特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。

在DISRTO默认状态下,复位高电平有效。

ALE/PROG:

地址锁存控制信号(ALE)在访问外部程序存储器时,锁存低8位地址的输出脉冲。

在Flash编程时,此引脚(PROG)也用做编程输入脉冲。

PSEN:

外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。

当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。

EA/VPP:

访问外部程序存储器控制信号。

为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。

为了执行内部程序指令,EA应该接VCC。

在Flash编程期间,EA也接收12伏VPP电压。

XTAL1:

振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2:

振荡器反相放大器的输出端。

1.2.2温度传感器工作原理

DS18B20数字温度计提供9-12位摄氏温度测量而且有一个由高低电平触发的可编程的不因电源消失而改变的报警功能。

DS18B20通过一个单线接口发送或接受信息,因此在中央处理器和DS18B20之间仅需一条连接线(加上地线)。

它的测温范围为-55~+125℃,并且在-10~+85℃精度为±5℃。

除此之外,DS18B20能直接从单线通讯线上汲取能量,除去了对外部电源的需求。

每个DS18B20都有一个独特的64位序列号,从而允许多只DS18B20同时连在一根单线总线上;因此,很简单就可以用一个微控制器去控制很多覆盖在一大片区域的DS18B20。

这一特性在HVAC环境控制、探测建筑物、仪器或机器的温度以及过程监测和控制等方面非常有用。

表1.2.2-1详细引脚说明

序号

名称

引脚功能描述

1

VCC

可选择的Vcc引脚。

当工作于寄生电源时,此引脚必须接地。

2

DQ

地信号。

3

GND

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

图1.2.2-1是表示DS18B20的方框图,表1.2.2-1已经给出了引脚说明。

64位只读存储器储存器件的唯一片序列号。

高速暂存器含有两个字节的温度寄存器,这两个寄存器用来存储温度传感器输出的数据。

除此之外,高速暂存器提供一个直接的温度报警值寄存器(TH和TL),和一个字节的的配置寄存器。

配置寄存器允许用户将温度的精度设定为9,10,11或12位。

TH,TL和配置寄存器是非易失性的可擦除程序寄存器(EEPROM),所以存储的数据在器件掉电时不会消失。

 

图1.2.2-1DS18B20方框图

DS18B20的核心功能是它的直接读数字的温度传感器。

温度传感器的精度为用户可编程的9,10,11或12位,分别以0.5℃,0.25℃,0.125℃和0.0625℃增量递增。

在上电状态下默认的精度为12位。

DS18B20启动后保持低功耗等待状态;当需要执行温度测量和AD转换时,总线控制器必须发出[44h]命令。

在那之后,产生的温度数据以两个字节的形式被存储到高速暂存器的温度寄存器中,DS18B20继续保持等待状态。

当DS18B20由外部电源供电时,总线控制器在温度转换指令之后发起“读时序”(见单总线系统节),DS18B20正在温度转换中返回0,转换结束返回1。

如果DS18B20由寄生电源供电,除非在进入温度转换时总线被一个强上拉拉高,否则将不会由返回值。

寄生电源的总线要求在DS18B20供电节详细解释。

1.2.3时钟电路设计

MCS-51内部有一个用于构成震荡器的高增益反向放大器,此放大器的输入端和输出端分别是XTAL1和XTAL2,在XTAL1和XTAL2上外接晶振可构成时钟电路。

时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。

晶振频率的大小决定了单片机系统工作的快慢。

本次设计采用内部方式的外部时钟接法。

为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,电容C1、C2对频率有微调作用,故外接晶振时,C1和C2在本设计中选择30pF,振荡频率取12MHz。

晶振的两个引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。

具体连接图如图1.2.3-1所示:

图1.2.3-1时钟电路原理图

1.2.4复位电路设计

MCS-52单片机通常采用上电自动复位、按钮电平复位、外部脉冲复位、上电+按钮电平复位、程序运行监视复位等方式。

本设计采用上电复位,其原理图如图1.1.4-1所示,上电复位是利用电容充电来实现的,即上电瞬间RST/Vpd端的电位与Vcc相同,随着充电电流的减少,最后被嵌位在0V,采用3.3uF的CR1和10K的R29可以保证加在引脚上的高电平持续2个机器周期,即使单片机有效地复位。

图1.2.4-1复位电路原理图

2软件模块设计

2.1主程序

系统程序主要包括延时子程序、外部中断0服务子程序、外部中断1服务子程序、显示温度子程序、报警子程序、主程序等。

主程序的功能为:

按下开关键,使处于开的状态后,4位LED数码直接读出温度。

若按一下设置键,则可设置温度的上限,蜂鸣器滴滴滴报警,当所测的温度低于所设置的下限,二极管闪烁亮,蜂鸣器滴滴滴报警。

 

2.2主程序流程图

图2.2-1主程序流程图设计

在主程序流程图中,当开关键按下时,DS18B20开始工作,读出其温度值后,进行数据转换,下一步进行判断,是否超过所设定的温度上限和温度下限,若超过,则蜂鸣器发出声音,并在数码管上进行显示;若没有超过,则蜂鸣器不响,并在数码管上进行显示,然后重复上述步骤。

2.3DS18B20软件设计流程图

DS18B20器件要求采用严格的通信协议,以保证数据的完整性。

该协议定义了几种信号类型:

复位脉冲、应答脉冲时隙;写0,写1时隙;读0,读1时隙。

与DS18B20的通信,是通过操作时隙完成单总线上的数据传输。

发送所有的命令和数据时,都是字节的低位在前,高位在后。

2.3.1读温度子程序设计流程图

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

其程序流程图如图2.3.1-1所示。

2.3.1-1读出温度子程序流程图

2.3.2温度转换命令程序设计

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

如图2.3.2-1所示。

图2.3.2-1温度转换命令子程序流程图

3系统调试

3.1硬件系统调试

对板子的安装和调试在整个设计过程中是很重要的一个过程,是把设计转换成实际物体的过程,也是对理论知识的一个实际应用。

对产品进行检测的过程中使用检测仪器有:

万用表、电源、示波器等器材。

其检测步骤有下述几类。

3.1.1不加电源检测

对照设计原理图以及实物,检查线路是否连线正确,包含是否存在误接、虚焊等;用万用表检测焊接是否良好,元器件之间是否存在短路,各元件(三极管、点解电容、发光二极管等)极性是否正确。

3.1.2静态检测

将直流稳压电源准确输出,并连入电路板中,观察是否存在不正常现象,如元器件发烫,空气中产生难闻气味等。

如有上述现象,立即断开电源,检查各线路,各连接点,排除故障;如没有发现异常现象,则用万用表检测各个连接点是否有满足需求的电压,如静态工作点、各个输入输出端、放大电路连接点等。

如与理论电压值相差较大,则检查是否存在元器件损坏等问题。

最终的目的是让整个电路工作在一个合适的状态。

3.2软件系统调试

软件调试是保证设计成果正常运作必不可少的步骤,通常软件调试分为静态调试和动态调试。

3.2.1静态调试

在静态调试中,第一种办法是输出寄存器的内容,在测试过程中出现问题,设法保留现场信息。

把所有寄存器和主存中有关部分的内容打印出来,进行分析。

还有一种方法是为取得关键变量的动态值,在程序中插入打印语句。

这是取得动态信息的简单方法,并可检验在某时间后某个变量是否按预期要求发生了变化。

此方法的缺点是可能输出大梁需要分析的信息,必须修改源程序才能插入打印语句,这可能改变关键的时序关系,引入新的错误。

3.2.2动态调试

通常利用程序语言提供的调试功能或专门的调试工具来分析程序的动态行为。

一般程序语言和工具提供的调试功能有检查主存和寄存器;设置断点,即当执行到特定语句或改变特定变量的值时,程序停止执行,以便分析程序此时的状态。

4设计总结

本温度报警器,通过单片机实时检测温度传感器DS18B20的状态,并将DS18B20得到的数据进行处理。

上电后数码管显示当前的环境温度,当检测到的温度高于设置的报警值的时候,蜂鸣器报警同时报警灯闪烁,温度检测精确到0.1度。

并具有掉电保存功能,数据保存在单片机内部EEPOM中,进入设置界面后如果没有键按下系统会在15秒后自动退出设置界面。

由于采用了4节干电池供电使系统的抗干扰性得到加强。

在软件上,充分利用了STC89C52的系统资源,系统运行流畅。

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

 

附录

附录1:

电路原理图

附录2:

PCB图

附录3:

仿真图

附录4:

实物图

附录5:

程序

#include"config.h"

#include

#include

#defineDQP00

#defineBuzzerP01

#defineLEDP02

unsignedcharTPH;//存放温度值高字节

unsignedcharTPL;//存放温度值低字节

unsignedcharx1,y1,y2,x2,y3,y4;

unsignedcharcodetable1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码

unsignedcharcodetable2[]={0xef,0xdf};//位码

unsignedcharcount_led;

bitfalg=0;

/**********************************************************************

延时X微妙

不同的工作环境,需要调整此函数

此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同

**********************************************************************/

voidDelayXus(unsignedcharn)

{

while(n--)

{

_nop_();

_nop_();

}

}

/**********************************************************************

复位DS18B20,并检测设备是否存在

**********************************************************************/

voidDS18B20_Reset()

{

falg=1;

while(falg)

{

DQ=0;//送出低电平复位信号

DelayXus(240);//延时至少480us

DelayXus(240);

DQ=1;//释放数据线

DelayXus(60);//等待60us

falg=DQ;//检测存在脉冲

DelayXus(240);//等待设备释放数据线

DelayXus(180);

}

}

/**********************************************************************

从DS18B20读1字节数据

**********************************************************************/

unsignedcharDS18B20_ReadByte()

{

unsignedchari;

unsignedchardat=0;

for(i=0;i<8;i++)//8位计数器

{

dat>>=1;

DQ=0;//开始时间片

DelayXus

(1);//延时等待

DQ=1;//准备接收

DelayXus

(1);//接收延时

if(DQ==1)dat|=0x80;//读取数据

DelayXus(60);//接收延时

}

returndat;

}

/**********************************************************************

向DS18B20写1字节数据

**********************************************************************/

voidDS18B20_WriteByte(unsignedchardat)

{

chari;

for(i=0;i<8;i++)//8位计数器

{

DQ=0;//开始时间片

DelayXus

(1);//延时等待

if((dat&0X01)==0x01)//送出数据

{

DQ=1;

}

else

{

DQ=0;

}

DelayXus(60);//等待时间片结束

DQ=1;//恢复数据线

DelayXus

(1);//恢复延时

dat>>=1;

}

}

/*********************************************************************/

voidDs18b20_Convert(void)

{

DS18B20_Reset();//设备复位

DS18B20_WriteByte(0xCC);//跳过ROM命令

DS18B20_WriteByte(0x44);//开始转换命令

while(!

DQ);//等待转换完成

DS18B20_Reset();//设备复位

DS18B20_WriteByte(0xCC);//跳过ROM命令

DS18B20_WriteByte(0xBE);//读暂存存储器命令

TPL=DS18B20_ReadByte();//读温度低字节

TPH=DS18B20_ReadByte();//读温度高字节

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

x1=((TPL&0xf0)>>4)+((TPH&0x07)<<4);

y1=x1/10;//温度十位

y2=x1%10;//温度个位

}

/*********************************************************************/

voidTimer0_ISR(void)interrupt1

{

TR0=0;

TH0=0Xf5;

TL0=0X00;

TR0=1;

count_led++;

if(count_led>=3)count_led=1;

{

switch(count_led)

{

case1:

P3=table2[0];

P1=table1[y1];

break;

case2:

P3=table2[1];

P1=table1[y2];

break;

default:

;

}

}

if((x1/10)>=2&&(x1%10)>=5)

{

Buzzer=0;

LED=0;

}

else

{

Buzzer=1;

LED=1;

}

}

/*********************************************************************/

voidmain(void)

{

TMOD=0x01;

TH0=0Xf5;

TL0=0X00;

ET0=1;

TR0=1;

EA=1;

while

(1)

{

Ds18b20_Convert();

}

}

参考文献

[1]吴金华.基于单片机的温度监控报警系统设计[J].电子·电路,2013,26(4):

146-149

[2]丁幼春.基于AT89C51和DS18B20的多点温度监测报警系统[J].农机化研究,2007,

6(5):

121-125

[3]马云峰,陈子夫,李培全.数字温度传感器DS18820的原理与应用[J].电子元器

件应用,2002,2

(1):

23-25.

[4]赵建林.小型温度报警器的设计及实现[J].河南科技:

上半月 2012(17)59-60

[5]戴佳等.51单片机C语言应用程序设计实例精讲[M].北京:

电子工业出版社,2006.

[6]楼然苗.51系列单片机设计实例[M].北京:

北京航空航天大学出版社,2003 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1