目 录
1、绪论 1
1.1课题背景 1
1.2 本课题研究意义 2
2、 系统总体方案设计 3
2.1、传感器部分 3
2.2、主控制部分 4
3、系统硬件设计 6
3.1 STC89C52RC单片机主控模块设计 6
3.2单片机最小系统 9
3.2.1时钟电路 9
3.2.2复位电路 10
3.2.3 STC89C52RC中断技术概述 10
3.3 温度采集模块DS18B20 11
3.4按键模块设计 13
3.5蜂鸣器报警电路 13
3.6 LCD1602液晶显示 14
4、软件设计 16
4.1软件介绍 16
4.2 主程序流程图设计 17
4.3各子程序设计 18
4.3.1按键设置子程序 18
4.3.2 DS18B20温度检测子程序 19
4.3.3 LCD1602液晶显示子程序 20
4.3.3 按键设置子函数 22
5、总结与展望 23
6、 参考文献 24
7、致谢 25
附录一 系统原理图 26
附录二 系统部分源程序 27
2、系统总体方案设计
温度检测系统有着共同的特点:测量点多、环境复杂、布线分散、现场离监控室远等。若采用一般温度传感器采集温度信号,则需要设计信号调理电路、A/D 转换及相应的接口电路,才能把传感器输出的模拟信号转换成数字信号送到计算机去处理。这样,由于各种因素会造成检测系统较大的偏差;又因为检测环境复杂、测量点多、信号传输距离远及各种干扰的影响,会使检测系统的稳定性和可靠性下降。所以温度检测系统的设计的关键在于两部分:温度传感器的选择和主控单元的设计。温度传感器应用范围广泛、使用数量庞大,也高居各类传感器之首。
2.1、传感器部分
方案一:采用热敏电阻,利用其感温效应,可满足40摄氏度至90摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差,对于检测1摄氏度的信号是不适用的。而且在温度测量系统中,采用单片温度传感器,比如AD590,LM35等。但这些芯片输出的都是模拟信号,必须经过A/D转换后才能送给计算机,这样就使得测温装置的结构较复杂,一定程度上也增加了软件实现的难度。
方案二:在花卉养殖监控系统中,传统的测温方法是将模拟信号远距离采样进行A/D转换,而为了获得较高的测温精度,就必须采用措施解决由长线传输、放大电路零点漂移等造成的误差补偿问题。采用数字温度芯片DS18B20测量温度,输出信号全数字化,便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0—100摄氏度时,最大线形偏差小于1摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS1820和微控制器STC89C52RC构成的温度测第一章总体设计方案4量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大,且由于STC89C52RC可以带多个DSB1820,可实现多点测量,轻松的组建传感器网络,本次设计用于大棚温度检测比较适合方便。
2.2、主控制部分
方案一:此方案采用PC机实现,它可在线编程,可在线仿真的功能,这让调试变得方便,且人机交互友好。但是PC机输出信号不能直接与DS18B20通信,需要通过RS232电平转换兼容,硬件的合成在线调试,较为繁琐,很不简便。而且在一些环境比较恶劣的场合,PC机的体积大,携带安装不方便,性能不稳定,给工程带来很多麻烦。
方案二:此方案采用STC89C52RC八位单片机实现。单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC机通信,运用主从分布式思想,由一台上位机(PC微型计算机),下位机(单片机)实现温度数据采集,组成两级分布式温度测量的巡回检测系统,实现远程控制。另外STC89S51在农业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。
总体设计综上所述,温度传感器以及主控部分都采用第二方案。首先由温度传感器DS18B20采集温度数据,经单片机I/O模拟单总线读取后送入STC89C52RC单片机中进行运算处理,并LCD1602液晶显示当前温度,同时与键盘输入的设定温度值(上限)进行比较,由单片机控制是否发出报警信号。在整个过程中,温度始终都能得以显示。设定温度过程中显示设定温度值,以便于操作。
本系统的总体设计方框图如图2-1所示,它主要由五部分组成:
①主控制部分主芯片采用单片机STC89C52RC(包括时钟和复位电路);
②显示部分采用3位LED数码管以动态扫描方式实现温度显示;
③温度采集部分采用DS18B20温度传感器;
④按键输入部分主要功能是实现设定温度值的输入;
⑤人体红外传感器用来检测人体信息
DS18B20检测温度,将温度信息传送到单片机内,单片机检测到温度信号,对其进行处理,将处理得到的数据在LCD1602液晶上显示出来。可以通过按键来设置温度的上下限值,当温度超过范围时,单片机控制蜂鸣器报警,同时当人体红外传感器检测到人体时,也会触发蜂鸣器报警。
图2-1 系统总体设计框图
#include "reg51.h"
#include "LCD.h"
#include "DS18B20.h"
#include "KEY.h"
void main()
{
P1=0X0F;
LCD_Init(); //lcd1602初始化
write_string(0,0,"Temp: ");
write_string(0,1,"up: dowm: ");
while(1)
{
disp_ds18b20(); //读取并显示温度
Key_borad(); //按键设置函数
if(temp>tmpup) //得到温度值 大于上限设置值
BEEP(1);
else if(temp<tmpdowm) //得到温度值 小于下限设置值
BEEP(1);
else
{_nop_();}
}
}
int tmpup=25; // 预设上限温度
int tmpdowm=10; // 预设下限温度
void Key_borad() //按键设置函数
{
if(KEY0==0) //如果按下加按键
{
while(KEY0==0); //释放
tmpup++; //预设温度加一
}
if(KEY1==0) //如果按下减按键
{
while(KEY1==0); //释放
tmpup--; //预设温度减一
if(tmpup<0)
tmpup=0;
}
if(KEY2==0) //如果按下加按键
{
while(KEY2==0); //释放
tmpdowm++; //预设温度加一
}
if(KEY3==0) //如果按下减按键
{
while(KEY3==0); //释放
tmpdowm--; //预设温度减一
if(tmpdowm<0)
tmpdowm=0;
}
write_com(0xc0+3);
write_dat(tmpup%100/10+0x30);
write_dat(tmpup%10+0x30);
write_dat(0xDF); //write_dat('C');// ℃
write_com(0xc0+12);
write_dat(tmpdowm%100/10+0x30);
write_dat(tmpdowm%10+0x30);
write_dat(0xDF); //write_dat('C');// ℃
}
void BEEP(uchar t)
{
uchar i;
for(i=0;i<100;i++)
{
SPK = ~SPK;
delay_ms(t);
}
SPK = 0;
}