基于AT89C52单片机的无线温度监测设计

点击链接获取Keil源码与Project Backups仿真图:
https://download.csdn.net/download/qq_64505944/87848530?spm=1001.2014.3001.5503
在这里插入图片描述

源码获取
主要内容:
设计一个温度监测器,温度异常时警报器能够响起,设定初始温度,同时可以调高或调低温度。
基本要求:
1.测量温度范围可以设定,精度为1℃
2.具有掉电保护
3.预置时显示设定的温度
主要参考资料:
[1]肖骁,戈文祺. 电气传动系统中单片机技术的应用解析[J]. 中国标准化,2017(22):250-252.
  [2]茅阳. 单片机技术在电气传动控制系统中的应用与研究[J]. 中国高新区,2018(01):24.
  [3]贾飞. 单片机技术课程中项目教学法的应用案例[J]. 张家口职业技术学院学报,2017,30(03):75-77.

           完  成  期  限:                     
        指导教师签名:                     
           课程负责人签名:                           

摘要
本文设计一个基于单片机AT89C52的多点温度检测系统,具有对温度初始值的设定、实时检测、显示和控制等功能。分别从硬件和软件两个方面介绍以单片机AT89C52为核心的温度检测系统,温度检测系统的具体组成和设计原理一步一步地展开来阐述。硬件方面,温度的显示和设置分别通过对显示和键盘电路的操作完成,集成温度传感器完成温度检测的重要任务,蜂鸣器等器件实现温度报警的功能,通过升温和降温使得温度保持有效地温度值范围内。温度传感器DS18B20采集到环境的温度信号,输出的数字信号送向主控模块进行处理并同时在数码管上显示温度信号。如果温度超出安全设置值,单片机会发出报警信号调动报警电路和温度控制电路。报警电路会在采集温度值超出安全值时作出报警发出报警鸣叫声。软件方面,主程序起着重要的作用,能够调动模块程序,主程序和模块程序结合在一起,使得系统得以正常运转。
关键词:传感器,单片机,温度监测

目录
1 概述 5
1.1 课程设计目的和意义 5
1.2 设计现状分析 5
2 系统设计 5
2.1 系统设计思想 5
2.2 系统结构图 5
2.3 温度信号采集电路的设计 6
2.4 显示电路的设计 8
2.5 主模块设计 9
3 实验原理 13
3.1 硬件电路原理 13
3.2 硬件电路介绍 13
3.3 温度信号采集 14
4 系统调试 14
4.1 Keil软件调试 14
4.2 PROTEUS软件调试 15
5 总结 17
6 参考文献 18

1 概述
1.1 课程设计目的和意义
随着社会的发展,温度的测量及控制变得越来越重要。温度是生产过程和科学实验中普遍而且重要的物理参数。在工业生产过程中为了高效地进行生产,必须对生产工艺过程中的主要参数,如温度,压力,流量,速度等进行有效的控制。其中温度的控制在生产过程中占有相当大的比例。准确测量和有效控制温度是优质,高产,低耗和安全生产的重要条件。在工业的研制和生产中,为了保证生产过程的稳定运行幵提高控制精度,采用微电子技术是重要的途径。它的作用主要是改善劳动条件,节约能源,防止生产和设备事故,以获得好的技术指标和经济效益。
本课题采用51单片机来对温度迚行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标。
作为控制系统中的一个典型实验设计,单片机温度控制系统综合运用了微机原理、自动控制原理、传感器原理、模拟电子技术、数字控制技术、键盘显示技术等诸多方面的知识,是对所学知识的一次综合测试。
1.2 设计现状分析
由于现代工艺越来越多的需要对实时温度迚行监测和控制,而且需要的精度越来越高。所以温度控制系统国内外许多有关人员的重视,得到了十分广泛的应用。温度控制系统収展迅速,而且成果显著。由于单片微处理器的性能日益提高、价格又不断降低,使其性能价格比的优势非常明显。因此,如何将单片微处理器应用到锅炉温度自动控制领域,为越来越多的生产厂家所重视。
目前先进国家各种炉窑自动化水平较高,装备有完善的监测仪表和计算机控制系统。其计算机控制系统已采用集散系统和分布式系统的形式,大部分配有先进的控制算法,能够获得较好的工艺性能指标。单片微型计算机是随着超大规模集成电路的技术的収展而诞生的。由于它具有体积小,功能强,性价比高等优点,所以广泛应用亍电子仪表,家用电器,节能装置,军事装置,机器人,工业控制等诸多领域,使产品小型化,智能化,既提高了产品的功能和质量又降低了成本,简化了设计。
2 系统设计
2.1 系统设计思想
传统意义上,多点温度检测系统大多数是远距离铺线采集温度信号,进而将采集到的模拟电信号进行模数转换,输出数字信号,单片机再处理接收到的信号。远距传输,线路的远近影响精度,且电路相对复杂。而现代意义上,则采用集成温度传感器解决传统意义上温度信号采集方面的布线缺陷,一定程度上简化电路具有检测、保持、控制和报警等多种功能。
2.2 系统结构图

                 图2-2 系统结构图

2.3 温度信号采集电路的设计

#ifndef __REG51_H__
#define __REG51_H__

/*  BYTE Register  */
sfr P0   = 0x80;
sfr P1   = 0x90;
sfr P2   = 0xA0;
sfr P3   = 0xB0;
sfr PSW  = 0xD0;
sfr ACC  = 0xE0;
sfr B    = 0xF0;
sfr SP   = 0x81;
sfr DPL  = 0x82;
sfr DPH  = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0  = 0x8A;
sfr TL1  = 0x8B;
sfr TH0  = 0x8C;
sfr TH1  = 0x8D;
sfr IE   = 0xA8;
sfr IP   = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;


/*  BIT Register  */
/*  PSW   */
sbit CY   = 0xD7;
sbit AC   = 0xD6;
sbit F0   = 0xD5;
sbit RS1  = 0xD4;
sbit RS0  = 0xD3;
sbit OV   = 0xD2;
sbit P    = 0xD0;

/*  TCON  */
sbit TF1  = 0x8F;
sbit TR1  = 0x8E;
sbit TF0  = 0x8D;
sbit TR0  = 0x8C;
sbit IE1  = 0x8B;
sbit IT1  = 0x8A;
sbit IE0  = 0x89;
sbit IT0  = 0x88;

/*  IE   */
sbit EA   = 0xAF;
sbit ES   = 0xAC;
sbit ET1  = 0xAB;
sbit EX1  = 0xAA;
sbit ET0  = 0xA9;
sbit EX0  = 0xA8;

/*  IP   */ 
sbit PS   = 0xBC;
sbit PT1  = 0xBB;
sbit PX1  = 0xBA;
sbit PT0  = 0xB9;
sbit PX0  = 0xB8;

/*  P3  */
sbit RD   = 0xB7;
sbit WR   = 0xB6;
sbit T1   = 0xB5;
sbit T0   = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD  = 0xB1;
sbit RXD  = 0xB0;

/*  SCON  */
sbit SM0  = 0x9F;
sbit SM1  = 0x9E;
sbit SM2  = 0x9D;
sbit REN  = 0x9C;
sbit TB8  = 0x9B;
sbit RB8  = 0x9A;
sbit TI   = 0x99;
sbit RI   = 0x98;

#endif
2.4 显示电路的设计
#include<reg51.h>
#include"lcd1602.h"
#include"delay.h"

#define uchar unsigned char
#define uint unsigned int 

sbit RS = P2^7;//1602数据/命令选择端(H:数据寄存器L:指令寄存器) 
sbit RW = P2^6;//1602读/写选择端 
sbit E  = P2^5;//1602使能信号端

uchar code tab[]={'0','1','2','3','4','5','6','7','8','9'};//液晶显示
uchar tab1[]={"min:010  max:040"};//液晶第二行显示内容
uchar  str[8];
/******************************************************************/
/*                   LCD1602写命令操作                            */
/******************************************************************/
void WriteCommand(uchar com)
{
	delay(5);//操作前短暂延时,保证信号稳定
	E=0;
	RS=0;
	RW=0;

	P0=com;
	E=1;
	delay(5);
	E=0;
}
/******************************************************************/
/*                   LCD1602写数据操作                            */
/******************************************************************/
void WriteData(uchar dat)
{
	delay(5);  //操作前短暂延时,保证信号稳定
	E=0;
	RS=1;
	RW=0;

	P0=dat;
	E=1;
	delay(5);
	E=0;
}
/******************************************************************/
/*                   LCD1602初始化程序                            */
/******************************************************************/
void InitLcd()
{
	uchar i;
	delay(15);
//	WriteCommand(0x38); //display mode
//	WriteCommand(0x38); //display mode
	WriteCommand(0x38); //display mode
	WriteCommand(0x06); //显示光标移动位置
	WriteCommand(0x0c); //显示开及光标设置
	WriteCommand(0x01); //显示清屏
	WriteCommand(0x80+0x40);//将光标移到第二行
	for(i=0;i<16;i++)//显示初始化内容
	{
		WriteData(tab1[i]);
		delay(10);
	}
}
2.5 主模块设计
#include<reg51.h>     //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<math.h>
#include<INTRINS.H>
#include"lcd1602.h"
#include"ds18b20.h"
#include"delay.h"

#define uchar unsigned char
#define uint unsigned int

sbit buzzer=P2^1;//蜂鸣器引脚
sbit rel=P2^3;

int temp;//测得温度
char temp_max=40,temp_min=10;//设定的温度 
char TempH,TempL;
uchar CNCHAR[6] = "℃  ";

/*******************************************************************************
* 函 数 名         :UsartConfiguration()
* 函数功能		   :设置串口
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void UsartConfiguration()
{
	SCON=0X50;			//设置为工作方式1
	TMOD=0X20;			//设置计数器工作方式2
	PCON=0X80;			//波特率加倍
	TH1=0XF3;				//计数器初始值设置,注意波特率是4800的
	TL1=0XF3;
	ES=1;						//打开接收中断
	EA=1;						//打开总中断
	TR1=1;					//打开计数器
}

/******************************************************************/
/*                  蜂鸣器报警程序                                */
/******************************************************************/
void alarm()
{
	if(TempH>=temp_max)//当温度高于设置的最高温报警
	{	
		buzzer=0;
		rel=0;
//		delay(50);
//		buzzer=1;
//		delay(50);
	}
	else if(TempH<temp_min)//当温度低于设置的最低温报警
	{
		buzzer=0;
		rel=0;
//		delay(50);
//		buzzer=1;
//		delay(50);
	}
	else//报警解除
	{
	 	buzzer=1;
		rel=1;
	}
}
/******************************************************************/
/*                   显示测得的温度                               */
/******************************************************************/
void handle_T()
{
	
	uchar i,j,m;
	str[0]=0x20;//显示为空
	str[1]=tab[TempH/100]; //百位温度
  str[2]=tab[(TempH%100)/10]; //十位温度
  str[3]=tab[(TempH%100)%10]; //个位温度,带小数点
  str[5]=tab[TempL];
	str[4]='.';
  str[6]=0xdf;
  str[7]='C';
	temp=ReadTemperature();//读取温度值
	if(temp&0x8000)
	{
		str[0]=0xb0;//负号标志
		temp=~temp;  // 取反加1
		temp +=1;
	}
	
	TempH=temp>>4;	//由权重表知移4位就是整数位
	TempL=temp&0x0F;
	TempL=TempL*6/10;//小数近似处理

	alarm();    //判断是否需要报警

	WriteCommand(0x80+0x04);//光标指向第一行第一个字符
	for(i=0;i<8;i++)// 显示
	{
		WriteData(str[i]);
		delay(10);
	}
	for(j = 1;j<6;j++)
	{
		SBUF = str[j];
		while(!TI);
		TI = 0;
	}
	for(m=0;m<4;m++){
		SBUF = CNCHAR[m];
		while(!TI);
		TI = 0;
	}
}

void display_range(uchar add,int t)
{
	uchar i;
	if(t<0)
	{
		str[0]=0xb0;//负号标志
	}
	else
		str[0]=tab[abs(t)/100]; //百位温度
   	str[1]=tab[(abs(t)%100)/10]; //十位温度
   	str[2]=tab[(abs(t)%100)%10]; //个位温度
	WriteCommand(0x80+0x40+add);
	for(i=0;i<3;i++)
	{
		WriteData(str[i]);
		delay(5);
	}
}


/****************************************************************/
/*                    主函数                                    */
/******************************************************************/
void main()
{	
	UsartConfiguration();
	InitLcd();//lcd1602初始化
	while(1)
	{
		handle_T();// 处理温度:获得、显示、报警
		delay(500);
  } 
}
2.6 延时设计
#include<reg51.h>
#include"delay.h"

/******************************************************************/
/*                    延时函数                                    */
/******************************************************************/
void delayl(uint i)//短延时函数
{
 	while(i--);
}

void delay(uint z) //长延时函数
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}

3 实验原理
3.1 硬件电路原理
系统硬件电路主要以单片机AT89C52作为微处理器,系统电路大概分为六大模块,主控电路、温度信号采集电路、键盘电路、显示电路、报警电路、温度控制电路等模块之间相互协调合作,实现检测、保持、控制、报警等功能。
3.2 硬件电路介绍
单片机是一种集成的电路芯片,采用超大规模集成电路技术集成,把具有数据处理能力,如算术运算、逻辑运算、数据传送、中断处理的微处理器CPU、随机数据存储器RAM、只读程序存储器ROM、输入/输出电路I/O、还可能包括定时/计数器、串行通信口、SCI、显示驱动LCD或LED电路等电路集合到一起,在一片芯片上完成一件在电子技术界具有影响力的事情,构成一个最小又完善的计算机系统。按照预先设定的软件程序,这些电路可以是很好的任务执行者,准确、迅速、高效地完成程序设计者的设计成果。随着发展,单片机不断改进,作为主控系统的核心力量,能够独当一面,实现更高程度的智能化控制功能。
不同的单片机有着不同的硬件特征和软件特征。AT89C52也具有C51系列单片机的特性,准确地说其功能比C51系列更强大,是由ATMEL公司的荣誉出品。AT89C52是一个低电压、高性能CMOS8位单片机片内除了含8KB的反复可擦写的只读程序存储器还有256B的随机存储数据存储器,器件中凝结了ATMEL公司的高密度、非易失性的存储技术,兼容性强,标准MCS-51指令系统和51产品引脚也对它适用片内配置通用8位中央处理器,特别是FLASH存储单元使其内存锦上添花。
3.3 温度信号采集
本模块的设计采用DS18B20芯片,DS18B20温度传感器是美国DALLAS半导体公司最新推出的一款智能温度传感器,在旧产品的基础上做了很大的改进,提供9-12位摄氏温度的测量,用户可编程,具有非易失的上下限报警功能。DS18B20将地址线、数据线、和控制线合为一根双向串行传输数据的信号线,也即是我们所说的单线,允许在这根信号线上挂接多个DS18B20。每个芯片内的64位ROM存放着各个器件自身的序号,也即是器件独有的ID号。因为自身有代码,所以即使挂接多个芯片也可以识别。DS18B20简化了温度采集模块与单片机的接口电路,使得电路简单,使用方便。
4 系统调试
4.1 Keil软件调试
在这里插入图片描述

图4-1-1 代码运行成功
在这里插入图片描述

图4-2-2 生成HEX文件
4.2 PROTEUS软件调试
在这里插入图片描述

图4-2-1 仿真成功
在这里插入图片描述

图4-2-2 低于10° LED灯亮起 响起警报
在这里插入图片描述

图4-2-3 高于40° LED灯亮起 响起警报

5 总结
课设的选题,方案的设计与确定,元器件的选择,这一系列的课设准备工作早在课设开始之前,老师就向我们做了相关的介绍和明确的说明,同时非常友好的提示我们早点着手准备自己的课设项目。但是如此话重心长的话语在当时似乎没有引起所有人的注意,只到有同学拿出已成型的作品时,只到课程设计进入第二周时,只到看到有同学拿着作品去验收时,只到发现自己在规定的时间里无法完成扩展功能是,我们开始醒悟,开始想越老师之前的友情提示,开始意识到课设的准备工作没做好,开始产生恐惧。这样的情形并不只是出现在的课程设计过程中,而是经常出现在我们的生活中。整个课程设计的过程中都显得有些盲目,有些匆忙。
像这样的实训课程,对我们来说意义非常重大,它不仅是对单片机这一门课程的理解与运用,同时也涉及到数字电路和模拟电路的领域;这也是一次锻炼我们动手动脑的绝佳机会,能让我们切实感受理论与实际相结合的过程。
设计的过程是枯燥的,程序的调试过程是让人感到乏味的、无奈的、头疼的,但是看到完工的作品却是激动高兴的。对于硬件的焊接,这可能是很多同学都喜欢做的.一个环节。但是这次的硬件焊接与上一次实训时的不样,这次你需要自己设计电路,自己学习理解某些芯片的引脚功能。芯片引脚的接线是我们容易出错的地方,如果接线图或者焊接有问题,这将对对芯片有很大的危害。硬件完工后,是软件的调试。我认为程序的调试是课设全过程中最难得部分,原因是我这块的功底非常薄弱。很坦诚的讲,以自己现有的能力,没法写出设计中的程序,我利同学只能借鉴高手的程序,努力地去修改源程序,使其能够实现想要的功能。软件的调试不像硬件焊接那么容易,调试过程中,我们必须考虑硬件与程序相匹配。在比如在这个环节中,很感谢我的同学,因为他能够非常耐心的为我讲解C语言中一些语句的用法和功能。
这次实训还有一重大收获是学会写一份正式的科技论文。报告的书写与软硬件同等重要,我们应遵守论文的格式要求,这也是对思维严谨性的一种锻炼。
虽然本次设计结束了,但是留给我们思考的地方还很多,需要我们学习的地方还很多。无论在现在的学习中还是在以后的工作中,我们都应养成多学习,理解、多思考、多合作,多实践的好习惯,重视理论与实践相结合。

6 参考文献
[1]肖骁,戈文祺. 电气传动系统中单片机技术的应用解析[J]. 中国标准化,2017(22):250-252.
  [2]茅阳. 单片机技术在电气传动控制系统中的应用与研究[J]. 中国高新区,2018(01):24.
  [3]贾飞. 单片机技术课程中项目教学法的应用案例[J]. 张家口职业技术学院学报,2017,30(03):75-77.
  [4]罗东华. 互联网+背景下单片机技术课程改革与建设研究[J]. 教育现代化,2017,4(47):78-79.
  [5]李建. 矿区智能勘测设备中单片机技术的应用[J]. 电子制作,2017(24):45-46.
  [6]闫璞,王贵锋. 基于单片机技术的室内照明光伏优化供电控制系统设计[J]. 中国新技术新产品,2018(02):22-24.
  [7]宋述林. 物联网电子产品中单片机技术的应用方式研究[J]. 现代工业经济和信息化,2017,7(22):64-65+75.
  [8]邵杰. 单片机技术在阀门电动执行机构中的逐步应用和发展[J]. 科技创新与应用,2018(06):53-56.

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒月玖.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值