单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,OLED应用,51,单片机实战指南,本章内容:,OLED简介,1,指令介绍,2,SPI通信方式,3,例程与解析,4,11.1 OLED简介,包含显示驱动的0.96吋OLED模块,分辨率为128*64。
图中OLED显示器采用的驱动芯片是SSD1306,它可以驱动共阴极OLED显示器,由128 个段(segment)和64个公共端(Common)组成,可采用串口,I2C和SPI接口方式,图中为采用4线SPI接口方式图,11-1,0.96OLED模块,11.1 OLED简介,OLED模块引脚与单片机接口:,VCC电源(3.3V5V),GND地,D0 SPI时钟线,D1 SPI数据线,RESOLED复位,DC 数据/命令选择(0:读写命令,1:读写数据),11.1 OLED简介,SSD1306显示分辨率为12864,内部GDDRAM(映射静态RAM),也就是常说的显存,大小为12864位,即128列,64行,其中每个位对应屏幕上的一个像素,GDDRAM 纵向被分成8页PAGE0PAGE7,每一页有8行,GDDRAM可以进行重映射(re-mapping)11.1 OLED简介,表11-1 页地址模式GDDARM的存储方试,11.1 OLED简介,GDDRAM页地址模式,当一个数据字节写到,GDDRAM,中,所有页的当前列的的行图像数据都会被被填充(比如,被列地址指针指向的整列(,8,位)都会被填充)。
数据位,D0,写到顶行,而数据位,D7,写到底行11.1 OLED简介,例如要以16*8显示字符“A”,通过字模提取软件得到如下字模,,0 x00,0 x00,0 xC0,0 x38,0 xE0,0 x00,0 x00,0 x00,第1页,0 x20,0 x3C,0 x23,0 x02,0 x02,0 x27,0 x38,0 x20,第2页,字模中的每一个16进制对应点阵中的一列,在每一页中,行从左向右,列从下向上的方式(高位再下,低位在上),点亮的像素为1行方向可以显示16个字符,汉字显示内容减半11.2 指令介绍,1.基础命令,1)设置对比度(2字节),字节1:81H字节2:00HFFH,设置256级对比度00HFFH,低字节默认值为7FH2)整体显示开启(A4H/A5H),A4H-显示开启,显示内容跟随GDDRAMA5H-显示开启,显示内容与GDDRAM无关11.2 指令介绍,3)设置正常反转显示(A6H/A7H),A6H-GDDRAM中的0位表示像素关显示,1位像素开显示A7H-GDDRAM中的0位表示像素开显示,1位像素关显示4)设置显示开关(AEH/AFH),AEH-显示关(睡眠模式)。
AFH-显示开(正常模式)11.2 指令介绍,2.滚屏命令,1)持续水平滚动设置(5字节),字节1:26H-向右水平滚动,27H-向左水平滚动字节2:空字节字节3:定义GDDRAM起始页地址00H07H,分别对应PAGE0PAGE7字节4:每次滚屏时间间隔00H-5帧;01H-64帧;02H-128帧;03-256帧;04H-3帧;05H-4帧;06H-25帧;07H-2帧字节5:定义GDDRAM结束页地址00H07H,分别对应PAGE0PAGE711.2 指令介绍,2)持续垂直和水平滚屏设置(5字节),字节1:29H-垂直和右水平滚屏,2AH-垂直和左水平滚屏字节2:空字节字节3:定义GDDRAM起始页地址00H07H,分别对应PAGE0PAGE7字节4:每次滚屏时间间隔00H-5帧;01H-64帧;02H-128帧;03-256帧;04H-3帧;05H-4帧;06H-25帧;07H-2帧字节5:定义GDDRAM结束页地址00H07H,分别对应PAGE0PAGE711.2 指令介绍,3)关闭滚屏(2EH),关闭因26H/27H/29H/2AH开启,关闭后GDDRAM内容需重写4)激活滚屏(2FH),有效命令顺序 1:26H;2FH,2:27H;2FH,3:29H;2FH,4:2AH;2FH,先写滚屏命令,再激活滚屏;后写的滚屏命令会重写之前的滚屏命令。
11.2 指令介绍,5)设置垂直滚动区域(3字节),字节1:A3H,字节2:*A5A4A3A2A1A0A5:0设置顶层固定的行数顶层固定区域的行数参考 GDDRAM 的顶部(比如 row0)重置为 0字节3:*B6B5B4B3B2B1B0B6:0设置滚动区域的行数这个行的数量用于垂直滚动滚动区域滚动区域开始于顶层固定区域的下一行11.2 指令介绍,3.地址设置命令,1)页地址模式下设置列起始地址低位(00H0FH),用于在页地址模式下设置GDDRAM的列起始地址(8位)的低4位,页地址会在数据访问后递增2)页地址模式下设置列起始地址高位(10H1FH),用于在页地址模式下设置GDDRAM的列起始地址(8位)的高4位,页地址会在数据访问后递增11.2 指令介绍,3)设置内存地址模式(2字节),在SSD1306中有三种地址模式:页地址模式,水平地址模式和垂直地址模式,此命令用于将地址模式设置为以上三种之一字节1:20H字节2:,A1:0=00B,水平地址模式A1:0=01B,垂直地址模式A1:0=10B,页地址模式A1:0=10B,无效,11.2 指令介绍,4)设置列地址(3字节),字节1:21H。
字节2:设置列起始地址范围00H7FH,共128列,默认00H字节3:设置列结束地址范围00H7FH,共128列,默认7FH设置GDDRAM的列起始地址和列结束地址,并使列地址指针(指向GDDRAM中当前访问的列地址)指向列起始地址若内存地址模式为水平地址模式,在访问一列数据后,列地址指针将增加到下一个列地址当结束访问终止列地址时,列地址指针将复位至列起始地址,且行地址指针将增加到下一行11.2 指令介绍,5)设置页地址(3字节),字节1:22H,字节2:页起始地址,00H07H,对应PAGE0PAGE7,默认00H字节3:页终止地址,00H07H,对应PAGE0PAGE7,默认07H设置GDDRAM的页起始地址和页结束地址,并使页地址指针(指向GDDRAM中当前访问的页地址)指向页起始地址6)页地址模式下设置页起始地址(B0HB7H),页地址模式下设置GDDRAM页起始地址(PAGE0PAGE7)11.2 指令介绍,4.硬件配置,1)设置屏幕起始行(40H-7FH),设置屏幕起始行寄存器以设置GDDRAM起始地址,取值范围为0,63若值为0,则GDDRAM第0行映射至COM0,若值为1,则GDDRAM第1行映射到COM0,以此类推。
2)设置段重映射(A0H/A1H),用于改变屏幕数据列地址和段驱动器间的映射关系,只影响其后的数据输入,已存储在GDDRAM中的数据将保持不变A0H-列起始地址0映射到SEG0A1H-列起始地址127映射到SEG011.2 指令介绍,3)设置复用率(2字节),字节1:A8H字节2:1FH3FH用于将默认的63复用率更改至范围为16,63内的值4)设置列输出扫描方向(C0H/C8H),设置列输出的扫描方向,此指令会立即生效例如当屏幕正常显示时调用此指令,屏幕将会立刻垂直翻转C0H-正常模式,扫描从COM0到COMN-1C1H-重映射模式,扫描从COMN-1到COM0其中N为上条指令中设置的复用率11.2 指令介绍,5)设置显示偏移(2字节),字节1:D3H字节2:00H3FH,设置屏幕起始行为COM0COM63之一(假设COM0为屏幕起始行,那么屏幕起始行寄存器值为0)例如,要使COM16向COM0方向移动16行,第二个字节的值应该为010000B;向COM0相反方向移动16行,第二个的值应该为64-16,即100000B6)设置列引脚硬件配置(2字节),字节1:DAH字节2:00A5A40010。
A5A4取值及功能见技术手册11.2 指令介绍,5.定时和驱动命令,1)设置显示时钟分频值/震荡频率(2字节),字节1:D5H字节2:低4位A3:0,设置显示时钟分频值,分频值=A3:0+1高4位A7:4,设置振荡频率,0HFH2)设置预充电周期(2字节),字节1:D9H字节2:低4位A3:0,相1周期,115个显示时钟周期,0无效高4位A7:4,相2周期,115个显示时钟周期,0无效设置充充电周期的时间长度间隔以计算 DCLK 的数量,重置值为 2DCLK11.2 指令介绍,3)设置VCOMH反压值(2字节),字节1:DBH字节2:00H:0.65*VCC;20H:0.77*VCC,30H:0.83*VCC用于调整VCOMH输出4)空操作(E3H),11.3 SPI通信方式,SPI(Serial Peripheral Interface)是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线采用全双工通信方式,数据传输速率块但由于没有应答机制确认是否接收到数据,所以可靠性较I2C通信差11.3.1 SPI通信协议简介,SPI(Serial Peripheral Interface)是串行外围设备接口,SPI的通信采用主从方式工作,由一个主机和一个或多个从机,标准的SPI是4根线,分别是 SSEL(片选,也写作 CS)、SCLK(时钟,也写作 SCK)、MOSI(主机输出从机输入Master Output/Slave Input)和MISO(主机输入从机输出 Master Input/Slave Output)。
1)MOSI/SDO 主机数据输出,从机数据输入,(2)MISO/SDI 主机数据输入,从机数据输出,(3)SCLK/SCK 时钟信号,由主机产生,(4)SSEL/CS 从机使能信号,由主机控制11.3.1 SPI通信协议简介,SPI有四种工作模式MODE0MODE3,由于从机的工作模式可能在出厂时已经进行了配置,要实现通信,就要求主机的通信模式和从机的必须一致可通过CPOL(时钟极性)和CPHA(时钟相位)来配置主机的通信模式CPOL:Clock Polarity,就是时钟的极性时钟的极性是什么概念呢?通信的整个过程分为空闲时刻和通信时刻,如果 SCLK 在数据发送之前和之后的空闲状态是高电平,那么就是CPOL=1,如果空闲状态 SCLK 是低电平,那么就是 CPOL=011.3.1 SPI通信协议简介,CPHA:Clock Phase,就是时钟的相位CPHA=1,表示数据的输出是在一个时钟周期的第一个沿上,至于这个沿是上升沿还是下降沿,这要视 CPOL 的值而定,CPOL=1 那就是下降沿,反之就是上升沿那么数据的采样自然就是在第二个沿上了。