浅谈LCD、OLED、TFT取模及其程序开发的算法取舍

您所在的位置:网站首页 lcd显示驱动程序设计及其字符图像设计方法 浅谈LCD、OLED、TFT取模及其程序开发的算法取舍

浅谈LCD、OLED、TFT取模及其程序开发的算法取舍

2024-07-11 10:01| 来源: 网络整理| 查看: 265

做任何电子产品,必然有人机交互的部分,对于开发人员而已,可能性只需要一个简单的串口就可以完成产品所有功能上的开发,但是产品推广后期必然会加入一些显示器件,最常用的就是LCD、OLED、TFT(可能还有一些,毕竟天外有天),这里罗列出本人所使用过的一些显示器件,并对这些显示器件的开发小工具及其算法简单的进行说明(个人的理解,可能会有偏差)。

本文以OLED12864为硬件平台,以取模软件PCtoLCD2002为软件平台,分析逐列式、逐行式、列行式、行列式四种取模方式及其算法以及算法的选择。(算法主要针对16X16像素汉字,但亦可稍作修改移植运用到写16X8像素字符或图片显示)(为便于理解,算法没做太多优化)

一、常用的显示器件:(介绍最常见的6种)

(1)LCD1602(单片机初学者最熟悉不过的型号,实际上LCD1602也可以显示中文,但是效果不是很好,这里不再详细说明)

(2)LCD2004(每行可显示20个字符,共4行,操作方法和LCD1602几乎相同,只是把LCD1602的80字节的内存数据全部显示出来而已)

(3)NOKIA5110(SPI协议,可显示中文)

(4)LCD12864(又分为有字库液晶12864和无字库液晶12864,但是都可以显示中文)

(5)OLED12864(和LCD12864类似,但是其优点更多,未来趋势,本文章的实验硬件平台)

(6)TFT液晶屏(暂无图片)

二、常用的液晶屏取模软件

(1)《Image2Lcd 2.9(破解版)》        下载链接:http://pan.baidu.com/s/1mg9ZFAw

Image2Lcd 界面:

  对于这个软件,本人目前没有使用过,所以暂时没有发言权,如果有使用过的朋友,希望可以不吝赐教。

(2)《zimoV2.2》          下载链接:http://pan.baidu.com/s/1qWuYy8s

zimoV2.2界面:

(3)《LcmSim     LcmZimo    TakeDotLib   组合软件》        下载链接:http://pan.baidu.com/s/1gd2csP9

LcmSim     界面:

LcmZimo界面:

TakeDotLib界面:

(4)  《PCtoLCD2002》 (本文章的实验软件平台  )     下载链接:http://pan.baidu.com/s/1qWKGR16

PCtoLCD2002界面:

三、OLED实验效果演示:

        首先,介绍一下我所使用的OLED12864,其驱动为SSD1306,支持以下5中通信模式:

                1. IIC通信模式                           2. 3线式SPI通信模式                      3. 4线式SPI通信模式                      4. 6800系列并行通信模式                  5. 8080系列并行通信模式 

        本次实验,我采用IIC通信模式。(实际上不论是哪一种通信模式,区别只是在写命令函数和写数据函数的具体操作不同,所以只需要修改这两个函数,就可以达到移植的目的)

(1)OLED12864显示ASCII值:

(2)OLED12864横向滚屏:

(3)OLED12864纵向滚屏

(4)OLED12864斜向滚屏

(5)OLED12864综合滚屏:

(6)OLED12864画棋盘;

(7)OLED12864画图片

(8)OLED12864反转显示:

四、算法分析

OLED12864内部没有集成字库,所以需要我们自己利用PCtoLCD2002取模软件取出我们需要的文字,然后在程序中对照数据,进行编写程序。在讲解具体算法之前,需要先了解OLED12864的地址结构。蓝色部分表示默认情况下的页和列配置,红色部分是进行页和列的重映射后的情况页地址和列地址。

        正因为OLED12864可以进行页地址和列地址的重映射,所以可以做到下图的效果:(实际上很多液晶屏都有这种特性)

(默认情况:上图Figure8-13中的蓝色部分配置时显示文字)

(重映射情况:上图Figure8-13中的红色部分配置时显示文字)

另外,

OLED12864的三种地址模式,分别是:页地址模式、水平地址模式、垂直地址模式。(默认页地址模式)

(1)页地址模式

        在页地址模式中,当RAM数据被读取或者写入后,列地址指针自动加一。如果列地址指针到达本页的最后一列后,再增加一则回到本页的第一个Column0列地址,而页地址指针不变(还在本页)。用户需要设置新的一页的第一列地址然后再去写RAM数据。如下图所示:

(2)水平地址模式:

        在水平地址模式下,当RAM被读取或者写入后,列地址指针增一,当列地址到达本页的最后一个地址时,再增加一则列地址变为Column0,但页地址同时也会增加一。当列地址和页地址都到达最后时,再增加一则列地址和页地址都会跳转到最开始的位置,即Column0和Page0.

(3)垂直地址模式:

        在垂直地址模式下,当RAM被读取或者写入后,页地址自动增加一,如果页地址到达Page7,再增加一会变为Page0,同时列地址加一。当页地址和列地址都到达最后,再增加一就会变为Page0和Column0.

        以上主要以OLED12864入手,讲解了其内部的地址模式,尽管其他的显示模块和OLED12864的模式会有不同之处,但是主要思路是相似。下面结合PCtoLCD2002来讲解具体算法。取模软件PCtoLCD2002有四种取模方式,如下图红色部分所示(蓝色部分默认即可),

(1)逐列式

逐列式取模过程如图所示:

逐列式程序控制书写过程:

逐列式其算法思路是: (1)确定地址(页地址和列地址) (2)写数据 (3)页地址加一 (4)写数据 (5)返回步骤1所处的页地址(列地址指针自动加一,无需程序控制) (6)上面步骤1~5重复16次,完成16X16像素汉字书写。

算法如下:

[cpp] view plain copy print ? /*逐列式*/  for(j=0;j


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3