尘世- 2023-01-02 12:18 采纳率: 85%
浏览 35
已结题

HC-04的使用过程中的错误

在使用HC-04蓝牙模块的时候,从测试架上测试是正确的,但是在移植到51单片机开发板的时候就不行了,发送的数据无法运行,用串口助手看见返回值都是汉字的乱码的,测试指令与ASCCII都是乱码,代码没办法使用。运行不了
连接图片如下:

img

img

img

img


 #include<reg52.h>

typedef unsigned int uint;
typedef unsigned char uchar; 
sbit led0 = P1^0;//根据各位实际的单片机上的led灯位来设置
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; 
uint pass = 0;      //传递数据位
 

void UART_init()    //设置串行通信 本晶振为11.0592MHZ
{
      TMOD = 0x20;
      TH1 = 0xfd;
      TL1 = 0xfd;  //波特率9600
      SM0 = 0;  
      SM1 = 1;   // 串口工作方式1 10位异步
      REN = 1;  //串口允许接收
      TR1 = 1;
      EA = 1;
      ES =1 ;  //串口中断
}

int main()
{
    
      UART_init();  //波特率9600 
while(1)
{    
    if(pass == 0x30)//0的ascaII码是48,转换为16进制是30,即0x30 蓝牙通信都是发送ASCII码 
    {
    pass++;//点亮第一个led灯0x31
    }                        
  if(pass==0x39)//输入八次后返回点亮第一个灯
    {
    pass=0x31;
    }
                         

switch (pass)
{
    case 0x31:led0 = 0;break;
    case 0x32:led1 = 0;break;
    case 0x33:led2 = 0;break;
    case 0x34:led3 = 0;break;
    case 0x35:led4 = 0;break;
    case 0x36:led5 = 0;break;
    case 0x37:led6 = 0;break;
    case 0x38:led7 = 0;break;
    case 0x39:P2 = 0xfe;break;
    default:P2 = 0xff;break;//输入其他P2接口全为高电平灯全灭
}
       
               
}                             
                        
}

void UART_INTERRUPT() interrupt 4
{        
              pass = SBUF;
              RI = 0;   
              SBUF = pass;    //手机和蓝牙模块通讯时,我们可以打开电脑串口调试工具查看我们的发送值)
              while(!TI);
              TI = 0;  
}

烧录和报错均是0个错误与警告
在看了原理手册后尝试在按住蓝牙模块的按键后给电但是没有效果,
请问这是HC-04的使用方法错了还是怎么回事呢谢谢您的回答
  • 写回答

1条回答 默认 最新

  • 木泽八 嵌入式领域优质创作者 2023-01-02 13:10
    关注

    大概率是波特率问题,或者是ascii没用对的问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月10日
  • 已采纳回答 1月2日
  • 创建了问题 1月2日

悬赏问题

  • ¥15 能给我一些人生建议吗
  • ¥15 mac电脑,安装charles后无法正常抓包
  • ¥18 visio打开文件一直显示文件未找到
  • ¥15 请教一下,openwrt如何让同一usb储存设备拔插后设备符号不变?
  • ¥30 使用quartz框架进行分布式任务定时调度,启动了两个实例,但是只有一个实例参与调度,另外一个实例没有参与调度,不知道是为什么?请各位帮助看一下原因!!
  • ¥50 怎么获取Ace Editor中的python代码后怎么调用Skulpt执行代码
  • ¥30 fpga基于dds生成幅值相位频率和波形可调的容易信号发生器。
  • ¥15 R语言shiny包和ncdf4包报错
  • ¥15 origin绘制有显著差异的柱状图和聚类热图
  • ¥20 simulink实现滑模控制和pid控制对比,提现前者优势