温度报警系统的设计.docx

上传人:b****4 文档编号:5420135 上传时间:2022-12-16 格式:DOCX 页数:12 大小:207.85KB
下载 相关 举报
温度报警系统的设计.docx_第1页
第1页 / 共12页
温度报警系统的设计.docx_第2页
第2页 / 共12页
温度报警系统的设计.docx_第3页
第3页 / 共12页
温度报警系统的设计.docx_第4页
第4页 / 共12页
温度报警系统的设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

温度报警系统的设计.docx

《温度报警系统的设计.docx》由会员分享,可在线阅读,更多相关《温度报警系统的设计.docx(12页珍藏版)》请在冰豆网上搜索。

温度报警系统的设计.docx

温度报警系统的设计

温度报警系统的设计

1.设计思路

本设计是一种基于STC89C52的温度检测及报警系统。

该系统将单总线温度传感器DS18B20并接在控制器的一个端口上,对传感器温度进行采集,将采集到的温度值实时显示同时与设定值进行比较,当超出设定的上限温度时,通过蜂鸣器报警,并根据要求打开继电器或电风扇。

2.方案设计

采用技术成熟、操作简单、精确度高的温度传感器,在此,可以选用数字温度传感器DS18B20,根据它的特点和测温原理,很容易就能直接读取被测温度值并进行转换,这样就可以满足设计要求。

码管以串口并行输出方式传送数据实现温度显示。

图1总体设计框图

2.1主要器件的选择

STC89C52是低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大STC89C52单片机适合于许多较为复杂控制应用场合。

STC89C52单片机为40引脚双列直插芯片,有四个I/O口P0、P1、P2、P3,每一条I/O线都能独立地作输出或输入。

STC89C52PDIP管脚封装,如图2所示。

图2STC89C52单片机内部引脚封装图

STC89c52包含以下部分:

(1)一个8位微处理器CPU

(2)片内数据存储器RAM和特殊功能寄存器SFR

(3)片内程序存储器ROM

(4)两个定时/计数器T0、T1,可用作定时器,也可用以对外部脉冲进行计数

(5)四个8位可编程的并行I/O端口,每个端口既可作输入,也可作输出

(6)一个串行端口,用于数据的串行通信

(7)中断控制系统

(8)内部时钟电路

2.2DS18B20温度传感器

(1)DS18B20的主要特征:

▲全数字温度转换及输出。

▲先进的单总线数据通信。

▲最高12位分辨率,精度可达土0.5摄氏度。

▲12位分辨率时的最大工作周期为750毫秒。

▲多样封装形式,适应不同硬件系统。

·

(2)DS18B20内部结构:

图3DS18B20内部结构框图

温度传感器DS18B20的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。

高速暂存RAM的结构为8字节的存储器,结构如图2.4所示。

2.3蜂鸣器的报警原理(三极管驱动的蜂鸣器报警电路)

图4蜂鸣器设计原理图

P1.0接三极管输入端。

当P1.0输出低电平时,三极管导通,压电式蜂鸣器两端获得的+5V电压而鸣叫:

当P1.0输出高电平,三极管截止,蜂鸣器停止发音。

3.单元电路设计

3.1单片机电路图设计

本系统使用儿的基于单片机的温度计的设计所以首先设计单片机的最小系统,所谓最小系统是一个真正可用的单片机的最小配置系统。

由于本次设计所是用的stc89c52单片机片内不能集成始终电路所需的晶体振荡器,也没有复位电路,在构成最小系统时必须外接这些部件。

电路设计如下,其中电容为22PF,晶振为12MHZ。

图5单片机原理图

3.2温度传感器DS18B20电路图设计

主要由四部分组成:

64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

DS18B20的管脚排列、各种封装形式如图3.4所示。

其中,DQ为数据输入/输出引脚,也可用作开漏单总线接口引脚,当被用在寄生电源工作方式下,可以向器件提供电源;GND为地信号;VDD为可选择的电源引脚,当工作于寄生电源时,此引脚必须接地。

其电路图6所示。

图6DS18B20温度传感器设计图

3.3蜂鸣器电路图设计

压电式蜂鸣器约10mA的驱动电流,可以使用TTL系列集成电路7406或7407低电平驱动,这里我选用了一个三极管来做驱动。

P1.0接三极管输入端。

当P1.0输出低电平时,三极管导通,压电式蜂鸣器两端获得的+5V电压而鸣叫:

当P1.0输出高电平,三极管截止,蜂鸣器停止发音。

图7蜂鸣器设计原理图

4.软件设计

4.1流程图设计

图8程序设计流程图

4.2程序设计

温度报警系统

端口说明

公共端是P2.0-P2.3,数码管显示用P0口ds18B20是P3.6,蜂鸣器P3.7,set按键是P3.1,减法键是P3.2,加法键是P3.3

DS18B20.C

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

程序名称:

DS18B20温度测量、报警系统

简要说明:

DS18B20温度计,温度测量范围0~99.9摄氏度

可设置上限报警温度、下限报警温度

即高于上限值或者低于下限值时蜂鸣器报警

默认上限报警温度为38℃、默认下限报警温度为5℃

报警值可设置范围:

最低上限报警值等于当前下限报警值

最高下限报警值等于当前上限报警值

将下限报警值调为0时为关闭下限报警功能

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

#include

#include"DS18B20.h"

#defineuintunsignedint

#defineucharunsignedchar//宏定义

#defineSETP3_1//定义调整键

#defineDECP3_2//定义减少键

#defineADDP3_3//定义增加键

#defineBEEPP3_7//定义蜂鸣器

bitshanshuo_st;//闪烁间隔标志

bitbeep_st;//蜂鸣器间隔标志

sbitDIAN=P0^7;//小数点

ucharx=0;//计数器

signedcharm;//温度值全局变量

ucharn;//温度值全局变量

ucharset_st=0;//状态标志

signedcharshangxian=38;//上限报警温度,默认值为38

signedcharxiaxian=5;//下限报警温度,默认值为38

ucharcodeLEDData[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};

/*****延时子程序*****/

voidDelay(uintnum)

{

while(--num);

}

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

voidInitTimer(void)

{

TMOD=0x1;

TH0=0x4c;

TL0=0x00;//50ms(晶振11.0592M)

}

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

voidtimer0(void)interrupt1

{

TH0=0x4c;

TL0=0x00;

x++;

}

/*****外部中断0服务程序*****/

voidint0(void)interrupt0

{

EX0=0;//关外部中断0

if(DEC==0&&set_st==1)

{

shangxian--;

if(shangxian

}

elseif(DEC==0&&set_st==2)

{

xiaxian--;

if(xiaxian<0)xiaxian=0;

}

}

/*****外部中断1服务程序*****/

voidint1(void)interrupt2

{

EX1=0;//关外部中断1

if(ADD==0&&set_st==1)

{

shangxian++;

if(shangxian>99)shangxian=99;

}

elseif(ADD==0&&set_st==2)

{

xiaxian++;

if(xiaxian>shangxian)xiaxian=shangxian;

}

}

/*****读取温度*****/

voidcheck_wendu(void)

{

uinta,b,c;

c=ReadTemperature()-5;//获取温度值并减去DS18B20的温漂误差

a=c/100;//计算得到十位数字

b=c/10-a*10;//计算得到个位数字

m=c/10;//计算得到整数位

n=c-a*100-b*10;//计算得到小数位

if(m<0){m=0;n=0;}//设置温度显示上限

if(m>99){m=99;n=9;}//设置温度显示上限

}

/*****显示开机初始化等待画面*****/

Disp_init()

{

P0=0x40;//显示-

P2=0x08;

Delay(200);

P2=0x04;

Delay(200);

P2=0x02;

Delay(200);

P2=0x01;

Delay(200);

P2=0x00;//关闭显示

}

/*****显示温度子程序*****/

Disp_Temperature()//显示温度

{

P0=0x39;//显示C

P2=0x08;

Delay(300);

P0=LEDData[n];//显示个位

P2=0x04;

Delay(300);

P0=LEDData[m%10];//显示十位

DIAN=1;//显示小数点

P2=0x02;

Delay(300);

P2=0x00;//关闭显示

}

Disp_alarm(ucharbaojing)/*****显示报警温度子程序*****/

{

P0=0x39;//显示C

P2=0x08;

Delay(200);

P0=LEDData[baojing%10];//显示十位

P2=0x04;

Delay(200);

if(set_st==1)P0=0x76;

elseif(set_st==2)P0=0x38;//上限H、下限L标示

P2=0x01;

Delay(200);

P2=0x00;//关闭显示

}

voidAlarm()/*****报警子程序*****/

{

if(x>=10){beep_st=~beep_st;x=0;}

if((m>=shangxian&&beep_st==1)||(m

elseBEEP=1;

}

voidmain(void)/*****主函数*****/

{

uintz;

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

EA=1;//全局中断开关

TR0=1;

ET0=1;//开启定时器0

IT0=1;

IT1=1;

check_wendu();

check_wendu();

for(z=0;z<300;z++)

{

Disp_init();

}

while

(1)

{

if(SET==0)

{

Delay(2000);

do{}while(SET==0);

set_st++;x=0;shanshuo_st=1;

if(set_st>2)set_st=0;

}

if(set_st==0)

{

EX0=0;//关闭外部中断0

EX1=0;//关闭外部中断1

check_wendu();

Disp_Temperature();

Alarm();//报警检测

}

elseif(set_st==1)

{

BEEP=1;//关闭蜂鸣器

EX0=1;//开启外部中断0

EX1=1;//开启外部中断1

if(x>=10){shanshuo_st=~shanshuo_st;x=0;}

if(shanshuo_st){Disp_alarm(shangxian);}

}

elseif(set_st==2)

{

BEEP=1;//关闭蜂鸣器

EX0=1;//开启外部中断0

EX1=1;//开启外部中断1

if(x>=10){shanshuo_st=~shanshuo_st;x=0;}

if(shanshuo_st){Disp_alarm(xiaxian);}

}

}

}

/*****END*****/

5.小结

89S52芯片控制温度传感器DS18B20,再辅之以部分外围电路实现对环境温度的测控,性能稳定,精度教高,而且扩展性能很强大。

由于DS18B20的测量精度只有±0.5度,往往很多场合需要更加精确的温度,在所测温度精度不变的基础上必须对数据进行校正。

由于DS18B20是基于带隙结构的数字式温度传感器,PN结增量电压正比于IC绝对温度(PTAT),它的测温精度较高,但存在着一定的误差.不过,其误差在时间和外部环境变化的条件下,保持相当高的稳定性。

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

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

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

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