问题描述
- 单片机通过HC-06与手机通信
-
最近在做一个单片机项目,需要用到手机通过HC-06蓝牙模块与单片机通信,于是写了下面一段代码。但是却遇到了一个问题就是把这个程序烧进开发板之后,当手机第一次发送ab时相应的led亮,但手机第二次发送ab时,led灯没有反应。请大家帮忙解答!
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit lamp = P1^0;
sbit fan = P1^1;
char rec[2];
uchar i=0;
uchar signal;
void delay(uint x)
{
uchar i;
uint j;
for(j=0;j<x;j++)
{
for(i=0;i<202;i++);
for(i=0;i<100;i++);
}
}
void initchuankou()
{
SCON = 0X50;
PCON = 0X00;
TMOD = 0X20;
TH1 = 0XFD;
TL1 = 0XFD;
TR1 = 1;
}
void handle()
{
if(rec[0]=='a'&&rec[1]=='b') lamp = ~lamp;
if(rec[0]=='c'&&rec[1]=='d') fan = ~fan;// if(rec[0]=='e'&&rec[1]=='f') lamp = 1;
}
void main()
{
delay(10);
initchuankou();
IE = 0X90;
lamp = 1;
fan = 1;
while(1){
handle();
}
}
void serial1(void) interrupt 4
{
EA = 0;
rec[i] = SBUF;
i++;
if(i==2) i=0;
RI = 0;EA = 1;
}
解决方案
在我看来,应该是你代码逻辑有问题
void handle()
{
if(rec[0]=='a'&&rec[1]=='b') lamp = ~lamp;
if(rec[0]=='c'&&rec[1]=='d') fan = ~fan;
// if(rec[0]=='e'&&rec[1]=='f') lamp = 1;
}
这个函数当一直在对lamp和fan作取反操作,你第一次接受到的字符如果是ab的话,只要你不发送第二种字符,那么该函数中的第一条if语句就会一直被执行。
个人理解应该在handle函数执行后,把rec数组清空,然后再发第二次数据。
解决方案二:
楼主,还在吗,我是来自2016.5.22的,可以给我发一份你当时做的项目么,宝宝在初学,1225527616@qq.com谢谢啦
时间: 2024-09-18 18:51:46