蓝牙串口HC06 手机与单片机联合调试

一、蓝牙模块与串口调试
1.准备一个蓝牙模块HC-06和一个TTL转usb下载器,如下图。
在这里插入图片描述
2.在进行蓝牙模块调试时我用的是STC-ISP工具,打开之后里面有串口调试工具,设置波特率一般是9600,接受和发送模式为HEX模式。将蓝牙模块和下载器模块电源和地分别连接好RXD和TXD交叉连接,即蓝牙模块的TXD连接下载器的RXD,蓝牙模块的RXD连接下载器的TXD。
在这里插入图片描述
3、手机行下载蓝牙串口调试工具,便可以进行数据的发送和接受了。

调试过后发现一些未能解决的问题,希望大牛可以帮忙看看:
发送缓冲区传送文字0的时候接收缓冲区显示80,单片机接收数字为0x00
手机蓝牙串口助手发送0接收缓冲区显示30.,单片机接受数字为0x70
4、在调试完成后自己写了一个用lcd1602显示手机蓝牙串口发送0-9数字显示的程序供参考。(在测试的过程中发现一些小问题,不同的晶振蓝牙串口发送相同的数据,单片机接收到的数据是不同的,因此在做之前最好自己测试一下,可将SBUF送到P0口,用led显示接收到的数字。)


#include <reg51.h>			 //此文件中定义了单片机的一些特殊功能寄存器
#define  uint unsigned int  //对数据类型进行声明定义
#define uchar unsigned char 
# define LCD1602_DATAPINS P0

sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;
sbit LCD1602_E=P2^7;

void UsartInit();
void LcdInit();
void Delay1ms(uint c) ;
void LcdWriteCom(uchar com)	 ;
void LcdWriteData(uchar dat);

uchar receiveData;
uchar keys[]={'0','1','2','3','4','5','6','7','8','9'};

/*******************************************************************************
* 函数功能		 : 主函数
*******************************************************************************/
void main()
{	
	UsartInit();  //	串口初始化
	LcdInit();
	while(1);		
}

/*******************************************************************************
* 函数功能		   :串口初始化
*******************************************************************************/
void UsartInit()
{
	SCON=0X50;			//设置为工作方式1
	TMOD=0X20;			//设置计数器工作方式2
	PCON=0X80;			//波特率加倍
	TH1=0XFA;			//当TL1溢出是自动将TH1的值装入TL1中
	TL1=0XFA;			//计数器初始值设置,注意波特率是9600的
	ES=1;					//打开接收中断
	EA=1;					//打开总中断
	TR1=1;					//打开计数器
}
/*******************************************************************************
LCD初始化
*******************************************************************************/
void LcdInit()			//LCD初始化子程序
{
 	LcdWriteCom(0x38);  //开显示
	LcdWriteCom(0x0e);  //开显示显示光标
	LcdWriteCom(0x06);  //写一个指针加1
	LcdWriteCom(0x01);  //清屏
	LcdWriteCom(0x80);  //设置数据指针起点
}
/*******************************************************************************
延时c  ms
*******************************************************************************/
void Delay1ms(uint c)   //误差 0us
{
    uint a,b;
   for(a=c;a>0;a--)
    for(b=112;b>0;b--);	
}
/*******************************************************************************
LCD写入命令
*******************************************************************************/
void LcdWriteCom(uchar com)	  //写入命令
{
	LCD1602_E = 0;     //使能
	LCD1602_RS = 0;	   //选择发送命令
	LCD1602_RW = 0;	   //选择写入
	
	LCD1602_DATAPINS = com;     //放入命令
	Delay1ms(1);		//等待数据稳定

	LCD1602_E = 1;	          //写入时序
	Delay1ms(5);	  //保持时间
	LCD1602_E = 0;
}
/*******************************************************************************
LCD写入数据
*******************************************************************************/
void LcdWriteData(uchar dat)			//写入数据
{
	LCD1602_E = 0;	//使能清零
	LCD1602_RS = 1;	//选择输入数据
	LCD1602_RW = 0;	//选择写入

	LCD1602_DATAPINS = dat; //写入数据
	Delay1ms(1);

	LCD1602_E = 1;   //写入时序
	Delay1ms(5);   //保持时间
	LCD1602_E = 0;
}

/*******************************************************************************
* 函数功能		  : 串口通信中断函数,美接受或者发送数据的时候进入
*******************************************************************************/
void Usart() interrupt 4
{
	

	receiveData=SBUF;    //出去接收到的数据
	RI = 0;              //清除接收中断标志位
	SBUF=receiveData;    //将接收到的数据放入到发送寄存器
	while(!TI);			 //等待发送数据完成
	TI=0;				 //清除发送完成标志位
	if(receiveData==0x70)
		LcdWriteData(keys[0]);
	else if(receiveData==0x71)
		LcdWriteData(keys[1]);
	else if(receiveData==0x72)
		LcdWriteData(keys[2]);
	else if(receiveData==0x73)
		LcdWriteData(keys[3]);
	else if(receiveData==0x74)
		LcdWriteData(keys[4]);
	else if(receiveData==0x75)
		LcdWriteData(keys[5]);
	else if(receiveData==0x76)
		LcdWriteData(keys[6]);
	else if(receiveData==0x77)
		LcdWriteData(keys[7]);
	else if(receiveData==0x78)
		LcdWriteData(keys[8]);
	else
	   LcdWriteData(keys[9]);
	//P0=	receiveData; //这里用来测试SBUF数字究竟是几用的
	Delay1ms(100);
}
  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值