无线传感网技术及应用 课件 项目24 SSD1306液晶显示_第1页
无线传感网技术及应用 课件 项目24 SSD1306液晶显示_第2页
无线传感网技术及应用 课件 项目24 SSD1306液晶显示_第3页
无线传感网技术及应用 课件 项目24 SSD1306液晶显示_第4页
无线传感网技术及应用 课件 项目24 SSD1306液晶显示_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

项目二十四

SSD1306液晶显示项目导入01项目导入

物联网设备通常都具有通过传感器采集数据的功能,人们想获取这些数据往往采用的方法有2种。一种方法是采用串口通信的方式,通过MCU的串口将数据发送到PC机,再在PC机上显示出来;另一种方法就是把数据直接通过液晶显示出来。而液晶显示的方法具有简单快捷、携带方便、成本低廉等特点,在物联网产品上得到了广泛的应用。项目分析02项目分析

本项目需要1个ZigBee模块和1个SSD1306液晶模块。由CC2530通过SHT10传感器采集温湿度数据,再通过SSD1306液晶模块把数据直接显示出来。SSD1306是一款128*64像素的OLED(OrganicLight-EmittingDiode,有机发光二极管)的液晶显示器,具有自发光、无需背光源、厚度薄、视角广、反应速度快、使用温度范围广、构造及制程较简单、成本低廉等特点,在许多电子产品和电子实验中被采用。【项目要求】1.用SHT10传感器采集温湿度数据。2.用SSD1306液晶模块显示温湿度数据。3.用SSD1306液晶模块显示图形。项目目标03项目目标ADBC掌握SSD1306液晶模块工作原理。学会使用SSD1306液晶模块显示数据。学会使用SSD1306液晶模块显示图形。熟悉SHT10传感器的工作原理。知识储备04知识储备

要完成这个项目的设计,我们首先要了解SHT10和SSD1306液晶模块的工作原理,其次要学会使用SSD1306液晶模块显示数据和显示图形的方法。其中SHT10温湿度传感器的工作原理前面项目已有介绍,本节主要介绍SSD1306液晶模块的原理及显示方法。SSD1306液晶模块工作原理054.1SSD1306简介

SSD1306是一款带控制器的用于OLED点阵图形显示系统的驱动器。由128个SEG(列输出)和64个COM(行输出)组成。该芯片专为共阴极OLED面板设计。SSD1306内置对比度控制器、显示RAM(GDDRAM)和振荡器,以此减少了外部元件的数量和功耗。该芯片有256级亮度控制。数据或命令由MCU通过I2C接口或SPI接口发送。该芯片适用于许多小型便携式应用,如电子设备显示屏、MP3播放器和计算器等。SSD1306简介

OLED具备自发光无需背光源的特点,因此不显示数据时是黑屏的。而LCD显示器都需要背光,因此无显示数据时屏幕也会发光。同样的显示OLED效果更好一些,因此OLED被认为是下一代的平面显示器应用技术。以目前的技术来说,OLED的尺寸还难以做到大型化。常用的OLED显示模块有以下特点:模块有单色和双色两种可选:单色为纯蓝色,而双色则为黄蓝双色。屏幕尺寸小:显示尺寸常用有0.91"、0.96"、1.3",本项目采用0.96"模块。高分辨率:常用模块的分辨率为128*64。多种接口方式:常用IIC接口(4脚)、3线(6脚)或4线(7脚)的SPI接口方式。供电电压:3.3V。4.2

SSD1306液晶初始化SSD1306液晶使用前需要调用初始化函数LCD_Init(void),其代码如下:voidLCD_Init(void){LCD_WrCmd(0xae);//显示面板关(睡眠模式)LCD_WrCmd(0x00);//设置显示时的起始列地址低四位LCD_WrCmd(0x10);//设置显示时的起始列地址高四位。LCD_WrCmd(0x40);//设置起始行,0-63LCD_WrCmd(0x81);//设置对比度LCD_WrCmd(0xcf);//数值越大对比度越大,0-255LCD_WrCmd(0xa1);//列扫描方向从左到右,0xa0左右翻转LCD_WrCmd(0xc8);//行扫描方向从上到下,0xc0从下到上LCD_WrCmd(0xa6);//A6正常显示,A7命令反相显示LCD_WrCmd(0xaf);//开启oled面板显示

}SSD1306基本命令表1.基本命令表16进制D7D6D5D4D3D2D1D0功能描述81A[7:0]1A70A60A50A40A30A20A11A0设置对比度双字节命令,设置对比度为0~256,对比度随着值的增加而增加,(RESET=7Fh)A4/A51010010X0开启整体显示A4命令(X0=0),显示GDDRAM内容;A5命令(X0=1),忽略GDDRAM数据点亮全屏A6/A71010011X0正常/反相显示A6命令(X0=0),正常显示A7命令(X0=1),反相显示AE/AF1010111X0设置显示开或关闭AE命令(X0=0),显示关(睡眠模式);AF命令(X0=1),显示开,正常模式SSD1306硬件设置命令3.硬件设置命令表HexD7D6D5D4D3D2D1D0命令描述40~7F01X5X4X3X2X1X0设置起始行X5-X0表示起始行0-63,RESET=000000A0/A11010000X0列扫描方向X0=1,列扫描方向从左到右,X0=0,方向从右到左A8A[5:0]1*0*1A50A41A30A20A10A0设置复用率双字节指令,设置复用率为N+1C0/C81100X3000行扫描方向行扫描方向,0xC8从上到下,0xC0从下到上D3A[5:0]1*1*0A51A40A30A21A11A0设置显示位移设置显示位移,0x00~0x3F,RESET=00HSSD1306简介从上表可以看出,当初始化命令为0xa0时画面左右翻转;当初始化命令为0xA5时点亮全屏。SSD1306简介当初始化命令为0xA7时画面反白显示;当初始化命令为0xd3时画面位移。4.2SSD1306液晶显示英文字符函数voidOLED_P8x16Str(unsignedcharx,y,unsignedcharch[]){ unsignedcharc=0,i=0,j=0; while(ch[j]!='\0') {

c=ch[j]-32;//ascii码表中前32个字符无法显示

if(x>120){x=0;y++;}//调用8*16点阵字库,最大显示128列,超过则需另起一行

OLED_Set_Pos(x,y);//设置显示位置为第pagey(字符的上半部分)

for(i=0;i<8;i++)

OLED_WrDat(F8X16[c*16+i]);//显示的8*16点阵字符

OLED_Set_Pos(x,y+1);//设置显示位置为第pagey+1(字符的下半部分)

for(i=0;i<8;i++)

OLED_WrDat(F8X16[c*16+i+8]);

x+=8;

j++; }4.3显示位置设置voidOLED_Set_Pos(unsignedcharx,unsignedchary){ OLED_WrCmd(0xb0+y);//设置目标显示位置页起始地址 OLED_WrCmd(((x&0xf0)>>4)|0x10);//设置列起始地址低4位 OLED_WrCmd((x&0x0f)|0x01);//设置列起始地址高4位}

GDDRAM的地址模式分为页地址模式、水平地址模式、垂直地址模式三种。初始化函数中用0x20、0x02双字节指令设置为页地址模式。

通常在页地址模式下访问GDDRAM,需要如下步骤来定义起始RAM访问指针指向:通过命令(B0h-B7h)设置目标显示位置页起始地址。通过命令(00h-0Fh)设置列起始地址低位。通过命令(10h-1Fh)设置列起始地址高位。4.3页地址模式

在GDDRAM访问后(读/写),列地址指针将自动增加1。如果列地址指针到达列终止地址,列地址指针将复位到列起始地址,但页地址指针不会改变。页地址模式下页以及列地址指针的变化如图所示。页地址模式

例如页地址是B2h,列地址低位是03h,列地址高位是10h,起始列将为PAGE2的SEG3,GDDRAM访问指针的指向如下图所示。如果写入一个字节数据,则按地位在上高位在下的方式写入GDDRAM。水平地址模式

初始化函数中用0x20、0x00双字节指令设置为水平地址模式。当处于此模式时,在GDDRAM访问后(读/写),列地址指针将自动增加1。如果列地址指针到达列终止地址,列地址指针将复位到列起始地址,且页地址指针将自动增加1。

水平地址模式下页以及列地址指针的行为如图所示,如果列地址指针和页地址指针都到达各自的终止地址时,他们都将复位到各自的起始地址。垂直地址模式

初始化函数中用0x20、0x01双字节指令设置为垂直地址模式。当处于此模式时,在GDDRAM访问后(读/写),页地址指针将自动增加1。如果页地址指针到达页终止地址,页地址指针将复位到页起始地址,且列地址指针将自动增加1。SSD1306液晶写入数据

SSD1306通常采用的是SPI接口以及IIC接口。4线SPI接口包括:串行时钟(SCLK)、串行数据(SDIN)、数据/命令控制(D/C#)、片选(CS#)。在4线SPI模式下,D0用作SCLK,D1用作SDIN。E和R/w#的引脚连接到外部地。

IIC总线包含数据信号线SDA和时钟信号线SCL组成。SDA和SCL线都必须接上拉电阻。主机先发起开始(START)信号,然后发送1byte首字节,包括从机地址(7位)和读写数据位(1位,最低位,0为写模式),驱动器识别从机地址为本机地址之后,将会发出应答信号(ACK)。SSD1306液晶写入数据函数Write_IIC_Command()实现了IIC方式下的命令写入,其代码如下:voidWrite_IIC_Command(unsignedcharIIC_Command){IIC_Start();//IIC启动信号Write_IIC_Byte(0x78);//IIC从机地址SA0=0 IIC_Wait_Ack(); //等待1个时钟的ACK响应信号Write_IIC_Byte(0x00); //准备写入命令 IIC_Wait_Ack(); //等待1个时钟的ACK响应信号Write_IIC_Byte(IIC_Command);//写入SSD1306命令 IIC_Wait_Ack(); //等待1个时钟的ACK响应信号IIC_Stop();//IIC结束信号}SSD1306等待确认信号voidIIC_Wait_Ack(){

OLED_SCLK_Set();

OLED_SCLK_Clr();}

IIC写入1个bit时,先从SDA数据线输出数据,待SCL发出一个脉冲信号后。再输出下一个bit数据。SSD1306简介

IIC写入1个bit数据时序图。voidWrite_IIC_Byte(unsignedcharIIC_Byte){unsignedchari;IIC写入1个字节voidWrite_IIC_Byte(unsignedcharIIC_Byte){

unsignedchari;

unsignedcharm,da;

da=IIC_Byte;

OLED_SCLK_Clr();

for(i=0;i<8;i++)

{

m=da;

m=m&0x80;

if(m==0x80)//输出高位在前

{OLED_SDIN_Set();}

elseOLED_SDIN_Clr();

da=da<<1;

OLED_SCLK_Set();//发出一个时钟脉冲信号

OLED_SCLK_Clr();

}}SSD1306文件移植05SSD1306文件移植

SSD1306文件由SSD1306.h和SSD1306.c文件组成,主要包含了初始化、写入字节、写入字符串、写入图像等函数。资料中提供的一般都是针对51或STM32等MCU编写的函数,因CC2530是采用51内核,因此直接使用资料提供的SSD1306的51代码即可。1.将基础实验里面的SHT10.c、SHT10.h、oled.h、oled.c、oledfont.h文件复制到项目文档的...\Projects\Z-Stack\Samples\SampleApp\Source文件夹或其他文件夹下面。SSD1306文件移植2.为了方便查看,在协议栈的APP目录树下鼠标

温馨提示

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

评论

0/150

提交评论