基于51单片机的蓝牙控制.docx

上传人:b****5 文档编号:29564089 上传时间:2023-07-24 格式:DOCX 页数:22 大小:233.44KB
下载 相关 举报
基于51单片机的蓝牙控制.docx_第1页
第1页 / 共22页
基于51单片机的蓝牙控制.docx_第2页
第2页 / 共22页
基于51单片机的蓝牙控制.docx_第3页
第3页 / 共22页
基于51单片机的蓝牙控制.docx_第4页
第4页 / 共22页
基于51单片机的蓝牙控制.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

基于51单片机的蓝牙控制.docx

《基于51单片机的蓝牙控制.docx》由会员分享,可在线阅读,更多相关《基于51单片机的蓝牙控制.docx(22页珍藏版)》请在冰豆网上搜索。

基于51单片机的蓝牙控制.docx

基于51单片机的蓝牙控制

摘要

随着科技的进步与现代产业的飞速发展,对控制系统的发展也提出了越来越高的要求,非接触控制、中远程通信正在扮演这越来越重要的角色,所以单片机的中远程通信的意义也愈发重要。

作为一名工科生,加强对这方面的学习是很有必要的。

基于AT89C51单片机与HC-08蓝牙模块通信的基础,我们设计了能够实现在手机模拟串口APP的客户端上进行温度监视与控制的系统。

该系统主要由蓝牙通信模块,灯光模拟加热电路,单片机控制电路,基于DS18B20的温度监视电路等部分组成。

画出了系统电路原理图,进行了软件设计,给出了系统流程图,并编写了系统程序。

最后在进行系统仿真的基础上进行了实物制作,实物调试结果表明,所设计的系统能够满足要求。

本系统具有成本低,安全实用,80米左右通信等特点。

关键词:

AT89C51;HC-08蓝牙;DS18B20;LCD显示屏;

 

一、概述

1.1课程考核目的

通过本课程学习,使学生掌握控制系统设计的一般步骤,掌握系统总体控制方案的设计方法。

使学生进一步掌握微型计算机应用系统的硬、软件开发方法,输入/输出(I/O)接口技术,单片机中远程通信的方法,应用程序设计技术,并能结合专业设计简单实用的单片机应用系统。

针对课堂重点讲授内容使学生加深对单片机硬件原理的理解及提高C51语言程序设计的能力,为以后的毕业设计搭建了单片机系统应用平台,提高学生的开发创新能力。

1.2设计任务及要求

设计要求:

设计一个手机蓝牙通过HC-08蓝牙模块联系AT89C51单片机,对其发出指令进行温度控制,并且能够将温度回馈到手机的模拟串口的客户端界面上。

主要任务:

(1)进行系统方案总体设计,画出系统设计的框图。

(2)硬件部分设计。

将整个硬件系统划分为若干功能单元电路,使用ProtelDXP画出每个单元电路原理图,绘出整个系统电路原理图。

(3)软件部分设计。

画出程序流程图,编写系统源程序(有必要的注释)并调试。

(4)购买实物,进行实物连接。

(5)画出Proteus仿真图,载入程序,进行仿真。

(6)软硬件联调,完成系统工作调试。

在以上工作基础上完成课程设计报告,包括设计任务与要求,总体方案说明,电路原理图与说明,软件流程图和源程序清单,问题分析与解决方案,结论与体会,参考资料等。

1.3设计需要的相关知识

通信基础下的温度控制系统设计主要涉及单片机的串口通信。

基础知识包括:

单片机的串口方式,HC-08蓝牙的串口通信知识,LCD显示,DS18B20的温度显示等等。

 

二、总体设计方案与说明

2.1系统总体设计方案

特别说明:

本次设计中,使用一个与继电器连接LED灯模拟加热模块。

图2-1系统工作框图

本设计基本工作方式如图2.1-1所示,在手机模拟串口发出指令,通过HC-08蓝牙从机传递给单片机,单片机启动模拟加热模块,测温模块测得实时温度,然后将温度反馈给单片机,单片机再发送到LCD显示屏上显示或是回馈给手机客户端。

2.2系统的技术指标

利用51单片机接收从手机发出的指令,控制LCD显示电路、加热电路、测温电路,系统功能:

指令“0”LED灯亮,指令“1”LED灯灭,指令“2”,单片机将温度回馈给手机。

2.3AT89C51单片机的串口2.3.1概念

AT89S51集成一个全双工通用异步收发(UART)串行口。

全双工:

两个单片机之间串行数据可同时双向传输。

异步通信:

收、发双方使用各自时钟控制发送和接收,省去收、发双方的1条同步时钟信号线,使异步串行通信连接更简单且易实现。

2.3.2串行口结构

AT89S51串行口内部结构见图2-2。

有两个物理上独立的接收、发送缓冲器SBUF(特殊功能寄存器),可同时收发数据。

发送缓冲器只写不读,接收缓冲器只读不写,两个缓冲器共用一个特殊功能寄存器字节地址(99H)。

图2-2串行口结构图

寄存器SCON各位功能:

(1)SM0、SM1—串口4种工作方式选择,如表2-1

表2-1

(2)SM2—多机通信控制位

多机通信是在方式2和方式3下进行,因此SM2位主要用于方式2或方式3。

当串口以方式2或方式3接收时,如SM2=1,则只有当接收到的第9位数据(RB8)为“1”时,才使RI置“1”,产生中断请求,并将收到的前8位数据送入SBUF;当收到的第9位数据(RB8)为“0”时,则将收到的前8位数据丢弃。

当SM2=0时,则不论第9位数据是“1”还是“0”,都将接收的前8位数据送入SBUF中,并使RI置“1”,产生中断请求。

方式1时,如果SM2=1,则只有收到有效的停止位时才会激活RI。

方式0时,SM2必须为0。

(3)REN—允许串行接收位,由软件置“1”或清“0”。

REN=1,允许串行口接收数据。

REN=0,禁止串行口接收数据。

(4)TB8—发送的第9位数据

 在方式2和方式3时,TB8是要发送的第9位数据,其值由软件置“1”或清“0”。

在双机串行通信时,TB8一般作为奇偶校验位使用;也可在多机串行通信中表示主机发送的是地址帧还是数据帧,TB8=1为地址帧,TB8=0为数据帧。

(5)RB8—接收的第9位数据

在方式2和方式3时,RB8存放接收到的第9位数据。

在方式1,如果SM2=0,RB8是接收到的停止位。

在方式0,不使用RB8。

(6)TI—发送中断标志位

方式0时,串行发送的第8位数据结束时,TI由硬件置“1”,在其他工作方式中,串行口发送停止位的开始时,置TI为“1”。

TI=1,表示1帧数据发送结束。

TI位状态可供软件查询,也可申请中断。

CPU响应中断后,在中断服务程序向SBUF写入要发送的下一帧数据。

注意:

TI必须由软件清“0”。

(7)RI—接收中断标志位

串口在方式0时,接收完第8位数据时,RI由硬件置“1”。

在其他工作方式中,串行接收到停止位时,该位置“1”。

RI=1,表示一帧数据接收完毕,并申请中断,要求CPU从接收SBUF取走数据。

该位状态也可供软件查询。

注意:

RI必须由软件清“0”。

2.3.3特殊功能寄存器PCON

 字节地址为87H,不能位寻址。

格式见图2-3

仅最高位SMOD与串口有关,低4位功能在第2章中已介绍。

SMOD位:

波特率选择位。

 

图2-3特殊功能寄存器PCON格式

2.3.4串行口的4种工作方式

4种工作方式由特殊功能寄存器SCON中SM0、SM1位定义,编码见表2.3-1。

方式0

方式0为同步移位寄存器输入/输出方式。

该方式并不用于两个AT89S51单片机间的异步串行通信,而是用于外接移位寄存器,用来扩展并行I/O口。

方式0以8位数据为1帧,没有起始位和停止位,先发送或接收最低位。

波特率是固定的,为fosc/12。

1.方式0输出

(1)方式0输出的工作原理

当单片机执行将数据写入发送缓冲器SBUF指令时,产生一个正脉冲,串口把8位数据以fosc/12固定波特率从RXD脚串行输出,低位在先,TXD脚输出同步移位脉冲,当8位数据发送完,中断标志位TI置“1”。

2.方式0输入

(1)方式0输入的工作原理:

方式0输入时,REN为串行口允许接收控制位,REN=0,禁止接收;REN=1,允许接收。

当CPU向串行口SCON寄存器写入控制字(设置为方式0,并使REN位置“1”,同时RI=0)时,产生一正脉冲,串口开始接收数据。

引脚RXD为数据输入端,TXD为移位脉冲信号输出端,接收器以fosc/12固定波特率采样RXD引脚数据信息,当接收器接收完8位数据时,中断标志RI置“1”,表示一帧接收完毕,可进行下一帧接收。

方式1

 方式1为双机串行通信方式,如图2-4。

 

图2.-4方式1双机串行通信方式

当SM0、SM1=01时,串行口设为方式1双机串行通信。

TXD脚和RXD脚分别用于发送和接收数据。

 方式1收发一帧数据为10位,1个起始位(0),8个数据位,1个停止位

(1),先发送或接收最低位。

1.方式1发送

 串口以方式1输出,数据位由TXD端输出,发送一帧信息为10位,1位起始位0,8位数据位(先低位)和1位停止位1,当CPU执行写数据到发送缓冲器SBUF的命令后,就启动发送。

发送时钟TX时钟频率就是发送波特率。

发送开始时,内部逻辑将起始位向TXD脚(P3.1)输出,此后每经1个TX时钟周期,便产生1个移位脉冲,并由TXD脚输出1个数据位。

8位全发送完后,中断标志位TI置“1”。

2.方式1接收

 串行口以方式1(SM0、SM1=01)接收时(REN=1),数据从RXD(P3.0)脚输入。

当检测到起始位负跳变时,则开始接收。

接收时,定时控制信号有两种,一种是接收移位时钟(RX时钟),频率和传送的波特率相同,另一种是位检测器采样脉冲,它的频率是RX时钟的16倍。

也就是在1位数据期间,有16个采样脉冲,以波特率的16倍速率采样RXD引脚状态。

当采样到RXD端从1到0的负跳变(有可能是起始位)时,就启动接收检测器。

接收的值是3次连续采样(第7、8、9个脉冲时采样),取其中两次相同的值,以确认是否是真正起始位(负跳变)开始,这样能较好消除干扰引起的影响,以保证可靠无误地开始接收数据。

当确认起始位有效时,开始接收一帧信息。

接收每一位数据时,也都进行3次连续采样(第7、8、9个脉冲时采样),接收的值是3次采样中至少两次相同的值,以保证接收到的数据位的准确性。

当一帧数据接收完毕后,必须同时满足以下两个条件,这次接收才真正有效。

(1)RI=0,即上一帧数据接收完成时,RI=1发出的中断请求已被响应,SBUF中的数据已被取走,说明“接收SBUF”已空。

(2)SM2=0或收到的停止位=1(方式1时,停止位已进入RB8),则将接收到的数据装入SBUF和RB8(装入的是停止位),且中断标志RI置“1”。

 若不同时满足这两个条件,收到的数据不能装入SBUF,这意味着该帧数据将丢失。

方式2

串口工作于方式2和方式3时,为9位异步通信接口。

每帧数据均为11位,1位起始位0,8位数据位(先低位),1位可程控为1或0的第9位数据及1位停止位。

1.方式2发送

 发送前,先由通信协议由软件设置TB8(如奇偶校验位或多机通信的地址/数据的标志位),然后将要发送的数据写入SBUF,即可启动发送过程。

串行口能自动把TB8取出,并装入到第9位数据位的位置,再逐一发送出去。

发送完毕,则使TI位置“1”。

2.方式2接收

 当SCON寄存器SM0、SM1=10,且REN=1时,允许串行口以方式2接收数据。

接收时,数据由RXD端输入,接收11位信息。

当位检测逻辑采样到RXD引脚从1到0的负跳变,并判断起始位有效后,便开始接收一帧信息。

在接收完第9位数据后,需满足以下两个条件,才将接收到的数据送入接收缓冲器SBUF。

 

(1)RI=0,意味着接收缓冲器为空。

 

(2)SM2=0或接收到的第9位数据位RB8=1。

 当满足上述两个条件时,接收到的数据送入SBUF(接收缓冲器),第9位数据送入RB8,且RI置“1”。

若不满足这两个条件,接收的信息将被丢弃。

方式3

 当SM0、SM1两位为11时,串行口被定义工作在方式3。

方式3为波特率可变的9位异步通信方式,除了波特率外,方式3和方式2相同。

三、系统硬件部分设计

3.1ProtelDXP电路原理图

见附录一

3.2LCD显示电路

图3-1LCD显示电路

3.2.1LCD1602引脚

LCD1602工作电压4.5~5.5V,典型5V,工作电流2mA。

标准的14引脚(无背光)或16个引脚(有背光)的外形及引脚如图3-2所示。

3-2LCD1602引脚功能图

3.2.2.LCD1602字符的显示及命令

(1)显示字符

首先要解决待显示字符的ASCII码产生。

用户只需在C51程序中写入欲显示的字符常量或字符串常量,C51程序在编译后会自动生成其标准的ASCII码,然后将生成的ASCII码送入LCD,内部控制电路就会自动将该ASCII码对应的字符在LCD1602显示出来。

让液晶显示器显示字符,首先对其进行初始化设置,还必须对有、无光标、光标移动方向、光标是否闪烁及字符移动方向等进行工作方式设置,才能获得所需显示效果。

(2)命令

通过控制引脚进行命令控制,四种状态,每种状态都是在E的脉冲下按完成。

如表3-1所示

RS

R/

操作

0

0

写命令(初始化、光标位置设置等)

1

0

写数据

0

1

读状态(液晶忙状态)

1

1

读数据(把显示的数据反读出来)

表3-1LCD1602状态

3.3HC-08蓝牙模块电路

图3-3HC-08蓝牙模块电路

3.3.1模块简介

HC-08蓝牙串口通信模块是新一代的基于BluetoothSpecificationV4.0BLE蓝牙协议的数传模块。

无线工作频段为2.4GHzISM,调制方式是GFSK。

模块最大发射功率为4dBm,接收灵敏度-93dBm,空旷环境下和iphone4s可以实现80米超远距离通信。

模块采用TI的CC2540芯片,配置256KByte空间,支持AT指令,用户可根据需要更改角色(主、从模式)以及串口波特率、设备名称等参数,使用灵活。

3.3.2HC-08蓝牙引脚定义

通常情况下,只需要用到1脚、2脚、12脚、13脚,引脚定义如表3-2。

引脚

定义

I/O方向

说明

1

TXD

输出

URAT输出口,3.3VTTL电平

2

RXD

输入

URAT输入口,3.3VTTL电平

12

VCC

电源脚

电源脚,要求直流3.3V电源,供电电流不小于100mA

13

GND

模块公共地

表3-2HC-08引脚定义

3.4温度检测电路

图3-4温度检测电路

3.4.1DS18B20模块简介

DS18B20是美国DALLAS公司推出的数字温度传感器,将温度传感器、数字转换电路集成到了一起。

直接将温度转化成数字信号传送给单片机处理,因而可省去传统的信号放大、A/D转换等外围电路。

3.4.2引脚功能

引脚功能定义如下:

DQ:

数据输入输出,可直接与单片机的I/O口相连。

VDD:

+5V电源电压。

GND:

电源地。

3.4.3编程方式

DS18B20内部有9个字节的暂存器。

第2、3、4个字节数据为存放于EEPROM数据的镜像。

开始两个暂存器存放当前测到的温度值,以16位补码形式表示12位温度读数。

16位温度转换值的存放格式,高5位是温度值的符号扩展,中间7位是温度值的整数部分,最低4位为小数部分。

如果测得的温度大于0,高5位为0,只要将测到的数值乘以0.0625(1/16)即可得到实际温度;如果温度小于0,高5位为1,测到的数值需要取反加1再乘以0.0625即可得到实际温度。

温度与转换后的数字量的对应关系见下表所示。

度/℃

16位二进制编码

十六进制表示

+125

0000011111010000

07D0H

+85

0000010101010000

0550H

+25.0625

0000000110010001

0191H

+10.125

0000000010100010

00A2H

+0.5

0000000000001000

0008H

0

0000000000000000

0000H

-0.5

1111111111111000

FFF8H

-10.125

1111111101011110

FF5EH

-25.0625

1111111001101111

FE6FH

-55

1111110010010000

FC90H

表3-3温度与转换后的数字量的对应关系

3.5模拟加热电路(本设计中以LED灯和继电器模拟加热电路)

图3-5加热电路图

当单片机接收到命令0时,继电器吸合,加热电路开始工作;当单片机接收命令1时,继电器断开,加热电路停止工作

四、系统软件部分设计

4.1系统软件流程图

主函数设置定时器为方式2,然后运行头lcd1602文件中的LCD初始化函数,串口初始化函数,以及ds18b20头文件中的读取温度函数,再通过数组显示温度,见图4-1。

定时器中断函数采用if选择结构,当sbuf接收到ASCII码0x30,则点亮LED,0x31熄灭LED,0x32就把温度以数组的依次送回手机界面。

见图4-2

图4-1主函数流程图图4-2定时器中断函数流程图

4.2程序清单

见附录二

五、系统仿真及实物制作

5-4Proteus仿真原理图

见附录三

附录一ProtelDXP原理

附录二程序清单

#include

#include"LCD1602.h"

#include"ds1820.h"

#definePINLV11059200UL//使用11.0592M晶体

#defineBAUD_96009600UL//波特率定义为9600

sbitLED=P1^4;

#defineucharunsignedchar

#defineuintunsignedint

ucharfh,bw,sw;

inti;

uintty1,temp,tempx,tempi;

uchardisplaytemp[16]="temp";//第一行

voidUART_INIT(void);//函数声明

voiddelays(unsignedintus)

{

while(us--);

}

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

*串口初始化子函数

*T1工作在方式2,波特率9600,开串口中断

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

voidUART_INIT(void)

{

TMOD=0x20;//定时器1工作在模式2,自动重装模式

SCON=0x50;//串口工作在模式1

TH1=256-PINLV/(BAUD_9600*12*16);//计算定时器重装值

TL1=256-PINLV/(BAUD_9600*12*16);

PCON|=0x80;//串口波特率加倍

ES=1;//串行中断允许

TR1=1;//启动定时器1

EA=1;//允许中断

}

voidDISPLAY()

{

displaytemp[4]=':

';

displaytemp[5]=fh;

bw=tempi/100;

if(bw==0)

{displaytemp[6]='';}

else

{displaytemp[6]=bw+0x30;}

sw=(tempi%100)/10;

if(sw==0)

{displaytemp[7]='';}

else

{displaytemp[7]=sw+0x30;}

displaytemp[8]=(tempi%100)%10+0x30;

displaytemp[9]='.';

displaytemp[10]=tempx/10+0x30;

displaytemp[11]=0xdf;

displaytemp[12]=0x43;

LCD_Write_String(0,1,displaytemp);//显示第二行

}

//主程序

voidmain()

{P1=0x00;

LCD_initial();

UART_INIT();//串口初始化

while

(1)

{

temp=retemp();

ty1=temp;

if(ty1>0xf000)

{

fh='-';

temp=~temp;

temp+=1;

}

else

{

fh='+';

}

tempi=temp>>4;

tempx=(temp&0x000f)*6.25;

DISPLAY();

delays(10);//显示//原地踏步

}

}

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

*中断服务子函数

*清除RI,同时判断接到的数据

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

voiduart(void)interrupt4

{

unsignedcharn;//接收数据寄存器

if(RI)//是否收到数据

{

RI=0;//清中断请求

n=SBUF;//读入缓冲区的值

/*switch(n)

{

case0X30:

LED=1;break;

case0X31:

LED=0;break;

case0X32:

for(i=0;i<11;i++)

{n=displaytemp[i];

while(TI==0);

TI=0;

delays(100000);}break;

}*/

if(n==0x30)

LED=1;

if(n==0x31)

LED=0;

if(SBUF==0x32)

{

for(i=0;i<11;i++)

{

SBUF=displaytemp[i];

while(TI==0);

TI=0;

delays(100000);

}

}

}

}

 

附录三Proteus仿真原理图

 

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

当前位置:首页 > 经管营销 > 经济市场

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

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