历史上的今天
返回首页

历史上的今天

今天是:2025年03月25日(星期二)

正在发生

2018年03月25日 | 基于单片机的OLED显示实现方法

2018-03-25 来源:eefocus

    1前 言

     有机电致发光显示,又称有机发光二极管(OrganICLightEMIttingDiode,OLED)或有机发光显示器OrganicLightEmittingDisplay(OLED),相较于目前市场上流行的液晶显示器(LCD)有明显的优势,主要表现为:自主发光(不需要背光源),无视角问题(视角可达170°以上),重量轻,厚度薄,亮度高,发光效率高,响应速度快(是液晶的1000倍),动态画面质量高,温度范围广(温度范围-40℃~80℃),低功耗,抗震能力强,制造成本低,可柔性显示。尤其适用于要求高亮度的仪表行业,以及条件要求更高的军工产品。与各方面已经发展成熟的LCD相比,OLED的发展还处于初级阶段,但随着以上这些优势的逐步实现,OLED将极有可能取代LCD在市场上的地位,OLED是被业界公认为最具发展前景的下一代显示器。

    2硬件结构设计

    本文利用单片机C8051F023作为128×64单色OLED的控制核心器件,采用的是维信诺公司的一款屏VGG12864G,它利用Solomon公司的SSD1303为专用驱动IC。实现文字显示及图像的动静态显示。硬件整体设计结构框图如图1所示。

    2.1 SSD1303驱动及接口电路

    VGG12864G模块的OLED显示屏为128列,64行结构。图2为SSD1303结构框图,显示了模块逻辑电路和接口电路的框图。用户只需要给接口提供电源、产生驱动指令信号和显示数据信号,就能点亮OLED屏。从图中可以看出,行、列驱动器的输出通过FPC邦定到OLED屏,剩下的MCU接口、电压和电流控制器需要是其专门设计的接口和驱动电路,模块的外部信号仅与SSD1303发生关系。所以了解了SSD1303的输入特性及指令系统,就能方便地使用本模块了。SSD1303是晶门公司推出的驱动单色OLED的IC,采用TAB封装。这种基于CMOS工艺的驱动IC集成了行、列驱动器、振荡器、对比度控制器和图形数据存储器(GDDRAM),很大程度地减少了外围器件和功耗。可支持的最大分辨率为132×64,其中OLED屏底部132×16的点阵区域可以显示4色的局域色,并可编程实现64级灰度,当用于单色显示时,可编程控制256级对比度。根据所使用微处理器(MPU)的不同,它提供8位6800系列MPU并行、8位8080系列MPU并行和SerialPeripheralInterface(SPI)串行三种通信接口模式。控制命令通过MCU接口输入到控制命令解码器进行命令解码,然后输出时钟、行同步、场同步信号,从而控制OLED显示的振荡频率、显示器件的电压转换模块以及OLED显示内容的行列偏移量的驱动模块;如果是显示数据(128×64bits),那么显示数据由控制电路通过MCU接口输入到GDDRAM缓存,然后通过局域色解码器对数据进行解码,最后将解码后的显示数据通过行列驱动器驱动OLED显示,OLED上呈现了稳定的显示效果。

    2.2电源的设计

      硬件结构设计框图如图2所示,外部硬件电路的DC-DC转换器用TPS7333芯片将5V电源转换成3.3V电源,并将输出的电源信号通过电压和电流控制器控制整个SSD1303的电压和电流。整个系统需要3.3V和12V的电源,MCU(本文采用C8051F023)需要提供3.3V的电源电压,OLED需要3.3V的逻辑电源电压和9~12V的驱动电源电压,此驱动电源电压由外部电源转换器电路提供。2.3各种控制信号再就是关于如何用MCU控制,MCU通过RES#、CS#、D/C、WR#、RD#和D0~D7共13个接口控制SSD1303驱动IC,从而控制OLED显示屏。CS#为片选信号,当CS#接低电平时MCU才能与驱动IC通信;RES#是复位使能端,当接低电平时,所有控制寄存器均被设定为出厂时的默认状态,同时图像寄存器清零;D/C为数据/命令选择信号;WR#和RD#分别为写和读选择信号,当CS#为低时,在其下降沿读写有效。通过改变D/C、WR#和RD#三个接口的高低,单片机对OLED的控制有四种状态,可由表1显示出来。

    表1读写状态一览表

QQ截图20120530134745.jpg?imageView2/2/w/550

    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软件程序的设计

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

    4文字和图片的显示

    VGG12864G内置128×64bits的显示存储器,用于存储显示数据,图5为RAM的地址结构。RAM容量为128×64=8192bits,它被分成8页(page0-page7),每页8行,每页的第一列刚好是一个字节,低位在上,高位在下;显示屏上各像素点的显示状态与显示存储器的各位二进制数据一一对应,显示存储器的数据直接作为图形显示的驱动信号。数据显示为“1”,相应的像素点显示;数据显示为“0”,相应的像素点不显示。所显示文字或图片的字符库,需要自己造,但人工的几乎不可能,可以选用字模提取软件——“字模提取V2。2”,该软件提供两种取模方式:横向和纵向。再根据OLED显示数据的RAM地址结构,选纵向的取模方式,由于OLED模组的字节结构是高位在下低位在上,所以要设置成字节倒序,字符的字体、字形、大小和显示效果(下划线和删除线)可根据需要进行调整,然后采取C51格式(若用汇编语言编程可采取A51格式)取模生成单个字符的点阵显示代码,最后根据需要在OLED屏上的显示效果,对代码进行相应调整即可得到所需字符库。

    根据所要显示的文字或图片生成所需字符库,通过OLED显示程序将字符代码写入并存储在SSD1303的GDDRAM模块后,就可以稳定地显示出来。

    5结论

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


推荐阅读

史海拾趣

DAYLIGHT公司的发展小趣事

在公司的初创阶段,DAYLIGHT就意识到技术研发对于企业发展的重要性。因此,公司投入大量资金用于研发新的电子产品和技术。经过几年的努力,DAYLIGHT成功研发出一项具有革命性的电子芯片技术,这一技术大大提高了电子产品的性能和可靠性,使得DAYLIGHT的产品在市场上获得了极高的声誉。

富捷(FOJAN)公司的发展小趣事

富捷电子的发展离不开政府的大力支持和帮助。近年来,公司多次获得地方政府颁发的荣誉和奖励,如“制造业三年倍增先进集体”等。这些荣誉不仅是对公司过去成绩的肯定,更是对未来发展的期许和激励。在政府的政策扶持下,富捷电子将继续加大研发投入、优化产品结构、提升市场竞争力,为电子元器件行业的国产化替代和高质量发展作出更大贡献。

ETL [E-Tech Electronics LTD]公司的发展小趣事

在追求经济效益的同时,ETL也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。此外,ETL还积极参与公益事业,为社会做出了积极贡献。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了基础。

Baumer Electric Ag公司的发展小趣事

Baumer Electric Ag公司创立于1952年,初期主要专注于微动开关的生产。面对市场竞争的激烈,公司创始人Herbert Baumer凭借其敏锐的市场洞察力和坚定的决心,带领团队不断研发新产品,提升技术水平。1960年,公司成功推出首个程序控制系列,标志着Baumer在电控生产流程监控和控制领域取得了重要突破。

BSI公司的发展小趣事

近年来,随着环保意识的提高,电子行业对绿色发展的需求也日益迫切。BSI积极响应这一需求,推动了电子行业绿色标准的制定和实施。通过制定严格的环保标准,BSI引导电子产品制造企业采用更加环保的生产工艺和材料,减少了对环境的污染。同时,BSI还为企业提供了碳排放核查等服务,帮助企业了解自身的碳排放情况,制定了减排措施,推动了电子行业的绿色发展。

Advanced Optoelectronic Technology Corp公司的发展小趣事

为了进一步提高竞争力,AOTC开始寻求与上下游企业的合作。通过与原材料供应商、生产设备制造商以及销售渠道商建立紧密的合作关系,公司成功实现了产业链的整合,降低了生产成本,提高了生产效率。此外,公司还与其他科技公司开展战略合作,共同研发新产品,拓展新市场。

问答坊 | AI 解惑

求74系列芯片74161的verilog源代码

求74系列芯片74161的verilog源代码 大虾们帮忙啊…

查看全部问答>

请指点K30,K241管脚

没查到K30XM和K241的参数,请各位帮一下: 1,K30XM是不是K30? 2,这两个管子是什么类型的? 3,管脚如何排列的?…

查看全部问答>

谢谢,希望有我

申请的话,带下载器设备吗?…

查看全部问答>

ICH7+ALC203声卡驱动开发

有人谁做过ICH7的声卡驱动吗?我目前要做基于ICH7下的声卡驱动,对DMA操作那块一直没有搞明白,有人做过的话请指点下。谢谢。…

查看全部问答>

串口的发送寄存器buf写不了值

我用的单片机是TMP19A61,用C写的。仿真调试时发现:串口的发送寄存器buf写不了值,而其他寄存器都可以正常设置 我的代码大概步骤是: 1.寄存器地址设置:#define SC0BUF (*(volatile unsigned char *)0xFFFFF700)等等 2.引脚的初始化 (TX,RX引 ...…

查看全部问答>

NKCallIntChain返回值为3

KernelIoControl   IOCTL_HAL_REQUEST_SYSINTR 方法申请了一个动态中断,物理中断用的定时器中断3,逻辑中断返回30 OEMInterruptHandle里面判断是定时器3中断来了,调用NKCallIntChain(定时器中断3)返回为3,SYSINT_CHAIN,请问这是为 ...…

查看全部问答>

实现汽车与LED成功整合 解决LED散热问题

车上的灯光系统不但让驾驶者能实际了解汽车的状况,更提供了安全驾驶过程中,所必须兼具的条件。而新一代的光源LED,这对许多消费者来说一点也不陌生,已进一步扩大应用于汽车上,并根据各个应用面对于效能的不同需求,选择适宜的LED产品。基本上, ...…

查看全部问答>

一道算法题

问题:有k个按升序(从小到大)排好序的序列A0, A1, A2... A(k-1),总计有n个元素。试问,有没有一个算法将其归并为一个升序序列?我们希望算法的时间复杂度,为O(n log(k))。提示:使用堆排序、快速排序和希尔排序,都可以得到O (n log(n))时间复杂 ...…

查看全部问答>

stm323.x库关中断的函数是什么?

旧库中的NVIC_SETPRIMASK()、NVIC_RESETPRIMASK()在新库中都不能用了,新库用什么替代?…

查看全部问答>

用移植到stm32的ucos写串口中断为什么一直死机

用移植到stm32的ucos写串口中断为什么一直死机啊,研究快两天了,请大侠指点一二。谢谢中断处理函数void USART1_IRQHandler(void){    OS_CPU_SR  cpu_sr;UCOS_II_REENTRANT_ISR_PROLOG UCOS_II_REEN ...…

查看全部问答>