您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页51单片机与蓝牙模块的串口通信

51单片机与蓝牙模块的串口通信

来源:爱go旅游网


#include <> #include <> #include<> #include \"\" #include \"\"

#define uint unsigned int #define uchar unsigned char #define Nop() _nop_()

sbit P10 = P1^0; /*定义独立对地按键端口*/ sbit P11 = P1^1; /*定义独立对地按键端口*/ sbit P12 = P1^2; /*定义独立对地按键端口*/

sbit P13 = P1^3; /*定义独立对地按键端口*/ 592MHz TL1=0XFD ; TH0=0; TL0=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('<'); send('F'); send(ccc); send('>'); }

void call_out() {

uchar i;

send('(');

for(i=0;isend(CallOut_Num[i]); }

send(')'); m=0; }

void interrupt_pro() {

string_write(0,1,reci_buff);

lcd_char_write(14,1,mun_to_char[temp/10]); //for test lcd_char_write(15,1,mun_to_char[temp%10]); //for test if(temp==')') CallIn_flag=1;//|temp=='$' |temp=='%' else if(temp=='$'){ lcd_delay(5);//if(temp=='$') string_write(0,0,clr);

string_write(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':string_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\"); break;

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; //for(i=0;i<16;i++) lcd_char_write(i,1,lcd_table[i]); /*显示标题*/ default:break; }

//temp='?'; //for test }

void 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_Num[m]='0';lcd_char_write(m+2,0,'0');m++;} else if(!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_Num[m]='1';lcd_char_write(m+2,0,'1');m++;} else if(!shift_flag)

{ 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_Num[m]='2';lcd_char_write(m+2,0,'2');m++;} else if(!shift_flag)

{ send(' ');send('R'); //Reject 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_Num[m]='3';lcd_char_write(m+2,0,'3');m++;} else if(!shift_flag)

{ send(' ');send('L'); //Redial lcd_char_write(3,1,'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_Num[m]='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,'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_Num[m]='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,' '); } 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_Num[m]='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');send('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_Num[m]='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_char_write(3,1,'7'); lcd_char_write(8,1,'n'); lcd_char_write(9,1,' ');

} break; case 0x12://8 if(call_flag)

{CallOut_Num[m]='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,'8'); lcd_char_write(8,1,'p'); lcd_char_write(9,1,' ');

} break; case 0x22://9

if(call_flag)

{CallOut_Num[m]='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,1,'9');

lcd_char_write(8,1,'z'); lcd_char_write(9,1,' '); } break;

case 0x42://A * if(call_flag)

{CallOut_Num[m]='*';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_Num[m]='#';lcd_char_write(m+2,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('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,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_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;i<16;i++) CallOut_Num[i]=' ';string_write(0,0,clr);string_write(3,0,\"Welcome!\");} }

else if(P12==0) {lcd_char_write(3,1,'c'); send(' ');send('P');lcd_char_write(8,1,'P');} //Pair else if(P13==0) {

shift_flag=~shift_flag;

if(shift_flag) lcd_char_write(15,0,'s'); else lcd_char_write(15,0,' '); }

while((P10==0)||(P11==0)||(P12==0)||(P13==0));/*等待按键放开*/

} }

delay_1ms(5); }

void Timer0Interrupt() interrupt 1 //定时器0中断服务函数 {

TH0 =0; TL0 =0;

TR0=0; if(reci_flag1==1) reci_flag=1;

z=0;

if(call_flag==1) time++; }

//串口接收中断函数

void serial () interrupt 4 using 3 {

if (RI) {

RI = 0 ;

temp=SBUF; // if(temp!=10) reci_buff[z]=temp; z++; if(z>15) 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(uint i)

{ //等待时间到,返回1

while(i--){if(RI) return 0;}; //等待时间内 RI = 1 ,返回0 return 1; //串行接收停止位的中间时,RI 置1 }

uchar 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;i<20;i++) {

if(RIwait(RLongiWaitTimer)) break;//goto ExitCom; [i]=ReadSbuf();

TelTmpNum[i]=[i]; // new add if[i]=='\\r')break;

}

[i]='\\n';

TelTmpNum[i]='\\n'; // new add if(StandbyStatus==IsStandby)

{

=IR_BLUETOOTHPOWERON; } else {

if==BlueToothWorkInCalling)

=IR_BLUETOOTHINTEL; else // =IR_BLUETOOTHIN; _bIRKey= IR_BTPHONECAllIN; // =IR_BTPHONECAllIN; }

break; }

ExitCom:

SCON = 0x50; //模式1 ,REN = 1 ,允许接收数据

ES=1;

EA=1; //Enable UART } */

/* if(call_flag==1&&key_value_buff==0)//拨号状态 {

n++; if(n>555) {

for(time=18;call_flag==1&&time>0&&CallOut_Num[0]>='#';time--) {

if(P11!=0) {

delay_1ms(222); delay_1ms(222);

string_write(2,0,CallOut_Num); delay_1ms(222); delay_1ms(222); delay_1ms(222); delay_1ms(222);

string_write(2,0,\" \"); delay_1ms(222); delay_1ms(222); }

else {

call_flag=0;

string_write(0,0,clr);

string_write(3,0,\"Welcome!\"); } }

call_flag=0;

n=0;

string_write(0,0,clr); // goto start string_write(3,0,\"Welcome!\"); } }*/

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务