51单片机与蓝牙模块的串口通信Word文档格式.docx
《51单片机与蓝牙模块的串口通信Word文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机与蓝牙模块的串口通信Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
}
voidsend(ucharcc)
{
SBUF=cc;
while(TI==0);
TI=0;
voidsend_f(ucharccc)
send('
'
);
<
'
F'
send(ccc);
voidcall_out()
uchari;
('
for(i=0;
i<
m;
i++)
{
send(CallOut_Num[i]);
}
)'
m=0;
voidinterrupt_pro()
string_write(0,1,reci_buff);
lcd_char_write(14,1,mun_to_char[temp/10]);
//fortest
lcd_char_write(15,1,mun_to_char[temp%10]);
//fortest
if(temp=='
)CallIn_flag=1;
//|temp=='
$'
|temp=='
%'
elseif(temp=='
){lcd_delay(5);
//if(temp=='
)
string_write(0,0,clr);
string_write(0,0,reci_buff);
}
elseswitch(temp)
{
case'
X'
:
string_write(0,0,clr);
string_write(0,0,"
Disconnet"
break;
P'
Pairing"
break;
S'
Linking"
O'
Connect"
R'
Ring"
//string_write(5,0,CallIn_Num);
break;
D'
Ding"
//string_write(5,0,CallIn_Num);
break;
I'
Talking"
L'
Callfailed"
A'
MP3playing"
E'
Callrelease"
H'
A2DPconnected"
V'
A2DPdisconnected"
//case'
x=0;
//for(i=0;
16;
i++)lcd_char_write(i,1,lcd_table[i]);
/*显示标题*/
default:
}
//temp='
;
//fortest
voidkey_pro()
uchari,key_value_buff;
key_value_buff=key_scan();
if(key_value_buff!
=0)//有按键动作
{
switch(key_value_buff)/*显示按键*/
{
case0x18:
//0
if(call_flag){CallOut_Num[m]='
0'
lcd_char_write(m+2,0,'
m++;
elseif(!
shift_flag)
{send('
send('
//Answer
lcd_char_write(3,1,'
//可以不显示出来
lcd_char_write(8,1,'
lcd_char_write(9,1,'
}
else
{send_f('
}
case0x28:
//1
1'
//Hangup
}
case0x48:
//2
2'
//Reject
U'
case0x88:
//3
3'
//Redial
case0x14:
//4
4'
//Volup
B'
case0x24:
//5
5'
elseif(!
//Voldown
case0x44:
//6
6'
//
G'
x'
case0x84:
//7
7'
//Voicedial
n'
case0x12:
//8
8'
Z'
//Calltransfer
p'
case0x22:
//9
9'
Q'
//Disconnect
else
z'
//Calltransfer
}
case0x42:
//A*
*'
Y'
//Version
lcd_char_write(3,1,'
case0x82:
//B#
#'
T'
//Setautoanswer
case0x11:
if(!
call_flag)
{send('
t'
//Clrautoanswer
C'
case0x21:
call_flag){
send('
M'
//Setvolumeset
}break;
case0x41:
if(!
send('
m'
//Clrvolumeset
case0x81:
N'
//Setautolink
default:
while(key_scan()!
=0);
/*等待按键放开*/
scan_key_port=0xff;
/*释放矩阵按键端口*/
delay_1ms(5);
if((P10==0)||(P11==0)||(P12==0)||(P13==0))
delay_1ms(10);
/*延时去抖动*/
if((P10==0)||(P11==0)||(P12==0)||(P13==0))
{
if(P10==0){lcd_char_write(3,1,'
a'
lcd_char_write(8,1,'
}//Link
elseif(P11==0)
{
call_flag=~call_flag;
if(call_flag){string_write(0,0,clr);
lcd_char_write(0,0,0);
}//显示拨号状态符号
else{for(i=0;
i++)CallOut_Num[i]='
string_write(3,0,"
Welcome!
}
elseif(P12==0){lcd_char_write(3,1,'
c'
}//Pair
elseif(P13==0)
shift_flag=~shift_flag;
if(shift_flag)lcd_char_write(15,0,'
s'
elselcd_char_write(15,0,'
while((P10==0)||(P11==0)||(P12==0)||(P13==0));
}
}
voidTimer0Interrupt()interrupt1//定时器0中断服务函数
TH0=0;
TL0=0;
TR0=0;
if(reci_flag1==1)reci_flag=1;
z=0;
if(call_flag==1)time++;
//串口接收中断函数
voidserial()interrupt4using3
if(RI)
{
RI=0;
temp=SBUF;
//if(temp!
=10)
reci_buff[z]=temp;
z++;
if(z>
15)z=0;
TR0=1;
reci_flag1=1;
/*voidserial()interrupt4using3//串口接收字符串
CallIn_flag=1;
reci_flag=1;
boolRIwait(uinti)
{//等待时间到,返回1
while(i--){if(RI)return0;
};
//等待时间内RI=1,返回0
return1;
//串行接收停止位的中间时,RI置1
ucharReadSbuf(void)
//从SBUF读数据,可得到接收的数据
ucharTmpSbuf;
TmpSbuf=SBUF;
SCON=0x50;
returnTmpSbuf;
voidComService(void)interrupt4
{
ucharTmpSBUF,i=0;
EA=0;
ES=0;
if(RIwait(RiWaitTimer))gotoExitCom;
switch(ReadSbuf())
case'
//currentcall
20;
i++)
if(RIwait(RLongiWaitTimer))break;
//gotoExitCom;
[i]=ReadSbuf();
TelTmpNum[i]=[i];
//newaddif[i]=='
\r'
)break;
[i]='
\n'
TelTmpNum[i]='
//newaddif(StandbyStatus==IsStandby)
=IR_BLUETOOTHPOWERON;
else
if==BlueToothWorkInCalling)
=IR_BLUE