51单片机与蓝牙串口通信程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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
/*显示标题*/
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]);
uchar CallIn_Num[15];//={"00000000000"};
uchar CallOut_Num[15]={"
"};
uchar m=0; //拨号指针
uchar temp='?';
uchar code clr[16]={"
"};
uchar code lcd_table[16] = {"Ky: Cm: Re: "};
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);
sled_en_porFra Baidu bibliotek = 0; /*关闭数码管显示*/
led_en_port = 0; /*关闭发光二极管显示*/
ds1302_en_port = 0;/*关闭时钟通讯*/
while(1) { key_pro(); //扫描键盘,按键盘处理
if(reci_flag) //串口有数据过来 {
interrupt_pro();//分析处理 reci_flag=0; reci_flag1=1; }
sbit P10 = P1^0; sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3;
/*定义独立对地按键端口*/ /*定义独立对地按键端口*/ /*定义独立对地按键端口*/ /*定义独立对地按键端口*/
//shift 键
bit shift_flag; bit call_flag ; bit CallIn_flag=0; bit reci_flag; bit reci_flag1; sbit sled_en_port = P3^6; /*定义数码管数据锁存器控制端口*/ sbit led_en_port = P2^5; /*定义发光二极管数据锁存器控制端口*/ sbit ds1302_en_port = P2^2; /*定义时钟的选片脚*/
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(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
send('>'); } void call_out() {
uchar i; send('('); for(i=0;i<m;i++) {
send(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=='$')
delay_1ms(222);
delay_1ms(222);
string_write(2,0,"
");
delay_1ms(222);
delay_1ms(222); }
for(i=0;i<15;i++) CallOut_Num[i]=' '; //清空
time=0;TR0=0;call_flag=0;string_write(0,0,clr);string_write(3,0,"Welcome!");
string_write(0,1,clr); string_write(0,1,CallIn_Num);
} if(call_flag==1)//拨号状态 { TR0=1;
if(time>100&&CallOut_Num[0]>='0') { call_out(); for(i=16;i>1;i--) { string_write(2,0,CallOut_Num);
#include <reg51.h> #include <intrins.h> #include<stdio.h> #include "LCD1602.h" #include "matrix_key.h" #define uint unsigned int #define uchar unsigned char #define Nop() _nop_()
//uchar send_buff[15];
uchar reci_buff[15]={"
"};
uchar z; //接收缓冲区指针
uchar time;//定时器中断次数
uchar code mun_to_char[]={"0123456789ABCDEF"};
/*1MS 为单位的延时程序*/
void init(); void send(uchar cc); void send_f(uchar ccc); void interrupt_pro(); void key_pro(); void call_out();
void main() {
uchar i,j;
delay_1ms(5);
init();
//定时器初始化
lcd_system_reset(); /*LCD1602 初始化*/
for(i=0;i<16;i++)
lcd_char_write(i,1,lcd_table[i]); /*显示标题*/
string_write(0,0,clr);string_write(0,0," Welcome! ");
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);
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)
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');
} // else if(time>222){time=0;goto start;}//else m=0; } } }
void init() /* 串口定时器外部中断初始化 */
{
TMOD =0X21;//|= 0x20; //定时器 1 为模式 2,8 位自动重装
TH1 = 0xfd; //Baud:19200 fosc="11".0592MHz
/*显示按键*/
{
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'); //可以不显示出来
if(CallIn_flag==1) //有电话打进来。 { CallIn_flag=0;
for(i=0,j=0;i<15;i++) //&&reci_buff[i]>=0x30 &&reci_buff[i]<=0x39 { if(reci_buff[i]>='0'&&reci_buff[i]<='9'||reci_buff[i]==' ') {CallIn_Num[j]=reci_buff[i];j++;} reci_buff[i]=' '; }
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
相关文档
最新文档