点阵LCD的驱动显控原理 V10

更新时间:2023-07-21 02:32:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

点阵LCD的驱动显控原理

点阵LCD的驱动显控原理

——小丑、Powerint 2007Mz 出品

年8月

V1.0

点阵LCD的驱动显控原理

1.

一些需在提示您的...................................................................................................................4 1.1. 本书更适合什么样的LCD模块?.............................................................................4 1.2. 这里的LCD驱动程序更适合于什么样的MCU......................................................4 1.3. 为什么用C语言........................................................................................................5 2. 以MzL02 LCD模块为例..........................................................................................................6

2.1. LCD模块的结构.......................................................................................................6

2.1.1. 结构示意...........................................................................................................6 2.1.2. 显示RAM区映射情况......................................................................................7 2.1.3. 行、列地址.......................................................................................................9 2.1.4. 其它...................................................................................................................9 2.2. LCD的接口.............................................................................................................10 2.3. LCD控制器特性.....................................................................................................11 2.4. LCD驱动的基本流程.............................................................................................16

2.4.1. LCD模块的连接.............................................................................................16 2.4.2. 控制LCD模块显示一个点.............................................................................17 2.4.3. 利用LCD控制器的特性.................................................................................19

3. 点阵LCD的驱动与显控.........................................................................................................21

3.1. 基本驱动程序(LCD_Driver_User)........................................................................22

3.1.1. 端口配置头文件LCD_Portconfig..................................................................22 3.1.2. MCU与LCD基本时序控制程序....................................................................23 3.2. LCD的初始化.........................................................................................................26 3.3. 绘点子程序.............................................................................................................27

3.3.1. 基本绘点函数.................................................................................................27 3.3.2. 一些扩展的基础功能函数.............................................................................29 3.4. 驱动配置头文件LCD_Config................................................................................30 3.5. LCD驱动功能接口程序(LCD_Dis).......................................................................33

3.5.1. 基本绘图功能函数.........................................................................................33 3.5.2. 字符显示功能函数.........................................................................................39 3.6. 字符显示原理.........................................................................................................39

3.6.1. 字符与字模.....................................................................................................39 3.6.2. 字模与字库.....................................................................................................42 3.6.3. 用点来绘制字符.............................................................................................46 3.6.4. Mz的驱动中提供的字符显示........................................................................48

4. Mz_MenuGUI菜单应用.........................................................................................................50

4.1. Mz_MenuGUI.........................................................................................................50 4.2. Mz_MenuGUI的源码分析.....................................................................................51

4.2.1. Menu_Resource.c菜单资源定义....................................................................51 4.2.2. Menu_GUI_Config.h菜单GUI配置头文件...................................................55 4.2.3. Menu_GUI.c菜单接口函数............................................................................56 4.3. 定制自己的Menu菜单界面...................................................................................63

4.3.1. 参考的GUI响应控制代码..............................................................................63 4.3.2. 订制一个有二级菜单的工程.........................................................................67

5. 移植通用版LCD驱动程序到另一颗MCU............................................................................75

5.1. 修改驱动中的底层代码.........................................................................................75

点阵LCD的驱动显控原理

6.

5.1.1. 修改LCD_PortConfig.h的端口配置..............................................................75 5.1.2. 修改底层驱动功能函数.................................................................................76 5.2. 与编译器相关的修改.............................................................................................80 移植通用版LCD驱动程序到另一块LCD.............................................................................83

点阵LCD的驱动显控原理

1. 一些需在提示您的

1.1. 本书更适合什么样的LCD模块?

在本书的开始之处,先将本书将要介绍的LCD圈定一个小的范围,即本书所说的LCD指的是哪类型的LCD?

在这里将主要针对单色的点阵液晶屏(LCD)进行介绍,而且是针对LCD模块本身就集成有驱动控制IC的,以及显存;那些字符型以及段码型的LCD不在介绍之例,但也可以在一定程序上参考本书的驱动编程方法来编写这些LCD的驱动程序。此外,也有些小规模的(一般是3.5寸以下)彩色TFT LCD也有内置驱动控制器以及显存的,也可参考这里的介绍来编写它们的驱动程序。

1.2. 这里的LCD驱动程序更适合于什么样的MCU

MCU即常说的单片机,本书所介绍的通用版LCD驱动程序其实是可以用在所有的MCU的,只不过,笔者从应用的角度出发,建议在使用本书所介绍的驱动程序时,更适合的MCU类型。

目前市面上的MCU非常之多,从功能从资源角度来看的话,大概可分为以下几类:

1、 小资源MCU,类似于传统51的89S51单片机、PIC等的小资源单片机等,通常它们的

资源都很少,片内的ROM少于或等于4K byte,RAM少于或等于128 byte,速度较慢,MIPS数通常在1M MIPS左右;

2、 中资源MCU,这类MCU的涵盖面非常广,在实际的产品设计中应用非常多,大概定义

如一些增强型的51单片机、中资源的AVR单片机、16位的MSP430系列的中等资源单片机、凌阳的SPCE061A、PIC的中等资源单片机等等,非常多,甚至包含至ARM7核心的LPC系列MCU,如LPC21XX系列等;一般来说指的是片内的ROM资源在8K byte以上,RAM在256 byte以上,MCU的运行速度较快,片内资源丰富,应用面非常广; 3、 跑OS的大资源MCU,这类的MCU其实大部份指ARM7和ARM9核心或与这些核心

同等级的处理器了,通常都会在设计中跑操作系统,也就是现在常说的32位嵌入式处理器。

本书所介绍的LCD驱动程序更适合于中等资源的MCU,因为它们有足够的片内资源和运行的速度,而且在应用它们的设计当中往往会涉及到LCD的人机界面显示。

其实在此,无非就是在于说明,如果您使用一些类似2051、89S51级别的MCU的话,没有太多必要使用本书所介绍的驱动程序,因为很有可能连LCD驱动中的自带字库都装不下去,不过驱动的方法还是可以参考的。

而如果您使用的是较大资源的嵌入式处理器,而且本身就跑着图形操作系统的话,更没必要了,因为往往这类MCU都会自带有LCD的控制器,而操作系统也带有完整的图形界面接口。

点阵LCD的驱动显控原理

1.3. 为什么用C语言

本书中全部的源码都是以C语言为平台的,这点请读者确认在读本书前,自身已经具备C语言的编程基础。

现下,中等资源的MCU开发如果没有C语言的编译器支持的话,可以说是极其少见的了;使用C语言对MCU进行开发已经形成当前的主流模式,何乐而不为呢!

ASM的执行效率比C语言的代码要好?当然,这是肯定的,不过现在的MCU速度和性能已经提升上来了,而且很多优秀的C编译器编译的结果就未必比自己使用ASM编程的结果效率低。

ASM的代码短小精悍?从某个角度来说是的,不过时下优秀的C编译器对C代码的优化比自已使用ASM编写的还要好;况且,在编写结构复杂的程序时,C语言肯定比ASM占优势,在编程速度上和可读性以及可移植性上等。

为什么不用C语言编程呢?

点阵LCD的驱动显控原理

2. 以MzL02 LCD模块为例

这里将介绍铭正同创所销售的LCD模块:MzL02-12864,并在后面的大部分例子当中,以它为介绍的对像。

实际上现在市面上的LCD种类非常多,各个厂家生产的编号都有所不同,即使是使用一样的玻璃、驱动控制IC都有可能存在不同的产品编号;但真正意义上对设计者(软硬件工程师)来说有用的,也就是LCD模块当中的驱动控制器型号以及驱动控制器与玻璃的连接方法(也就是生产LCD模块时驱动控制器与玻璃引脚的连接,以及一些驱动控制器封装好的特性等)。无论怎么着,LCD模块总还是大同小异的,这里以MzL02 LCD模块为对像介绍,并不代表本书仅适用于该LCD模块,其它厂家生产的不同型号的LCD模块也可以套用这里的介绍去理解、去掌握LCD驱动程序的编程方法,当然仅仅是供您参考。

2.1. LCD模块的结构

通常我们所见到的LCD模块,分为几部分:LCM(玻璃)、背光、PCB板;而背光和PCB板部分其实是可有可无的,视具体的LCD模块而定。点阵的LCD模块按照驱动控制器的集成方式,大可分为两种:COB和COG;COG其实就是将驱动控制IC集成到了玻璃里面,这样的而后面的PCB板上其实只是一些驱动控制IC无法集成的电容电阻而已;COB也就是把驱动控制IC焊接在LCD模块后面的PCB板上。

MzL02-12864为一块128X64点阵的LCD显示模块,模块上的 LCM采用COG技术将控制(包括显存)、驱动器集成在LCM的玻璃上,接口简单、操作方便;为方便用户的使用,在LCM的基础上设计了MzL02-12864模块,将模块所必需的外围电容电阻集成到模块上,并引出多种形式的引线接口方便用户使用。MzL02-12864模块与各种MCU均可进行方便简单的接口操作。

1. 128 x 64 点阵FSTN 2. 1/64 占空比1/9 偏压比 3. 单电源供电对比度编程可调

4. 并行接口为6800 时序MPU 接口方式 5. 3.3V的白色LED背光,美观大方 6. 集成S6B0724驱动控制IC

2.1.1. 结构示意

图1.1为MzL02-12864模块中的LCM的结构尺寸示意图。

点阵LCD的驱动显控原理

图 2.1 LCM结构尺寸

2.1.2. 显示RAM区映射情况

对于LCD模块,了解清楚驱动控制IC当中的显存与LCD玻璃上的点的对应关系是非常重

要的,这是编写LCD的驱动程序的基础。 MzL02-12864液晶显示模块的显示器(玻璃)上的显示点与驱动控制芯片中的显示缓存RAM是一一对应的;驱动控制芯片当中共有65(8 Page x 8 bit+1)X 132 个位的显示RAM区。而显示器的显示点阵大小为64X128点,所以实际上在液晶显示模块中有用的显示RAM区为64 X 128个位;按byte为单位划分,共分为8个Page,每个Page为8行,而每一行为128个位(即128列)。

驱动控制芯片的显示RAM区每个byte的数据对应屏上的点的排列方式为:纵向排列,低位在上高位在下;如图 2.2所示:

点阵LCD的驱动显控原理

b0b1b2

8 bit数据

b3b4b5b6b7

图 2.2 字节数据排列情况

MzL02-12864液晶显示模块的显示屏上的每一个点都对应有控制器片内的显示缓存RAM中的一个位,显示屏上64X128个点分别对应着显示RAM的8个Page,每一个Page有128个byte的空间对应。因此可知显示RAM区中的一个Page空间对应8行的点,而该Page中的一个byte数据则对应一列(8个点)。图 2.3为显示RAM区与显示屏的点映射图:

点阵LCD的驱动显控原理

图 2.3 显示RAM区与显示屏点映射图

2.1.3. 行、列地址

用户如要点亮LCD屏上的某一个点时,实际上就是对该点所对应的显示RAM区中的某一个位进行置1操作;所以就要确定该点所处的行地址、列地址。从上图中可以看出,MzL02-12864液晶显示模组的行地址实际上就是Page的信息,每一个Page应有8行;而列地址则表示该点的横坐标,在屏上为从左到右排列,Page中的一个Byte对应的是一列(8行,即8个点),达128列。

可以根据这样的关系在程序中控制LCD显示屏的显示。

注意:MzL02-12864的显示缓存RAM区实际上比模块上的显示器所对应的RAM区要大;而LCD模块具体设置Page(有时也称页)时,屏上的位置与驱动控制IC当中的哪里的RAM区对应,还与驱动控制IC与屏的连接有关;所以,实际在使用时,请参考所提供的范例设置(主要是设置COM反向扫描、SEG设置为正向扫描,以此设置方法,则每个Page中的前三列以及最后一列是不对应在LCD屏幕上的)。

2.1.4. 其它

市面上的LCD模块在屏幕点与显存对应关系这块,都不尽相同,这主要跟玻璃的SEG、COM与驱动器间的连接关系定的,所以,在编写一块LCD模块的驱动程序前,对这块LCD模块的显存和显示点对应关系的了解是非常必要的。

点阵LCD的驱动显控原理

2.2. LCD的接口

一般来说,LCD模块(带有驱动控制器)的接口多为总线的接口,不是6800就是8080,或者是串行SPI(及类SPI时序);除了这些总线的端口外,有的LCD模块还引出了一些功能性的端口,如偏压调节输入、负压输出等,当然还有电源输入端口,这些一般与编写驱动程序没有太多的关系,所以这里就不介绍了。 MzL02 LCD模块的接口如下:

序号

接口引脚名

说明

序号

接口引脚名

说明

背光正极输入 片选(低电平有效) 复位脚(低电平复位) 数据命令选择脚

LCM供电 8位数据总线

RS(A0)

6800系列MPU的读/写信号(R/W) 6800系列MPU的时钟信号使能脚(EP)

背光负极输入

这是很典型的6800总线LCD接口,有的LCD模块的资料里,也有将A0称为RS,只是字面表达不同而已,一般来说意义是一样的。 它的操作时序图如下:

上图并不是非常准确,一般来说,片选信号CS要在整个时序过程当中保持有效(低电平);而RS信号是一种状态的设定,以此来告诉被操作的LCD驱动控制器,当前的操作是针对其中的寄存器还是显存的。而数据(包括设置寄存器的数据等,只要是数据线上的信号)的

点阵LCD的驱动显控原理

载入和装载(指的是被操作的LCD控制器将要读取的数据装载至数据端口,以供操作者(MCU)读取)的触发由EP信号的下降沿触发。

注意:关于EP信号的有效触发沿,上图中有很大的可能性有误,经试验实际上是上升沿触发的,以上的描述只是照图分析,上图是S6B0724的PDF资料当中来的。

2.3. LCD控制器特性

LCD模块中,用户程序对其进行显示控制时,无非就是通过对LCD模块内部的驱动控制器当中的寄存器进行设置操作;最常用的如LCD的显示开/关、显存操作地址(行与列地址)的设置等。这些寄存器一般都在LCD模块的驱动控制器文档中有详细介绍,所以在编写驱动程序时,有必要拿到一份驱动控制器的文档;不过,一般常使用到的寄存器不会太多(除了一些在上电后需要初始化的寄存器外)。

MzL02-1286液晶显示模组共有22种显示指令,下面分别介绍以下20种指令: 注意:下面的指令介绍中,A0P信号指的是RS信号。 1,显示开关指令

2,显示起始行设置

这个指令设置了对应显示屏上首行的显示RAM行号。有规律的修改该行号,可以实现滚屏功能。

3,页地址设置

4,设置列地址

由上图可以看出显示RAM被分成9页每页132个字节,当设置了页地址和列地址后,就确

点阵LCD的驱动显控原理

定了显示RAM中的唯一单元,该单元由低到高各个数据位对应于显示屏上的某一列的8行数据位。

注:在本模组中与LCD屏上对应的显示RAM仅为8页有效(0~7),每页128字节,所以每页当中的条一列和最后的三列是不在显示屏上有点对应的,这点用户在使用时请注意,可以参考提供的驱动程序。

列地址的设置需要连续写两次指令,如上图所示,指令数据为0001XXXXB和0000XXXXB,都是用低四位放置有8位地址的高低四位数据,而指令的DB4指明当前设置的是高四位地址还是低四位地址。 5,读状态

BUSY ADC

当BUSY为1时,忙状态;当BUSY为0时,准备好状态,

表示行和列的关系

ADC:1正常输出(n-131==SEGn),ADC:0为反向输出(131-n ==SEG n)

ON/OFF

表示液晶显示开和关 0:显示打开,1:显示关闭

RESET

0:正常工作状态,1:复位

6,写显示数据

这条指令可以将显示数据(8位)写到RAM中,显示地址自动加一。

7,读显示数据

这条指令从指定地址中读取显示数据,读取显示数据后,列地址自动加一。

点阵LCD的驱动显控原理

8,ADC选择(Segment 方向选择)

这条命令用于将Segment驱动输出反向。

9,正向/反向显示

这条命令用于设置显示正向和反向。正向为正常模式,反向时LCD屏的显示将反色显示;但执行该指令后,显示RAM中的内容不变。

10,全屏点亮/变暗

这条命令使所有的液晶点被点亮/变暗,无论显示RAM中有任何数据。此命令优先于正向/反向显示。当液晶处于显示关闭状态时,执行此命令将会自动进入节电状态。

11,LCD偏压设置

这条命令用于液晶显示的偏压设置。

12,读/改/写模式设置

这条指令用到两次结束命令,一旦写入此命令后,读显示数据命令不再修改列地址,但是写显示数据命令还可以使列地址自动加一。当有结束命令输入时,列地址恢复到读/改/写时的列地址。这个命令可用于光标显示。

13,读/改/写模式结束

这条指令用于结束读/改/写模式。

点阵LCD的驱动显控原理

14,复位

这条指令初始化显示起始行、起始列地址、起始页地址、正常输出模式。结束读/改/写模式和测试模式。此命令不影响显示RAM中的数据。

15,COM口扫描方向选择

这条指令用于确定COM口扫描的方向。

16,上电控制设置

17,V5电压内部电阻调整设置

18,电量(electronic Volume)设置模式

这条命令用于调整显示屏的亮度。此命令用到双字节:一个是设置为电量设置模式,另一个是设置电量寄存器设置模式。

点阵LCD的驱动显控原理

流程如下:

19,静态指示器

这条命令用于控制静态驱动指示器显示。为双字节命令。 静态指示器开/关

静态指示器寄存器设置状态

20,节电模式

当在显示关闭时,设置全屏点亮,则进入节电状态。节电模式有两种状态一个是睡眠模式另一个是备用模式。当静态指示器关闭时,进入睡眠模式。当静态指示器打开时,进入备用模式。在睡眠模式和备用模式时,显示数据保存操作模式时的数据。在这种模式时,MPU可以访问显示RAM。

点阵LCD的驱动显控原理

睡眠模式:

在此模式下,除了MPU访问显示RAM外,停止所有的液晶显示操作。晶振、液晶上电和液晶驱动电路全部暂停。 备用模式:

在此模式下,液晶上电和液晶驱动电路暂停,振荡器继续振荡。在备用模式下,有复位命令时,系统进入睡眠模式。

2.4. LCD驱动的基本流程

介绍基本的流程控制方法,这里重在介绍方法,从时序的模拟或者是总线的连接,到利用LCD的特性来做一些显示的处理,如单色液晶如何显示一个点,彩色LCD如何显示一个点的关系;操作地址与LCD上点的对应关系;LCD控制器的特性,如指针自动加/减特性如何利用、滚屏特性如何利用、COM和SEG扫描正相反相的特性利用等等~~~~~

2.4.1. LCD模块的连接

在很多资料以及书籍当中,通常介绍有两种LCD模块的连接方法:直接控制和间接控制;直接控制实际指的是LCD模块的总线接口直接与MCU端口连接,然后MCU通过程序控制端口来模拟LCD的总线时序来完成对其的控制操作;而间接控制指的是MCU本身就有外部总线拉出,与LCD的总线接口对应的连接上,程序中直接操作总线以控制LCD。 目前有很多MCU都把总线藏着掖着了,都没有引出外部总线;所以通常在用MCU控制LCD模块时,时常会选择直接控制的方式,即利用端口来模拟总线时序;当然了,如果本身就有总线而且也与LCD模块的总线配得上的话,肯定会使用总线连接的间控方式。

MzL02 LCD模块的总线接口为6800总线,这与绝大部分引出外部总线的MCU的时序是不一样的,再说了本身就有那么多的MCU连总线都没有外拉,所以,在这里将采用端口模拟总线的方式对LCD模块进行控制。

采用端口模拟时序的方式控制LCD模块时,端口的连接非常简单也有很大的自由度;一般来说,会选择8个(跟总线宽度相同的个数)连续的端口作为数据端口与LCD模块的数据端口连接,而其它的如CS、RS(A0)、RESET(RST)、WR、EP之类的引脚连接时就比较随意了,视具体情况而定。当然,有的LCD模块还有其它的一些引脚需要连接,不过如前面所述,跟这里所介绍的编写驱动程序的关系不大,就不作说明了,可以直接参考LCD模块的文档介绍的连接即可。

点阵LCD的驱动显控原理

下图就为MCS51与MzL02 LCD的连接电路图,采用直控的端口模拟时序的方式。

VDD

VDD

注:此图仅供参考,可能与有的资料上不太一样,注意一下JP2是指MzL02模块上的FPC20的接线座。

2.4.2. 控制LCD模块显示一个点

点阵LCD的特点就是以点的形式呈现用户想要显示的图形,故点阵LCD又有称之为图形点阵LCD;通常在编写一个LCD模块的驱动程序时,最基本的功能是绘制一个具体指定点,只有在这样的功能的基础之上,才能通过各个点的组合,呈现出点阵的图形。

其实,绘制一个指定位置的点,也就是将显存当中的对应该点的数据位进行操作;在前面的LCD 显示RAM区映射介绍当中,可以得知显存当中的数据与LCD屏幕上的点的对应关系,这样就可以在程序当中通过简单的换算而有序的控制LCD屏上的点的显示了。

比如,在MzL02模块当中,要将坐标位置(0,0)的点点亮时该点对应显存的情况分析如下:

坐标为(0,0)的点我们定义其位于屏幕正向面对我们时的左上角的点,根据前面介绍的内容,可以行知,该点对应为Page0的第一个byte数据上,而且准确的位置是对应在这个byte数据的第0位(bit0)上。

如此以来,就可以对显存当中行地址(Page)为0,列地址为1(前面寄存器的介绍当中已注明,第0、129、130、131列在屏中没有对应的点,所以列地址为1时正是屏上点的最左边一列)的显存写入0x01的数据以点亮程序中坐标点(0,0)的点。 如下图所示意。

点阵LCD的驱动显控原理

了解在LCD屏上绘点的基本原则,就可以灵活的应用于不同的显示操作了,比如:

在Page0上的第0、1、2、3、4、5、6列分别填入数据:0x00,0x24,024,0x24,0x24,0x24,0x00后,可以在屏上显示出字符:“=”,如下图显示。实际上就相当于在Page0的第0列起始显示了一个8*7(高8点、宽7点)的字符。

上面所讲的方法是很多人在编写LCD的驱动程序时采用的直接填充方式的字符显示方法,不过,这种方法显示字符,在这种单色的LCD模块当中是不可以实现任意位置显示字符的。故本书所介绍的字符显示方法并没有采用这样的方法,在接下来的介绍当中会有详细的叙述。

再返回到绘点原理上,这里,建议采用“读—改—写”的方式来完成一个点的显示,即实现本书所介绍的驱动程序架构的最基本的绘图子函数:绘点函数。 实际上,“读—改—写”的绘点方式在单色的点阵LCD模块驱动程序当中的思想就是:从要绘制的点所在的显存byte读回原来LCD屏上显示的点所对应的一个byte数据,然后针对要

点阵LCD的驱动显控原理

绘制的点所在该byte的实际bit位置,改变该bit 的数据(无非就是0或者1)而保留该byte的其它bit数据不变,然后再将改完的byte数据写回读取它的显存位置。

例如,在LCD屏上,已经在坐标(0,0)的位置上有显示了黑点,这时,想在坐标位置(0,4)的点上再绘制一个点;如前面的图所示,该点的所对应的显存数据为0x01,则将其读回,改变该byte的bit4值,则数据变为0x11,再将其写回原位置,就可以显示如下图:

依此方法绘制点,就可以具备以下的优点:

1、 任意位置显示点,而不影响该点以外的点的显示;

2、 在此绘点功能的基础上构建的字符显示/图形显示可以实现任意位置的显示; 3、 在此绘点功能的基础上构建的上层绘图、显控程序会很简练、易理解。

而在彩色的屏幕当中,如256色屏、16位色屏之类的,往往与单色的LCD模块不大一样,也就是点与显存的对应关系上而已,256色的屏中的一个点对应着显存中的一个byte数据,16位色屏当中一个点对应显存中的两个byte数据;这样在做绘点操作时就简便得多,可以不必将原先数据读回,直接将要在该点显示的颜色数据写入对应的byte位置即可。

2.4.3. 利用LCD控制器的特性

在使用LCD模块进行显示的控制时,往往都会有些工程师利用LCD控制器本身所提供的一些特性,以期实现特殊的显示效果。比如实现纵向/横向的滚屏、坐标轴的翻转等,或者是实现不同图层的叠加显示效果等,这些都与LCD控制器所提供的特性有关,也就是看一下LCD控制器是否提供了设置这些特性功能的寄存器。

在MzL02模块当中,就提供了COM显示起始行设置的寄存器,该寄存器除了在初始化时定义显示起始行对应的显存RAM中的哪一行之外,还可以依此实现垂直方向的滚屏显示。而ADC选择(Segment 方向选择)寄存器以及COM口扫描方向设置寄存器可以实现坐标轴的变化,即相对用户的坐标轴零点位于左上角还是右下角,或者左下角、右上角。这些寄存器的使用最好可以自己去进行一下简单的实验,才可更深刻的理解它们的作用;一般来说

点阵LCD的驱动显控原理

很多寄存器的初始化都会有供货商提供的键议的初始化值,在使用时初始化可以按此来即可,如想了解具体每个寄存器设置的含义最好还是通过实验的方式,这里就不作过多的描述。

点阵LCD的驱动显控原理

3. 点阵LCD的驱动与显控

在适当的硬件的基础介绍之后,这里将以MzDesign所提供的针对MzL02的通用版LCD驱动程序为对像介绍一种LCD驱动程序的设计思想;将以在LCD上的绘点功能程序为基础,构建较为完整的驱动程序(包括显示控制)。通过下图来大概了解一下这种驱动程序的结构以及各模块之间的关系。

MzT24-1模块的基础驱动程序架构如所示:

图 3.1 驱动程序架构

基础驱动程序由8个文件组成,分别为:底层驱动程序文件LCD_PortConfig.h、LCD_Driver_User.c、用户API功能接口函数文件LCD_Driver_User.h、LCD_Config.h、LCD_ASCII.c、LCD_Dis.c以及GB_Table.c、LCD_Dis.h。

LCD_PortConfig.h:该文件为底层驱动程序的头文件,主要对使用到的端口进行定义

以及配置,用户在使用基础驱动程序时,要使端口的分配符合实际硬件的接线。 LCD_Driver_User.c:该文件为底层驱动程序,负责MCU与MzT24-1模块进行数据

传输的任务,主要包括初始化模块、写控制指令、写数据、读数据等函数;这些函数仅供给上一层的LCD_Dis.c调用,不建议用户在应用程序中调用这些函数。 LCD_Driver_User.h:该文件为LCD_Driver_User.c的对应头文件,里面对应C源文

件当中的函数进行外部声明。

本文来源:https://www.bwwdw.com/article/f5u1.html

Top