蓝牙手机和单片机蓝牙通讯数据不全通讯问题:

Android手机通过蓝牙模块与单片机通信单片机程序
下面是一款Android手机通过蓝牙模块与单片机通信单片机程序,单片机可以使用以下51单片机:AT89C51,AT89C52,AT89S51,AT89S52,STC89C52RC,下面是单片机程序。
#include“reg52.h“
#include “intrins.h“
unsigned int c=0;
sbitled1=P2^0;//指示灯0
sbitled2=P2^1;//指示灯1
sbitled3=P2^3;//指示灯3
voidinit();//串口初始化
voidsend(unsignedchara);//单字节发送函数
voidctrl();//接收处理函数
voidmain()
if(RI==1)//是否有数据到来
tmp=SBUF;//暂存接收到的数据
voidinit()//串口初始化
ES=0;//关中断
SCON=0x50;//REN=1允许串行接受状态,串口工作模式1,
//10位UART(1位起始位,8位数据位,1位停止位,无奇偶校验),波特率可变
TMOD=0x20;//定时器1工作于方式2,8位自动重载模式,用于产生波特率
TH1=TL1=0xFD;//波特率9600(本次测试采用晶振为11.0592)
PCON&=0x7f;//波特率不倍增
TR1=1;//定时器1开始工作,产生波特率
//发送标志位置0
TI=0;//接收标志位置0
led1=0;//初始化设置3个指示灯全亮
voidsend(unsigned char a)//单字节数据发送
{//注意:若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻。本次测试需要接上拉电阻
while(TI==0);
if(c%2)//发送指示灯标志,每接收一次,此灯亮灭交替
voidctrl()//接收处理函数
switch(tmp)
led1=1;//收到字符1,指示灯0灭
send(tmp);
case'2'://收到字符2,指示灯1灭
send(tmp);
case'3'://收到字符3,指示灯0、1亮
send(tmp);
case'4'://收到字符4,指示灯0、1灭
send(tmp);
case'5'://收到字符5,指示灯3亮
send(tmp);
default://其他,灯全灭
send(tmp);
蓝牙遥控小车程序
#include ’reg52.h‘
#define uchar unsigned char
#define uint unsigned int
sbit IN1 = P1^2; //为1 左电机反转
sbit IN2 = P1^3; //为1 左电机正转
sbit IN3 = P1^6; //为1 右电机正转
sbit IN4 = P1^7; //为1 右电机反转
sbit EN1 = P1^4; //为1 左电机使能
sbit EN2 = P1^5; //为1 右电机使能
sbit key_s2 = P2^1;
sbit key_s3 = P2^0;
sbit led1 = P0^1;
//sbit led2 = P0^3;
#define left_motor_en & &
& & &EN1 = 1
&//左电机使能
#define left_motor_stops & &
& &EN1 = 0 &
&//左电机停止
#define right_motor_en & &
& & &EN2 = 1
&//右电机使能
#define right_motor_stops &
& & &EN2 = 0
&//右电机停止
#define left_motor_go & &
& & &IN1 = 0,
IN2 = 1//左电机正传
#define left_motor_back & &
& & &IN1 = 1,
IN2 = 0//左电机反转
#define right_motor_go & &
& & &IN3 = 1,
IN4 = 0//右电机正传
#define right_motor_back & &
& &IN3 = 0, IN4 = 1//右电机反转
void delay(uint z)
& uint x,y;
& for(x = x & 0; x--)
& for(y = 114; y & 0 ; y--);
unsigned char pwm_left_val = 0;//左电机占空比值 取值范围0-170,0最快
unsigned char pwm_right_val = 0;//右电机占空比值取值范围0-170 ,0最快
unsigned char pwm_t;//周期
//小车初始化
void Che_init()
& TMOD |= 0x02;//8位自动重装模块
& TH0 = 220;
& TL0 = 220;//11.0592M晶振下占空比最大比值是256,输出100HZ
& TR0 = 1;//启动定时器0
& ET0 = 1;//允许定时器0中断
& &= 1;//总中断允许
//蓝牙初始化
void UART_INIT()
& SM0 = 0;
& SM1 = 1;//串口工作方式1
& REN = 1;//允许串口接收
& EA = 1;//开总中断
& ES = 1;//开串口中断
& TMOD = 0x20;//8位自动重装模式
& TL1 = 0//9600波特率
& TR1 = 1;//启动定时器1
//小车前进
void forward()
& ET0 = 1;
& left_motor_ //左电机前进
& right_motor_ //右电机前进
//小车左转
void left()
& ET0 = 1;
& delay(100);
& left_motor_
& right_motor_
& delay(700);
& forward();
//小车右转
void right()
& ET0 = 1;
& left_motor_
& right_motor_
//小车后退
void back()
& ET0 = 1;
& left_motor_
& right_motor_ &
//小车停止
void stop()
& ET0 = 0;
& EN1 = 0;
& EN2 = 0;
//定时器0中断
void timer0() interrupt 1
& pwm_t++;
& if(pwm_t == 255)
& & pwm_t = EN1 = EN2 = 0;
& if(pwm_left_val == pwm_t)
& & EN1 = 1; &
& if(pwm_right_val == pwm_t)
& & EN2 = 1; &
//串口中断
void UART_SER() interrupt 4
& & RI = 0;//清除接收标志
& & switch(SBUF)
& & & case 0x41:
forward();//前进
& & & case 0x42:
back();//停止&
& & & case 0x43:
left();//左转
& & & case 0x44:
right();//右转
& & & case 0x45:
stop();//停止
& & & case 0x31:
led1 = 0;//右转
& & & case 0x32:
P0 = 0;//停止
& & & case 0x33:
led1 = 1;//右转
& & & case 0x34:
P0 = 0//停止
void main()
& UART_INIT();//串口初始化
& Che_init();
& while(1);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。查看: 6974|回复: 25
有没有人搞过蓝牙模块,实现单片机和PC的通信?
有没有人搞过蓝牙模块,实现单片机和PC的通信?
最近在研究蓝牙模块,发现市面上带蓝牙模块的单片机开发板或者试验板很少,觉得这是一大块空白。
请问有谁有意愿和本人共同学习,研究,开发
蓝牙会不会很复杂呀?
想初步了解一下,请先介绍一下情况,以便需要时使用。
SENA公司的promi-ESD01/02系列,串口通信,控制简单,但比较贵
一般的蓝牙模块包括RF+BaseBand,而BaseBand很多公司都是用ARM来做的,目前绝大部分蓝牙模块都是有UART和USB接口的,只是在产品的时候没有将其接口引出来。所以要想使蓝牙模块和PC联系那就需要有BaseBand的Datasheet,这样可以才能做其它事情。
用过initium的ESD01,很稳定。
http://www.initium.co.kr/bizdata/userguide/Promi-ESD_UserManual_V2.0.pdf
那有人用过爱立信的吗?
mark我也在学。一头雾水
淡彩红妆 发表于
mark我也在学。一头雾水
用蓝牙串口模块 很简单,就是像不同串口一样操作就行~~
貌似有不少蓝牙转串口的模块啊…………
难道LZ是想从底层做起?
楼主说的太模糊了,是从底层做起?还是为了突出蓝牙无线功能而在开发板上增加UART蓝牙模块呢?
jesson 发表于
用蓝牙串口模块 很简单,就是像不同串口一样操作就行~~
请问你用的是哪一个型号的模块吖??
要搞产品,最好是芯片级的应用,上模块的话成本太高了。我也在了解这方面的资料..
本帖最后由 jesson 于
18:10 编辑
淡彩红妆 发表于
请问你用的是哪一个型号的模块吖??
淘宝 串口蓝牙 ,一大把 ,20~30 元,连接就不上了,有几个型号 ,使用方法应该没什么区别
上位机用串口调试助手就可以,选好电脑蓝牙的com口就好
我用的是BMX-03A
主芯片:CSR BlueCore芯片
输出功率:Class II
传输距离:视距10米
Flash存储容量:6-8Mbit
总线接口:UART
Rohs标准:符合
BMX-02/03系列蓝牙模块采用CSRBlueCore芯片,配置6-8Mbit的软件存储空间,支持AT指令,用户可根据需要更改SPP角色(主从模式)以及串口波特率、设备名称、配对密码等参数,使用灵活。
BMX-02系类蓝牙模块采用邮票孔方式,适用于批量贴片生产;引出IO多,适合于不用要求的客户。
BMX-03系列蓝牙模块采用插座方式,载板上只需要焊接一个2*6PIN,pitch=2.0mm的插针,避免蓝牙模块再次经过回流焊接,同时方便客户更换,适用于DIY或小批量的客户,大批量客户同样适用。
jesson 发表于
淘宝 串口蓝牙 ,一大把 ,20~30 元,连接就不上了,有几个型号 ,使用方法应该没什么区别
上位机用串口 ...
蓝牙模块没有想像的那么难,甚至可以说是简单。只要会操作串口就行。最近用了一款,上海诺威通(NOVC)的MDCS42A。他们的技术支持很耐心。
看过楼主的这个帖子
是 2007年发的
如今是2013年了
过去了6年了
楼主的试验搞的如何了?
上些资料学习学习
求学习资料
mark,正在学习!
整打算搞蓝牙呢,多多交流哦
蓝颜串口模块太多了吧。TAOBAO上一收一大把啊。
babysnail 发表于
要搞产品,最好是芯片级的应用,上模块的话成本太高了。我也在了解这方面的资料.. ...
我也要搞产品,IC设计,一头雾水ing,能交流下么?我的qq是
彼岸花开 发表于
整打算搞蓝牙呢,多多交流哦
你是做蓝牙应用还是搞底层?
WM-G-MR-09是WIF带蓝牙的,现在才三十多元。
要搞产品,最好是芯片级的应用,上模块的话成本太高了。我也在了解这方面的资料.. ...
对,说的有道理。
蓝牙模块没有想像的那么难,甚至可以说是简单。只要会操作串口就行。最近用了一款,上海诺威通(NOVC)的MDCS ...
就想問問有沒有靠譜的公司推薦,要藍牙4.2透傳的
阿莫电子论坛, 原"中国电子开发网"
, 原www.ourdev.cn, 原www.ouravr.com编程控制笔记本蓝牙与外部蓝牙设备通信
17:23:50来源: eefocus 关键字:&&&&&&
一、蓝牙模块XLBT232‐D01介绍(外部设备蓝牙)1.1、蓝牙模块简介XLBT232-D0101蓝牙模块采用CSR BlueCore 芯片,配置6-8Mbit 的软件存储空间,&支持AT 指令,用户可根据需要更改SPP 角色(主、从模式)以及串口波特率、&设备名称、配对密码等参数,使用灵活。&1.2、模块功能介绍1.2.1、特性&蓝牙协议:Bluetooth Specification V2.1+EDR、V2.0+EDR、V2.1、V2.0 V1.2? 工作频率:2.4GHz ISM band? 调制方式:GFSK(Gaussian Frequency Shift Keying)? 发射 率:≤4dBm, Class 2? 灵 敏 度:≤-84dBm at 0.1% BER? 传输速率:Asynchronous: 2.1Mbps(Max) / 160 kbpsSynchronous: 1Mbps/1Mbps? 安全特性:Authentication and encryption? 支持服务:Bluetooth SPP(主模式& 从模式)? 供电电源:+3.3VDC 50mA? 工作温度:-5 ~ +65 Centigrade? 外观尺寸:26.9mm x 13mm x 2.2 mm1.2.2、模块接线原理图PS:当然也能用USB转TTL模块进行连接在电脑上调试,毕竟大多数笔记本已经没有串口啦!&1.3、使用说明[图:蓝牙模块]>_<"&KEY为输入管脚,短按控制,或者输入约100ms 的高电平单次脉冲,可以&实现以下功能:模块设置为SPP 主机模式时:    未连接状态时:清除配对信息(若存在配对设备信息)    已连接状态时:主动发起断开连接,延时150ms 后重启,重新搜索&  连接从设备; 在断开连接时:重新搜索连接从设备。模块设置为SPP 从机时:    在已连接状态时:主动发起断开连接,延时150ms 后重启,重新进入被搜&& & &索状态,等待主机配对和连接    在断开连接时:延时150ms 后重启,重新进入被搜索状态,等待主机配对&& & &和连接。>_<"&显示模块当前工作状态:待机状态慢闪——重复2s 脉冲;连接状态长亮——高电平。&1.4、AT指令集蓝牙模块出厂默认的串口配置为:波特率9600,无校验,数据位8,停止位1。PS:接下来说明以上位机为电脑,模块参数为出厂设置时进行配置说明。>_<"&将模块通过USB电平转换板连接到电脑USB口(USB转TTL),使用串口调试助手,按&照 9600,N,8,1 进行配置,打开串口后,发送 AT(无\r\n),若返回 OK,说明配置&成功。&PS:设置 AT 指令必须在蓝牙模块未连接或断开 SPP 链接时才可以(上电或配对&后都可以,如果连接 SPP,串口输入的数据将会直接发送到远端蓝牙设备串口)1.4.1、测试指令:1.4.2、查询\设置波特率指令:1.4.3、查询\设置设备名称指令:1.4.4、恢复默认设置指令:1.4.5、模块复位\重启指令:1.4.6、查询\设置主从模式:1.4.7、查询\设置配对密码:1.4.8、查询\设置是否需要密码鉴权:PS:为方便使用,默认为不用密码鉴权连接,搜索到蓝牙串口之后,直接连接&可。有安全考虑的客户请选择需要密码鉴权。&PS:此指令只有在从设备时才有效;主设备时不接受此指令,发送此指令没&有回复,也不执行1.4.9、清除主设备配对信息指令:PS:此指令只有在主设备时才有效;从设备时不接受此指令,发送此指令&没有回复,也不执行。1.4.10、搜索并连接新的蓝牙串口从设备(*)指令:PS:此指令只有在主设备时才有效;从设备时不接受此指令,发送此指令没&有回复,也不执行。1.4.11、连接最后一次连接的蓝牙串口从设备(*)指令:PS:此指令只有在主设备时才有效;从设备时不接受此指令,发送此指令没&有回复,也不执行。1.4.12、连接指定蓝牙地址的从设备(*)指令:PS:此指令只有在主设备时才有效;从设备时不接受此指令,发送此指令没&有回复,也不执行。1.4.13、查询、设置软件版本指令:1.4.14、系统帮助指令:1.4.15、查询本机MAC 地址指令:>_<:&1:所有参数设置后存储在模块内,下次启动时无需再次设置& & & & &2:AT 指令后标注*号的,表示目前未应用的AT 指令&&二、蓝牙模块配置与笔记本电脑相连2.1.1、蓝牙初始化配置:将蓝牙模块通过TTL转USB模块连接到笔记本,打开串口助手,通过上述AT指令设置为从设备,波特率为9600,然后重启[图:USB转TTL模块][图:串口助手]2.1.2、电脑为主设备搜索建立连接:点击笔记本蓝牙标志的小图标,添加蓝牙设备:然后要等一会,笔记本正在装驱动:然后右击蓝牙图标,查看蓝牙设备,可见我们的设备已经被电脑发现并添加:查看该设备属性,此时笔记本为该设备提供一个串口,就是笔记本蓝牙和设备蓝牙通信的通道,要记住这个一会编程的时候会用到:PS:这个COM15也可以在设备管理器中修改为其他通道&&三、C#编程使笔记本蓝牙和外部设备蓝牙通信:其实配对以后,蓝牙就被模拟成了一个端口,我们可以用最简单的端口通讯来收发信息。首先,在每次启动时,需要连接端口:[FORM初始化时获取所有的COM口,并加入下拉列表]&1 public Form1()&2 {&3 & & InitializeComponent();&4&&5 & & //Get all port list for selection&6 & & //获得所有的端口列表,并显示在列表内&7 & & PortList.Items.Clear();&8 & & string[] Ports = SerialPort.GetPortNames();&9&10 & & for (int i = 0; i < Ports.L i++)11 & & {12 & & & & string s = Ports[i].ToUpper();13 & & & & Regex reg = new Regex("[^COM\\d]", RegexOptions.IgnoreCase | RegexOptions.Multiline);14 & & & & s = reg.Replace(s, "");15&16 & & & & PortList.Items.Add(s);17 & & }18 & & if (Ports.Length > 1) PortList.SelectedIndex = 1;19 }[连接按钮事件:选中list中的被选中的COM口进行连接,如果连接成功就在状态栏显示蓝牙连接成功]&1 private void ConnectButton_Click(object sender, EventArgs e)&2 {&3 & & if (!BluetoothConnection.IsOpen)&4 & & {&5 & & & & //Start&6 & & & & Status = "正在连接蓝牙设备";&7 & & & & BluetoothConnection = new SerialPort();&8 & & & & ConnectButton.Enabled =&9 & & & & BluetoothConnection.PortName = PortList.SelectedItem.ToString();10 & & & & BluetoothConnection.Open();11 & & & & BluetoothConnection.ReadTimeout = 10000;12 & & & & BluetoothConnection.DataReceived += new SerialDataReceivedEventHandler(BlueToothDataReceived);13 & & & & Status = "蓝牙连接成功";14 & & }15 }[蓝牙接收数据事件响应函数,在按钮连接事件中声明的该事件,用于响应蓝牙数据接收]&1 private void BlueToothDataReceived(object o, SerialDataReceivedEventArgs e)&2 {&3 & & //int length = BluetoothConnection.ReadByte();&4 & & Thread.Sleep(1000);&5 & & int length = 13;&6 & & BlueToothReceivedData = DateTime.Now.ToLongTimeString() + "\r\n";&7 & & BlueToothReceivedData += "收到字节数:" + length + "\r\n";&8&&9 & & byte[] data = new byte[length];10 & & BluetoothConnection.Read(data,0,length);11 & & for (int i = 0; i < i++)12 & & {13 & & & & BlueToothReceivedData += string.Format("data[{0}] = {1}\r\n", i, data[i]);14 & & }15 & & //receive close message16 & & if (length == 3 && data[0] == 255 && data[1] == 255 && data[2] == 255)17 & & {18 & & & & //Stop19 & & & & Status = "正在断开蓝牙设备";20 & & & & BluetoothConnection.Close();21 & & & & BluetoothConnection.Dispose();22 & & & & BluetoothConnection =23 & & & & ConnectButton.Enabled =24 & & & & Status = "蓝牙断开成功";25 & & }26 }这里第4行让程序休息1是因为延时等待从设备把数据发送完全。这里为了方便我严格控制让发送数据为13Byte。从设备发送的13Byte数据送至缓冲区,PC端C#程序通过read()函数将缓冲区数据接收到data中,下面是格式输出一下数据。[发送数据函数]&1 private void BlueToothDataSend(byte[] data)&2 {&3 & & //int length = data.L&4 & & //byte[] readData = new byte[length + 2];&5 & & //readData[0] = (byte)(length % 255);&6 & & //readData[1] = (byte)(length / 255);&7 & & //for (int i = 0; i < i++)&8 & & //{&9 & & // & &readData[i + 2] = data[i];10 & & //}11 & & //BluetoothConnection.Write(readData, 0, length + 2);12 & & BluetoothConnection.Write(data, 0, 1);13 & & //Status = "发送数据字节数:" +14 }本来是将data[]数据发送出去,因为我从设备设置为只要有数据发送过来就做出响应发送13Byte数据,所以就直接将data的第一byte发送出去了。[定时器函数:用于刷新状态栏,和接收数据显示]1 private void MonitorTimer_Tick(object sender, EventArgs e)2 {3 & & StatusMessage.Text = S4
关键字:&&&&&&
编辑:什么鱼
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
热门关键词
最新视频课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。用电脑通过蓝牙跟单片机通信可以不
You can communicate with a microcomputer via bluetooth
以上为机器翻译结果,长、整句建议使用
$firstVoiceSent
- 来自原声例句
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!豆丁微信公众号
君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
单片机课程设计-单片机与手机的蓝牙通信
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 2018音质好的蓝牙音箱 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信