程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 單片機 hc 06 手機-單片機通過HC-06與手機通信

單片機 hc 06 手機-單片機通過HC-06與手機通信

編輯:編程綜合問答
單片機通過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數組清空,然後再發第二次數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved