用蓝桥杯单片机开发板实现与HC-06蓝牙模块的通讯

参加完蓝桥杯单片机比赛,发现比赛实现的功能太过单一,于是就买了块蓝牙模块,实现手机控制单片机,实现相关功能。

所需软硬件:HC-06蓝牙串口模块(淘宝可买)蓝桥杯开发板 杜邦线 keil软件STC-ISP软件

首先需了解HC-06,这是蓝牙串口通透模块,可实现与单片机串口的信息交换,有四根管脚,VCC、GND连接电源,TXD蓝牙模块数据发送端,RXD蓝牙模块数据接收端。并且HC-06不能设置主从,所以买的时候要注意一下。只有从模式,即只能被连,不能连其他蓝牙设备。

设置蓝牙模块的相关配置,如:通过发送AT指令配置蓝牙模块的波特率、访问蓝牙的名称、修改名称、密码、修改密码等。这些都要通过AT指令来实现。AT指令可用于配置蓝牙模块,不同设备的AT指令集不同,HC-06的指令集有

HC-06指令集、不可设置主从

1)用杜邦线把蓝牙模块与开发板连接起来,蓝牙模块的RXD连开发板的RXD(P30),TXD连开发板的TXD(P31)。注意:这种接法只限于配置蓝牙模块,正常通讯时蓝牙模块的RXD连开发板的TXD(P31),TXD连开发板的RXD(P30),反过来接。

2)手机不要连蓝牙,切记,要不然会配置不成功

3)打开STC-ISP,选择串口助手,设置波特率为9600,接收发送设为文本模式,打开串口,在发送端发送指令

请点击输入图片描述(最多18字)

4)通过AT指令设置相关信息

5.设置好相关信息后在keil编写程序,下载源代码可至:https://gitee.com/zhang-yanping/singlechip.git

现在实现的功能是手机APP蓝牙串口,HEX格式下输入1,LED1亮…

注意

1)蓝牙模块的RXD连开发板的TXD(P31),TXD连开发板的RXD(P30)

2)程序下载时不要把线插到单片机开发板上,否则会烧录不成功

3)所有线插好后手机连接蓝牙,如果上面没改,蓝牙名称一般为HC-06,密匙为1234或0000,然后打开蓝牙串口APP,发送数据

请点击输入图片描述(最多18字)

请点击输入图片描述(最多18字)

代码如下

/HC-06蓝牙模块通讯,手机APP蓝牙串口,HEX格式下输入1,LED1亮…/

#include “reg52.h”

sbit PIN_RXD = P3^0; //接收端

sbit PIN_TXD = P3^1; //发送端

bit RxdEnd = 0; //接收数据的最后一位

bit RxdorTXd = 0; //接收或发送标志位,接收状态为0,发送状态为1

bit TxdEnd = 0; //发送数据的最后一位

sbit buzzer = P0^6;

unsigned char RxdBuf = 0; //接收到的数据

unsigned char TxdBuf = 0;

void configUATA(unsigned int baud); //配置波特率,baud指波特率,指每秒钟发发送位数的时间,9600指每秒钟发送9600位数据

void StartRXD();

void StartTXD(unsigned char dat);

void main()

{

P2=0xa0;buzzer=0;P2=0x00;

EA = 1;

configUATA(9600);

while(1)

{

while(PIN_RXD); //接收端一直等待

StartRXD(); //RXD接收数据

while(!RxdEnd); //10位数据接收完毕

if(RxdBuf == 0x01)

{P2=0x80;P0=0xfe;P2=0x00;RxdBuf=0;} //手机APP蓝牙串口,HEX格式下输入1,LED1亮

if(RxdBuf == 0x02)

{P2=0x80;P0=0xfd;P2=0x00;RxdBuf=0;} //手机APP蓝牙串口,HEX格式下输入2,LED2亮

if(RxdBuf == 0x03)

{P2=0x80;P0=0xfb;P2=0x00;RxdBuf=0;} //手机APP蓝牙串口,HEX格式下输入3,LED3亮

if(RxdBuf == 0x04)

{P2=0x80;P0=0xf7;P2=0x00;RxdBuf=0;} //手机APP蓝牙串口,HEX格式下输入4,LED4亮

if(RxdBuf == 0x05)

{P2=0x80;P0=0xef;P2=0x00;RxdBuf=0;} //手机APP蓝牙串口,HEX格式下输入5,LED5亮

if(RxdBuf == 0x06)

{P2=0x80;P0=0xdf;P2=0x00;RxdBuf=0;} //手机APP蓝牙串口,HEX格式下输入6,LED6亮

if(RxdBuf == 0x07)

{P2=0x80;P0=0xbf;P2=0x00;RxdBuf=0;} //手机APP蓝牙串口,HEX格式下输入7,LED7亮

if(RxdBuf == 0x08)

{P2=0x80;P0=0x7f;P2=0x00;RxdBuf=0;} //手机APP蓝牙串口,HEX格式下输入8,LED8亮

if(RxdBuf == 0x09)

{P2=0xa0;buzzer=1;P2=0x00;RxdBuf=0;} //手机APP蓝牙串口,HEX格式下输入9,蜂鸣器打开

if(RxdBuf == 0x0a)

{P2=0xa0;buzzer=0;P2=0x00;RxdBuf=0;} //手机APP蓝牙串口,HEX格式下输入a,蜂鸣器关闭

}

}

void configUATA(unsigned int baud)

{

TMOD &= 0xf0;

TMOD |= 0x02; //模式2:8位自动重装模式,TL0溢出后,TH0直接赋值给TL0,重复循环,一溢出就中断

TH0 = 256-(11059200/12)/baud; //重装数值,经过一位的时间就溢出

}

void startRXD()

{

TL0 = 256-((256-TH0)>>1); //由于每字节的数据的起始位都为低电平,所以当为下降沿时读取数据,此时可能为低电平也可能为高电平,所以必须延长半个波特率来读取电平

//重装的低八位为半个波特率的时间溢出,)256-TH0>>1,右移一位等于除以2

ET0 = 1;

TR0 = 1;

RxdEnd = 0;

RxdorTXd = 0;

}

void InterruptTimer0() interrupt 1 //发送/接收中断

{

static unsigned char cnt = 0;

if(cnt == 0) //接收数据

{

if(!PIN_RXD)

{

RxdBuf = 0;

cnt++;

}

else

{

TR0 = 0;

}

}

else if(cnt<=8)

{

RxdBuf >>= 1;

if(PIN_RXD) //如果接收到的数据位为1

{

RxdBuf |= 0x80;

}

cnt++;

}

else //接收完八位

{

cnt = 0;

TR0 = 0;

if(PIN_RXD)

{

RxdEnd = 1;

}

}

}

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值