基于C51的液晶显示模块接口电路与程序设计
摘 要:以应用广泛的MSC-G12864液晶显示模块为例,在简单介绍内部结构与操作方法的基础上,讨论了其与单片机的接口以及相应的C51编程方法和程序。
关键词:液晶显示器;单片机接口技术;C51编程
1. 引言
液晶显示模块是单片机应用系统的常见外设之一,对它的编程控制的要求也是多种多样的,如显示内容,显示形式等等,这些要求都可以归结为以数组形式处理数据的方式。本文以具体的液晶显示模块为基础建立C51编程思路。
2.MSC-G12864液晶模块内部结构
MSC-G12864液晶显示模块是香港信利公司生产的图形显示模块,点阵数为64行×128列,其功能强,使用方便,能直接与单片机接口,具有专用指令,可方便地实现画面卷动等功能。
MSC- G12864主要由液晶屏阵列驱动电路KS0108B、点阵式显示控制器KS0107B、LCD显示器和LED背光灯等4部分组成,由此构成完整的显示系统模块。控制器是整个显示系统的核心,具有自身的时钟信号,并提供一套完整的指令系统,其中两片KS0108B分别控制显示屏的两部分。LCD通过总线与CPU连接,实现对外部数据的读写操作,还可以方便的改变显示窗口所在的位置。
MSC-G12864的主要引脚有外部数据总线(DB0~DB7),显示屏左右半屏的使能信号(CS1、CS2),读写控制信号(R/W),数据指令选择位(RS),模块的使能信号(E),电源(VDD,VSS)和负偏置电压(VO),背光控制端口(SLA,SLK)。
3.MSC-G12864与MCS-51系列MCU的接口电路
与其他液晶显示模块的接口方法相同,MSC-G12864的接口方法通常包括直接访问方式与扩展端口方式两种方法。
3.1 直接访问方式
MCU可以通过数据总线与控制信号直接采用存贮器访问形式或I/O设备访问形式控制该液晶显示模块。以89C55为例,该单片机是MCS-51系列中的一种新型低功耗单片机,其内部有20 k字节E2PROM,程序及需要显示的字符、汉字、图形等可以存贮在MCU内部,不用扩展外部存贮器,使得控制系统电路更为简单。MSC-G12864与89C55单片机接口电路如图1所示。89C55的P0口直接与液晶显示模块的数据口连接,A0、A1分别控制显示模块的数据/指令(RS)和读写(R/W)状态,片选信号由P2.6、P2.7控制,而E由MCU的RD、WR的与非逻辑控制。
图1 直接连接方式电路图
3.2 扩展端口方式
通过扩展MCU的并行接口来间接对液晶显示模块实现控制。图2所示的就是通过扩展81C55用其PA、PB口来实现对LCD模块的控制。
4.软件设计
MSC-G12864的屏幕共有64行,分为8页,每页8行,每行128列。每个字节从上到下依次为低位LSB到高位MSB排列,每个字节的每一位相应的对应LCD屏上的一点的亮、灭状态:“1”表示亮,“0”表示灭,同一个字符点阵数据的各个字节从左到右排列。
图2 扩展端口方式电路图
C51是单片机的高级语言,具有编程简便、可靠性高、库函数丰富、容易实现模块化等一系列优点,在微机控制中得到了广泛的应用。下面介绍用C51编写的操作MSC-G12864的常用的一些基本通用程序。
以下3个子程序分别为写命令子程序和写数据子程序。本文重点来讲述显示单个汉字子程序,这个子程序可以实现在指定位置,显示指定的汉字。另外应该还有一个清屏子程序和显示满屏子程序。清屏子程序原理上与显示单个汉字子程序基本一样,就是往每个点输送00H;显示满屏子程序是基于显示单个子程序的基础上来编写的。另外需要提及,所有的程序是用Keil c51 6.02版本编译器来编辑调试的。
typedef unsigned char uchar;
sbit DI=P3^0;
sbit RW=P3^1;
sbit EN=P3^2;
sbit CS1=P3^4;
sbit CS2=P3^5;
sbit RESET=P3^3;
void write_com(uchar cmdcode)
{
DI =0;
RW =0;
EN =1;
P1=cmdcode; //数据送P0口
delay(0); //延时450ns
EN =1;
delay(0);
EN =0;
}
/*------写数据到LCD----------------*/
void write_data(unsigned char data)
{
DI =1;
RW=0;
EN =1;
P1=data;
delay(0);
EN =1;
delay(0);
EN =0;
}
/*-----指定位置显示汉字16*16--*/
void xshz(uchar ye,uchar lie, uchar code *hzk)
{
unsigned char j=0,i=0;
for(j=0;j<2;j++)
{
write_com(Page_Add+ye+j);
write_com(Col_Add+lie);
for(i=0;i<16;i++) write_data(hzk16*j+i);
}
}
系统中的液晶是128×64点阵,由于汉字是16×16点阵,所以每行可以显示8个汉字,一屏可以显示4行,这样每屏最多可以显示32个汉字。在指定位置显示汉字时,我们需要先通过一些软件提取汉字的字模,存到数组hzk中,从表2中可以查出液晶显示模块的起始页地址为B8H,本例中将B8H赋予常量Page_Add,同时可查出起始列地址为40H(赋予常量Col_Add)。向液晶模块写入汉字时,首先用写入命令函数write_com()把将要在指定位置写入汉字的起始页地址和起始列地址送入液晶模块(如上例注释1和2),然后通过一个循环用写数据函数write_data()写入一个汉字的上半部分(如上例注释3),再把页数加1(上例中变量j=1)重复步骤1、2、3写入汉字的下半部分。如果要在左半屏写汉字CS1置1,在右半屏写字CS2置1,至此一个汉字就在屏幕中指定位置显示了。
5.结论
用C51来对液晶显示模块进行编程控制,编程效率高,处理问题方便灵活,相对汇编语言有明显的优势。
参考文献
1.刘子锐. Delphi数据库开发自学教程.北京:人民邮电出版社,2002
2.徐爱钧,彭秀华.单片机高级语言C51Wind,,环境编程与应用〔M」.北京:电子工业出版社,2001.
3.刘艺. Delphi面向对象编程思想.北京:机械工业出版社,2003
4.李维,郭强,周云仙.液晶显示应用手册〔M〕.北京:电子工业出版社,2002
5.郭艳玲,郭世勇.NYG12864-02CGE大规模点阵式液晶显示器和单片机接口技术.电子技术应用,1996(10)
作者简介:
周翔宁 (1982- )男 江苏南京人 南京信息职业技术学院。
推荐访问: 程序设计 电路 接口 液晶显示模块 C51