目录
实验目的
掌握AT89C51蓝牙通信的工作原理。
掌握AT89C51单片机实现蓝牙串口通信的程序原理。
掌握STC串口助手使用方法。
了解电磁继电器的基础概念与工作原理。
实验内容
仿真部分
基于Proteus绘制AT89C51的最小系统,使用物理串口来模拟蓝牙通信来控制继电器工作,进而控制LED灯的亮灭。即保证系统必须包含MCU、电源、时钟、复位电路、COMPIM物理串口和模拟强电场的电磁继电器电路。
利用stc-isp-15xx-v6.92D来发送指令,从而控制LED灯的亮灭。
实战部分
使用单片机(STC89C52/51、AT89C52/51或AT89S52/51都可通用)USB转串口芯片、蓝牙模块(HC-05/06等)、电磁继电器和LED灯以及配套元器件来实现仿真实验的实战。
利用手机APP-SPP蓝牙串口来发送指令,控制LED灯的亮灭。
环境搭建
若具备相关实验环境可跳过此步骤。
软件下载
表 1附上了虚拟串口6.9、串口调试助手sscom、stc-isp-15xx-v6.92D的下载链接,可以直接“Ctrl键+右键”点击链接进入下载。
其中,“SPP蓝牙串口”为手机APP,下表里的链接是存储APP安装包的压缩包,需要将该压缩包下载到手机后,用手机解压(手机QQ浏览器可以解压压缩包)后再点击安装包进行安装。部分型号手机可以在应用商店直接下载。
表 4 蓝牙串口相关必备软件下载链接
虚拟串口6.9 | ![]() | |
串口调试助手sscom | ![]() | |
stc-isp-15xx-v6.92D | ![]() | |
SPP蓝牙串口手机APP | ![]() | |
STC资源网站 | STC网站 | |
STC手册 |
仿真实验过程
先仿真,再实战,可以让我们更容易理解和熟悉蓝牙串口的工作方式,若对蓝牙串口的工作原理有一定的基础认识,则可以直接进行真实设备的实战练习。
模拟电路仿真
打开Proteus并创建新项目
打开Proteus软件。
参考“实验6单片机入门-串口通信 图 2”绘制好物理串口的51单片机系统图。
绘制仿真电路图
对晶振、51单片机和COMPIM物理端口,设置好如图 15所示设置好相关参数。其中,图中的a) 晶振频率为:11.0592MHz、b) 单片机频率为:11.0592MHz、c) 物理串口连接的是:COM3口、时钟频率为:9600。
参考表 3的元器件,绘制如图 16所示的电路图,注意在绘制电路图时,各个部件的参数(如电阻和电容的值等)需要与图中对应,并根据图 23和图 24设置好相关参数。
在51单片机最小系统的RXO和TXD端口上连接上COMPIM物理串口。
绘制继电器电路,并将继电器的控制端连接到单片机的P2.0端口上。
图 21 调整各部件的相关参数
表 5 部分器材清单
元器件 | 名称 | 数量 | 备注 |
BATTERY | 供电电源(模拟高电压) | 1 | 元件模式 |
G2R-14-AC120 | 继电器 | 1 | 元件模式 |
LED-YELLOW | 黄色LED灯 | 1 | 元件模式 |
图 22 添加COMPIM端口
电磁继电器小知识:继电器工作时,低电压控制的电磁铁通电,把高电压的衔铁吸下接触,强电场的工作电路闭合。电磁铁断电时失去磁性,弹簧把衔铁拉起来,切断强电场的工作电路。因此,继电器就是利用低电压控制电磁铁来控制强电场的工作电路通断的开关。
此处设置的是控制继电器电磁铁的电压为5V(模拟低电压)。
此处设置的是为LED灯供电的电压为12V(模拟强电场电路)。
程序实现
程序编写
参根据实验要求,编写基于AT89C51单片机串口通信的程序。
使用Keil编程工具搭建好AT89C51的C语言程序运行环境。
程序示例:
#include <reg51.h>
#define RelayPort P2 //定义继电器所在端口
sbit Bluetooth_Rx = P3^0; //定义蓝牙串口接收引脚
sbit Bluetooth_Tx = P3^1; //定义蓝牙串口发送引脚
void delay(int n)
{
int i, j;
for(i = 0; i < n; i++)
for(j = 0; j < 110; j++);
}
void RelayOn(void) //继电器闭合函数
{
RelayPort |= 0x01; //将端口P2上第0位设为高电平
}
void RelayOff(void) //继电器断开函数
{
RelayPort &= ~0x01; //将端口P2上第0位设为低电平
}
void UART_Init(void)
{
TMOD = 0x20; //设置定时器1为工作模式2
SCON = 0x50; //设置串口为模式1
TH1 = 0xfd; //设置波特率为9600,使用定时器1
TR1 = 1; //启动定时器1
ES = 1; //使能串口中断
EA = 1; //使能总中断
}
void UART_ISR(void) interrupt 4
{
int da;
if(RI) //判断是接收中断
{
da = SBUF; //读取串口接收到的数据
RI = 0; //清除接收中断标志
if(da == 1) //如果接收到的是字符‘1’
RelayOn(); //继电器闭合
else if(da == 0) //如果接收到的是字符‘0’
RelayOff(); //继电器断开
}
SBUF = da;
while(!TI);
TI=0;
}
void main(void)
{
TCON = 0x05; //设置定时器0为工作模式1
UART_Init(); //初始化串口
while(1)
{
//主循环中可以进行其他任务
}
}
程序导入
参考“[物联网工程]基于Protues仿真平台的C51/2单片机串口通信实验”的“程序实现 ”将编写好的程序编译成“.hex”的二进制文件后,导入到AT89C51微控制器。
运行仿真
打开“虚拟串口”软件,并添加如图 17所示的虚拟串口
在添加端口之前,先将原来添加的虚拟串口删除后,再添加新的端口。这里添加的是:COM3和COM4口。
图 25 添加虚拟串口
如图 18所示,点击“开始仿真”来启动仿真。
图 26 运行Proteus的仿真电路
打开stc-isp-15xx-v6.92D,并参照图 27来设置相关参数
如图 20所示,在对话框输入控制命令0或1,其中,发送0控制LED灯亮,发送1控制LED灯灭,然后依次点击“打开串口”和点击“发送数据”按钮,并查看Proteus中LED的亮灭情况。
图 28 数据发送/接收测试
真实设备实战
硬件连接
连接硬件设备时需要配合图 16的仿真原理图来进行连接。
图 29 真实设备连接情况
程序实现
程序编写
将“程序编写”“.hex”的二进制文件后,再利用STC烧录器和USB数据线导入单片机。
程序导入
如图 30~图 33为将编译好的“.hex”文件导入单片机的过程。
首先,用USB数据线将单片机与电脑进行连接,然后打开“stc-isp-15xx-v6.92D”软件,进行串口选择和相关参数设置,并在STC中选择编译好的程序文件。
图 30 stc-isp-15xx-v6.92D软件参数设置
其次,将编译好的程序文件(.hex文件)添加到STC中。
图 31 程序导入
接下来,将导入STC的文件下载到单片机中。
图 32 程序下载
最后,等待下载完成之后是导入成功的界面。
运行验证
打开“SPP蓝牙串口”手机APP,连接上本次实验的蓝牙模块,这里使用的为“BT04-A”名称的蓝牙模块,不同蓝牙模块的蓝牙名称可能不同,根据实际情况连接上自己实际使用的蓝牙模块就即可。连接成功后,在蓝牙串口APP里发送0或1的指令,单片机上的蓝牙模块接收到来自手机的控制指令后,由单片机将指令下发到与之连接的继电器,让继电器的电磁铁开始工作,继电器衔铁吸下接触或断开,进而控制LED灯的亮灭。
如图 34所示,在连接上自己实际使用的蓝牙模块后,在SPP蓝牙串口的输入框中输入“0”时,上面的LED灯亮,下面的LED灯处于熄灭状态。
如图 35所示,在SPP蓝牙串口的输入框中输入“1”时,上面的LED灯处于熄灭状态,下面的LED灯亮。
总结拓展
这个实验演示了如何通过AT89C51微控制器,完成单片机蓝牙串口通信实验。可以根据需要扩展和定制程序,添加更多的功能和交互。确保正确连接元件并配置相关引脚,以串口正常工作。