最近在做一个单片机项目,需要用到手机通过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;
}
单片机通过HC-06与手机通信
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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数组清空,然后再发第二次数据。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥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