一、准备工作:
1一款带串口的单片机。
2USB转串口模块(自己焊接的,所以很丑,当然也可以用学习板上的串口部分)。
3蓝牙转串口模块。
4如果你的手机系统是Android的,下载个android蓝牙调试助手。
5电脑上安装一个串口调试助手。
6若干杜邦线等。
二、调试工作
万事俱备,只欠东风。
1调试蓝牙模块
用杜邦线连接USB转串口模块和蓝牙模块。
串口模块 蓝牙模块。
VCC--------->VCC。
TXD---------->RXD。
RXD<----------TXD。
GND--------->GND。
打开手机蓝牙助手,连接到该蓝牙模块,成功后随便输入一些字符,就会在电脑上看到串口助手上有显示该字符,前提是串口的波特率和蓝牙模块的波特率对应(默认是9600)。
2调试单片机的串口
还是用杜邦线连接USB转串口模块和单片机,在电脑上打开串口调试助手调试。
接线方式参考调试蓝牙模块。
单片机的程序就不说了,这里假设已经做好了。如果正常则会看到预期效果。
三、连接工作
把蓝牙模块和单片机模块连接起来,然后打开蓝牙调试助手,连接蓝牙模块发送数据。
这个时候,就好像你在电脑上用串口助手给单片机发送数据一样。
单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。
在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
//创建一个串口通讯
SerialPort CurrentPort = null;
CurrentPort = new SerialPort();
CurrentPortReadBufferSize = 128;
CurrentPortPortName = comName; //端口号
CurrentPortBaudRate = bandRate; //比特率
CurrentPortParity =parity;//奇偶校验
CurrentPortStopBits = stop;//停止位
CurrentPortDataBits = databit;//数据位
CurrentPortReadTimeout = 1000; //读超时,即在1000内未读到数据就引起超时异常
//绑定数据接收事件,因为发送是被动的,所以你无法主动去获取别人发送的代码,只能通过这个事件来处理
CurrentPortDataReceived += Sp_DataReceived;
CurrentPortOpen();
定义一个变量 byte[] receiveStr;
//绑定的事件处理函数
private static void Sp_DataReceived(object sender, SystemIOPortsSerialDataReceivedEventArgs e)
{
SerialPort sp = sender as SerialPort;
if (sp == null)
return;
byte[] readBuffer = new byte[spReadBufferSize];
spRead(readBuffer, 0, readBufferLength);
//赋值
receiveStr=readBuffer;//当然你可以通过转换将byte[]转换为字符串。
}
//你要求的按钮事件可以这么写
private void button1_Click(object sender, EventArgs e)
{
if(receiveStr!=null)
{
变量 xxx=receiveStr;
}
}
串口是蓝牙模块最常用的外围接口之一,用于数据传输或蓝牙模块的指令控制,为了方便直接嵌入用户产品中
用博陆科BLK-MD-BC04-B蓝牙模块举例说明下,蓝牙模块的串行口为 TTL电平(33V),提供4条引脚:UART_TXD,UART_RXD,UART_CTS,UART_RTS,可以与单片机的UART引脚直接相连,CTS、RTS不用时,可悬空处理。如需与PC的RS232串口相连,必须做TTL至232的电平转换,具体请参考RS232的引脚定义。
#include<reg52h>//声明头文件
#define uchar unsigned char//宏定义
#define uint unsigned int//宏定义
sbit deng=P2^0;//定义车灯的控制引脚
sbit z=P2^1;//定义左转向灯的控制引脚
sbit y=P2^2;//定义右转向灯的引脚
sbit BEEP=P2^3;//定义蜂鸣器的引脚
sbit zuo1=P0^0;//定义控制左边电机的单片机引脚
sbit zuo2=P0^1;//定义控制左边电机的单片机引脚
sbit you1=P0^2;//定义控制右边电机的单片机引脚
sbit you2=P0^3;//定义控制右边电机的单片机引脚
uchar a=0;//定义一个变量a,用来读取串口的数据
void delay(uint z)//一个带参数的延时程序
{
int i,j;//定义两个变量
for(i=10;i>0;i--)
for(j=z;j>0;j--);//将参数z赋值给j
}
void init()//初始化子程序
{
TMOD=0x20; //设置定时器T1为工作方式2
TH1=0xfd;
TL1=0xfd; //T1定时器装初值
TR1=1; //启动定时器T1
REN=1; //允许串口接收
SM0=0;
SM1=1; //设置串口工作方式1
EA=1; //开总中断
ES=1; //开串口中断
}
void go()//前进子程序
{
zuo1=0;
zuo2=1;//左边轮子正转
delay(25);//pwm有用值,越大左边方向的轮子越快
zuo1=1;//关闭左边轮子
you1=0;
you2=1; //右边轮子正转
delay(24);//pwm有用值,越大右边的轮子越快
you1=1;//关闭右边轮子
delay(100);//pwm无用值,越大,小车跑的越慢
z=1;
y=1;//关闭转向灯
}
void hui()//小车后退的子程序
{
zuo1=1;
zuo2=0;//左边轮子倒转
delay(25);//pwm有用值,越大左边方向的轮子越快
zuo2=1;//关闭左边轮子
you1=1;
you2=0; //右边轮子倒转
delay(24);//pwm有用值,越大右边的轮子越快
you2=1;//关闭右边轮子
delay(100);//pwm无用值,越大,小车跑的越慢
z=1;
y=1;//关闭转向灯
}
void turnleft()//小车左转弯子程序
{
zuo1=1;
zuo2=1;//左边轮子停止转动
you1=0;
you2=1; //右边轮子正转
delay(24);//pwm有用值,越大右边的轮子越快
you1=1;//右边轮子停止
delay(100);//pwm无用值,越大,小车跑的越慢
z=1;
y=1;//关闭转向灯
z=~z;//左转向灯打开
}
void turnright()//小车右转弯子程序
{
zuo1=0;
zuo2=1;//左边轮子正转
delay(25);//pwm有用值,越大左边方向的轮子越快
zuo1=1;//左边轮子停止
you1=1;
you2=1; //右边轮子停止
delay(100);//pwm无用值,越大,小车跑的越慢
z=1;
y=1;//关闭转向灯
y=~y;//右转向灯打开
}
void down()//停止子程序
{
zuo1=1;
zuo2=1;
you1=1;
you2=1; //左右轮全部停止
z=1;
y=1;//关闭转向灯
}
void onbeep()//蜂鸣器鸣响子程序
{
BEEP=0;
}
void offbeep()//蜂鸣器鸣响子程序
{
BEEP=1;
}
void main()//主程序
{
init();//调用初始化子程序
while(1)//死循环
{
switch(a)//判断a从串口读取到的数据
{
case 0x1f://如果是0x1f就前进
go();
break;
case 0x2f://如果是0x2f就后退
hui();
break;
case 0x3f://如果是0x3f就左转
turnleft();
break;
case 0x4f://如果是0x4f就右转
turnright();
break;
case 0x00://如果是0x00就停止
down();
break;
case 0xa0://如果是0xa0车灯打开
deng=0;
break;
case 0xb0://如果是0xb0车灯关闭
deng=1;
break;
case 0xc0://如果是0xc0蜂鸣器鸣响
onbeep();
break;
case 0xd0://如果是0xc0蜂鸣器鸣响
offbeep();
break;
}
}
}
void chuan() interrupt 4//串口中断服务程序
{
RI=0;//软件清除串口响应
a=SBUF;//读取单片机串口接受的蓝牙模块发送的数据
}
你将Label6Caption:='COM'+IntToStr(COMMNumber);中的参数COMMNumber分别改成3到9试试。可能是我见识短,我还没见过系统支持这么大的串口号。
以上就是关于手机蓝牙与单片机的通信如何实现全部的内容,包括:手机蓝牙与单片机的通信如何实现、msp430f149连接蓝牙模块发送数据,但是用串口调试精灵接收不到数据,程序如下,求大神指导~、蓝牙模块串口的功能是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)