51单片机与蓝牙模块的串口通信_第1页
51单片机与蓝牙模块的串口通信_第2页
51单片机与蓝牙模块的串口通信_第3页
免费预览已结束,剩余10页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.#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_()sbit P10 = P10; sbit P11 = P11; sbit P12 = P12; sbit P13 = P13;/* 定义独立对地按键端口*/* 定义独立对地按键端口

2、*/* 定义独立对地按键端口*/* 定义独立对地按键端口*/shift 键bit shift_flag;bit call_flag ;bit CallIn_flag=0;bit reci_flag;bit reci_flag1;sbit sled_en_port = P36; /*定义数码管数据锁存器控制端口*/sbit led_en_port = P25; /*定义发光二极管数据锁存器控制端口*/sbit ds1302_en_port = P22; /* 定义时钟的选片脚 */uchar CallIn_Num15;/="00000000000"uchar CallOut_

3、Num15=""uchar m=0;/ 拨号指针uchar temp='?'uchar code clr16=""uchar code lcd_table16= "Ky: Cm: Re: "/uchar send_buff15;uchar reci_buff15=""uchar z; / 接收缓冲区指针uchar time;/定时器中断次数uchar code mun_to_char="0123456789ABCDEF"/*1MS 为单位的延时程序*/void init();vo

4、id send(uchar cc);void send_f(uchar ccc);void interrupt_pro();void key_pro();void call_out();Word 文档.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_tablei); /*显示标题 */string_write(0,0,clr);string_write(0,0,"Welcome!&q

5、uot;);sled_en_port = 0; /*关闭数码管显示*/led_en_port = 0; /*关闭发光二极管显示*/ds1302_en_port = 0;/*关闭时钟通讯 */while(1)key_pro(); / 扫描键盘,按键盘处理if(reci_flag)/ 串口有数据过来interrupt_pro();/分析处理reci_flag=0;reci_flag1=1;if(CallIn_flag=1)/ 有电话打进来。CallIn_flag=0;for(i=0,j=0;i<15;i+)/&&reci_buffi>=0x30 &&re

6、ci_buffi<=0x39 if(reci_buffi>='0'&&reci_buffi<='9'|reci_buffi=' ')CallIn_Numj=reci_buffi;j+;reci_buffi=' 'string_write(0,1,clr);string_write(0,1,CallIn_Num);if(call_flag=1)/拨号状态TR0=1;if(time>100&&CallOut_Num0>='0') call_out(); fo

7、r(i=16;i>1;i-) string_write(2,0,CallOut_Num);Word 文档.delay_1ms(222);delay_1ms(222);string_write(2,0,"");delay_1ms(222);delay_1ms(222); for(i=0;i<15;i+) CallOut_Numi=' ' /清空time=0;TR0=0;call_flag=0;string_write(0,0,clr);string_write(3,0,"Welcome!");/ elseif(time>2

8、22)time=0;goto start;/else m=0;void init() /*串口定时器外部中断初始化*/TMOD =0X21;/|= 0x20; /定时器 1 为模式 2,8 位自动重装TH1= 0xfd; /Baud:19200 fosc="11".0592MHzTL1=0XFD ;TH0=0;TL0=0;TR1= 1;/ timer 1 runSCON = 0x50; /UART为模式 1, 8 位数据,允许接收PCON |= 0x80 ; /SMOD=1; Baud加倍IE |= 0x90 ;/Enable Serial InterruptTR1 = 1

9、 ;/ timer 1 runEA=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);Word 文档.send('>');void call_out()uchar i;send('(');for(i=0;i<m;i+)send(CallOut_Numi);send(')');m=0;void interru

10、pt_pro()string_write(0,1,reci_buff);lcd_char_write(14,1,mun_to_chartemp/10); /for testlcd_char_write(15,1,mun_to_chartemp%10); /for testif(temp=')') CallIn_flag=1;/|temp='$' |temp='%'else if(temp='$') lcd_delay(5);/if(temp='$')string_write(0,0,clr);string_writ

11、e(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

12、':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

13、 '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_

14、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_ta

15、blei);/* 显示标题 */Word 文档.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: /0if(call_flag) CallOut_Numm='0'lcd_char_write(m+2,0,'0');m+;elseif(!shift_flag)s

16、end(' ');send('A'); /Answerlcd_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:/1if(call_flag)

17、 CallOut_Numm='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

18、,1,'F');lcd_char_write(9,1,'L');break;case 0x48:/2Word 文档.if(call_flag) CallOut_Numm='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

19、,' ');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:/3if(call_flag) CallOut_Numm='3'lcd_char_write(m+2,0,'3');m+; else if(!shift_flag) send(' ');send('L'); /Rediallcd_ch

20、ar_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:/4if(call_flag) CallOut_Numm='4'lcd_char_write(m+2,0,'4')

21、;m+;elseif(!shift_flag)send(' ');send('U');/Vol uplcd_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');Word 文档.break;cas

22、e 0x24:/5if(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,' ');else send_f('S');lcd_char_write(3,1,'5&

23、#39;);lcd_char_write(8,1,'F');lcd_char_write(9,1,'S');break;case 0x44:/6if(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_w

24、rite(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:/7if(call_flag) CallOut_Numm='7'lcd_char_write(m+2,0,'7');m+; else if(!shift_flag) send(

25、' ');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,' ');Word 文档.break;case 0x1

26、2:/8if(call_flag) CallOut_Numm='8'lcd_char_write(m+2,0,'8');m+; else if(!shift_flag)send(' ');send('Z');/Call transferlcd_char_write(3,1,'8');lcd_char_write(8,1,'Z');lcd_char_write(9,1,' ');else send(' ');send('p');lcd_char_writ

27、e(3,1,'8');lcd_char_write(8,1,'p');lcd_char_write(9,1,' ');break;case 0x22:/9if(call_flag) CallOut_Numm='9'lcd_char_write(m+2,0,'9');m+; else if(!shift_flag)send(' ');send('Q');/Disconnectlcd_char_write(3,1,'9');lcd_char_write(8,1,'

28、Q');lcd_char_write(9,1,' ');elsesend(' ');send('z'); /Call transferlcd_char_write(3,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+;elsesend('

29、 ');send('Y');/Versionlcd_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,0,'#');m+;Word 文档.elsesend(' ');send('T');/Set auto answerlcd_char_wr

30、ite(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 answerlcd_char_write(3,1,'C');lcd_char_write(8,1,'t');lcd_char_write(9,1,' ');break;case 0x21:if(!call_flag)send(

31、' ');send('M');/Set volume setlcd_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 setlcd_char_write(3,1,'E');lcd_char_write(8,1,'m');lcd_char_wri

32、te(9,1,' ');break;case 0x81:if(!call_flag)send(' ');send('N'); /Set auto linklcd_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(P

33、10=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');/Linkelse if(P11=0)Word 文档.call_flag=call_flag;if(call_flag)string_write(0,0,clr);lcd_char_write(0,0,0);

34、/ 显示拨号状态符号elsefor(i=0;i<16;i+)CallOut_Numi=''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'); /Pairelse if(P13=0)shift_flag=shift_flag;if(shift_flag) lcd_char_w

35、rite(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 3if (RI)RI=0;

36、temp=SBUF;/if(temp!=10)reci_buffz=temp;z+;if(z>15) z=0;TR0=1;reci_flag1=1;Word 文档./*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)/ 等待时间到,返回1while(i-)if(RI) return 0;/ 等待时间内RI = 1,返回 0return 1;/ 串行接收停止位的中间时,RI置 1uchar ReadSbuf(void)/ 从 SBUF 读数据,可得到接收的数据 uchar TmpSbuf; TmpSbuf=SBUF;SCON=0x50; return TmpSbuf;void ComService(void) in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论