使用keil,proteus,虚拟串口,完成蓝牙通信

目的:

通过HC-06的蓝牙芯片,AT89C51的51单片机,借助keil,proteus,通过虚拟串口,在电脑上实现蓝牙串口通信,控制LED的开和关。

存在的问题:

单片机和蓝牙不能联动,暂未找出问题的原因

如何让keil和protus联动,参考文章:

使用Proteus和keil实现单片机的第一个程序_stanleyrain的博客-CSDN博客

步骤1 使用proteus绘制电路图

注意:

1. proteus本身并不支持蓝牙仿真,需要下载蓝牙模块,并将模块拷贝到proteus库中

(1)蓝牙模块下载网址:

Download Bluetooth Library for Proteus rar

(2)解压缩

(3)将解压缩的文件,拷贝到proteus库文件夹

步骤2 使用keil编写程序

程序源代码如下:

#include<reg51.h>
#include <stdio.h>
#define uint unsigned int;
#define uchar unsigned char;

sbit LED0 = P1^0;
sbit LED1 = P1^1;
sbit LED2 = P1^2;
sbit LED3 = P1^3;

sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;

uchar rev = 0;  //bluetooth receive
bit rok = 0;    //is the receive ok?

void Com_Init();   //initial serial port
void id_signal();  //judge the received signal and execute the sub-process

void main()
{
	P1 = 0x00;  //close all lights
	P2_0 = 0;
	P2_1 = 0;
	P2_2 = 0;
	
	Com_Init();
	
	while(1)
	{
		if(rok)
		{
			P2_1 = ~P2_1;
			id_signal();
		}
	}
}


void Com_Init()
{
	SCON = 0x50;   //serial port works on 1, allow receiving
	TMOD = 0x20;   //Timer works on 2
	
	PCON &= 0x7f;   //set SMOD = 0, make sure the correct baud rate
	
	
	TH1 = 0xFD;    //set baud rate is 9600
	TL1 = 0xFD;
	
	TR1 = 1;    //start baud rate generator
	ES = 1;     //open serial port interruption
	EA = 1;     //open general interruption
	
	REN = 1;    // allow receive
		
}

void id_signal()
{
	if(rev == 0x30)
		P2_2 = !P2_2;
		
	switch(rev)
	{
		case 0x30: LED0 = ~LED0; break;
		case 0x31: LED1 = ~LED1; break;
		case 0x32: LED2 = ~LED2; break;
		case 0x33: LED3 = ~LED3; break;
		default: break;
	}
	
	rok = 0;
	REN = 1;
}

void Com_Int() interrupt 4
{
	ES = 0;
	
	P2_0 = ~P2_0;
	
	if(RI)
	{
		rev = SBUF;
		RI = 0;
		rok = 1;
	}
	ES = 1;
}

 步骤3 安装虚拟串口软件

具体可以参加文章:

工具 | 虚拟串口软件的使用分享_51CTO博客_虚拟串口工具

下载地址:

Virtual Serial Port Driver - create and emulate virtual COM port

安装好后,创建一个虚拟串口对

在设备管理器中,检查虚拟串口存在

步骤4 使用串口助手发生串口信息给Proteus

下载一个串口助手软件,如:友善串口调试助手,下载地址:

友善串口调试助手_串口调试工具最新版官方下载-华军软件园

 安装好软件后,打开软件,进行串口设置,如图所示

在Proteus中,配置蓝牙模块

 注意:串口要配对

运行proteus,测试结果如下:

 

 

问题及其说明

 1. 在proteus上无法仿真串口的控制效果,虚拟串口的工具也换了好几种,问题应该出在电路侧,因为代码已经在keil的仿真器里面调试过,具体的调试方法说明如下:

(1)点击Options for Target,选中Debug选项,勾选Use Simulator

 

 (2)开始Debug

 (3)在命令行处,输入如下命令,图片处高亮位置。其作用是将模拟器的端口绑定到com1口

 

mode com1 9600,0,8,1
assign com1 <sin >sout

(4)使用串口助手,发送命令给模拟器

注意,此时代码停留在断点 if(rev == 0x30)处,表明软件被中断触发,代码可以正常执行。

 

### 如何在 Proteus 中设计或仿真蓝牙模块 #### 创建工程文件并设置参数 在 Proteus 软件中,首先需要创建一个新的工程文件,并根据项目需求调整相关参数。这一步骤对于后续的设计至关重要,因为它决定了项目的整体框架和工作环境[^1]。 #### 添加蓝牙模块及相关组件 为了实现蓝牙功能的仿真,需向电路中添加 HC-05 或其他类型的蓝牙模块。如果目标设备未内置于 Proteus 的默认库中,则可能需要手动导入或创建对应的库文件。确保所选元件能够满足通信协议的要求,并与其他硬件(如单片机)正确连接。 #### 配置虚拟串口替代方案 当实际的蓝牙模块无法直接用于 Proteus 仿真时,可采用虚拟串口作为替代手段。这种方法特别适用于 STM32 或 AT89C51 类型的单片机控制系统。通过 PC 端的串口调试工具发送命令至虚拟串口,从而模拟真实的蓝牙交互过程[^2][^3]。 #### 编写与加载仿真脚本 针对特定应用场景,编写必要的仿真脚本来增强功能性测试的效果。这些脚本可用于自动化数据传输流程或者重现复杂的用户行为模式。例如,在基于 STM32 的蓝牙小车案例里,可以通过预定义好的脚本让车辆按照指定路径移动[^4]。 #### 执行仿真及验证结果 启动 Proteus 内嵌的仿真器后,仔细观察各个子系统的运作状况是否达到预期标准。重点检查蓝牙模块的数据收发能力及其同主控单元之间的协调配合程度。一旦发现问题所在,及时修改设计方案直至完全符合技术指标为止。 ```python # 示例 Python 代码片段展示如何利用 pySerial 库操控虚拟串口 import serial def send_command(command): ser = serial.Serial('COM3', 9600) # 假定 COM3 是虚拟串口号 try: ser.write(command.encode()) response = ser.readline().decode() print(f"Received from device: {response}") finally: ser.close() send_command("START") # 向虚拟串口发送 START 指令 ```
评论 133
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值