#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;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!\"); } }*/ 因篇幅问题不能全部显示,请点此查看更多更全内容