微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 两个单片机之间用蓝牙模块通信不成功

两个单片机之间用蓝牙模块通信不成功

时间:10-02 整理:3721RD 点击:
请问各位大佬,我做的两个单片机之间用蓝牙模块进行通信时,在Proteus上仿真(蓝牙我直接用导线代替)时很成功,但是用实物时就一点反应都没有。下面是代码,功能是控制主机的矩阵键盘,在从机上显示矩阵键盘上按下的按键号。
/**************************************************
主机部分
******************************************/
#include<reg52.h>
#define u8 unsigned char
#define u16 unsigned int
u8 res;//存储键盘扫描的结果,用来判断按下的是哪个按键
void Init_master()
{
TMOD=0X20;
TH1=0Xf9;
TL1=0Xf9;
PCON=0X80;
TR1=1;
SCON=0X50;
}
unsigned char scan_key()
{
     P2 = 0xf0;
        switch (P2)
        {
        case 0x70:
            res = 0;
            break;
        case 0xb0:
            res = 1;
            break;
        case 0xd0:
            res = 2;
            break;
        case 0xe0:
            res = 3;
            break;
  default:res=16;
        }
        P2 = 0x0f;
        switch(P2)
        {
        case 0x07:
            res = 0 + res;
            break;
        case 0x0b:
            res = 4 + res;
            break;
        case 0x0d:
            res = 8 + res;
            break;
        case 0x0e:
            res = 12 + res;
            break;
  default:res=16;
        }   
     return res;
}
void main()
{
while(1)
{
  u16 i=500,j=500;
  Init_master(); //调用串口初始化函数
     scan_key();//调用键盘扫描函数
  SBUF=res;  //将扫描到的键值发送出去
  while(!TI); //检测是否发送完成,完成则讲TI清零
  TI=0;
}
}
/***********************************************************
从机部分
************************************************************/
#include<reg52.h>
#define u8 unsigned char
#define u16 unsigned int
u8 res;
u8 seg[17]= {
         0x3f,0x06,0x5b,0x4f,
    0x66,0x6d,0x7d,0x07,
   0x7f,0x6f,0x77,0x7c,
   0x39,0x5e,0x79,0x71,0x00
   };      
void Init_slave()
{
TMOD=0X20; //设置定时器1工作在模式2
TH1=0Xf9;  // 设定波特率为9600
TL1=0XF9;
PCON=0X80;  //smod0=1;
TR1=1;   //打开定时器1
SCON=0X50;  //设置串口控制寄存器,使之工作在方式1
EA=1;   //打开总中断
ES=1;   //打开串口中断
}
void main()
{
Init_slave(); //调用串口初始化函数
    while(1);
}
void slave()interrupt 4  //中断服务函数
{
RI=0;   //将接收中断清零,等待下一次接收
res=SBUF;  //将缓存区的值通过p1口输出
P1=seg[res];
}

蓝牙模块和串口波特率我调的都是9600bit/s
上电后蓝牙能配对,但是我按下主机的按键从机的led就是没任何反应

另外,我还有个疑问。就是我是用蓝牙的rx和tx对应的与单片机的rx和tx连接然后经单片机通过USB线与电脑相连,然后用电脑上的串口调试软件来给蓝牙发送at指令,发送指令之前需要调串口的波特率只有与蓝牙的一致才能发送指令,蓝牙默认是34800,当我在波特率为34800时设置蓝牙波特率为9600后,再次上电后,只有我把串口软件的波特率调成34800才能发送指令,我的疑问就是为啥之前已经修改过了,但是现在还是要选之前的波特率。51小白一只,请大佬带飞,非常感谢!

现在的蓝牙模块很简单的,买来直接连上就是串口使用,不需要任何设置

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top