51单片机接蓝牙模块
手上现在没有这样现成的案例,而且看你51的代码应该没什么问题啊。 你先不要用手机来控制,找个现成的蓝牙转串口的模块接在电脑上,用蓝牙跟你的51系统连接,上位机用串口助手发送指令试试能不能控制。如果可以那就是你手机端的程序问题。先定位问题点在哪里,然后再看怎么修改。
另外你能不能详细的说说你现在出问题的现象?可以的话配几张图片,方便大家了解情况,要不然只能靠蒙。
分两块内容:
手机端,设备端。二者通过蓝牙模块实现通信(串口透传就可以)
手机端要完成软件的内容:
1、侦听按键,按键操作触发后将发送的数据通过串口发送。
2、蓝牙串口透传。
设备端 的功能
1、蓝牙芯片(协议栈+串口透传)收到数据给到单片机
2、51单片机:
收到数据:A(代表按键按下)----控制灯点亮,B(代表按键松开)----控制灯熄灭
有点不明白,有没有可以借我参考的
看你的蓝牙有没有串口透传功能啊。
我是用hc-05的。
那应该没有问题啊
难道是程序出问题了?
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
sbit led4=P1^4;
sbit led5=P1^5;
sbit led6=P1^6;
sbit led7=P1^7;
void delayms(uint ms)
{
uchar i;
while(ms--) for(i=0;i<120;i++);
}
//主程序
void main()
{
SCON=0x50; //串口模式1,允许接收
TMOD=0x20; //T1 工作模式2
PCON=0x00; //波特率不倍增
TH1=0xfe; //波特率9600
TL1=0xfe;
RI=0;
EA=1;
ES=1;
TR1=1;
P1=0xff;
while(1);
}
void Serial_Int(void) interrupt 4
{
uchar a;
if(RI) //如收到则LED 闪烁
{
RI=0;
a=SBUF;
a=a&0x0f;
switch(a)
{
case 0x00:
if(led0==1)
{
delayms(10);
if(led0==1);
led0=0;
}
else led0=1;break;
case 0x01:
if(led1==1)
{
delayms(10);
if(led1==1);
led1=0;
}
else led1=1;break;
case 0x02:
if(led2==1)
{
delayms(10);
if(led2==1);
led2=0;
}
else led2=1;break;
case 0x03:
if(led3==1)
{
delayms(10);
if(led3==1);
led3=0;
}
else led3=1;break;
case 0x04:
if(led4==1)
{
delayms(10);
if(led4==1);
led4=0;
}
else led4=1;break;
case 0x05:
if(led5==1)
{
delayms(10);
if(led5==1);
led5=0;
}
else led5=1;break;
case 0x06:
if(led6==1)
{
delayms(10);
if(led6==1);
led6=0;
}
else led6=1;break;
case 0x07:
if(led7==1)
{
delayms(10);
if(led7==1);
led7=0;
}
else led7=1;break;
}
}
}
这是程序
还真没看懂你串口中断里面要干什么,这里应该语句
尽量少把
小编是设计了7个灯,对应7个键值,不同键值点亮不同的灯
在中断里面延时10ms,还说没问题
厉害,这里确实不该这么写
已经弄好了,是程序串口那部分的问题。
竟然最佳答案不给我
呵呵,我加了延时没也没出现问题啊!加不加都可以的