第2节 LCD的初始化
LCD模块的初始化主要就是对LCD模块的寄存器进行初始化,也就是对LCD控制器当中的寄存器写入要预设的数据,设置好LCD的特性。MzL02模块的初始化如下:
在前面的代码当中,可以看到有一行屏蔽掉的代码:LCD_PortInit();如注释所言,像有的MCU的端口在使用前是需要初始化的,这时就需要在LCD初始化之前完成对端口的初始化,而MCS51的端口是双向口,无需初始其的方向;所以在此将该函数屏蔽。
在对寄存器进行写入操作前,一般会控制端口对LCD模块进行一次外部的硬件复位,即给LCD模块的复位端口一个低电平的脉冲,这样可以确保LCD完成正确的复位。当然,如果在硬件上可以保证MCU在对LCD进行操作前LCD模块已经完全完成了复位的话,也可以不需要这样的代码。此外,从合理性来说,对LCD的复位操作最好是放置在LCD_PortInit函数当中,因为放在上面的代码当中的那个位置的话,当需要移植驱动程序置另外的MCU时,这块的代码也可能会作修改,相对麻烦一些而已。
一般来说,LCD模块的初始化代码都会由厂商提供参考的,因为有些设置是与集成LCD模块时的配置有关,如不告知用户推荐设置的话,往往会让使用者浪费时间在摸索合适的配置上。
在初始化的代码当中,可以看到都是通过之前写好的寄存器写入子函数来对LCD进行操作,当需要换用另外的MCU来驱LCD模块时,是不需要修改这部分的代码的。
如想了解LCD屏的一些寄存器的设置的作用,最好的方法是作一些小实验修改一下设置看一下现像。
而对于现在的很多MCU来说,它们的端口在使用前都需要进么初始化的,以便定义我们要使用到的端口到底是作为输入还是输出端口,端口初始化程序如下:


在前面的代码当中,可以看到有一行屏蔽掉的代码:LCD_PortInit();如注释所言,像有的MCU的端口在使用前是需要初始化的,这时就需要在LCD初始化之前完成对端口的初始化,而MCS51的端口是双向口,无需初始其的方向;所以在此将该函数屏蔽。
在对寄存器进行写入操作前,一般会控制端口对LCD模块进行一次外部的硬件复位,即给LCD模块的复位端口一个低电平的脉冲,这样可以确保LCD完成正确的复位。当然,如果在硬件上可以保证MCU在对LCD进行操作前LCD模块已经完全完成了复位的话,也可以不需要这样的代码。此外,从合理性来说,对LCD的复位操作最好是放置在LCD_PortInit函数当中,因为放在上面的代码当中的那个位置的话,当需要移植驱动程序置另外的MCU时,这块的代码也可能会作修改,相对麻烦一些而已。
一般来说,LCD模块的初始化代码都会由厂商提供参考的,因为有些设置是与集成LCD模块时的配置有关,如不告知用户推荐设置的话,往往会让使用者浪费时间在摸索合适的配置上。
在初始化的代码当中,可以看到都是通过之前写好的寄存器写入子函数来对LCD进行操作,当需要换用另外的MCU来驱LCD模块时,是不需要修改这部分的代码的。
如想了解LCD屏的一些寄存器的设置的作用,最好的方法是作一些小实验修改一下设置看一下现像。
而对于现在的很多MCU来说,它们的端口在使用前都需要进么初始化的,以便定义我们要使用到的端口到底是作为输入还是输出端口,端口初始化程序如下:

在端口初始化程序当中,引用了在LCD_PortConfig.h 中定义的一些宏,大家可以在那里将所定义的宏替代进去看一下,当然,对于MCS51单片机来说,它的端口是三态的,是不需要进行方向的初始化的;然而为了便于保留这些程序的结构,依然将这些空的宏定义继续引用在该程序当中。
LCDBYTE、DOTBYTE等的重定义数据类型在LCD _Config.h当中进行了定义。


