【超详细】C51单片机与HC-05蓝牙模块实现手机点灯

article/2025/10/11 20:59:26

此文记录HC05蓝牙模块在C51单片机上的学习历程

文章目录

  • 一、硬件连接
        • (1)配置模式下接线
        • (2)正常模式下接线
  • 二、配置模式操作
  • 三、正常模式
  • 四、使用蓝牙通过蓝牙调试app点灯
    • 1.单片机代码烧录与蓝牙连接
    • 2.蓝牙调试app配置


一、硬件连接

HC05一共有6个引脚,此实验一般只用到中间四个,即RXD、TXD、GND、VCC
在这里插入图片描述
HC05有两种模式,一是正常模式,二是配置模式,一定注意两种模式的接线方法是不同的

无论哪种模式,VCC与GND的接线方法是相同的,即VCC接单片机的5V口(供电电压为3.6V~6V,接到3.3V上是不亮的),GND接单片机的GND,如下所示
在这里插入图片描述


(1)配置模式下接线

在这里插入图片描述
在配置模式下,单片机通过串口与电脑连接,电脑通过AT指令即可完成对HC05模块的参数配置。此时接线为:

配置模式下HC05的RXD接单片机的RXD,TXD接TXD。

由于博主使用的单片机型号为STC89C52RC,查看原理图得单片机的RXD为p30口,TXD为p31口

在这里插入图片描述

则连接如下图所示
在这里插入图片描述


(2)正常模式下接线

在这里插入图片描述

在正常模式下HC05的RXD接单片机的TXD,TXD接RXD。


二、配置模式操作

使用配置模式接线后,将单片机通过串口连接电脑。若此时给单片机上电,在连接无误的情况下, HC05模块上有灯快速闪烁,大概1s闪两次,此时还未进入配置模式。
给单片机断电,一直按住HC05模块上的小按钮,如下图所示:
在这里插入图片描述
在按住按钮的同时给单片机上电,上完电后松开按钮,HC05首先会快速闪烁,在1s后进入慢闪状态,大约2s闪烁一次,此时成功进入配置模式。
打开串口助手,题主这里用的是sscom5.13.1。打开之后配置串口助手,如下图所示,
(1)首先注意串口号是否正确
(2)然后一定要将波特率设置为38400(此波特率为配置模式的波特率,无论后面通过指令将波特率变为多少,都是调整的正常模式的波特率,配置模式的波特率为38400是不变的)
(3)勾选加回车换行选项(若使用的串口助手无此选项,手动在代码后加上\r\n,例如AT\r\n)
在这里插入图片描述

(4)打开串口,在输入框内输入AT,点击发送。若一切正常,则会收到OK,如下图所示。
若没有收到,请检查接线,或者中奖了,单片机/模块有问题
在这里插入图片描述

接下来可以使用AT指令对模块进行配置,部分AT指令如下

AT+ROLE=0 (蓝牙模块设为从机,此时只可以被搜索)
AT+CMODE=1 (蓝牙模块可以和任意设备连接)
AT+UART=9600,0,0 (设置波特率9600)
AT+NAME=HC05 (设置蓝牙的名字为HC05,手机蓝牙搜索时就找这个名字)
AT+PSWD=1234 (设置密码,手机蓝牙串口APP连接蓝牙模块,需要输入密码)
以上,蓝牙串口通通返回OK 。

例如改变波特率为9600:

在这里插入图片描述


三、正常模式

将接线按照正常模式接入,即RXD对TXD,TXD对RXD。给单片机上电,HC05会快速闪烁。下载一个手机蓝牙调试app(题主使用的为Bluetooth spp pro,其他在应用市场上搜索的大部分也可以使用),搜索到自己的设备
在这里插入图片描述
点击连接,输入密码(一般默认为1234,可以在配置模式下通过AT指令修改自己的连接密码),然后连接成功。


四、使用蓝牙通过蓝牙调试app点灯

1.单片机代码烧录与蓝牙连接

单片机代码如下:
UART_init () 配置文件

#include <REGX52.H>void UART_init()		//9600bps@11.0592MHz
{PCON |= 0x80;		//使能波特率倍速位SMODSCON = 0x50;		//8位数据,可变波特率  TMOD &= 0x0F;		//清除定时器1模式位TMOD |= 0x20;		//设定定时器1为8位自动重装方式TL1 = 0xFA;		//设定定时初值TH1 = 0xFA;		//设定定时器重装值ET1 = 0;		//禁止定时器1中断TR1 = 1;		//启动定时器1ES=1;EA=1;
}

.h文件

#ifndef __UART_H__
#define __UART_H__
void UART_init();
#endif

main.c文件

#include <REGX52.H>void main()
{UART_init();P2=0x00;while(1){}
}void UART_Routine() interrupt 4{if (RI==1){P1=SBUF;//将SBUF值赋值给P1if (P1==0x01){P2=~0x80;RI=0;}else if (P1==0x02){P2=~0x40;RI=0;}}}

将代码烧录进单片机后,给单片机上电,此时HC05快速闪烁,打开手机app进行蓝牙连接,连接成功后HC05进入慢闪(大约5s快速闪两次)。

在这里插入图片描述


2.蓝牙调试app配置

连接成功后选择键盘模式,选择配置键盘值
在这里插入图片描述
配置两个按键的键盘值
在这里插入图片描述
在这里插入图片描述

!!! 别忘记选择IO模式,选择为hex模式,若选错模式则实验会毫无反应
(若选择为ascii模式,则代码需要改动,例如键盘发送01给单片机,在hex模式下单片机收到的值为0x01,在ascii模式下收到的为0x0031,具体转换方法请查看acii码表)
在这里插入图片描述
配置结束后,点击保存键盘配置。
按下1键,单片机led D8闪烁;按下2键,单片机led D7闪烁,此时实验成功。


http://chatgpt.dhexx.cn/article/L1jYgTcq.shtml

相关文章

【单片机】C51中的I2C操作-Proteus+Keil4+C语言实现

51单片机中I2C读写操作 开发板&#xff1a;普中51-单核-A2&#xff1b; I2C器件-EEPROM&#xff1a;AT24C02、FM24C02(仿真EEPROM); 仿真软件&#xff1a;proteus&#xff1b; 开发环境&#xff1a;Keil4&#xff1b; 参考资料&#xff1a;开发板所附视频&#xff1b; 如有错误…

51单片机 智能小车

主函数中extern char speed 是在整个工程中与别处的speed共用一个内存 sprintf字串格式化命令&#xff0c;主要功能是把格式化的数据写入某个字符串中。 一、小车组装、用面包板供电、单片机也可以用面包板供电&#xff0c;必须共地、分文件&#xff08;模块化编程&#xff09…

C51单片机 SIM900A 手机给门禁解锁 智能家居 【C程序代码已开源,更新至Ver4.0】...

为何要实施这个项目? 一般小区楼下,每幢都会有一个门禁系统, 可以使用钥匙打开门禁, 有的可以使用刷卡打开门禁, 有的可以使用密码打开门禁, 但是,长期下来,因为小区人多,锁的钥匙孔会被捅坏,物业修起来也很怠慢 使用密码按键解锁门禁,按键也会失灵 每家都会安装一个…

基于STC89C51单片机,CH340芯片的下载电路

前几天看到了卓晴公众号写的三篇关于STC系列单片机的下载电路&#xff0c;然后结合了其他的文章&#xff0c;对下载电路有了更加深入的了解&#xff0c;在这里我梳理一下自己的学习过程&#xff0c;附上完整的资料&#xff0c;方便日后查看&#xff0c;也方便有兴趣的同学交流讨…

C51单片机简易密码锁(课程设计)

已经过测试&#xff0c;全部可用。手机好像不能发博客&#xff0c;相册提取图片代码粘黏复制可用。 本密码锁用于开门关门。绿灯保持常亮状态&#xff0c;表示一直通电状态。如果处于开门状态&#xff0c;则红灯也会亮起。&#xff08;单片机上无法显示红绿灯&#xff0c;仿真…

51单片机的架构与原理(STC89C51)

前言 学习单片机&#xff0c;不管怎么学都是要走一些弯路的&#xff0c;有的人弯路走得多&#xff0c;有多人弯路走得少&#xff0c;有些人中途就放弃了&#xff0c;也有不少人成功上岸&#xff0c;掌握了各式各样的单片机、处理器。用51单片机来学习是最合适不过的&#xff0c…

C51单片机利用HC-05蓝牙模块实现手机点灯

蓝牙通信&#xff0c;实现手机端远程(15米)控制单片机&#xff0c;这听起来对于初学者的我来说&#xff0c;是那么不可思议&#xff0c;经过不断地实验&#xff0c;阅读其他大佬的文章&#xff0c;终于实现了。 在有基础的通信原理知识的前提下&#xff0c;知&#xff0c;HC-05…

基于C51单片机的ESP8266Wifi模块(ESP-01s)编程(详细)

1、模块简介 ESP-01S 是由安信可科技开发的 Wi-Fi 模块&#xff0c;该模块核心处理器为ESP8266。ESP8266 拥有完整的且自成体系的 Wi-Fi 网络功能&#xff0c;既能够独立应用&#xff0c;也可以作为从机搭载于其他主机 MCU 运行。当 ESP8266 独立应用时&#xff0c;能够直接从外…

(可远程)开源手机app控制c51单片机,附微信小程序控制

开源手机app控制c51单片机 第一 、先上效果图第二、原理讲解第三、下载程序到c51第四 app inventor 开发第五、微信小程序开发第六 可能遇到的一些小问题 第一 、先上效果图 第二、原理讲解 原理简述&#xff1a;利用发布订阅模式。第一步&#xff0c;新建主题&#xff0c;第二…

java实例内部类

内部类&#xff1a;可以将一个类定义在另一个类或者一个方法的内部。描述一个事物的一个完整结构的描述。内部类包括&#xff1a;实例内部类&#xff08;普通内部类&#xff09;&#xff0c;静态内部类&#xff0c;局部内部类&#xff08;定义在方法里&#xff0c;几乎不用&…

Java内部类介绍 - 局部内部类和匿名内部类

文章目录 内部类局部内部类匿名内部类匿名内部类介绍常见的使用形式开发中使用场景 内部类 局部内部类 局部内部类 &#xff08;鸡肋语法&#xff0c;了解即可&#xff09; 局部内部类, 在方法、代码块、构造器等执行体中创建一个类, 称为为局部内部类(但是我们一般都不会这样…

夯实Java基础系列8:深入理解Java内部类及其实现原理

本系列文章将整理到我在GitHub上的《Java面试指南》仓库&#xff0c;更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star、Fork、Watch三连哈&#xff0c;感谢你的支持。 文章首发于我的个人博客&#xff1a; www.how2playlife.c…

初识JAVA内部类

1 内部类概述 如果一个类存在的意义就是为指定的另一个类&#xff0c;可以把这个类放入另一个类的内部。 就是把类定义在类的内部的情况就可以形成内部类的形式。 A类中又定义了B类&#xff0c;B类就是内部类,B类可以当做A类的一个成员看待: 2 特点 1) 内部类可以直接访问外…

java 内部类怎么调用成员变量_JAVA内部类之成员内部类

JAVA有一个特殊的类形式——内部类(这个词有点为难普通话不好的南方朋友)。今天我们就来聊聊内部类的一种&#xff1a;成员内部类。 如何定义成员内部类 那要如何定义成员内部类呢。 既然叫成员内部类&#xff0c;说明和成员变量是有类似的地方。从代码的层次结构上来看他是和成…

Java内部类(匿名内部类)

Java内部类&#xff08;匿名内部类&#xff09; 一、内部类二、静态内部类三、成员内部类四、局部内部类&#xff08;了解即可&#xff09;五、匿名内部类&#xff08;重要&#xff09; 一、内部类 1、概述 内部类就是一个定义在一个类里面的类&#xff0c;里面的类可以理解为…

Java 内部类的四种实现方式

Java 内部类的四种实现方式 前言 今天的话我将为大家介绍Java的四种内部类&#xff0c;他们分别是普通内部类&#xff0c;静态内部类&#xff0c;局部内部类&#xff0c;匿名内部类。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、内部类是什么&…

Java内部类

Java内部类 内部类成员内部类局部内部类匿名内部类静态内部类常规面试案例内部类实例化对象重名变量的引用 内部类 是什么&#xff1f; 字面意思&#xff0c;在类的内部编写的类就叫内部类&#xff01; 为了方便区分、学习、理解我们一般将内部类分为以下几种&#xff01; 内部…

java内部类赋值_详解 Java 内部类

内部类在 Java 里面算是非常常见的一个功能了,在日常开发中我们肯定多多少少都用过,这里总结一下关于 Java 中内部类的相关知识点和一些使用内部类时需要注意的点。 从种类上说,内部类可以分为四类:普通内部类、静态内部类、匿名内部类、局部内部类。我们来一个个看: 普通…

java new 一个内部类_java内部类

java内部类的几种类型:成员内部类,静态内部类,方法内部类,匿名内部类。 成员内部类:成员内部类是类内部的非静态类。成员内部类不能定义静态方法和变量(final修饰的除外)。这是因为成员内部类是非静态的,类初始化的时候先初始化静态成员,如果允许成员内部类定义静态变量…

java中的内部类

java中的内部类主要分为两类四种&#xff1a; 第一类&#xff1a;定义在外部类局部位置上&#xff0c;分为局部内部类( 有 类名)、匿名内部类(没有类名)。 第二类&#xff1a;定义在外部类的成员位置上&#xff0c;分为成员内部类(没有static修饰)、静态内部类(使用static修饰…