蓝牙温度检测系统(基于BT08-B蓝牙模块)

蓝牙温度检测系统(基于BT08-B蓝牙模块)

闲暇之余做的一个小作品,希望能和大家分享一下我的经验和想法,一起学习?

                                         摘 要

本系统以STC89C52单片机为控制核心,结合LCD1602液晶显示屏,DS18B20温度传器,BT08-B蓝牙模块,设计并实现了温度测量系统。经过最终的调试,本系统已实现了所有基本功能。温度检测系统在环境温度改变的情况下可以实现每1s进行误差为2℃以内的基本温度测量,将测量的温度显示在液晶显示屏上,并且可以通过蓝牙模块将测量的温度实时传到手机或者电脑端。

关键词:温度传感器STC89C52蓝牙模块液晶显示屏

目 录
摘 要
一、系统方案
1.系统总体方案设计
2.系统结构框图

二、电路与程序设计
1.各部分电路设计
2.程序设计

三、测试结果
1.测试方案
2.测试结果及分析

四、附录
1.电路原理图
2.程序清单

一、系统方案
1.系统总体方案设计
蓝牙温度检测系统
本系统以STC89C52芯片作为控制核心,DS18B20为温度传感器,LCD1602为显示器件,以及BT08-B为蓝牙模块。DS18B02数字温度计提供 9 位温度读数,指示器件的温度。信息经过单线接口送入 DS18B20 或从 DS18B20 送出。当信息送入,经过单片机处理后在液晶上显示。再通过蓝牙模块将信息传输到手机或者PC端,其系统框图如图 1 所示。

2.系统结构框图

蓝牙温度检测系统(基于BT08-B蓝牙模块)_第1张图片图一

二、电路与程序设计
1.各部分电路设计

(1)温度检测模块
在温度检测系统中,该模块起到检测外部环境温度的作用。DS1802 数字温度
计提供 9 位温度读数,指示器件的温度。信息经过单线接口送入 DS1820 或从
DS1820 送出,因此从中央处理器到 DS1820 仅需连接一条线(和地)。读、写和完 成温度变换所需的电源可以由数据线本身提供,而不需要外部电源。

(2)LCD 液晶显示屏
在温度检测系统中用于显示场景的温度数据以及在智能窗帘系统中用于显
示光照强度数据。为工业字符型液晶,能够同时显示16x2即32个字符。

(3)STC90C52
本设计选用单片机 STC89C52 作为控制核心,它是宏晶科技推出的新一代超强
抗干扰、高速、低功耗的单片机,基于 Intel 标准的 8052,指令代码完全兼容传 统的 8051 系列单片机,12时钟/机器周期和6时钟/机器周期可任意选择,最新的D版本内集成 MAX810 专用复位电路。

(4)BT08-B
BT08-B蓝牙模块是专为智能无线数据传输而打造,遵循 V2.1+EDR蓝牙规范。本模块支持UART接口,并支持SPP蓝牙串口协议具有成本低、体积小、功耗低、收发灵敏 性高等优点,只需配备少许的外围元件就能实现其强大功能。

2.程序设计
蓝牙温度检测系统
本系统以STC89C52作为主控芯片,实现温度检测功能。其中温度检测模块检测环境温度,LCD1602 显示温度数据,蓝牙模块传输数据到手机或者PC端流程图如图2所示。
蓝牙温度检测系统(基于BT08-B蓝牙模块)_第2张图片 图2

三、测试结果
1.测试方案
蓝牙温度检测系统
改变温度检测模块附近环境温度,观察 LCD1602 液晶屏所显示温度数据,测试结果为显示数据与实际环境温度基本吻合。并且可以通过蓝牙模块与手机端或者PC端连接,将温度实时传送给用户(1s刷新一次)。

2.测试结果及分析
由测试结果可以看出,温度检测系统可实现所有基本功能。其中温度检测系统可以在误差为2℃的情况下检测出环境度;蓝牙模块可以每隔1s准确地将温度传输到手机或者PC端。

五、附录
1.电路原理图
蓝牙温度检测系统(基于BT08-B蓝牙模块)_第3张图片
2.程序清单(模块化编程,程序太长这里就只附主程序)

/*******************************************************************
实验名			   :蓝牙温度检测系统 

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

#include<reg51.h>
#include"lcd.h"
#include"temp.h"

uchar CNCHAR[6] = "摄氏度";
void LcdDisplay(int);
void UsartConfiguration();

/*******************************************************************************
*函数名         : main
*函数功能	      : 主函数
*******************************************************************************/

void main()
{
	UsartConfiguration();
	LcdInit();			 //初始化LCD1602
	LcdWriteCom(0x88);	//写地址80表示初地址
	LcdWriteData('C'); 
	while(1)
	{
		LcdDisplay(Ds18b20ReadTemp());
		Delay1ms(1000);//1s刷新一次
	}
}

/*******************************************************************************
*函数名         : LcdDisplay
*函数功能	      : Lcd显示读取的温度
*******************************************************************************/

void LcdDisplay(int temp) 	 //lcd显示
{
    
  	unsigned char i, datas[] = {0, 0, 0, 0, 0}; //定义数组
	float tp;  
	if(temp< 0)				//当温度为负时
  	{
	  	LcdWriteCom(0x80);		//写地址  80表示初地址
		SBUF='-';//将接收到的数据放到发送寄存器
		while(!TI);			         //等待发送数据完成
		TI=0;						 //清除完成发送标志位
	    LcdWriteData('-');  		//显示负
		//因为读取的温度是实际温度的补码,所以减一,再取反求出原码
		temp=temp-1;
		temp=~temp;
		tp=temp;
		temp=tp*0.0625*100+0.5;	
  	}
 	else
  	{			
	  	LcdWriteCom(0x80);		//写地址
	    LcdWriteData('+'); 		//显示正	
	SBUF='+';               //将接收到的数据放到发送寄存器
		while(!TI);			         //等待发送数据完成
		TI=0;						 //清除完成发送标志位
		tp=temp;
		temp=tp*0.0625*100+0.5;	
	}
	datas[0] = temp / 10000;
	datas[1] = temp % 10000 / 1000;
	datas[2] = temp % 1000 / 100;
	datas[3] = temp % 100 / 10;
	datas[4] = temp % 10;

	LcdWriteCom(0x82);		  //写地址
	LcdWriteData('0'+datas[0]); //百位 
    SBUF = '0'+datas[0];// 将接收到的数据放到发送寄存器
	while (!TI);			         //等待发送数据完成
	TI = 0;
	LcdWriteCom(0x83);		 //写地址
	LcdWriteData('0'+datas[1]); //十位
    SBUF = '0'+datas[1];// 将接收到的数据放到发送寄存器
	while (!TI);			         //等待发送数据完成
	TI = 0;

	LcdWriteCom(0x84);		//写地址
	LcdWriteData('0'+datas[2]); // 个位
	SBUF = '0'+datas[2];// 将接收到的数据放到发送寄存器
	while (!TI);			         //等待发送数据完成
	TI = 0;

	LcdWriteCom(0x85);		//写地址
	LcdWriteData('.'); 		//小数点
	SBUF = '.';// 将接收到的数据放到发送寄存器
	while (!TI);			         //等待发送数据完成
	TI = 0;

	LcdWriteCom(0x86);		 //写地址
	LcdWriteData('0'+datas[3]); // 小数点后一位
	SBUF = '0'+datas[3];// 将接收到的数据放到发送寄存器
	while (!TI);			         //等待发送数据完成
	TI = 0;

	LcdWriteCom(0x87);		 //写地址
	LcdWriteData('0'+datas[4]); // 小数点后两位
	SBUF = '0'+datas[4];// 将接收到的数据放到发送寄存器
	while (!TI);			         //等待发送数据完成
	TI = 0;
	for(i=0; i<6; i++)
	{
	 	SBUF = CNCHAR[i];// 将接收到的数据放到发送寄存器
		while (!TI);			         //等待发送数据完成
		TI = 0;
	}

	 
}
/*******************************************************************************
* 函数名         :UsartConfiguration()
* 函数功能		   :初始化串口
*******************************************************************************/

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

实物图

最后在文末附上原理图,详细代码以及BT08-B蓝牙模块的芯片手册
链接:https://pan.baidu.com/s/1Kr7HGrxIsaXd1F9xDkvLwA
提取码:54n6

上述链接已失效,由于种种原因,本作品资料代码暂不免费开源,如有需要私聊

你可能感兴趣的:(51,蓝牙,温度)