微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 基于C8051F的OLED控制电路的设计

基于C8051F的OLED控制电路的设计

时间:07-18 来源:微计算机信息 点击:

1

0

1

写数据

1

1

0

读数据

  2.4 读写的时序

  只要按照VGG12864G的时序波形图进行读和写,即可完成OLED的显示。但是,通过软件编程拼时序的话,要考虑到许多时间参数,有一定的难度。为了使得数据和命令能够更容易的顺利读写,我们采用另外一种办法。如图1所示,将WR#和RD#分别接C8051F023的/WR和/RD,即P0.7和P0.6。在C语言编程时定义指针类型为xdata型,它是指向片外存储器的,通过给指针的赋值访问片外的数据存储区,当访问片外存储器时,/RD和/WR会在读和写时自动变低,同时P3端口为数据总线,非复用方式下,地址总线的高8位使用P1口,低8位使用P2口;复用方式下,地址总线高8位仍使用P1口,低8位和数据总线复用P3口,P2口就不会受到影响。所以最好设置成复用方式(EMIOCF.4=0),P2口就可以用来作别的输出端口,自由地控制RES#、CS#、DC。虽然不需要地址总线,但访问片外存储器时地址线会被使用,所以仍要避开。实验结果的时序波形图如图3所示。只要CS#为低时,在WR#(RD#)的下降沿写入(读出)数据或命令,即可有效地完成读写的工作。

图3 时序波形图

Fig.3 Timing characteristics

  3 软件程序的设计

  整个单片机控制OLED的显示程序用C语言编写,主要程序流程图如图4所示。单片机初始化包括关闭看门狗、时钟初始化、端口初始化,以及定时器和中断的初始化。OLED初始化包括开显示、设置显示模式、设置对比度控制器、对比度设置(1~256)、设置行列起始地址、设置具体位置颜色、设置串口管脚配置。清OLED屏和OLED显示都是往GDDRAM里写数据,包括读状态、写命令、写数据子程序,清OLED屏就全写"0",OLED显示只要写入所要显示的文字或图片的字符代码即可。每次写(命令或数据)之前都要读状态,看最高位D7是否为"0",也称之为"忙"检测,如果为"1",表示"忙";反之为"闲",在"闲"的状况下才可以写操作。

图4 程序流程图

Fig.4 Flowchart of software

  4 文字和图片的显示

  VGG12864G内置128×64 bits的显示存储器,用于存储显示数据,图5为RAM的地址结构。RAM容量为128×64=8192 bits,它被分成8页(page0-page7),每页8行,每页的第一列刚好是一个字节,低位在上,高位在下;显示屏上各像素点的显示状态与显示存储器的各位二进制数据一一对应,显示存储器的数据直接作为图形显示的驱动信号。数据显示为"1",相应的像素点显示;数据显示为"0",相应的像素点不显示。

  所显示文字或图片的字符库,需要自己造,但人工的几乎不可能,可以选用字模提取软件--"字模提取 V2.2 ",该软件提供两种取模方式:横向和纵向。再根据OLED显示数据的RAM地址结构,选纵向的取模方式,由于OLED模组的字节结构是高位在下低位在上,所以要设置成字节倒序,字符的字体、字形、大小和显示效果(下划线和删除线)可根据需要进行调整,然后采取C51格式(若用汇编语言编程可采取A51格式)取模生成单个字符的点阵显示代码,最后根据需要在OLED屏上的显示效果,对代码进行相应调整即可得到所需字符库。

图5 显示数据RAM的地址结构

Fig.5 GDDRAM Address Map

  根据所要显示的文字或图片生成所需字符库,通过OLED显示程序将字符代码写入并存储在SSD1303的GDDRAM模块后,就可以稳定地显示出来。通过软件编程也可实现图片的动态显示,如图6为该系统所完成的文字和图片显示。

图6 字符的显示

Fig.6 Display of characters


图7 静态图片的显示

Fig.7 Display of static pictures

  5 结论

  设计了一种基于单片机实现OLED显示的方法。针对其功能和特性,解决了相关部分的电路设计,并在所开发的系统上实现了文字、动静态图片的显示。实验证明:该设计电路简单,为该系统大大降低了成本,使该系统可以应用在小型设备上。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top