手机与单片机之间蓝牙串口通信(1)

2019-04-15 16:36发布

打算利用蓝牙芯片HC06实现手机和单片机之间的简单通信。工具包括淘宝上淘的stc单片机实验板一块,hc-06蓝牙模块一个,杜邦线,win7电脑一部,安卓手机一部,相关软件:单片机小精灵,串口通讯助手,keil以及单片机烧录软件,蓝牙通讯软件APP。软件基本上都是免安装直接运行的。工作流程简单总结下为以下3步:1.利用单片机小精灵软件,做好烧录程序,确定波特率应该设置为24002.hc-06蓝牙模块进入AT模式,串口通讯助手成功将蓝牙模块波特率设置为24003.将烧录程序通过keil编译成功后烧录至单片机实验板上,手机上安装好APP,设置完成后运行,确定成功。
步骤(2)见

https://blog.csdn.net/dok12/article/details/80152239步骤(3)见https://blog.csdn.net/dok12/article/details/801730本篇先介绍步骤1。工具,单片机小精灵软件,免安装,直接运行。打开单片机小精灵软件,选择串口波特率选项。必须选择好晶振和波特率。其他选项,c语言还是汇编,是否串口中断,波特率加倍,允许接收都自己决定。因为淘宝买到的单片机实验板是12M晶振,蓝牙模块的默认波特率是9600。所以一开始输入这两项数据。结果发现误差太大,必须修改。晶振改不了,只好改波特率了。修改波特率为2400后误差控制在千分之一点六,效果不错,得到了一个C语言的串口通信基本框架了。
根据这个框架做了个C语言程序,目标是对单片机实现蓝牙通讯,实现不同的单片机流水灯效果,并且得到回复数字8。#include unsigned char k; void InitUART(void) { TMOD = 0x20; SCON = 0x50; TH1 = 0xF3; TL1 = 0xF3; PCON = 0x00; EA = 1; ES = 1; TR1 = 1; } /*******延时函数*************/ void delay(unsigned int i) { unsigned char j; for(i; i > 0; i--) for(j = 255; j > 0; j--); } void main(void) { k=0; InitUART(); while (1){ if(k==1) {P1=0xff;delay(500);P1=0x00;delay(500);} else if (k==2) {P1=0x01;delay(500);P1=0xfe;delay(500);} else {P1=0x02;delay(500);P1=0xfd;delay(500);} } } void SendOneByte(unsigned char c) { SBUF = c; while(!TI); TI = 0; } void UARTInterrupt(void) interrupt 4 { if(RI) { RI = 0; //add your code here! k++; if(k>2)k=0; SendOneByte(8); } else TI = 0; }