蓝牙模块学习笔记(1)

合集下载

蓝牙Host Controller Interface笔记

蓝牙Host Controller Interface笔记

1.概述HCI提供了一个统一的使用蓝牙控制器(BR/EDR Controller,BR/EDR/LE Controller,LE Controller,AMP Controller等)的方法,它屏蔽了蓝牙的基带部分,提供了统一的数据进入基带的方法。

首先,蓝牙的BaseBand部分有以下几种控制器:• BR/EDR Controller• BR/EDR/LE Controller• LE Controller• AMP Controller前三种称为primary Controller,AMP是蓝牙3.0后加上的,支持High Speed传输。

下图为简单的架构:两个设备间数据的流向如下图:MANDS AND EVENTS通过HCI接口,Host与controller通过Command和Event的形式进行通信,其中command 是Host传给controller的,Event是controller反馈给Host的,如下图所示:Command和Event根据不同的类型进行了以下分组,具有以下几种:每一组内有一个或者对个Command和Event,举例如下:可以看出,Generic event组内有三种Event,Device SetUp组内只有一种reset Command。

Command和Event的种类很多,这里不具体介绍,参考Spec704-1000的具体说明。

3.HCI Data Format由上可知,HCI有三种数据,Command、Event和Data,这三种类型的HCI Data分别有不同的格式。

需要注意的是,HCI Data都是Little Endian formats的,负数的存储形式为2进制补码。

在Host和Controller之间由HANDLES来识别不同的通道,一共有三种:• Connection Handles• Logical Link Handles• Physical Link Hand les其中,Connection Handles用于primary controller(除AMP外),另外两用用于AMP Controller。

蓝牙技术学习笔记

蓝牙技术学习笔记

UAP 高地址部分 8bit LAP 低地址部分 24bit
b) AM_ADDR(主设备分配给处于 Active 状态的从设备的活动成员地址(Active Member
Address),AM_ADDR 长度为 3bit,最多 8 个设备,主设备的 AM_ADDR 地址固定为
000)。 c) PM_ADDR(从 Active 状态进入 Park 状态的蓝牙设备,将得到一个守候成员地址(Parked
c) 链路数目:主设备和各个从设备间最多只有一条 ACL 链路,但是可以有多条 SCO 链路。 8. 语音编码
蓝牙技术中的语音编码可采用脉冲编码调制 PCM 或连续变化斜率比较调制 CVSD 两种方 式,具体采用何种方式决定于高层。 9. 差错控制 蓝牙技术的基带层内共定义了 1/3FEC,2/3FEC 以及 ARQ3 种差错控制方式。对于 SCO 链 路上语音包的差错控制方式采用 1/3FEC,对于 ACL 链路上数据包的差错控制方法采用 2/3FEC,每个包内的包头位都采用 1/3FEC 差错控制。 10. 蓝牙数据包结构 Packet(包)是蓝牙系统在物理信道上的传输单位,不同的包占用的时隙个数、包长度、包 上的位数值都有较大差异。 蓝牙包分为访问码(Access Code)、包头(Header)、有效载荷(Payload)3 部分。
蓝牙技术的操作模式 Profile 1、为什么要定义操作模式 蓝牙技术所支持的设备种类繁多,需要许多特有的通信协议来支持相应的设备类型。制定操作 模式的最大目的是确保蓝牙设备的互通性。 2、每个操作模式实现互通性的方法 每个操作模式实现互通性的方法,是从通信协议层与应用层两个层着手,制定设备操作在该操 作模式下应该遵守的规范。 每个操作模式代表某个设备在某种应用场合必须遵守的规范,操作模式的名称反映了操作模式 所定义的应用场合。 3、蓝牙技术标准定义的各种操作模式 目前,在蓝牙技术中定义了 13 种操作模式,大致可分为 4 类:通用模式与服务发现应用操作模 式,所有蓝牙设计都必须符合通用操作模式的规范;与电话相关的操作模式;串行端口操作模式; 普通对象交换操作模式。各种模式关系如图:

ESP32_IDF学习1【基本内容】

ESP32_IDF学习1【基本内容】

ESP32_IDF学习1【基本内容】学校⽼师留了个作业,让⽤剩下⼀半的寒假学学ESP32,做蓝⽛透传+STA&AP模式下⼯作的http服务器,但是不准⽤Arduino当场就傻了:ESP32我刚刚好就会⼀⼿Arduino;乐鑫那套ESPIDF太难啃,之前点了个灯就去快乐stm32了;micropython......刷完固件发现蓝⽛⽀持跟【数据删除】⼀样,还不如⽤c写——⼀咬⽛⼀跺脚,回头肝ESPIDF吧总体思路:资源少,跟着官⽅⾛准没错,硬啃就完事了这个系列笔记可以供只接触过单⽚机开发(STM32、51基础)和硬件相关知识但没有接触过⽹络相关知识的同学翻阅学习项⽬⽂件夹构建ESP-IDF项⽬由各种“组件”构成,你需要什么功能就要往⾥扔进去什么组件如果你的代码⾥⽤了⼀堆WiFi的库函数,但是没把WiFi组件加⼊进去,你是没办法⽤WiFi功能的项⽬保存在项⽬⽂件夹下,它的根⽬录如下所⽰:├── CMakeLists.txt Cmake使⽤的⽂件├── other_documents 其他⽂件├── main 存储主程序│├── CMakeLists.txt│├── component.mk 组件的make file│└── main.c└── Makefile 由传统的GNU make程序使⽤的Makefile需要注意的是:ESP-IDF并不是项⽬⽂件夹的⼀部分,它更像是⼀个⾃助编译器,项⽬⽂件夹通过idf.py esptools等⼯具和{IDF_PATH}与ESP-IDF⽬录建⽴联系;同样,esp的开发⼯具链也独⽴于项⽬存在,通过{PATH}对项⽬进⾏作⽤项⽬建⽴前,esp-idf会通过idf.py menuconfig配置出Makefile,这些配置保存在sdkconfig中。

sdkconfig会被保存在项⽬⽂件夹的根⽬录CMakeLists.txt通过idf_component_register将项⽬⽂件夹下⾯的组件进⾏注册,如下所⽰idf_component_register(SRCS "foo.c" "bar.c"INCLUDE_DIRS "include"REQUIRES mbedtls)SRCS给出了源⽂件清单,能⽀持的源⽂件后缀名为.c .cpp .cc .SINCLUDE_DIRS给出了组件中⽂件的搜索路径REQUIRES不是必须的,它声明了其他需要加⼊的组件通过这个txt⽂档,esp-idf就能知道你往⾥扔了什么组件,然后在编译的时候就会把这些组件编译链接进去(可以理解成操作系统的静态链接)当编译完成后,⽂件根⽬录下会多出build⽂件夹和sdkconfig⽂件,build⽂件夹⽤来存放编译过程中的⽂件和⽣成的⽂件,sdkconfig⽂件是在menuconfig的过程中产⽣的,如果曾经多次重新设置过menuconfig,还会发现多出了以.old结尾的config⽂件另外组件也可以⾃制,详细内容参考官⽅教程;⽽idf.py 的底层是⽤Cmake、make⼯具实现的,所以也可以直接⽤这些⼯具进⾏编译(不过应该没⼈这么⼲)CMake与component组件【摘⾃官⽅⽂档】⼀个ESP-IDF项⽬可以看作是多个不同组件(component)的集合,组件是模块化且独⽴的代码,会被编译成静态库并链接到应⽤程序。

zigbee学习笔记

zigbee学习笔记

关于ZIGBEE技术Zigbee的由来在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷。

对工业,家庭自动化控制和遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近,组网规模太小等,而工业自动化对无线通信的需求越来越强烈。

正因此,经过人们长期努力,Zigbee协议在2003年中通过后,于2004正式问世了。

Zigbee是什么Zigbee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,十分类似现有的移动通信的CDMA网或GSM网,每一个Zigbee网络数传模块类似移动网络的一个基站,在整个网络范围内,它们之间可以进行相互通信;每个网络节点间的距离可以从标准的75米,到扩展后的几百米,甚至几公里;另外整个Zigbee网络还可以与现有的其它的各种网络连接。

例如,你可以通过互联网在北京监控云南某地的一个Zigbee控制网络。

不同的是,Zigbee网络主要是为自动化控制数据传输而建立,而移动通信网主要是为语音通信而建立;每个移动基站价值一般都在百万元人民币以上,而每个Zigbee―基站‖却不到1000元人民币;每个Zigbee 网络节点不仅本身可以与监控对对象,例如传感器连接直接进行数据采集和监控,它还可以自动中转别的网络节点传过来的数据资料; 除此之外,每一个Zigbee网络节点(FFD)还可在自己信号覆盖的范围内,和多个不承担网络信息中转任务的孤立的子节点(RFD)无线连接。

每个Zigbee网络节点(FFD和RFD)可以可支持多到31个的传感器和受控设备,每一个传感器和受控设备终可以有8种不同的接口方式。

可以采集和传输数字量和模拟量。

Zigbee技术的应用领域Zigbee技术的目标就是针对工业,家庭自动化,遥测遥控,汽车自动化、农业自动化和医疗护理等,例如灯光自动化控制,传感器的无线数据采集和监控,油田,电力,矿山和物流管理等应用领域。

另外它还可以对局部区域内移动目标例如城市中的车辆进行定位.通常,符合如下条件之一的应用,就可以考虑采用Zigbee技术做无线传输:1.需要数据采集或监控的网点多;2.要求传输的数据量不大,而要求设备成本低;3.要求数据传输可性高,安全性高;4.设备体积很小,不便放置较大的充电电池或者电源模块;5.电池供电;6.地形复杂,监测点多,需要较大的网络覆盖;7.现有移动网络的覆盖盲区;8.使用现存移动网络进行低数据量传输的遥测遥控系统。

hc05蓝牙模块工作原理(一)

hc05蓝牙模块工作原理(一)

hc05蓝牙模块工作原理(一)HC05蓝牙模块工作原理简介HC05蓝牙模块是一种常见的串口透传蓝牙模块,它可以与其他蓝牙设备配对,实现无线通信、数据传输等功能。

本文将对HC05蓝牙模块的工作原理进行介绍。

HC05蓝牙模块的硬件配置HC05蓝牙模块通常由蓝牙芯片、无线电信号收发模块、外围电路(如电源管理、信号转换等)组成。

其中蓝牙芯片采用了市场上常见的TI、CSR等厂商的芯片,模块外形一般为长方形,尺寸大小根据厂商的不同而有所区别。

HC05蓝牙模块的通信协议HC05蓝牙模块的通信协议包括基础蓝牙协议和蓝牙串口协议。

基础蓝牙协议包括蓝牙设备之间的配对、连接、认证和加密等工作;蓝牙串口协议是在基础蓝牙协议的基础上衍生出来的,它定义了蓝牙模块与外部设备之间的数据传输格式、速率等信息。

HC05蓝牙模块的工作模式HC05蓝牙模块有两种工作模式:命令模式和通信模式。

命令模式下,用户可以通过串口发送AT指令来设置模块的参数,包括蓝牙名字、波特率、工作模式等内容;通信模式下,模块会将串口接收到的数据通过蓝牙发送出去,或者将从蓝牙接收到的数据通过串口输出。

HC05蓝牙模块的接口定义HC05蓝牙模块一般有6个引脚,分别是VCC、GND、TXD、RXD、EN、STATE。

其中,VCC和GND是模块的供电引脚,TXD和RXD是串口通信引脚,EN是模块的使能引脚,STATE是模块的状态引脚。

HC05蓝牙模块的使用方法使用HC05蓝牙模块需要先将模块接上电源,然后通过串口发送AT指令来设置模块的参数。

设置完成后,可以将蓝牙模块与其他蓝牙设备进行配对,实现数据传输等功能。

具体操作方法可以参考模块厂商提供的使用手册或者相关资料。

总结本文介绍了HC05蓝牙模块的硬件配置、通信协议、工作模式、接口定义和使用方法等方面,需要用到的朋友可以按照上述方法进行操作。

需要注意的是,蓝牙模块在工作过程中需要注意电源供应和信号接口的选择,以免造成不必要的损失。

低功耗蓝牙(BLE)学习记录

低功耗蓝牙(BLE)学习记录

RW_BLE_CORE记录传输信道BLE的传输信道在2.4G频段有40个channel。

包括2种物理信道:广播信道和数据信道。

数据帧中设置Access Address用于标识该信道,防止信道碰撞。

Channel MAP如下:数据帧通信蓝牙帧结构如下:Preamble:根据Access Address而定,假如AA的LSB(最右bit)bit为1,则前导便是10101010b,反之则为01010101b。

Access Address:广播帧的AA为:0x8E89BED6。

其他情况可以是一个32bit的随机数。

AA需满足以下条件·不超过连续6个1或者0。

·与广播帧的AA不同bit超过1个。

·不能4byte相同。

·0 1跳变不能超过24次·MSB 6bit 0 1跳变超过2次。

以下逐个介绍PDU。

一、Advertising Channel PDU蓝牙广播帧帧结构其中Header的帧格式如下:其中,a、广播帧类型(PDU Type)分为以下几类:• ADV_IND: connectable undirected advertising event• ADV_DIRECT_IND: connectable directed advertising event• ADV_NONCONN_IND: non-connectable undirected advertisingevent• ADV_SCAN_IND: scannable undirected advertising eventb、Length:3~37bytes广播帧分为很多种,其区别就是payload所代表的意义不同,以下分别对几种广播帧作分别阐释:1、ADV_INDADV_IND的payload格式如下:在广播帧帧头中的TxAdd位是广播地址的标示位:TxAdd==0:AdvA地址为公用地址;TxAdd==1:AdvA地址为随机地址。

知识点0301蓝牙串口模块

知识点0301蓝牙串口模块

+5V
GNDTXຫໍສະໝຸດ RX蓝牙串口模块正面图的上方第
一个引脚代表+5V,依次为
GND,TX,RX
2、绘制接线图
nano板与蓝牙串口的搭接图(蓝牙串口 RX,TX端分别连至nano板TX,RX端)
3、应用电路搭接
nano板上的(RX、 TX)接口接至蓝 牙串口端的(TX、 RX),电源与接 地对应相连
三、编程与调试
3、程序下载及运行
演示运行效果
知识点0301 蓝牙串口模块
主讲人:宁波鄞州职业教育中心学校 陈浙 (Arduino功能模块与应用)
一、蓝牙串口介绍 二、应用电路搭接 三、编程与调试
一、蓝牙串口介绍
1、蓝牙串口介绍
1. 核心模块使用HC-06从模块,引出接口包括 VCC,GND,TX,RX
2. led指示蓝牙连接状态,闪烁表示没有蓝牙连接,常亮表示 蓝牙已连接并打开了端口
3. 底板3.3V LDO,输入电压3.6~6V,未配对时电流约 30mA,配对后约10mA,输入电压禁止超过7V
4. 接口电平3.3V,可以直接连接各种单片机 5. 空旷地有效距离10米 6. 配对以后当全双工串口使用,无需了解任何蓝牙协议,但
仅支持8位数据位、1位停止位、无奇偶校验的通信格式, 不支持其他格式
波特率 编号
7 8 9 A B
对应 波特率
57600 115200 230400 460800 921600
3、改蓝牙名称 发送:AT+NAMEname 返回: OKname 4、改配对密码 发送:AT+PINxxx 返回:OKsetpin
6
38400
C
1382400
二、应用电路搭接

[蓝牙] 1蓝牙核心技术了解(蓝牙协议架构硬件和软件笔记)

[蓝牙] 1蓝牙核心技术了解(蓝牙协议架构硬件和软件笔记)

[蓝牙] 1、蓝牙核心技术了解(蓝牙协议、架构、硬件和软件笔记)声明:这篇文章是楼主beautifulzzzz学习网上关于蓝牙的相关知识的笔记,其中比较多的受益于xubin341719的蓝牙系列文章,同时还有其他网上作者的资料。

由于有些文章只做参考或统计不足,如涉及版权请在下面留言~。

同时我也在博客分类中新建一个蓝牙通信分类,用来研究分享蓝牙相关技术。

下载连接:Bluetooth PROFILE SPECIFICATIONS (基本涵盖所有蓝牙协议)、buletooth core 2.1-4.0 SPECIFICATION(三蓝牙版本的核心协议v2.1\v3.0\v4.0)、蓝牙核心技术与应用马建仓版(蓝牙协议相关初学者必读,开发者参考)蓝牙核心技术概述(一):蓝牙概述蓝牙核心技术概述(二):蓝牙使用场景蓝牙核心技术概述(三):蓝牙协议规范(射频、基带链路控制、链路管理)蓝牙核心技术概述(四):蓝牙协议规范(HCI、L2CAP、SDP、RFOCMM)蓝牙核心技术概述(五):蓝牙协议规范(irOBEX、BNEP、A VDTP、A VCTP)有道笔记分享链接:/share/?id=950d00cefa9b7fd3c559eec34 9805b24&type=note下面是摘抄笔记内容:蓝牙核心技术概述(一):蓝牙概述蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术。

能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。

利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与因特网Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。

蓝牙采用分散式网络结构以及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段。

其数据速率为1Mbps。

采用时分双工传输方案实现全双工传输。

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

蓝牙模块学习笔记(1)蓝牙模块学习刚拿到蓝牙模块,心中有点小激动啊;民用级:HC-05,HC-06(HC-06-M,HC-06-S)HC-05-D,HC-06-D(是带底板的模块,主要是用户用于测试和评估)本文介绍的为HC-06蓝牙串口模块。

蓝牙串口模块用于把串口转换为蓝牙,这种模块工作的时候分为主机和从机,其中偶数命名的型号出厂时就确定了是从机或者是主机,并无法更改。

奇数命名的型号可以用户自己通过AT指令修改模块为主机或者从机。

主机:HC-06-M , M=master从机:HC-06-S , S = slaver串口模块的使用,是不需要驱动的,只要是串口就可以接入,配对完毕即可通信,模块与模块的通信需要至少 2 个条件:1、必须是主机与从机之间2、必须密码一致(密码:1234)主机:记忆最后一次配对过的从机,并只与该从机配对,直到KEY(26 脚)高电平触发时放弃记忆,26 脚默认应该接低电平。

配对方式:主机自动搜索从设备进行配对。

典型方式:在一定条件下,主从之间自动配对AT 模式:配对前就是AT 模式,配对完毕后透明通信图1 是HC-06 图片及主要引脚现在你手中拿到的HC-06引出了四个引脚,分别为VCC、GND、TXD、RXD。

四个引脚分别对应单片机的电源5V或3.3V;GND接地;TXD、RXD交叉连接(对应单片机的P3^0,P3^1)。

连接好,单片机上电,此时蓝牙模块上led闪烁,表示尚未连接其他蓝牙设备。

此时用手机蓝牙搜索,可以搜索到HC-06.点击连接,输入pin 密码则可以连接。

连接好后,利用蓝牙串口助手就可以对蓝牙模块通信了,编程也就可以把蓝牙当作普通串口来对待。

注意编写好程序后,向单片机烧录时,必须将TXD、RXD拔出才能烧写!!!问题:串口发送字符串时,最后没有标志可寻。

可以将字符串接收到数组中,发送数据到12864,检测是否到’\0’,如果检测得到,将标识符flag 置为1;串口中断服务程序中,检测到flag为1时,这证明数据显示成功。

此时应当清屏!清屏方法:while(Tem[i]!='\0'){Tem[i]=' ';i++;}/************************************** *********************STC89C52RC与HC-06蓝牙连线:RXD TXDTXD RXD其他连线:P2.0、P2.1、P2.3分别接一个指示灯*************************************** ********************/#include <reg52.h>#include <intrins.h>unsigned char tmp;unsigned int c=0;sbit led1=P1^0; //指示灯0sbit led2=P1^1; //指示灯1sbit led3=P1^2; //指示灯2sbit beep=P3^2; //蜂鸣器void init(); //串口初始化void send(unsigned char a); //单字节发送函数void ctrl(); //接收处理函数void delay(unsigned int x){unsigned int i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void main(){init();while(1){if(RI==1)// 是否有数据到来{RI = 0;tmp = SBUF; // 暂存接收到的数据ctrl();}}}void init() //串口初始化{ES=0; //关中断SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1,//10位UART(1位起始位,8位数据位,1位停止位,无奇偶校验),波特率可变TMOD = 0x20; // 定时器1工作于方式2,8位自动重载模式, 用于产生波特率TH1=TL1=0xFD;// 波特率9600 (本次测试采用晶振为11.0592)PCON &= 0x7f; // 波特率不倍增TR1 = 1; //定时器1开始工作,产生波特率//发送标志位置TI=0; //接收标志位置0RI=0;//EA=0;ES=1;led1=0;//初始化设置3个指示灯全亮led2=0;led3=0;}void send(unsigned char a) //单字节数据发送{ //注意:若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻。

本次测试需要接上拉电阻TI=0;SBUF=a;while(TI==0);TI=0;if(c%2) //发送指示灯标志,每接收一次,此灯亮灭交替led3=1;elseled3=0;c++;}void ctrl() //接收处理函数{switch(tmp){c ase '1':led1=1; //收到字符1,指示灯0灭send(tmp);beep=0;delay(500);break;case '2': //收到字符2,指示灯1灭led2=1;send(tmp);beep=1;delay(500);break;case '3': //收到字符3,指示灯0、1亮led1=0;led2=0;send(tmp);beep=1;delay(500);break;case '4': //收到字符4,指示灯0、1灭led1=1;led2=1;send(tmp);break;case '5': //收到字符5,指示灯3亮led3=0;send(tmp);break;default: //其他,灯全灭led1=1;led2=1;led3=1;send(tmp);beep=1;delay(500);}}以下是蓝牙接收字符串并向12864显示程序/**************************************** *************************************8*任广俊*日期:12.17*蓝牙接收并显示在12864上,1,2,3控制发光二极管*4,5控制继电器***************************************** *************************************/#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define LCD_data P0sbit LCD_EN=P3^4; //液晶使能1使能,0使不能sbit LCD_RS=P3^5; //寄存器选择1数据,0命令sbit LCD_RW=P3^6; //液晶读写控制1读出,0写入sbit LCD_PSB=P3^7; //串行口控制1并行,0串行sbit led1=P1^0;sbit led2=P1^1;sbit led3=P1^2;sbit beep=P3^2; //蜂鸣器sbit jdq=P1^6; //继电器uchar code dis1[]={"I Love MCU !"};uchar code dis2[]={"单片机学习"};uchar Tem[20];uchar dis3[8];unsigned char a=0; //定义临时变量uchar flag,flag2=0;uchar temp,i,c;void delay(uint x){uint m,n;for (m=x;m>0;m--)for(n=110;n>0;n--);}/**************************************** ***************************************** **********************12864液晶显示***************************************** ***************************************** *********************///写指令:RS=L;RW=L;E=高脉冲;D0-D7=指令码void write_cmd(uchar cmd ){LCD_RS=0;LCD_RW=0;LCD_EN=0;P0=cmd;delay(5);LCD_EN=1;delay(5);LCD_EN=0;}//写数据到LCD:RS=H;RW=L;E=高脉冲D0-D7数据void write_dat(uchar dat){LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;delay(5);LCD_EN=1;delay(5);LCD_EN=0;}//设定显示位置void lcd_pos(uchar x,uchar y){uchar pos;if(x==0){x=0x80;}else if(x==1){x=0x90;}else if(x==2){x=0x88;}else if(x==3){x=0x98;}pos=x+y;write_cmd(pos); //显示地址}void lcd_init() //lcd初始化{LCD_PSB=1; //并口方式write_cmd(0x30); //基本指令喜僮? delay(5);write_cmd(0x0C); //显示开关光标delay(5);write_cmd(0x01); //清除lcd显示内容delay(5);}/********************************************************************************* **********************************/void BT_init() //蓝牙串口初始化{ES=0; //关中串口中断SCON = 0x50; // REN=1允许串口接收状态,串口工作方式1//10位UART(1起始位,8数据位,1停止位?,无奇偶校检TMOD = 0x20; // 定时器1,工作方式2TH1=TL1=0xFD;// 设置波特率9600PCON &= 0x7f; // 波特率不倍增TR1 = 1; //允许串口中断TI=0; //发送标志0RI=0; //接收标志0ES=1;EA= 1; //开总中断led1=0; //初始化为全亮led2=0;led3=0;}void send(unsigned char a) //单字节数据发送{TI=0;SBUF=a;while(TI==0);TI=0;write_dat(a);if(c%2) //发送指示灯{led3=1;delay(500);led3=0;}c++;}}void main(){BT_init(); //Bluetooth 初始化lcd_init(); //液晶显示初始化while(1){/**************************************** ***************************************** **液晶显示区***************************************** ***************************************** *******/// write_cmd(0x01); //清除lcd显示内容lcd_pos(0,0); //向第一行首位置写数据i=0;while(dis1[i]!='\0'){write_dat(dis1[i]);i++;}lcd_pos(1,0); //向第二行首位子写数据i=0;while(dis2[i]!='\0')write_dat(dis2[i]);i++;}delay(10);lcd_pos(2,0); //向第二行首位子写数据i=0;while(Tem[i]!='\0'){write_dat(Tem[i]);i++;}flag=1;}}void UART_SER (void) interrupt 4 //串口中断服务程序{while(RI) //接收到数据{if(flag==1) //字符串发送完毕{flag=0;a=0;//数据标志清零i=0; //数据清零while(Tem[i]!='\0') //向lcd写空格{Tem[i]=' ';i++;}}RI=0; //清除标志位Tem[a++]=SBUF; //读取缓冲区的值}}AT 指令集进入AT 指令的方法:给模块上电,不配对的情况下,就是AT 模式了。

相关文档
最新文档