已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
低功耗蓝牙(BluetoothLow Energy),简称BLE。蓝牙低能耗无线技术利用许多智能手段最大限度地降低功耗。蓝牙低能耗架构共有两种芯片构成:单模芯片和双模芯片。蓝牙单模器件是蓝牙规范中新出现的一种只支持蓝牙低能耗技术的芯片是专门针对ULP操作优化的技术的一部分。蓝牙单模芯片可以和其它单模芯片及双模芯片通信,此时后者需要使用自身架构中的蓝牙低能耗技术部分进行收发数据。双模芯片也能与标准蓝牙技术及使用传统蓝牙架构的其它双模芯片通信。TI用于感测应用的蓝牙低功耗装置是真正的 SoC 解决方案。CC254x SoC 系列完美结合 TI 协议堆栈、基本软件 (profile software) 以及样品应用 (sample application),是高弹性、低成本单模蓝牙低功耗解决方案。接下来我们将结合CC254x,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝牙4.0的开发过程。本教程共分为六部分,主要知识点如下所示:第一部分知识点:第一节 BLE开发环境的搭建第二节 BLE快速体验第三节 创建IAR工程-点亮LED第四节 控制LED第五节 LCD12864显示第二部分知识点:第六节 独立按键之查询方式第七节 独立按键之中断方式第八节 CC254x内部温度传感器温度采集第九节 五向按键第十节 蜂鸣器第三部分知识点:第十一节 串口通信第十二节 Flash的读写第十三节 BLE协议栈简介第十四节 OSAL工作原理第十五节 BLE蓝牙4.0协议栈启动分析第四部分知识点:第十六节 协议栈LED实验第十七节 协议栈LCD显示第十八节 协议栈UART实验第十九节 协议栈五向按键第二十节 协议栈Flash数据存储第五部分知识点:第二十一节 DHT11温湿度传感器第二十二节 蓝牙协议栈之从机通讯第二十三节 蓝牙协议栈主从一体之主机通讯第二十四节 OAD空中升级第二十五节 SBL串口升级第六部分知识点:第二十六节 UBL-USB升级第二十七节 MT-iBeacon基站使用iPhone空中升级第二十八节 MT-iBeacon基站在PC端实现OAD空中升级第二十九节 MT-iBeacon基站关于LightBlue软件的使用第三十节 如何使用MT-USBDongle的透传功能有关TI 的CC254x芯片介绍,可点击下面链接查看:主流蓝牙BLE控制芯片详解(1):TI CC2540BLE是蓝牙4.0规范中的一种,其中master最多有7个外设,低功耗,低延迟,低吞吐量。六种设备状态待机状态(standby):设备没有传输和发送数据,并且没有连接到任何设备广播状态(Advertiser):周期性广播状态扫描状态(Scanner):主动寻找正在广播的设备发起链接状态(Initiator):主动向扫描设备发起连接。主设备(Master):作为主设备连接到其他设备。从设备(Slave):作为从设备连接到其他设备。五种工作状态准备(standby),广播(advertising),监听扫描(Scanning),发起连接(Initiating),已连接(Connected)四种设备类型Cnetral主机(常作为client端):如手机,PCPeripheral从机(常作为Service端):如心率计,血糖计Observer观察者:Broadcast广播者:连接过程:Peripheral开启广播-Central扫描从机广播-Peripheral接收到Central的扫描请求,Peripheral向Central发送扫描回应数据-Central向Peripheral发起连接-开始通信。兼容性第一节 BLE开发环境的搭建1.1 硬件准备要进行BLE的开发,首先我们需要一个硬件环境。(1) MT254xBoard开发板(最好有两块,方便进行数据收发实验);(2) USBDongle-BLE抓包工具(多个固件,一个硬件多种用途),协议开发时辅助我们分析数据包;(3) 开发必备CC-Debug,用于下载和调试程序;有关本文的工具下载,大家可以到以下这个地址:朱兆祺ForARM1.2 BLE协议栈的安装我们使用的是最新版本的协议栈BLE-CC254x-1.4.0,首先在配套的资料文件夹中的tools文件夹下找到BLE-CC254x-1.4.0.exe文件。我们提供了一个安装包和一个免安装的源码,根据我的开发经验,建议使用安装包安装到C盘,直接使用免安装源码在后期的开发中会遇到一些莫名其妙的问题。下面开始安装协议栈,安装方式很简单,记得选择C盘安装。在安装的最后阶段,默认的会安装Btool。成功安装了协议栈后,将会出现说明文件。在说明文件中我们可以看到,这个版本的协议栈需要使用IAR for 8051 8.20.2版本的软件。注:如果使用的是Win8以上的系统建议使用IAR for 8051 8.30.2版本的软件,安装方式和8.20.2是一样的。下面我们就开始安装这个版本的软件。1.3 IAR安装在配套的文件目录下找到如下文件。安装IAR,然后安装Dongle驱动。到这步,说明IAR已经安装完成,下面开始进行和谐,你懂得!解压此文件夹,得到如下文件:将解压得到的文件全部复制到IAR安装目录(如下图),直接覆盖原始文件。这样IAR的安装就完成了。先开启软件来体验一下安装成果吧!1.4 安装烧写软件至此,我们目前需要用到的开发软件就安装完成了。第二节 BLE快速体验经过前面的安装,我们的开发环境已经搭建好了,现在我们先来体验一下BLE,给自己点动力,comeon!使用SmartRFFlash Programmer烧写从机固件:CC2540_SmartRF_SimpleBLEPeripheral.hex,烧写方法见SmartRF Flash Programmer的使用章节。协议栈默认自带了一些已经编译好的文件,可以直接烧写,具体路径如下图:从机固件路径:读取设备的IEEE地址:烧写完成后,如果你有支持Ble的手机或平板就可以搜索到设备了,或者使用本公司开发的USBDongle(抓包固件或HostTestRelease固件)也可以搜索到设备,具体的使用可以阅读相应的产品使用手册,我这里用andriod平板搜索:通过MAC地址可以知道我们的设备已经在正常的广播了,我这里使用本公司开发的andriod端软件TruthBlue可以正常搜索到我们的设备。如果用户手上有支持BLE的设备并且系统在andriod4.3以上也可以安装我们的这个软件。连接上设备后如图,这里我们不要求大家能够看懂这些,这里仅仅是为了体验,后面的章节中我们会详细的讲述这些知识。第三节 创建IAR工程-点亮LED经过前面的准备工作,这章开始我们开始正式的开发过程。这个教程是为有一定51基础和C基础的人准备的,如果读者这方面还欠缺,请找相关方面的书籍恶补一下。CC2540的本质就是一个8051的单片机,所以我们裸机开发就可以作为一个51单片机来开发,裸机开发的目的是为了让大家熟悉整个硬件以及开发环境,这并不是我们的最终目的,但这是一个必须的过程,为后面开发协议栈奠定基础。打开我们前面安装的IAR软件,创建一个新的工程。因为我们使用的CC2540是增强型51单片机,这里我们创建一个空的8051工程,具体配置选项如图:选择目录保存工程;我们这里创建一个最简单的例程,点亮一个LED,这个例程就像我们学习每种编程语言是都是先来个Hello World!。虽然简单,但是能够让我们最快的掌握一个开发环境的使用。新的工程为空工程,没有任何文件,我们这里新建一个文件并且保存为C文件。添加文件到工程:保存WorkSpace,在IAR中每个工程都必须要有一个Workspace,而且一个Workspace中可以有多个工程,所以这里我也必须要保存一个Workspace,点击file-save Workspace As就会弹出如下对话框,这里和保存文件一样需要对这个WorkSpace命名,我们这里一样取名LED。接下来我们需要对工程进行一些配置,使它适应我们的CPU。在工程处右击,进入配置界面。CPU配置:这里我们第一个要做的就是选择我们的CPU,我们使用的是TI公司生产的CC2540F256,所以这里选择CC2540F256。配置好CPU后,我们还需要配置编译输出的文件格式,选择到Linker选项,配置如下图:debug选项:选项配置:经过这些配置后,我们可以开始编码了,下面开始编写我们的第一个代码,功能是点亮2个LED,开发板上有两个LED灯,分别对应P1.0和P1.1。代码如下,可能觉得都是注释,这里我还是建议大家有一个好的编码风格,在开发大项目时就能够看到它的优势。int main(void)P1SEL &= 0X03; / 将P1.1、0设置为IO功能P1DIR |= 0X03; / 设置P1.1、0为输出功能while(1)P1 = (P1 & 0XFC) | 0X01; / 设置P1.0输出高电平return 0;编写好代码后,就可以编译下载到开发板上了。点击图中所示图标全速运行。根据原理图,P1.0对应的是LED2,这里我们能够看到LED2处于点亮的状态。根据CC254X的数据手册,我们可以很快知道P1SEL是设置IO功能,P1DIR是设置输入输出。至于为什么程序是这么写,我们来看下,CC254X芯片的P1口一共有8个IO口,那就是说刚刚好由两位十六进制进行控制:1111 1111(FF),这里仅仅是LED1和LED2,也就是P1.1和P1.0两个IO口,为了不影响其他引脚的使用,我们这里巧妙使用与或控制其功能。比如:P1 = (P1 & 0XFC) | 0X01; P1与上1111 1100,这样不影响其他引脚的基础上,清除了P1.0和P1.1的输出,再或上0X01,这样将P1.0设置为高电平,根据原理图,高电平是点亮LED2.第四节 控制LED上一节点亮了单个LED灯,我们这堂课接着控制LED灯。这堂课我们要完成的是LED闪烁10次,蜂鸣器响1s钟。这里我们先使用延时函数进行。我们的程序一定要做到结构清晰,可移植性强,阅读性高。程序设计不仅仅是实现了功能,如果那样的代码,那只有你自己可以看懂,是一手垃圾。真正的漂亮代码具有阅读性高、可移植性强、代码规范性好。delay.h:#ifndef _DELAY_H_#define _DELAY_H_extern void Delay1ms(unsigned int uiDelay);#endif/* end file */延时函数的执行程序delay.c:#include “delay.h”void Delay1ms(unsigned int uiDelay)unsigned int i;for ( ; uiDelay 0; uiDelay-)/* 大约延时1ms */for (i = 0; i 320; i+);/* end file */主函数其实也很简单:int main(void)/* 控制LED灯闪烁 */unsigned char i;/* 驱动无源蜂鸣器 */unsigned int j;/* 将P1.0、P1.1设置为IO口 */P1SEL &= 0x03;/* 将P1.0、P1.1设置为IO口的输出 */P1DIR |= 0x03;/* 将P2.0设置为IO口 */P2SEL &= 0x01;/* 将P2.0设置为IO口输出 */P2DIR |= 0x01;/* 主循环 */while(1)/* LED1,LED2闪烁10次 */for (i = 0; i 10; i+)/* P1.0-LED2,P1.1-LED1 */* P1.0,P1.1输出高电平,即点亮LED2,LED1 */* FC : 1111 1100*/P1 = (P1 & 0xFC) | 0x03;Delay1ms(1000);/* P1.0,P1.1输出低电平,即熄灭LED2,LED1 */* FC : 1111 1100*/P1 = (P1 & 0xFC) & (0x03);Delay1ms(1000);/* 给出500HZ的方波驱动 */for(j = 0; j 1000; j+)/* P2.0-蜂鸣器 */P2 = (P2 & 0xFE) & (0x01);Delay1ms(1);P2 = (P2 & 0xFE) | 0x01;Delay1ms(1);/* end file */这里需要注意的是,MT254X蓝牙4.0开发板使用的无源蜂鸣器,那么我们需要产生一个方波来驱动。如这代码:/* 给出500HZ的方波驱动 */for(j = 0; j 中并没有说明SLEEPCMD第二位功能,如下所示:但是参考cc2430芯片的说明书可以发现,对应的SLEEP寄存器则有说明,如下所示,这个是TI有意隐藏芯片细节,当SLEEPCMD.OSC_PD为0时,32MHz晶振与16MHz RC振荡器都会起振:对于SLEEPSTA寄存器中BIT6/BIT5说明在cc2530说明书中也并没有说明,可以参考cc2430说明书中内容,其中第6位 XOSC_STB表明外部高速32M晶振是否上电并稳定起振,当稳定时该位为1;同样对于第5位HFRC_STB则表明内部16MHz高速RC振荡器是否起振,并是否稳定,当16MHz RC振荡器稳定时该位为1。void SysStartXOSC(void)SLEEPCMD &= 0x04; / 启动所有晶振while (!(SLEEPSTA & 0x40); / 等待晶振稳定CLKCONCMD = (CLKCONCMD & 0x80) | 0x49; / 使用16M晶振作为主时钟while (CLKCONSTA & 0x80) != 0x49 ); / 等待主时钟切换到16M晶振CLKCONCMD = (CLKCONCMD & 0x80) ; / 使用外部32K晶振作为休眠时钟while ( (CLKCONSTA & 0x80) != 0 ); / 等待睡眠时钟切换到外部32K晶振CLKCONCMD = (CLKCONCMD & 0x80) ; / 使用32M晶振作为主时钟while ( (CLKCONSTA & 0x80) != 0 ); / 等待主时钟切换到32M晶振SLEEPCMD |= 0x04; / 关闭未使用的晶振按照上述方式配置后,我们就可以工作在外部的32M晶振上了,配置好系统时钟和SPI后,剩下的工作只需要按照液晶屏的说明书发送相应的指令就可以将液晶屏驱动起来了,具体的驱动代码详见下一堂课程。这里使用的是ASCII的点阵表,所以只能显示英文,如果需要显示中文,就需要中文字库的支持了。LCD12864的驱动程序:P0.1 - LCD_MODEP1.2 - LCD_CS/spiP1.5 - CLKP1.6 - MOSI/* LCD lines */#define LCD12864_MAX_LINE 64#define LCD12864_MAX_ROW 128#define HAL_LCD_FONT_LINES 8#define HAL_LCD_FONT_ROWS 6/* LCD Max Chars and Buffer */#define HAL_LCD_MAX_LINES (LCD12864_MAX_LINE/HAL_LCD_FONT_LINES) / 6*8点阵最大行数#define HAL_LCD_MAX_CHARS (LCD12864_MAX_ROW/HAL_LCD_FONT_ROWS) / 6*8点阵最大列数/* LCD Control lines */#define HAL_LCD_RS_PORT 0#define HAL_LCD_RS_PIN 1#define HAL_LCD_CS_PORT 1#define HAL_LCD_CS_PIN 2/* LCD SPI lines */#define HAL_LCD_CLK_PORT 1#define HAL_LCD_CLK_PIN 5#define HAL_LCD_MOSI_PORT 1#define HAL_LCD_MOSI_PIN 6/ 12864 命令#define LCD_CMD_DISPLAY_ON 0xAF#define LCD_CMD_DISPLAY_OFF 0xAE#define LCD_CMD_BEGIN_LINE 0x40#define LCD_CMD_PAGE_LINE 0xB0#define LCD_CMD_ROW_HIG 0x10#define LCD_CMD_ROW_LOW 0x00#define LCD_CMD_READ_STATE 0x00#define LCD_CMD_ROW_ADDR_NORMAL 0xA0 / 从左到右#define LCD_CMD_ROW_ADDR_REVERSE 0xA1 / 从右到左#define LCD_CMD_DISPLAY_NORMAL 0xA6#define LCD_CMD_DISPLAY_REVERSE 0xA7#define LCD_CMD_DISPLAY_POINT_ALL 0xA5#define LCD_CMD_DISPLAY_POINT_NORMAL 0xA4#define LCD_CMD_BIAS_SET 0xA2 / 0XA2:BIAS=1/9 (常用) 0XA3:BIAS=1/7#define LCD_CMD_SOFT_RESET 0xE2#define LCD_CMD_LINE_NORMAL 0xC0 / 从上到下#define LCD_CMD_LINE_REVERSE 0xC8 / 从下到上#define LCD_CMD_POWER_ONE 0x2C#define LCD_CMD_POWER_TWO 0x2E#define LCD_CMD_POWER_THREE 0x2F#define LCD_CMD_CONTRAST_ONE_LEVEL 0x22 / 0x20-0x27#define LCD_CMD_CONTRAST_TWO_CMD 0x81 / 0x00-0x3F#define LCD_CMD_STATIC_PICTURE_ON 0xAD/* SPI interface control */#define LCD_SPI_BEGIN() HAL_CONFIG_IO_OUTPUT(HAL_LCD_CS_PORT, HAL_LCD_CS_PIN, 0); /* chip select */#define LCD_SPI_END() asm(“NOP”); asm(“NOP”); asm(“NOP”); asm(“NOP”); HAL_CONFIG_IO_OUTPUT(HAL_LCD_CS_PORT, HAL_LCD_CS_PIN, 1); /* chip select */ /* clear the received and transmit byte status, write tx data to buffer, wait till transmit done */#define LCD_SPI_TX(x) U1CSR &= (BV(2) | BV(1); U1DBUF = x; while( !(U1CSR & BV(1) ); /* Control macros */#define LCD_DO_WRITE() HAL_CONFIG_IO_OUTPUT(HAL_LCD_RS_PORT, HAL_LCD_RS_PIN, 1);#define LCD_DO_CONTROL() HAL_CONFIG_IO_OUTPUT(HAL_LCD_RS_PORT, HAL_LCD_RS_PIN, 0);/*全体ASCII 列表:5x7点阵库*/const static uint8 aucAsciiTable5x75=0x00,0x00,0x00,0x00,0x00,/space0x00,0x00,0x4f,0x00,0x00,/!0x00,0x07,0x00,0x07,0x00,/“0x14,0x7f,0x14,0x7f,0x14,/#0x24,0x2a,0x7f,0x2a,0x12,/$0x23,0x13,0x08,0x64,0x62,/%0x36,0x49,0x55,0x22,0x50,/&0x00,0x05,0x07,0x00,0x00,/0x00,0x1c,0x22,0x41,0x00,/(0x00,0x41,0x22,0x1c,0x00,/)0x14,0x08,0x3e,0x08,0x14,/*0x08,0x08,0x3e,0x08,0x08,/+0x00,0x50,0x30,0x00,0x00,/,0x08,0x08,0x08,0x08,0x08,/-0x00,0x60,0x60,0x00,0x00,/。0x20,0x10,0x08,0x04,0x02,/0x3e,0x51,0x49,0x45,0x3e,/00x00,0x42,0x7f,0x40,0x00,/10x42,0x61,0x51,0x49,0x46,/20x21,0x41,0x45,0x4b,0x31,/30x18,0x14,0x12,0x7f,0x10,/40x27,0x45,0x45,0x45,0x39,/50x3c,0x4a,0x49,0x49,0x30,/60x01,0x71,0x09,0x05,0x03,/70x36,0x49,0x49,0x49,0x36,/80x06,0x49,0x49,0x29,0x1e,/90x00,0x36,0x36,0x00,0x00,/:0x00,0x56,0x36,0x00,0x00,/;0x08,0x14,0x22,0x41,0x00,/0x14,0x14,0x14,0x14,0x14,/=0x00,0x41,0x22,0x14,0x08,/0x02,0x01,0x51,0x09,0x06,/?0x32,0x49,0x79,0x41,0x3e,/0x7e,0x11,0x11,0x11,0x7e,/A0x7f,0x49,0x49,0x49,0x36,/B0x3e,0x41,0x41,0x41,0x22,/C0x7f,0x41,0x41,0x22,0x1c,/D0x7f,0x49,0x49,0x49,0x41,/E0x7f,0x09,0x09,0x09,0x01,/F0x3e,0x41,0x49,0x49,0x7a,/G0x7f,0x08,0x08,0x08,0x7f,/H0x00,0x41,0x7f,0x41,0x00,/I0x20,0x40,0x41,0x3f,0x01,/J0x7f,0x08,0x14,0x22,0x41,/K0x7f,0x40,0x40,0x40,0x40,/L0x7f,0x02,0x0c,0x02,0x7f,/M0x7f,0x04,0x08,0x10,0x7f,/N0x3e,0x41,0x41,0x41,0x3e,/O0x7f,0x09,0x09,0x09,0x06,/P0x3e,0x41,0x51,0x21,0x5e,/Q0x7f,0x09,0x19,0x29,0x46,/R0x46,0x49,0x49,0x49,0x31,/S0x01,0x01,0x7f,0x01,0x01,/T0x3f,0x40,0x40,0x40,0x3f,/U0x1f,0x20,0x40,0x20,0x1f,/V0x3f,0x40,0x38,0x40,0x3f,/W0x63,0x14,0x08,0x14,0x63,/X0x07,0x08,0x70,0x08,0x07,/Y0x61,0x51,0x49,0x45,0x43,/Z0x00,0x7f,0x41,0x41,0x00,/0x02,0x04,0x08,0x10,0x20,/ 斜杠0x00,0x41,0x41,0x7f,0x00,/0x04,0x02,0x01,0x02,0x04,/0x40,0x40,0x40,0x40,0x40,/_0x01,0x02,0x04,0x00,0x00,/0x20,0x54,0x54,0x54,0x78,/a0x7f,0x48,0x48,0x48,0x30,/b0x38,0x44,0x44,0x44,0x44,/c0x30,0x48,0x48,0x48,0x7f,/d0x38,0x54,0x54,0x54,0x58,/e0x00,0x08,0x7e,0x09,0x02,/f0x48,0x54,0x54,0x54,0x3c,/g0x7f,0x08,0x08,0x08,0x70,/h0x00,0x00,0x7a,0x00,0x00,/i0x20,0x40,0x40,0x3d,0x00,/j0x7f,0x20,0x28,0x44,0x00,/k0x00,0x41,0x7f,0x40,0x00,/l0x7c,0x04,0x38,0x04,0x7c,/m0x7c,0x08,0x04,0x04,0x78,/n0x38,0x44,0x44,0x44,0x38,/o0x7c,0x14,0x14,0x14,0x08,/p0x08,0x14,0x14,0x14,0x7c,/q0x7c,0x08,0x04,0x04,0x08,/r0x48,0x54,0x54,0x54,0x24,/s0x04,0x04,0x3f,0x44,0x24,/t0x3c,0x40,0x40,0x40,0x3c,/u0x1c,0x20,0x40,0x20,0x1c,/v0x3c,0x40,0x30,0x40,0x3c,/w0x44,0x28,0x10,0x28,0x44,/x0x04,0x48,0x30,0x08,0x04,/y0x44,0x64,0x54,0x4c,0x44,/z0x08,0x36,0x41,0x41,0x00,/0x00,0x00,0x77,0x00,0x00,/|0x00,0x41,0x41,0x36,0x08,/0x04,0x02,0x02,0x02,0x01,/;const uint8 asciiTableSize = sizeof( aucAsciiTable5x7 ) / sizeof( aucAsciiTable5x70);static void LCD12864_Cmd(uint8 cmd)LCD_SPI_BEGIN();LCD_DO_CONTROL();LCD_SPI_TX(cmd);LCD_SPI_END();static void LCD12864_Dat(uint8 data)LCD_SPI_BEGIN();LCD_DO_WRITE();LCD_SPI_TX(data);LCD_SPI_END();void LCD12864_Init(void)PERCFG |= 0x02; / 设置UART alt2 为 SPI/ 配置引脚为SPI功能HAL_CONFIG_IO_PERIPHERAL(HAL_LCD_CLK_PORT, HAL_LCD_CLK_PIN);HAL_CONFIG_IO_PERIPHERAL(HAL_LCD_MOSI_PORT, HAL_LCD_MOSI_PIN);/* Configure SPI */U1UCR = 0x80; / 清除原来的数据U1CSR = 0x00; / SPI 主机模式/ 高位在前,第一个上升沿发送数据,波特率为2MU1GCR = HAL_SPI_TRANSFER_MSB_FIRST | HAL_SPI_CLOCK_PHA_0 | HAL_SPI_CLOCK_POL_LO | 0x0F;U1BAUD = 0xFF;/ CS RS 配置为输出HAL_CONFIG_IO_OUTPUT(HAL_LCD_RS_PORT, HAL_LCD_RS_PIN, 1);HAL_CONFIG_IO_OUTPUT(HAL_LCD_CS_PORT, HAL_LCD_CS_PIN, 1);SoftWaitUs(15000); / 15 msLCD12864_Cmd(LCD_CMD_SOFT_RESET); /软复位SoftWaitUs(15000); / 15 msLCD12864_Cmd(LCD_CMD_POWER_ONE); /升压步聚1SoftWaitUs(15); / 15 usLCD12864_Cmd(LCD_CMD_POWER_TWO); /升压步聚2SoftWaitUs(15); / 15 usLCD12864_Cmd(LCD_CMD_POWER_THREE); /升压步聚3SoftWaitUs(150); / 15 usLCD12864_Cmd(LCD_CMD_CONTRAST_ONE_LEVEL); /粗调对比度,可设置范围0x200x27LCD12864_Cmd(LCD_CMD_CONTRAST_TWO_CMD); /微调对比度LCD12864_Cmd(0x3a); /0x1a,微调对比度的值,可设置范围0x000x3fLCD12864_Cmd(LCD_CMD_BIAS_SET); / 1/9偏压比(bias)LCD12864_Cmd(LCD_CMD_LINE_NORMAL); /行扫描顺序:从上到下LCD12864_Cmd(LCD_CMD_ROW_ADDR_REVERSE); /列扫描顺序:从左到右LCD12864_Cmd(LCD_CMD_BEGIN_LINE); /起始行:第一行开始LCD12864_Cmd(LCD_CMD_DISPLAY_ON); /打开显示LCD12864_Cmd(LCD_CMD_DISPLAY_POINT_NORMAL);LCD12864_Cmd(LCD_CMD_DISPLAY_NORMAL); /设置为正显模式SoftWaitUs(150); / 150 usstatic void LCD12864_SetAddr(uint8 line, uint8 col)uint8 ucLine, ucRow;/line +=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沪教版六年级数学下册:二元一次方程组的解法精讲与能力进阶教案
- 核心素养导向的初中英语单元整合复习课教学设计-以八年级下册“难忘的事件”为例
- 苏科版初中物理八年级下册《压强与液体压强》核心素养单元教案
- 初中七年级道德与法治下册《在集体中成长》单元整体教学设计
- 初中英语七年级下册Module 1 Unit 1《Whose bag is this》导学案-基于大单元的听说课“教-学-评”一体化设计
- 某玻璃制品厂生产设备维护制度
- 多模态交互设计-第51篇-洞察与解读
- 濒危物种基因多样性研究-洞察与解读
- 《怀疑与学问》教案
- 小学数学位置与方向教案示例
- 咯血临床思维及诊断治疗课件
- 科学实验科创课件STEM教育编程065机械鱼
- 广州佰仕德材料科技有限公司年产1000吨有机硅电子密封胶和1050吨电子灌封胶建设项目环境影响报告表
- 爱情片《百万英镑》台词-中英文对照
- 先导式减压阀的设计方案
- YS/T 429.1-2000铝幕墙板 板基
- GB/T 37669-2019自动导引车(AGV)在危险生产环境应用的安全规范
- 第四章 AP1000反应堆结构设计(杜圣华)
- 汕头市南澳岛演示文稿课件
- 西安交大流体力学题与答案
- 设备供货安装方案(通用版)
评论
0/150
提交评论