用手机App玩转单片机LED:一个HC-06蓝牙模块的完整物联网小项目(附STC89C52代码)
2026/6/8 6:21:06 网站建设 项目流程

用手机App玩转单片机LED:一个HC-06蓝牙模块的完整物联网小项目(附STC89C52代码)

在智能家居和物联网设备遍地开花的今天,你是否想过自己动手打造一个可以通过手机控制的智能硬件?本文将带你从零开始,用最常见的STC89C52单片机和HC-06蓝牙模块,构建一个完整的手机遥控LED系统。这个项目不仅适合嵌入式开发新手入门,也能让创客爱好者快速体验物联网的乐趣。

1. 项目准备与硬件连接

1.1 所需材料清单

在开始项目前,我们需要准备以下硬件设备:

  • STC89C52单片机开发板(或兼容的51系列开发板)
  • HC-06蓝牙模块(建议选择带4针接口的版本)
  • USB转TTL模块(用于程序烧录和调试)
  • LED灯组(8个LED灯,或使用开发板上的P2口LED)
  • 杜邦线若干(公对公、公对母各准备一些)
  • 5V电源适配器(或使用开发板的USB供电)

提示:购买HC-06模块时,注意区分主从模式版本。本项目使用从机模式即可,价格通常在15-25元之间。

1.2 硬件连接示意图

正确的硬件连接是项目成功的第一步。下面是各模块间的接线方式:

模块引脚连接目标引脚
HC-06蓝牙模块VCC开发板5V
GND开发板GND
TXD开发板RXD(P3.0)
RXD开发板TXD(P3.1)
STC89C52P2.0-P2.7LED灯组正极
GNDLED灯组负极

重要注意事项

  1. 蓝牙模块的TXD应连接单片机的RXD,RXD连接单片机的TXD
  2. 烧录程序时,需要断开蓝牙模块与单片机的连接,否则可能导致烧录失败
  3. LED灯组需要串联限流电阻(通常220Ω-1kΩ)

2. 单片机程序设计

2.1 串口通信基础配置

STC89C52单片机通过串口与HC-06蓝牙模块通信。我们需要正确配置串口参数,确保数据传输的稳定性。以下是基于11.0592MHz晶振的配置代码:

#include <REGX52.H> // 串口初始化函数,波特率9600 void UartInit(void) { PCON &= 0x7F; // 波特率不倍速 SCON = 0x50; // 8位数据,可变波特率 TMOD &= 0x0F; // 清除定时器1模式位 TMOD |= 0x20; // 设置定时器1为8位自动重装模式 TL1 = 0xFD; // 设置定时初始值 TH1 = 0xFD; // 设置定时重载值 ET1 = 0; // 禁止定时器1中断 TR1 = 1; // 启动定时器1 ES = 1; // 开启串口中断 EA = 1; // 开启总中断 }

2.2 主程序与中断处理

主程序主要负责初始化工作,而实际的数据处理在串口中断服务程序中完成:

void main() { UartInit(); // 初始化串口 while(1) { // 主循环可以添加其他功能 } } // 串口中断服务程序 void Uart_Interrupt() interrupt 4 { if(RI == 1) { // 检查接收中断标志 P2 = SBUF; // 将接收到的数据直接输出到P2口 RI = 0; // 清除接收中断标志 } }

这段代码的工作原理是:

  1. 手机发送的数据通过蓝牙传输到HC-06模块
  2. HC-06通过串口将数据发送给单片机
  3. 单片机在串口中断中接收数据,并直接输出到P2口
  4. P2口连接的LED会根据接收到的数据亮灭

2.3 程序烧录与测试

使用STC-ISP等烧录工具将程序写入单片机:

  1. 选择正确的单片机型号(STC89C52RC)
  2. 设置正确的COM端口(通过设备管理器查看)
  3. 打开编译生成的.hex文件
  4. 点击"下载/编程"按钮
  5. 给单片机上电开始烧录

注意:烧录时需要断开蓝牙模块与单片机的连接,否则可能导致通信冲突。

3. 手机端配置与调试

3.1 蓝牙调试APP选择

市面上有多种蓝牙串口调试APP可供选择,以下是几款常见应用的对比:

应用名称平台特点推荐指数
蓝牙串口助手Android界面简洁,功能齐全★★★★★
Serial BluetoothAndroid支持多种数据格式★★★★☆
LightBlueiOS专业级蓝牙调试工具★★★★☆
BToolAndroid支持AT指令调试★★★☆☆

3.2 连接与通信测试

完成硬件连接和程序烧录后,按照以下步骤测试系统:

  1. 给开发板和蓝牙模块上电
  2. 打开手机蓝牙设置,搜索并配对HC-06(默认密码通常是1234或0000)
  3. 打开蓝牙串口调试APP,选择已配对的HC-06设备
  4. 在发送框中输入十六进制数据(如FF、55、AA等)
  5. 观察开发板上LED的变化

常用测试指令

  • FF:所有LED亮
  • 00:所有LED灭
  • 55:间隔点亮LED(01010101)
  • AA:间隔点亮LED(10101010)

4. 项目扩展与进阶应用

4.1 增加控制指令集

基础的直接输出控制虽然简单,但缺乏灵活性。我们可以设计一套简单的指令协议:

void Uart_Interrupt() interrupt 4 { if(RI == 1) { unsigned char cmd = SBUF; RI = 0; switch(cmd) { case 'A': P2 = 0xFF; break; // 全亮 case 'B': P2 = 0x00; break; // 全灭 case 'C': P2 ^= 0xFF; break; // 反转状态 case 'D': P2 <<= 1; break; // 左移 case 'E': P2 >>= 1; break; // 右移 default: P2 = cmd; // 直接输出 } } }

这样,手机端可以发送字母指令来实现更丰富的控制效果。

4.2 添加状态反馈功能

当前系统是单向通信,我们可以增加从单片机向手机发送状态信息的功能:

void SendToPhone(unsigned char dat) { SBUF = dat; while(!TI); // 等待发送完成 TI = 0; // 清除发送中断标志 } // 在主循环中添加状态检测 void main() { UartInit(); unsigned char lastP2 = P2; while(1) { if(P2 != lastP2) { SendToPhone(P2); // 状态变化时发送当前值 lastP2 = P2; } } }

4.3 进阶应用场景

这个基础项目可以扩展为多种实用设备:

  1. 智能家居控制器:通过继电器模块控制家电
  2. 蓝牙遥控小车:控制电机驱动模块
  3. 环境监测终端:连接温湿度传感器,将数据发送到手机
  4. 电子门锁系统:结合电磁锁实现手机开锁

5. 常见问题排查

5.1 蓝牙无法连接

可能原因及解决方法:

  1. 供电不足

    • 确保蓝牙模块获得稳定的5V电源
    • 检查电源线连接是否牢固
  2. 配对密码错误

    • 尝试常见密码:1234、0000、8888
    • 如需修改密码,需要通过AT指令设置
  3. 波特率不匹配

    • 确认蓝牙模块与单片机使用相同波特率
    • 默认通常是9600,但也可能是115200

5.2 数据接收不稳定

数据传输异常的可能解决方案:

  1. 检查接线

    • 确认TXD-RXD交叉连接
    • 检查杜邦线是否接触良好
  2. 降低波特率

    • 如果使用12MHz晶振,建议改用4800波特率
    • 修改蓝牙模块波特率与之匹配
  3. 添加软件校验

    • 在协议中加入校验和
    • 实现简单的重传机制

5.3 LED响应不正确

当LED表现与预期不符时:

  1. 检查LED极性

    • 确认所有LED方向一致
    • 长脚为正极,短脚为负极
  2. 验证P2口输出

    • 用万用表测量P2各引脚电压
    • 发送FF时应全部为高电平
  3. 排查程序问题

    • 确认中断服务程序被正确调用
    • 检查SBUF是否被正确读取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询