一把剪刀 2013-12-27 08:28 采纳率: 100%
浏览 3457
已采纳

单片机通过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;
}

  • 写回答

1条回答

  • a77434568 2013-12-30 10:14
    关注

    在我看来,应该是你代码逻辑有问题
    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数组清空,然后再发第二次数据。

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

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog