目录一、材料二、步骤1.软件中定义数据包2.软件中定义控件3.数据包结构分析4.代码流程5.效果总结前言最近要用到蓝牙发现蓝牙调试器上自定义数据挺合适的有点难网上的教程都是基于stm32看他们的代码研究思路太折磨了。所以写完后我就把我基于stc8的用法以及思路写下。一、材料我所用到的是STC8A8K64S4A12核心板蓝牙模块(HC-05)蓝牙调试器(手机软件)二、步骤1.软件中定义数据包打开软件点击下方导航栏的专业调试来到图一。点击下方号可创建一个工程。点击新建的工程点击通信设置。来到图二在这里可以定义发送和接收的数据包的结构在接收数据包这我定义了两个数据。图三通信模式的配置。(右上角的问号有详细介绍下文会有用到)图一图二图三2.软件中定义控件按步骤添加控件。图四图五图六图七框中的三个参数分别是接收还是发送数据类型数据名。(图片中控件有数据残留那是因为之前调试时留下的)图八中我添加了两个可编辑文本来接收和一个按钮来发送。图九就是数据包的结构介绍。图七图八图九3.数据包结构分析由图九可知一个数据收发满足以下结构包头0xA5 一个字节元数据自定义X个字节校验和原始数据所有字节之和的低8bit数据 一个字节包尾0x5A 一个字节例如我们要收发一个包含一个整型(占4个字节)和一个浮点型(占4个字节)数据那么收发的字节量就是包头(1)元数据(44)校验和(1)包尾(1)114.代码流程基础设置#define LY_Data_Len 11 //蓝牙数据包大小(长度) char LY_Data_Sz[LY_Data_Len]; //蓝牙数据包缓存区 char LY_JSXY0; //接收校验蓝牙串口初始化函数波特率9600。void LY_Init() { PCON 0x7F; //波特率不倍速 SCON 0x50; //8位数据,可变波特率 AUXR | 0x40; //定时器时钟1T模式 AUXR 0xFE; //串口1选择定时器1为波特率发生器 TMOD 0x0F; //设置定时器模式 TMOD | 0x20; //设置定时器模式 TL1 0xDC; //设置定时初始值 TH1 0xDC; //设置定时重载值 ES1; //打开接收中断 EA1; //打开总中断 TR11; //打开计数器 }串口中断void LY_Routine() interrupt 4 { int a; int b0x01; if(RI1) //如果接收标志位为1接收到了数据 { aSBUF; // LY_SendByte(a); if(a0xA5) LY_JSXY1; if(LY_JSXY1) { LY_Send_MA(); } if(a0x5A) LY_JSXY0; RI0; //接收标志位清0 } }串口发送函数//单次发送 void LY_SendByte(unsigned char Byte) { SBUFByte; while(TI0); TI0; } //多次发送 void LY_Send_For(char* Data,int Len) { char fora0; while(foraLen) { SBUFData[fora]; fora; while(TI0); TI0; } }装配函数(装配的目的因为int型float型的数据比较长有4个字节而串口只能一个字节一个字节的发送所以要给这些长字节分段。)//整型装配 //参数要写入的int型的值在蓝牙数据包位置 void LY_Int(int num,char *byte) { byte[3] (num 0xFF000000) 24; byte[2] (num 0x00FF0000) 16; byte[1] (num 0x0000FF00) 8; byte[0] (num 0x000000FF); } //浮点型装配 //参数要写入的float型的值在蓝牙数据包位置 void LY_float(float num,char *byte) { unsigned long longdata 0; longdata *(unsigned long*)num; byte[3] (longdata 0xFF000000) 24; byte[2] (longdata 0x00FF0000) 16; byte[1] (longdata 0x0000FF00) 8; byte[0] (longdata 0x000000FF); } //计算校验和并自动装配 void LY_check() { int LY_Zh0; char DataLenLY_Data_Len-3,fora; for(fora1;foraDataLen;fora) { LY_ZhLY_Data_Sz[fora]LY_Zh; } LY_Data_Sz[LY_Data_Len-2]LY_Zh 0xff; }蓝牙发送主函数(串口触发事件)//蓝牙发送主函数 void LY_Send_MA() { LY_Data_Sz[0]0xA5; LY_Data_Sz[LY_Data_Len-1]0x5A; LY_Int(1521,LY_Data_Sz[1]); LY_float(1.23,LY_Data_Sz[5]); LY_check(); LY_Send_For(LY_Data_Sz,LY_Data_Len); }5.效果当你按下发送按键后就能得到返回数据(该数据是在上述代码中设置好的)并展示在连接在可编辑文本中。三、总结看到大家都对这个app感兴趣就把安装包一并分享出来方便使用了。蓝牙库蓝牙调试器app安装包链接: https://pan.baidu.com/s/1FOziu2hTqMY4olVcJ-ESgg 提取码: 3243