陈海峰,陈盛闯
(华南农业大学珠江学院,广东广州510900)
基于单片机的OLED显示系统设计与实现
陈海峰,陈盛闯
(华南农业大学珠江学院,广东广州510900)
为了提高图形信息的显示速度,并得到更多的显示效果,文章基于FG_V1.2单片机开发板,依据OLED12864显示屏的操作时序要求,用51单片机实现了基于0.96英寸OLED屏的显示系统设计。经实际测试表明,其具有比12864LCD模块更快的刷新速度和更好的显示效果。
单片机;OLED;显示屏;12864LCD
OLED(Organic Light Emitting Display)显示技术是比液晶显示技术更为先进的新一代平板显示技术,其被业界公认为是继LCD、PDP之后最理想和最具发展前景的第三代显示技术。相比于液晶显示技术,其具有超轻薄、高亮度、广视角、自发光、响应快、抗震强、功耗低、适应温度范围宽,可实现柔性显示等优越性能,有“梦幻显示器”的美誉[1],可广泛应用于通信、计算机、消费电子、工业应用、商业、交通等领域[2]。在显示输出方面,目前主要采用3种方式,即:图形、数字或专用符号,在嵌入式领域,显示常采用LED、数码管及液晶显示器[3]。前两种实现简单,但显示内容不够丰富。LCD显示器虽能显示较为丰富的内容,但其响应慢(出现残像),且亮度相对较低。OLED则响应较快,其响应速度可达液晶的1000倍以上[4],且OLED无需背光,亮度高,在功耗、视角等方面也均优于LCD显示器,鉴于此,OLED显示屏越来越广泛地应用在日常生活当中。
该文以宏晶公司的STC89C52单片机为控制核心,信意电子科技提供的0.96寸OLED模块为显示输出设备,在Keil环境下编写OLED显示模块驱动程序,并下载Hex文件至单片机,从而实现OLED显示系统设计。
文中所采用的OLED模块具有和12864LCD相同的分辨率,但其在单位面积上具有更多的像素点。该模块的驱动芯片是SSD1306Z,它是一款专门用于驱动OLED点阵屏的COMS芯片,其包含128个段和64个公共端。为了能够通过外部控制器向其写入用于显示的数字信息,其对外提供了8个数据引脚和5个控制脚,并向用户提供了4种总线接口。文中所采用的OLED模块可实现SPI和IIC两种总线接口模式,默认为SPI模式。在SPI模式下,仅有数据引脚的低2位和控制引脚的CS#,D/C#和RES#与单片机进行接口。为了能让OLED具有丰富的显示效果和灵活简便的操作方式,SSD1306Z向用户提供了丰富的操作指令集,另外还向用户提供了128×64位的GDDRAM(Graphic Display Data RAM)。由于所采用的OLED不带字库,因此无论是显示图形还是显示汉字,均需通过取模软件进行编码,然后按SPI协议,将对应的编码按照所确定的地址模式写入对应的GDDRAM中。编码原理如图1所示。图1给出了16*8编码格式的字符‘A',由于8行为一页,因此其占据2页的高度,而宽度则占据8列。图1中的每一个方格代表一位,若要显示则置1,反之置0。向GDDRAM当中送数据时,先通过指令确定操作所需的地址模式及存储器的地址,然后先写‘A'的第2页的编码,再写其第3页的编码,即可完成编码的写入操作。图1所对应的编码为0x00,0x00,0xe0,0x9c,0xf0,0x80,0x00,0x00,0x08,0x0f,0x08,0x00,0x00,0x0b,0x0e,0x08,编码时高位在下,低位在上。同理,可得对任意汉字的编码。
操作时序为IC芯片的可靠工作提供了正确的节拍,因此操作时序正确与否将直接影响芯片的工作状态,文中OLED模块默认工作方式为4线SPI,其操作时序如图2所示。图2上部分为操作一位对应的时序,下部分为操作一个字节所对应的时序,由图2可知当发送一个字节时,先发该字节的最高位,最后发最低位。
图1 OLED字符编码Fig.1OLED character code
图2 4线SPI操作时序图Fig.2Timimg of 4-SPI
图2中,CS#为OLED片选信号线,低电平有效,在芯片有效后,可通过拉低或拉高D/C#来决定是进行命令写入操作还是进行数据写入操作,在时钟SCLK拉高之前建立D/C#信号,其建立时间为tAS,SDIN在SCLK低电平有效,并在SCLK上升沿时进行数据的读取,数据保持时间为tDHW,之后可发生数据交换,为下次数据读取作准备。图2中具体的时序特性如表1所示。
表1 4线SPI时序特性Tab.1 Timing character of 4-SPI
表1给出了正确实现OLED操作的时序要求,由表1可知时间参数的最小值均小于1 μs。文中控制器选用的是STC89C52,采用12 M晶振时机器周期为1 μs,因此,只需让STC89C52按上图时序顺序执行程序,则其操作过程便可完全满足4线SPI操作的时序要求。
要使OLED正确显示出所需的信息,除了在其运行过程中严格按时序进行操作外,在起动时还要满足一定的上电顺序,之后还要对其进行相应的初始化。OLED的上电顺序如图3所示。
图3 OLED上电时序图Fig.3Power on timing of OLED
图3中,在VDD得电并稳定后,RES#引脚被拉低并维持低电平至少3 μs(t1),然后再接其拉高,从而实现芯片复位。在芯片完成复位后,VCC上电。在VCC稳定之后,可发送0XAF命令开显示,而OLED的段和公共端(SEG/COM)则需再延迟100 ms,方可得电。按此可得对应的软件实现为:
void PowerOn(void)
{
unsigned char i;
LED_SCL=1;
LED_RST=0;//复位引脚电平拉低
for(i=0;i<100;i++)
{
_nop_();//从上电到开始初始化要有足够的时间,等待RC复位完毕
}
LED_RST=1;//一段时间后复位引脚电平拉高,完成芯片复位
}
OLED按图3完成正确的上电之后,需对SSD1306Z进行相应的初始化方可使其正常运行。OLED软件初始化过程为[5]:void Init_OLED()
{
Write_Command(0xAE);//关显示
Write_Command(0xD5);//设置显示时钟分频率和振荡器频率
Write_Command(0x80);
Write_Command(0xA8);//倍频率为63
Write_Command(0x3F);
Write_Command(0xD3);//设置显示偏移量
Write_Command(0x00);//不发生偏移,即在坐标原点
Write_Command(0x40);//设置为第0行
Write_Command(0x8D);//电荷泵设置
Write_Command(0x14);//使能电荷泵
Write_Command(0xA1);//OLED列重映射
Write_Command(0xC8);//重映射模式,从COM[N-1]扫描到COM0
Write_Command(0xDA);//COM引脚硬件配置
Write_Command(0x12);//替换COM端引脚配置,禁止COM端左/右间重映射
Write_Command(0x81);//进行对比度设置
Write_Command(0xCF);//设置对比度等级
Write_Command(0xD9);//设置预充电周期
Write_Command(0xF1);
Write_Command(0xDB);//取消Vvcomh电平等级的选择
Write_Command(0x40);//设置显示起始行为第0行
Write_Command(0xA4);//恢复RAM内容显示
Write_Command(0xA6);//设置为正常显示模式
Write_Command(0xAF);//开显示
}
按照图2时序图要求,发送一个字节命令的函数实现如下:
void Write_Command(unsigned char cmd)
{
unsigned char i=8;
LED_DC=0;//D/C#拉低,进行命令写操作
LED_SCL=0;//SCLK信号拉低,为数据交换做准备
while(i--)
{
if(cmd&0x80)//将数据按从高位到低位的顺序依次发送
OLED_SDA=1;
else
OLED_SDA=0;
OLED_SCL=1;//上升沿读取SDA
OLED_SCL=0;//SCLK引脚电平拉低,高电平维持1μs,满足时序要求
cmd<<=1;
}
}
同理可知,若将D/C#引脚电平拉高,则可得到发送一个字节数据的函数实现。
硬件基于自主开发的FG_V1.2开发板,核心控制芯片为宏晶公司LQFP-44封装的贴片STC89C52单片机,OLED的时钟引脚SCLK(D0)与单片机的P16引脚进行接口,数据引脚SDA(D1)与单片机的P17引脚进行接口,控制脚RST#与单片机的P36引脚进行接口,D/C#引脚与单片机的P37引脚进行接口,片选信号CS#已接至地。具体的硬件接口电路如图4所示。
图4 OLED与单片机接口电路Fig.4Interface between OLED and MCU
SSD1306Z驱动芯片为OLED提供了丰富的指令集,可以使OLED在实现数据显示的同时,还能具有多种显示效果(如反白、渐变、闪烁等)和动态效果(如左移、右移、斜角斜屏、动态区域设置等)[6]。具体显示效果如图5所示。
图5 OLED实物显示效果Fig.5Display effect of OLED
图5为OLED模块在STC89C52单片机控制下的几种显示效果。(a)为静态显示效果,(b)为反白显示效果,反白后通过相机可见屏幕当中有动态黑色条纹,这是因为反白显示时出现了串扰(Crosstalk)现象,而这种现象被相机捕获到了,人眼观察是不存在动态黑色条纹的。(c)为区域动态效果,屏幕汉字部分设置为静态,而网址部分设置为连续右移的动态效果。由此可见,OLED相对比LCD显示,其具有更丰富的显示效果。
文中通过STC89C52单片机对OLED显示模块进行了驱动,实验表明,其不仅硬件接口简单,而且在软件实现上极具灵活性,模块驱动芯片SSD1306Z包含丰富指令集,不仅简化了软件实现,而且丰富了显示效果。相比于同分辨率的12864LCD模块,OLED显示模块小巧精致,刷新速度快,显示效果丰富,成本相对也较低,是12864LCD模块的理想替代产品。随着OLED技术的发展,相信显示技术必将发展到一个新的阶段。
[1]田朝勇.OLED技术及其在中国的产业化之中[C]//成都:第三届国际化工新材料(成都)峰会,2010:29.
[2]梁燕,胡浩,卢益民.OLED显示模块与C8051F单片机的接口设计[J].单片机与嵌入式应用,2006(1):48-54. LIANG Yan,HU hao,LU Yi-min.The interface design of OLED display module and C8051F MCU[J].Application of MCU and Embedded System,2006(1):48-54.
[3]黄杰勇.基于CPLD实现LCD1602显示设计[J].科技创新导报,2013(4):83-85. HUANG Jie-yong.Design of LCD1602 display system based CPLD[J].Science and Technology Iinnovation Herald,2013(4):83-85.
[4]刘辉.OLED驱动控制电路的研究[D].北京:中国科学院大学,2004.
[5]乐得瑞.产品说明书(OLED显示模块)[EB/OL].(2012-6). http://www.legenclary.nel.cn/ntml/product/OLED/.
[6]晶奥科技.SSD1306预知信息[EB/OL].(2010,8).http:// lcdsoc.com/.
Design and implementation of OLED display system based on MCS-51 MCU
CHEN Hai-feng,CHEN Sheng-chuang
(Zhujiang College of South China Agricultural University,Guangzhou 510900,China)
In order to improve the display speed of image,and get more display effect,a 0.96 inch OLED display system was designed according to timing diagram of OLED12864 display module based on FG_V1.2 development kits.The actual test shows that OLED has faster refresh rate and better display effect than 12864LCD module.
MCU;OLED;display;12864LCD
TN409
A
1674-6236(2015)20-0137-04
2015-01-12稿件编号:201501081
陈海峰(1985—),男,河南洛阳人,硕士研究生。研究方向:工业控制及嵌入式系统。