目录
1 LCD12864简介ST7920类 这种控制器带中文字库,为用户免除了编制字库的麻烦,该控制器的液晶还支持画图方式。该类液晶支持68时序8位和4位并口以及串口。
(2)KS0108类 这种控制器指令简单,不带字库。支持68时序8位并口。
(3)T6963C类 这种控制器功能强大,带西文字库。有文本和图形两种显示方式。有文本和图形两个图层,并且支持两个图层的叠加显示。支持80时序8位并口。
(4)COG类 常见的控制器有S6B0724和ST7565,这两个控制器指令兼容。支持68时序8位并口,80时序8位并口和串口。COG类液晶的特点是结构轻便,成本低。
ST7920 GND VCC V0 RS R/W E DB0-DB7 PSB RES VOUT BLA BLK
KS0108 GND VCC V0 RS R/W E DB0-DB7 CS1 CS2 RES VOUT BLA BLK
T6963C FG GND VCC V0 WR RD DB0-DB7 RS CS RES FS BLA BLK
S6B0724 GND VCC RS WR RD CS DB0-DB7 RES BLA BLK
管脚名称 | LEVER | 管脚功能描述 |
VSS | 0 | 电源地 |
VDD | +5.0V | 电源电压 |
V0 | - | 液晶显示器驱动电压 |
D/I(RS) | H/L | D/I=“H”,表示DB7∽DB0为显示数据 D/I=“L”,表示DB7∽DB0为显示指令数据 |
R/W | H/L | R/W=“H”,E=“H”数据被读到DB7∽DB0 R/W=“L”,E=“H→L”数据被写到IR或DR |
E | H/L | R/W=“L”,E信号下降沿锁存DB7∽DB0 R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0 |
DB0 | H/L | 数据线 |
DB1 | H/L | 数据线 |
DB2 | H/L | 数据线 |
DB3 | H/L | 数据线 |
DB4 | H/L | 数据线 |
DB5 | H/L | 数据线 |
DB6 | H/L | 数据线 |
DB7 | H/L | 数据线 |
CS1 | H/L | H:选择芯片(右半屏)信号 |
CS2 | H/L | H:选择芯片(左半屏)信号 |
RET | H/L | 复位信号,低电平复位 |
VOUT | -10V | LCD驱动负电压 |
LED+ | - | LED背光板电源 |
LED- | - | LED背光板电源 |
指 | 指 令 码 | 功 能 | |||||||||
令 | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
清除 显示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 将DDRAM填满'20H',并且设定DDRAM的地址计数器(AC)到'00H' |
地址 归位 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | X | 设定DDRAM的地址计数器(AC)到'00H',并且将游标移到开头原点位置;这个指令不改变DDRAM 的内容 |
显示状态开/关 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | D=1: 整体显示 ON C=1: 游标ON B=1:游标位置反白允许 |
进入点 设定 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | 指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位 |
游标或显示移位控制 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | X | X | 设定游标的移动与显示的移位控制位;这个指令不改变DDRAM 的内容 |
功能 设定 | 0 | 0 | 0 | 0 | 1 | DL | X | RE | X | X | DL=0/1:4/8位数据 RE=1: 扩充指令操作 RE=0: 基本指令操作 |
设定CGRAM 地址 | 0 | 0 | 0 | 1 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 设定CGRAM 地址 |
设定DDRAM 地址 | 0 | 0 | 1 | 0 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 设定DDRAM 地址(显示位址) 第一行:80H-87H 第二行:90H-97H |
读取忙标志和地址 | 0 | 1 | BF | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值 |
写数据到RAM | 1 | 0 | 数据 | 将数据D7——D0写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM) | |||||||
读出RAM的值 | 1 | 1 | 数据 | 从内部RAM读取数据D7——D0 (DDRAM/CGRAM/IRAM/GRAM) |
指令表2:(RE=1:扩充指令)
指 | 指 令 码 | 功 能 | |||||||||
令 | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
待命 模式 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 进入待命模式,执行其他指令都棵终止 待命模式 |
卷动地址开关开启 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | SR | SR=1:允许输入垂直卷动地址 SR=0:允许输入IRAM和CGRAM地址 |
反白 选择 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | R1 | R0 | 选择2行中的任一行作反白显示,并可决定反白与否。初始值R1R0=00,第一次设定为反白显示,再次设定变回正常 |
睡眠 模式 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | SL | X | X | SL=0:进入睡眠模式 SL=1:脱离睡眠模式 |
扩充 功能 设定 | 0 | 0 | 0 | 0 | 1 | CL | X | RE | G | 0 | CL=0/1:4/8位数据 RE=1: 扩充指令操作 RE=0: 基本指令操作 G=1/0:绘图开关 |
设定绘图RAM 地址 | 0 | 0 | 1 | 0 AC6 | 0 AC5 | 0 AC4 | AC3 AC3 | AC2 AC2 | AC1 AC1 | AC0 AC0 | 设定绘图RAM 先设定垂直(列)地址AC6AC5…AC0 再设定水平(行)地址AC3AC2AC1AC0 将以上16位地址连续写入即可 |
备注:当IC1在接受指令前,微处理器必须先确认其内部处于非忙碌状态,即读取BF标志时,BF需为零,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延长一段较长的时间,即是等待前一个指令确实执行完成。
2、字符显示
带中文字库的128X64-0402B每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。带中文字库的128X64-0402B内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。三种不同字符/字型的选择编码范围为:0000~0006H(其代码分别是0000、0002、0004、0006共4个)显示自定义字型,02H~7FH显示半宽ASCII码字符,A1A0H~F7FFH显示8192种GB2312中文字库字形。字符显示RAM在液晶模块中的地址80H~9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如下表所示。
80H | 81H | 82H | 83H | 84H | 85H | 86H | 87H |
90H | 91H | 92H | 93H | 94H | 95H | 96H | 97H |
88H | 89H | 8AH | 8BH | 8CH | 8DH | 8EH | 8FH |
98H | 99H | 9AH | 9BH | 9CH | 9DH | 9EH | 9FH |
在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。
那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:
图1 “A”字模图
而中文的“你”在字模中的记载却如图2所示:
图2 “你”字模图
根据芯片的不同取模的方式不同,有多种取模方式:单色点阵液晶字模,横向取模,字节正序,单色点阵液晶字模,横向取模,字节倒序,单色点阵液晶字模,纵向取模,字节正序,单色点阵液晶字模,纵向取模,字节倒序等等。
2.2图形显示先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址)
垂直地址范围 AC5...AC0
水平地址范围 AC3…AC0
绘图RAM 的地址计数器(AC)只会对水平地址(X 轴)自动加一,当水平地址=0FH 时会重新设为00H
但并不会对垂直地址做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定。GDRAM的坐标地址与资料排列顺序如下图:
2.3应用说明用带中文字库的128X64显示模块时应注意以下几点:
①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。
②显示ASCII字符过程与显示中文字符过程相同。不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。
③当字符编码为2字节时,应先写入高位字节,再写入低位字节。
④模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指令。如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。指令执行的时间请参考指令表中的指令执行时间说明。
⑤“RE”为基本指令集与扩充指令集的选择控制位。当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,无需每次均重设“RE”位。
2.4指令描述 1、显示开/关设置 CODE:
功能:设置屏幕显示开/关。 DB0=H,开显示;DB0=L,关显示。不影响显示RAM(DD RAM)中的内容。 2、设置显示起始行 CODE:
功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。 3、设置页地址 CODE:
功能:执行本指令后,下面的读写操作将在指定页内,直到重新设置。页地址就是DD RAM 的行地址,页地址存储在X地址计数器中,A2-A0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号(RST)可把页地址计数器内容清零。 DD RAM地址映像表 Y 地址
4、设置列地址 CODE:
功能: DD RAM 的列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DD RAM进行读写操作后,Y地址自动加一。 5、状态检测 CODE:
功能:读忙信号标志位(BF)、复位标志位(RST)以及显示状态位(ON/OFF)。 BF=H:内部正在执行操作; BF=L:空闲状态。 RST=H:正处于复位初始化状态; RST=L:正常状态。 ON/OFF=H:表示显示关闭; ON/OFF=L:表示显示开。 6、写显示数据 CODE:
功能:写数据到DD RAM,DD RAM是存储图形显示数据的,写指令执行后Y地址计数器自动加1。D7-D0位数据为1表示显示,数据为0表示不显示。写数据到DD RAM前,要先执行“设置页地址”及“设置列地址”命令。 7、读显示数据 CODE:
功能:从DD RAM读数据,读指令执行后Y地址计数器自动加1。从DD RAM读数据前要先执行“设置页地址” 及“设置列地址”命令。 8、屏幕显示与DD RAM地址映射关系 [td]
|
在Protues软件中选择所需元件,搭建的电路图如图1所示。
图1 仿真硬件原理图
将编写的代码烧写到单片机里,运行液晶显示不正常,如图2所示。
图2 运行图
开始我还以为是程序问题,把程序看了又看,改了又改,显示结果还是一样。后来问了下张勇生,出现这种情况的原因是P0口没接上拉电阻。因为P0口是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的。接上拉电阻后,重新运行这下运行正常了,如图3所示。
图3正常显示
由于本人开发实验板不同,对其修改如下:(详细代码请下载附件)
整个部件连接图,包括51最小系统,复位电路,还有无字库12864实际应用连接图,用标签连接的好处是(可观性),还有如需修改,改仿真图标签及keil 自定义标号即可
代码一座修改如下所示:(详细代码请下载附件)
3.2图形显示
我选了一张128x64的图片在字模软件中生产相应的C代码,将C代码写入到程序中。
由于液晶由两个控制芯片来控制,所以有片选信号端口CS1和CS2。我在字体显示程序中把改了显示那一块的代码,主程序中改了片选信号。开始同时将左右屏都开了,显示事,左右屏同时显示一样的图形,并且显示的图形不完整。主程序中显示部分的程序不对,我想了后,将主程序中程序改了一下,先开左屏调用左屏显示函数,在关左屏开右屏调用右屏显示函数。最后显示成功。如图4所示。
图4 图形显示
代码如下所示:
3.3同时显示多个汉字用字模软件取模后通过改写软件,仿真图形如图5所示。
图5 显示多个汉字的仿真图
代码如下所示:(详细代码请下载附件)
3.4向上滚动显示
仿真图形如图6所示。
(a)第一次全部显示 (b)开始滚动显示
(c) (d)
程序如下所示:
(详细代码请下载附件)刚开始学液晶时感觉好难,字模就困扰了我好多天。通过看资料查资料,以及看程序搞懂了,通过写程序仿真,对液晶的控制更明白,主要写的是并行数据传输的代码。写了一个汉字的显示,多个汉字显示程序,图形显示的程序,还有汉字动态显示。由于取字模软件运行有点问题,左上角上自动多出一撇,所以显示字或图形的左上角多出一撇。后面写一个汉字一个汉字显示程序并仿真,还有波形显示程序和仿真。
联系客服