自制单片机之十五……可串行驱动LCD12864的应用
扫描二维码
随时随地手机看文章
在网上搜了一下,ST7920控制器的LCD产品可以提供8位,4位并行和串行接口可选,并行的控制接口的LCD较多,前面的贴子也介绍过,我们在这儿不说了,这儿我们讲的是串口控制LCD12864。
买了块ST7920的LCD12864,型号是12864-1。这个价格好像比前面我买的那个并口的便宜些,52元。是不是显示效果要差些呢。
再来个背面照片:
买来后也就只有个管脚说明:(我只说串口的定义)
工作于串行模式时的引脚定义:
PIN1------------ GND 电源-, 一般接0V。
PIN2------------VDD 电源+, 一般接5V。
PIN3------------V0 对比度调整端。
PIN4------------RS(CS),片选
PIN5------------R/W(SID),串行数据线
PIN6------------E(SCLK),串行时钟脉冲输入
PIN7------------DB0,不连接
PIN8------------DB1,不连接
PIN9------------DB2,不连接
PIN10-----------DB3,不连接
PIN11-----------DB4,不连接
PIN12-----------DB5,不连接
PIN13-----------DB6,不连接
PIN14-----------DB7,不连接
PIN15-----------PSB 并行:PSB=1,可以接VCC; 串行:PSB=0,一般接GND
PIN16 ----------NC,不连接
PIN17-----------RST,模块复位(低电平有效)
PIN18 ----------VEE,液晶驱动电压(或名Vout)
PIN19 ----------LED+ ,背光 +,一般接5V。
PIN20 ----------LED- ,背光 -,一般接GND。
在网上搜了关于ST7920的资料,跟据图上的接法串行驱动只要四根线和S52连接:
PIN5----SID 数据线
PIN6----SCLK 时钟脉冲线
PIN1----VSS(GND)接地
PIN2----VDD(Vcc)电源+5V
我先试了背光,也就是第20脚接地,19脚通过电流表接电源+5V,测得背光电流为30mA,背光很亮。
下面还是要先讲原理,资料说起来是枯燥了点。但你不去理解它,是不可能让LCD正常工作的。
先说说ST7920的LCD内部都有哪些资源。
1、ST7920 内部固化了8192 个16×16 点阵的中文字型在CGROM里。
2、固化有126 个16×8 点阵的西文字符在HCGROM里。
3、提供4个16×16点阵自造字符的存储空间CGRAM。
4、提供128×64的点阵绘图共1024个字节的存储空间GDRAM。
5、提供1个16×15点阵图标的存储空间IRAM(ICON RAM)。
如何去把它们显示在LCD上呢。
1、作为字符显示,在控制器内有个供写入字符代码的缓存器DDRAM ,你只要将要显示的中文字符代码或西文字符代码写入DDRAM,硬件将依照编码自动从CGROM 中选择将要显示的字型显示再屏幕上。至于是显示西文字符还是中文字符,它会自动辨别的,这和我们PC上是一样的,字符代码也完全一样。
2、图形方式就是用指令直接将表示点阵信息的字节数据写入相应位置的GDRAM内,
具体的规则:
1、字符显示时,DDRAM地址与液晶屏的位置关系见下图:
这个图上可以看出,它的地址编排很怪,第一行到87H完了以后就跳到了第三行接着88H了,每二行也是一样的,很明显,有下面两行接在上面两行后面的迹像。如下图:
2、下面我们再来看看图形显示GDRAM地址和LCD屏位置的关系:
上图我们可以看出ST7920的LCD12864在地址的排列上是分为上、下半屏来显示的,上半屏横向的列地址(X)是0-7(00h-07h),下半屏的列地址是8-15(08h-0fh)。而每个一地址都可写入两个字节的内容,它们是按高位在前低位在后排列的。垂直方向上的地址(Y)上半屏是0-31(00h-1fh),下半屏的Y地址仍是0-31(00h-1fh),可以看出,它的地址排列方式还是将下半屏接在上半屏后面的,因此这块LCD12864,虽然在点阵的物理排列上是128×64,但在地址排列上,它却是块256×32。
3、下面我们来介绍能够使用的指令?
下面我们来看看在串行模式下是如何进行控制的,见下图:
由图可以看出,单片机与液晶模块之间传送1字节的数据共需24个时钟脉冲。首先,单片机要给出数据传输起始位,这里是以5个连续的“1”作数据起始位,如模块接收到连续的5个“1”,则内部传输被重置并且串行传输将被同步。紧接着,“RW”位用于选择数据的传输方向(读或写),“RS”位用于选择内部数据寄存器或指令寄存器,最后的第8位固定为“0”。在接收到起始位及“RW”和“RS”的第1个字节后,下一个字节的数据或指令将被分为2个字节来串行传送或接收。数据或指令的高4位,被放在第2个字节串行数据的高4位,其低4位则置为“0”;数据或指令的低4位被放在第3个字节的高4位,