《点阵LCD驱动显控原理与实践》主要从单片机编程方面介绍点阵LCD显示模块的驱动显控原理,总结出一套通用于各种单片机平台并适用于各种点阵LCD模块的驱动程序。在此基础上,重点讲解了将该驱动程序移植至不同单片机平台的方法,以及几种针对具体的LCD模块特性调整驱动程序的方法。
以MCS-51单片机为基础,以ST公司推出的STM32系列32位微控制器作为介绍应用的平台,以KeilμVision集成开发环境作为程序设计和调试的环境。所有程序都使用C语言编写,所以,书中例程及编程方法亦适用于其他单片机平台。
《点阵LCD驱动显控原理与实践》适合普通高校计算机类、电子类、电气自动化等专业学生作为参考用书。同样,也适用于电子爱好者以及从事嵌入式应用设计的工程师作为实践工作的参考。
《点阵LCD驱动显控原理与实践》特色 典型单色点阵LCD模块 点阵LCD的驱动与显控 将通用LCD驱动程序移植到STM32 将通用LCD驱动程序移植到其他LCD模块 基于通用LCD驱动程序的特殊应用 彩色TFT模块驱动显控 TFT模块的扩展功能驱动程序 RGB565格式图像取模显示 BMP文件解码显示 JPG文件解码显示 基于SD卡文件系统的简易图像浏览器方案 出版前的情况 《点阵LCD驱动显控原理与实践》部分内容在出版之前曾以《点阵LCD的驱动显控原理》为名,上传到一些单片机学习网站、论坛供网友下载参阅,在近3年的时间里得到了广大网友的认同和支持。许多网友通过邮件、论坛跟贴等形式与作者联系,除了带来对书本内容的褒奖,同时也提出了许多的问题。所以,《点阵LCD驱动显控原理与实践》在后来的修订中,增加了许多网友感兴趣的内容,并对一些问题做出更详细的讲解。
本书主要介绍一种通用点阵LCD显示模块的驱动编程方法(在本书中被称为通用LCD驱动程序),该驱动程序可以方便地移植到不同的单片机上使用,也可以经过简单的修改应用到不同的LCD模块应用中。本书以一款较典型规格的COG单色点阵LCD模块为例,详细介绍LCD模块的驱动方法、构建通用LCD驱动程序的思路,以及基于该通用LCD驱动程序的简单菜单应用程序、移植驱动程序的方法。本书从最底层LCD模块的接口驱动编程到稍上层的字符显示、绘图显示编程来介绍通用LCD驱动程序的编程思想;此外,在介绍了几种不改变通用LCD驱动程序架构的基础上,利用LCD模块及单片机本身的特性来提高驱动程序效率的方法;结合彩色TFT显示模块,介绍几种彩色图像的显示方法以及简单的综合应用方案供读者参考。笔者将本书的内容以及程序呈现给读者,但不希望读者以完全照搬的方式来使用书中介绍的程序,而是希望带给读者一种驱动控制的编程方法。
书中的部分内容已于2007年在网络上推出第一版,很多阅读过的朋友都反映不错,给予了笔者一定的肯定,此为笔者最感欣慰之事。而随着时间的推移,笔者又在多种单片机平台以及多种产品设计当中使用了本书介绍的通用LCD驱动程序;而对于不同种类的LCD模块,笔者也将通用LCD驱动程序套用于其中,实践证明了它的可移植性和通用性。不过,随着单片机平台以及LCD模块的变化,在很多应用中,或多或少都对原版的通用LCD驱动程序进行了改进,以便于充分发挥单片机及LCD模块的性能,这点在本书中将会有一章的内容来介绍。
本书在介绍基于单色点阵LCD模块的通用LCD驱动程序时,以MCS-51单片机为介绍的重点,以便于众多具备51单片机编程基础的读者能够更快地理解;而对于近两年风靡MCU市场的ST公司的STM32系列32位ARM芯片,本书也针对它编写了大量的例程,并且在第4章中详细介绍如何将本书介绍的LCD驱动程序移植到该系列MCU之上。
本书更适合什么样的LCD模块?
本书主要针对单色的点阵LCD进行介绍,而且是针对本身就集成了驱动控制IC以及显存的I.CD模块。那些字符型以及段码型的LCD不在介绍之列,但也可以在一定程序上参考本书的驱动编程方法来编写这些LCD的驱动程序。此外,有些小规模的(一般是3.5寸以下)彩色TFT LCD也有内置驱动控制器以及显存,也可参考这里的介绍来编写它们的驱动程序。
张新强,2004年毕业于哈尔滨工程大学。曾于凌阳科技致力于大学计划技术推广。亦从事过医疗、电力电子、伺服控制系统等方面的产品研发,直到与朋友联手创业。主要在嵌入式控制、电机伺服控制以及复杂人机界面的方面有一定的积累以及个人的理解。
第1章 典型单色点阵LCD模块
1.1 MzL02LCD模块简介
1.1.1 LCD模块的结构
1.1.2 MzL02结构尺寸
1.2 LCD模块总线选择及时序图
1.2.1 6800并行总线接口
1.2.2 8080并行总线接口
1.2.3 SPI串行接口
1.3 显存映射情况
1.3.1 显存与LCD屏上点的关系
1.3.2 行、列地址
1.4 LCD的6800总线接口
1.5 LCD控制器的特性
1.6 LCD驱动的基本流程
1.6.1 LCD模块的连接
1.6.2 控制LCD模块显示一个点
第2章 点阵LCD的驱动与显控
2.1 驱动程序架构思想
2.2 基本驱动程序LCD_Driver_User
2.2.1 端口配置头文件LCD Portconfig
2.2.2 MCU与LCD的基本时序控制程序
2.3 LCD的初始化
2.4 绘点子程序
2.4.1 基本绘点函数
2.4.2 一些扩展的基础功能函数
2.5 驱动配置头文件LCD_Config
2.6 LCD驱动功能接口程序
2.6.1 基本绘图功能函数
2.6.2 字符显示功能函数
2.7 字符显示原理
2.7.1 字符与字模
2.7.2 字模与字库
2.7.3 用绘点来绘制字符
2.7.4 显示驱动中自定义的中文字符
第3章 Mz_MenuGuI菜单应用
3.1 Mz_MenuGUI简介
3.2 Mz_MenuGUI的源码分析
3.2.1 Menu_Resource.c菜单资源定义
3.2.2 Menu_GUI_Config.h菜单GUI配置头文件
3.2.3 Menu_GUI_C菜单接口函数
3.3 个性化Menu菜单界面
3.3.1 供参考的GUI响应控制代码
3.3.2 订制一个有二级菜单的工程
第4章 将通用LCD驱动程序移植到STM32
4.1 修改驱动中的底层代码
4.1.1 修改LCD_PortConfig.h的端口配置
4.1.2 修改底层驱动功能函数
4.2 与编译器相关的修改
4.3 例程软件结构说明
4.3.1 工程结构简介
4.3.2 工程中各文件简介
第5章 将通用LCD驱动程序移植到其他LCD模块
5.1 LCD控制器为KS0108B的模块
5.1.1 MzL613模块简介
5.1.2 KS0108B驱动控制方法
5.1.3 将LCD驱动程序移植到KS0108B控制器的LCD模块
5.2 LCD控制器为T6963C的模块
5.2.1 MzL728模块简介
5.2.2 T6963C控制器的控制方法
5.2.3 控制器指令介绍
5.2.4 将LCD驱动程序移植到T6963C控制器的LCD模块
第6章 基于通用LCD驱动程序的特殊应用
6.1 利用MCU内存来优化LCD的操作速度
6.1.1 优化驱动效率的前提条件
6.1.2 修改驱动程序的思路和方法
6.2 利用MCU的DMA及SPI驱动COG液晶模块
6.2.1 适用条件
6.2.2 STM32的内部RAM作为LCD显存
6.2.3 修改驱动程序的思路和方法
第7章 彩色TFT模块驱动显控
7.1 将LCD驱动程序移植到彩色TFT模块应用中
7.2 彩色TFT液晶显示模块介绍
7.2.1 MzT24彩色TFT模块简介
7.2.2 显示RAM区映射情况
7.2.3 Mzrr24操作时序
7.2.4 控制方法及LCD显示特性
7.3 STM32驱动控制MzT24
7.3.1 STM32F103RCT6与MzT24模块的连接
7.3.2 修改LCD_Driver_User.c文件
7.3.3 修改LCD_Config.h的配置
7.3.4 一些简单的速度优化
第8章 TFT模块的扩展功能驱动程序
8.1 驱动功能扩展程序LCD_Extend
8.1.1 一些有用的功能扩展
8.1.2 功能代码分析
8.2 窗口操作功能扩展程序Dis_Window
8.2.1 窗口功能扩展程序的必要性
8.2.2 功能代码分析
8.2.3 Dis_Window的作用
第9章 RGB565格式图像取模显示
9.1 RGB565格式图像取模显示简介
9.2 图像取模
9.2.1 工具简介
9.2.2 彩色图像RGB565取模的步骤
9.3 代码分析
9.4 显示效果参考
第10章 BMP文件解码显示
10.1 BMP文件解码显示简介
10.2 BMP文件格式
10.2.1 BMP文件构成分析
10.2.2 位图文件头结构
10.2.3 位图信息头结构
10.2.4 色表结构分析
10.2.5 图像数据分析
10.3 将BMP文件数据整合进Keil的工程
10.4 BMP文件解码显示程序分析
10.5 应用参考
第11章 JPG文件解码显示
11.1 JPG解码算法库
11.1.1 JPG解码库简介
11.1.2 JPG解码库的特点
11.1.3 JPG解码显示的软件架构
11.2 将JPG文件数据整合进Keil的工程
11.3.IPG文件的解码显示程序分析
11.4 应用参考
第12章 基于SD卡文件系统的简易图像浏览器方案
12.1 方案简介
12.1.1 方案硬件平台
12.1.2 方案软件结构
12.2 基于EFSL的SD卡FAT文件系统简介
12.2.1 SD卡驱动程序
12.2.2 EFSL应用函数接口
12.3 修改图像解码显示程序代码
12.3.1 修改BMP文件解码显示程序
12.3.2 修改JPG文件解码显示程序
12.4 整体功能程序简介
参考文献
第1章 典型单色点阵LCD模块
1.1 MzL02LCD模块简介
当前市面上的LCD模块种类非常多。各个厂家生产的编号都有所不同,即使使用同样的玻璃、同样的驱动控制IC(芯片)都有可能存在不同的产品编号;但真正意义上对于应用设计者(软/硬件工程师)来说有用的,只是LCD模块当中的驱动控制IC(或称为驱动控制器)型号以及驱动控制器芯片与玻璃的连接方法(也就是生产LCD模块时驱动控制器与玻璃引脚的连接,以及一些驱动控制器封装好的特性等)。无论如何,各种不同的LCD模块仍然可以总结出一些应用上的共性,这里以MzL02-12864 LCD模块为对象进行介绍,并不代表本书仅适用于该LCD模块,其他厂家生产的不同型号LCD模块也可以套用本书的介绍去理解、掌握LCD驱动程序的编程方法。
1.1.1 LCD模块的结构
通常见到的LCD模块分为几部分:LCM(玻璃)、背光、PCB板;而背光和PCB板部分其实是可有可无的,视具体的LCD模块而定。点阵的LCD模块按照驱动控制器的集成方式,可分为两种:COB和COG,COG是将驱动控制器芯片集成到玻璃上,而模块背后的PCB板上只是一些驱动控制器芯片无法集成的电容电阻而已;COB的LCD模块是将驱动控制器焊接在LCD模块后面的PCB板上。
MzL02-12864(后面简称.MzL02模块)为一块128×64点阵的单色LCD显示模块,模块上的LCM采用COG技术将控制(包括显存)、驱动器集成在LCM的玻璃上,接口简单、操作方便;为方便用户的使用,在LCM的基础上设计了MzL02模块,将模块所必需的外围电容电阻集成到模块上,并引出多种形式的引线接口以方便用户使用。