温度检测报警系统.docx
《温度检测报警系统.docx》由会员分享,可在线阅读,更多相关《温度检测报警系统.docx(20页珍藏版)》请在冰豆网上搜索。
![温度检测报警系统.docx](https://file1.bdocx.com/fileroot1/2022-11/17/998380da-ddd8-43bc-a17c-84d09881ed92/998380da-ddd8-43bc-a17c-84d09881ed921.gif)
温度检测报警系统
一、选题背景及研究意义
二、总体设计
2.1控制部分
2.2测量部分
2.3显示部分
2.4报警部分
三、硬件设计
四、软件设计
五、总结与展望
一、选题背景及研究意义
温度是一种最基本的环境参数,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。
温度是一个十分重要的物理量,对它的测量与控制有十分重要的意义。
随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度:
如大气及空调房中温度的高低,直接影响着人们的身体健康;粮仓温度的检测,防止粮食发霉,最大限度地保持粮食原有新鲜品质,达到粮食保质保鲜的目的;工业易燃品的存放。
测温技术在生产过程中,在产品质量控制和监测以及节约能源等方面发挥了着重要作用。
本实验设计实现了工业测温基本功能,同时,在设计实验过程中,运用到单片机、模电、数电、传感器和C++程序设计等知识,这既能加强我们的理论知识与实践的结合,也能够提高我们应用交叉学科知识进行综合设计的能力。
二、总体设计
总体设计框图:
2.1控制部分
控制部分是采用单片机STC89C52。
2.1.1STC89C52简介
STC89C52是一种带8K字节闪烁可编程可檫除只读存储器的低电压,高性能COMOS8的微处理器,俗称单片机。
该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
单片机总控制电路如下图4—1:
2.1.2复位操作
复位操作有上电自动复位相按键手动复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的,其电路如图4-2(a)所示。
这佯,只要电源Vcc的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就成了系统的复位初始化。
按键手动复位有电平方式和脉冲方式两种。
其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图4-2(b)所示;而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的,
其电路如图4-2(c)所示:
(a)上电复位(b)按键电平复位(c)按键脉冲复位
图4-2复位电路
上述电路图中的电阻、电容参数适用于6MHz晶振,能保证复位信号高电平持续时间大于2个机器周期。
本系统的复位电路采用图4-2(b)上电复位方式。
2.1.3STC89C52具体介绍如下:
①主电源引脚(2根)
VCC(Pin40):
电源输入,接+5V电源
GND(Pin20):
接地线
②外接晶振引脚(2根)
XTAL1(Pin19):
片内振荡电路的输入端
XTAL2(Pin20):
片内振荡电路的输出端
③控制引脚(4根)
RST/VPP(Pin9):
复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):
地址锁存允许信号
PSEN(Pin29):
外部存储器读选通信号
EA/VPP(Pin31):
程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
④可编程输入/输出引脚(32根)
STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
PO口(Pin39~Pin32):
8位双向I/O口线,名称为P0.0~P0.7
P1口(Pin1~Pin8):
8位准双向I/O口线,名称为P1.0~P1.7
P2口(Pin21~Pin28):
8位准双向I/O口线,名称为P2.0~P2.7
P3口(Pin10~Pin17):
8位准双向I/O口线,名称为P3.0~P3.7
2.1.4STC89C52主要功能,如下表所示。
STC89C52主要功能
主要功能特性
兼容MCS51指令系统
8K可反复擦写FlashROM
32个双向I/O口
256x8bit内部RAM
3个16位可编程定时/计数器中断
时钟频率0-24MHz
2个串行中断
可编程UART串行通道
2个外部中断源
共6个中断源
2个读写中断口线
3级加密位
低功耗空闲和掉电模式
软件设置睡眠和唤醒功能
2.2测量部分
测量部分我们采用美国DALLAS公司生产的DS18B20温度传感器。
2.2.1DS18B20简介
DS18B20数字温度传感器,该产品采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
2.2.2封装及接线说明:
DS18B20芯片封装结构:
特点:
独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0V至5.5V无需备用电源测量温度范围为-55°C至+125℃。
华氏相当于是-67°F到257华氏度-10°C至+85°C范围内精度为±0.5°C
2.2.3DS18B20控制方法
DS18B20有六条控制命令:
温度转换44H:
启动DS18B20进行温度转换
读暂存器BEH:
读暂存器9个字节内容
写暂存器4EH:
将数据写入暂存器的TH、TL字节
复制暂存器48H:
把暂存器的TH、TL字节写到E2RAM中
读电源供电方式B4H:
启动DS18B20发送电源供电方式的信号给主CPU
2.2.4DS18B20的初始化
2.2.5DS18B20的写操作
2.2.6DS18B20的读操作
2.3显示部分
显示部分是用LCD1602液晶显示
2.3.1LCD1602引脚说明
2.4报警部分
见下面报警流程图模块及程序。
三、硬件设计
电路原理图如下:
DS18B20与单片机之间用单总线传输;DS18B20的数据口与单片机的P1^7相连;液晶LCD1602的RS、R/W和E分别于单片机的P^4、P2^5、P2^6相连;
四、软件设计
系统软件程序基于Keiluvsion3开发平台,采用C51语言编写。
本程序采用模块化程序方法,主要分为以下三个模块:
◆LCD初始化显示模块
◆DS18B20数据采集模块
◆温度报警上下限设置模块
程序流程图:
源程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P1^7;//ds18b20与单片机连接口
sbitRS=P2^4;
sbitRW=P2^5;
sbitEN=P2^6;
sbitK1=P2^0;
sbitK2=P2^1;
sbitK3=P2^2;
sbitLED=P1^0;
sbitbeep=P1^5;
unsignedcharcodestr1[]={"temperatureis:
"};
unsignedcharcodestr2[]={""};
ucharcodeLCD10[10]={"0123456789"};
uchardatadisdata[16]={0x00,0x00,0x00,0x2E,0x00,0xDF,0x20,0x48,0x3D,0x00,0x00,0x20,0x4C,0x3D,0x00,0x00};
uinttvalue;//温度值
uchartflag;//温度正负标志
ucharflat,upnum,downnum,temp;
/**********************LCD显示模块***********************/
voiddelay1ms(unsignedintms)//延时1毫秒
{unsignedinti,j;
for(i=0;ifor(j=0;j<100;j++);
}
voiddelay1(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwr_com(unsignedcharcom)//写指令//
{delay1ms
(1);
RS=0;
RW=0;
EN=0;
P0=com;/*-----------LCD数据传送口----------*/
delay1ms
(1);
EN=1;
delay1ms
(1);
EN=0;
}
voidwr_dat(unsignedchardat)//写数据//
{delay1ms
(1);;
RS=1;
RW=0;
EN=0;
P0=dat;/*-----------LCD数据传送口----------*/
delay1ms
(1);
EN=1;
delay1ms
(1);
EN=0;
}
voidlcd_init()//初始化设置//
{delay1ms(15);
wr_com(0x38);delay1ms(5);
wr_com(0x08);delay1ms(5);
wr_com(0x01);delay1ms(5);
wr_com(0x06);delay1ms(5);
wr_com(0x0c);delay1ms(5);
}
voiddisplay(unsignedchar*p)//显示//
{
while(*p!
='\0')
{
wr_dat(*p);
p++;
delay1ms
(1);
}
}
init_play()//初始化显示
{
lcd_init();
wr_com(0x80);
display(str1);
wr_com(0xC0);
display(str2);
}
/*******************DS18B20测温模块**********************/
voiddelay_18B20(unsignedinti)//延时1微秒
{
while(i--);
}
voidds1820rst()
{unsignedcharx=0;
DQ=1;//DQ复位
delay_18B20(4);//延时
DQ=0;//DQ拉低
delay_18B20(100);//精确延时大于480us
DQ=1;//拉高
delay_18B20(40);
}
uchards1820rd()
{unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(10);
}
return(dat);
}
voidds1820wr(ucharwdata)
{unsignedchari=0;
for(i=8;i>0;i--)
{DQ=0;
DQ=wdata&0x01;
delay_18B20(10);
DQ=1;
wdata>>=1;
}
}
read_temp()
{uchara,b;
ds1820rst();
ds1820wr(0xcc);//
ds1820wr(0x44);//
ds1820rst();
ds1820wr(0xcc);//
ds1820wr(0xb