1、51单片机与蓝牙模块的串口通信51单片机与蓝牙模块的串口通信(共11页)#include #include #include#include #include #define uint unsigned int#define uchar unsigned char#define Nop() _nop_()sbit P10 = P10; /*定义独立对地按键端口*/sbit P11 = P11; /*定义独立对地按键端口*/sbit P12 = P12; /*定义独立对地按键端口*/sbit P13 = P13; /*定义独立对地按键端口*/ 592MHz TL1=0XFD ; TH0=0; T
2、L0=0; TR1 = 1; / timer 1 run SCON = 0x50; /UART为模式1,8位数据,允许接收 PCON |= 0x80 ; /SMOD=1; Baud加倍 IE |= 0x90 ; /Enable Serial Interrupt TR1 = 1 ; / timer 1 run EA=1; ET0=1;void send(uchar cc) SBUF=cc; while(TI=0); TI=0;void send_f(uchar ccc) send( ); send();void call_out() uchar i; send(); for(i=0;im;i+)
3、 send(CallOut_Numi); send(); m=0;void interrupt_pro() string_write(0,1,reci_buff); lcd_char_write(14,1,mun_to_chartemp/10); /for test lcd_char_write(15,1,mun_to_chartemp%10); /for test if(temp=) CallIn_flag=1;/|temp=$ |temp=% else if(temp=$) lcd_delay(5);/if(temp=$) string_write(0,0,clr); string_wri
4、te(0,0,reci_buff); else switch(temp) case X:string_write(0,0,clr);string_write(0,0,Disconnet);break; case P:string_write(0,0,clr);string_write(0,0,Pairing); break; case S:string_write(0,0,clr);string_write(0,0,Linking); break; case O:string_write(0,0,clr);string_write(0,0,Connect); break; case R:str
5、ing_write(0,0,clr);string_write(0,0,Ring); /string_write(5,0,CallIn_Num); break; case D:string_write(0,0,clr);string_write(0,0,Ding); / string_write(5,0,CallIn_Num); break; case I:string_write(0,0,clr);string_write(0,0,Talking); break; case L:string_write(0,0,clr);string_write(0,0,Call failed); brea
6、k; case A:string_write(0,0,clr);string_write(0,0,MP3 playing); break; case E:string_write(0,0,clr);string_write(0,0,Call release ); break; case H:string_write(0,0,clr);string_write(0,0,A2DP connected );break; case V:string_write(0,0,clr);string_write(0,0,A2DP disconnected);break; / case ):x=0; break
7、; /for(i=0;i16;i+) lcd_char_write(i,1,lcd_tablei); /*显示标题*/ default:break; /temp=; /for testvoid key_pro() uchar i,key_value_buff; key_value_buff = key_scan(); if(key_value_buff != 0) /有按键动作 switch(key_value_buff) /*显示按键*/ case 0x18: /0 if(call_flag) CallOut_Numm=0;lcd_char_write(m+2,0,0);m+; else i
8、f(!shift_flag) send( );send(A); /Answer lcd_char_write(3,1,0); /可以不显示出来 lcd_char_write(8,1,A); lcd_char_write(9,1, ); else send_f(P); lcd_char_write(3,1,0); lcd_char_write(8,1,F); lcd_char_write(9,1,P); break; case 0x28:/1 if(call_flag) CallOut_Numm=1;lcd_char_write(m+2,0,1);m+; else if(!shift_flag)
9、 send( );send(H); /Hang up lcd_char_write(3,1,1); lcd_char_write(8,1,H); lcd_char_write(9,1, ); else send_f(L); lcd_char_write(3,1,1); lcd_char_write(8,1,F); lcd_char_write(9,1,L); break; case 0x48:/2 if(call_flag) CallOut_Numm=2;lcd_char_write(m+2,0,2);m+; else if(!shift_flag) send( );send(R); /Rej
10、ect lcd_char_write(3,1,2); lcd_char_write(8,1,R); lcd_char_write(9,1, ); else send_f(U); lcd_char_write(3,1,2); lcd_char_write(8,1,F); lcd_char_write(9,1,U); break; case 0x88:/3 if(call_flag) CallOut_Numm=3;lcd_char_write(m+2,0,3);m+; else if(!shift_flag) send( );send(L); /Redial lcd_char_write(3,1,
11、3); lcd_char_write(8,1,L); lcd_char_write(9,1, ); else send_f(F); lcd_char_write(3,1,3); lcd_char_write(8,1,F); lcd_char_write(9,1,F); break; case 0x14:/4 if(call_flag) CallOut_Numm=4;lcd_char_write(m+2,0,4);m+; else if(!shift_flag) send( );send(U); /Vol up lcd_char_write(3,1,4); lcd_char_write(8,1,
12、U); lcd_char_write(9,1, ); else send_f(B); lcd_char_write(3,1,4); lcd_char_write(8,1,F); lcd_char_write(9,1,B); break; case 0x24:/5 if(call_flag) CallOut_Numm=5;lcd_char_write(m+2,0,5);m+; else if(!shift_flag) send( );send(D);/Vol down lcd_char_write(3,1,5); lcd_char_write(8,1,D); lcd_char_write(9,1
13、, ); else send_f(S); lcd_char_write(3,1,5); lcd_char_write(8,1,F); lcd_char_write(9,1,S); break; case 0x44:/6 if(call_flag) CallOut_Numm=6;lcd_char_write(m+2,0,6);m+; else if(!shift_flag) send( );send(0); / lcd_char_write(3,1,6); lcd_char_write(8,1,0); lcd_char_write(9,1, ); else send( );send(G);sen
14、d(x); lcd_char_write(3,1,6); lcd_char_write(8,1,G); lcd_char_write(9,1,x); break; case 0x84:/7 if(call_flag) CallOut_Numm=7;lcd_char_write(m+2,0,7);m+; else if(!shift_flag) send( );send(V); /Voice dial lcd_char_write(3,1,7); lcd_char_write(8,1,V); lcd_char_write(9,1, ); else send( );send(n); lcd_cha
15、r_write(3,1,7); lcd_char_write(8,1,n); lcd_char_write(9,1, ); break; case 0x12:/8 if(call_flag) CallOut_Numm=8;lcd_char_write(m+2,0,8);m+; else if(!shift_flag) send( );send(Z);/Call transfer lcd_char_write(3,1,8); lcd_char_write(8,1,Z); lcd_char_write(9,1, ); else send( );send(p); lcd_char_write(3,1
16、,8); lcd_char_write(8,1,p); lcd_char_write(9,1, ); break; case 0x22:/9 if(call_flag) CallOut_Numm=9;lcd_char_write(m+2,0,9);m+; else if(!shift_flag) send( );send(Q); /Disconnect lcd_char_write(3,1,9); lcd_char_write(8,1,Q); lcd_char_write(9,1, ); else send( );send(z); /Call transfer lcd_char_write(3
17、,1,9); lcd_char_write(8,1,z); lcd_char_write(9,1, ); break; case 0x42:/A * if(call_flag) CallOut_Numm=*;lcd_char_write(m+2,0,*);m+; else send( );send(Y);/Version lcd_char_write(3,1,A); lcd_char_write(8,1,Y); lcd_char_write(9,1, ); break; case 0x82:/B # if(call_flag) CallOut_Numm=#;lcd_char_write(m+2
18、,0,#);m+; else send( );send(T); /Set auto answer lcd_char_write(3,1,B); lcd_char_write(8,1,T); lcd_char_write(9,1, ); break; case 0x11: if(!call_flag) send( );send(t); /Clr auto answer lcd_char_write(3,1,C); lcd_char_write(8,1,t); lcd_char_write(9,1, ); break; case 0x21: if(!call_flag) send( );send(
19、M);/Set volume set lcd_char_write(3,1,D); lcd_char_write(8,1,M); lcd_char_write(9,1, );break; case 0x41:if(!call_flag) send( );send(m); /Clr volume set lcd_char_write(3,1,E); lcd_char_write(8,1,m); lcd_char_write(9,1, );break; case 0x81:if(!call_flag) send( );send(N); /Set auto link lcd_char_write(3
20、,1,F); lcd_char_write(8,1,N); lcd_char_write(9,1, );break; default:break; 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); send( );send(S);lcd
21、_char_write(8,1,S); /Link else if(P11=0) call_flag=call_flag; if(call_flag) string_write(0,0,clr);lcd_char_write(0,0,0); /显示拨号状态符号 else for(i=0;i15) z=0; TR0=1; reci_flag1=1; /*void serial () interrupt 4 using 3 /串口接收字符串 if (RI) RI = 0 ; temp=SBUF; if(temp=R) CallIn_flag=1; reci_flag=1; bool RIwait(
22、uint i) /等待时间到,返回1 while(i-)if(RI) return 0; /等待时间内 RI = 1 ,返回0 return 1; /串行接收停止位的中间时,RI 置1uchar ReadSbuf(void)/从SBUF 读数据,可得到接收的数据 uchar TmpSbuf; TmpSbuf=SBUF; SCON=0x50; return TmpSbuf;void ComService(void) interrupt 4 uchar TmpSBUF,i=0; EA=0; ES=0; if(RIwait(RiWaitTimer) goto ExitCom; switch(ReadSbuf() case R:/current call for(i=0;i20;i+) if(RIwait(RLongiWaitTimer) break;/goto ExitCom; i=ReadSbuf(); TelTmpNumi=i; / new add ifi=r)break; i=n; TelTmpNumi=n; / new add if(StandbyStatus=IsStandby) =IR_BLUETOOTHPOWERON; else if=BlueToothWorkInCalling) =IR_BLUE
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1