AMPIRE128X64显示器中文手册及示例代码范本模板.docx
《AMPIRE128X64显示器中文手册及示例代码范本模板.docx》由会员分享,可在线阅读,更多相关《AMPIRE128X64显示器中文手册及示例代码范本模板.docx(25页珍藏版)》请在冰豆网上搜索。
AMPIRE128X64显示器中文手册及示例代码范本模板
AMPIRE128X64显示器
1。
LCD接口
液晶显示器件【3】(LCD)独具的低压、微功耗特性使他在单片机系统中特得到了广泛的应用,常用的液晶显示模块分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块,其中图形液晶模块在我国应用较为广泛,因为汉字不能像西文字符那样用字符模块即可显示,要想显示汉字必须用图形模块。
本课设所选择的LCD是AMPIRE128×64的汉字图形型液晶显示模块,可显示汉字及图形,图形液晶显示显示器接口如图3-1所示。
图3—1LCD电路图
表3。
1AMPIRE128×64接口说明表
管脚号
管脚
电平
说明
1
CS1
H/L
片选择信号,低电平时选择前64列
2
CS2
H/L
片选择信号,低电平时选择后64列
3
GND
0V
逻辑电源地
4
VCC
5.0V
逻辑电源正
5
V0
LCD驱动电压,应用时在VEE与V0之间加一2K可调电阻
6
RS
H/L
数据\指令选择:
高电平:
数据D0—D7将送入显示RAM;
低电平:
数据D0—D7将送入指令寄存器执行
7
R/W
H/L
读\写选择:
高电平:
读数据;低电平:
写数据
8
E
H/L
读写使能,高电平有效,下降沿锁定数据
9
DB0
H/L
数据输入输出引脚
10
DB1
H/L
数据输入输出引脚
11
DB2
H/L
数据输入输出引脚
12
DB3
H/L
数据输入输出引脚
13
DB4
H/L
数据输入输出引脚
14
DB5
H/L
数据输入输出引脚
15
DB6
H/L
数据输入输出引脚
16
DB7
H/L
数据输入输出引脚
17
RST
L
复位信号,低电平有效
18
VOUT
-10V
LCD驱动电源
2。
指令描述
(1)显示开/关设置
L
L
L
L
H
H
H
H
H
H/L
CODE:
R/WRSDB7DB6DB5DB4DB3DB2DB1DB0
功能:
设置屏幕显示开/关。
DB0=H,开显示;DB0=L,关显示。
不影响显示RAM(DDRAM)中的内容。
(2)设置显示起始行
CODE:
R/WRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
H
H
行地址(0~63)
功能:
执行该命令后,所设置的行将显示在屏幕的第一行。
显示起始行是由Z地址计数器控制的,该命令自动将A0—A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。
Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。
(3)设置页地址
CODE:
R/WRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
H
L
H
H
H
页地址(0~7)
功能:
执行本指令后,下面的读写操作将在指定页内,直到重新设置.地址就是DDRAM的行地址,页地址存储在X地址计数器中,A2-A0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号(RST)可把页地址计数器内容清零。
DDRAM地址映像表如表3.2所示.
表3。
2RAM地址映像表
Y地址
0
1
2
………
61
62
63
DB0
∫PAGE0
DB7
X=0
DB0
∫PAGE1
DB7
X=1
………………
……
DB0
∫PAGE6
DB7
X=6
DB0
∫PAGE7
DB7
X=7
(4)设置列地址
CODE:
R/WRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
H
列地址(0~63)
功能:
DDRAM的列地址存储在Y地址计数器中,读写数据对列地址有影响在对DDRAM进行读写操作后,Y地址自动加一。
(5)状态检测
CODE:
R/WRSDB7DB6DB5DB4DB3DB2DB1DB0
H
L
BF
L
ON/OFF
RST
L
L
L
L
功能:
读忙信号标志位(BF)、复位标志位(RST)以及显示状态位(ON/OFF)。
BF=H:
内部正在执行操作;BF=L:
空闲状态。
RST=H:
正处于复位初始化状态;RST=L:
正常状态。
ON/OFF=H:
表示显示关闭;ON/OFF=L:
表示显示开。
(6)写显示数据
CODE:
R/WRSDB7DB6DB5DB4DB3DB2DB1DB0
L
H
D7
D6
D5
D4
D3
D2
D1
D0
功能:
写数据到DDRAM,DDRAM是存储图形显示数据的,写指令执行后Y地址计数器自动加1。
D7—D0位数据为1表示显示,数据为0表示不显示.写数据到DDRAM前,要先执行“设置页地址"及“设置列地址"命令。
(7)读显示数据
CODE:
R/WRSDB7DB6DB5DB4DB3DB2DB1DB0
H
H
D7
D6
D5
D4
D3
D2
D1
D0
基本操作时序:
①读状态:
输入:
RS=L,R/W=H,CS1或CS2=H,E=H
输出:
D0~D7=状态字
②写指令:
输入:
RS=L,R/W=L,D0~D7=指令码,CS1或CS2=H,E=高脉冲
输出:
无
③读数据:
输入:
RS=H,R/W=H,CS1或CS2=H,E=H
输出:
D0~D7=数据
④写数据:
输入:
RS=H,R/W=L,D0~D7=数据,CS1或CS2=H,E=高脉冲
输出:
无
由RAM地址映射表可知LCD显示屏由两片控制器控制,分别用CS1和CS2控制.每个内部带有64X64位(512字节)的RAM缓冲区,对应关系如图3—2所示。
图3-2LCD地址映射图
整个屏幕分左、右两个屏,每个半屏右8页,每页有8行,注意数据是竖行排列,如表3。
2.显示一个字要16*16点,全屏有128*64个点,故可显示32个中文汉字。
每两页显示一行汉字,可显示4行汉字,每行8个汉字,共32个汉字。
而显示数据需要16*8个点,可显示数据是汉字的两陪.
屏幕是通过CS1、CS2两信号来控制的,不同的组合方式所选的屏幕是不同的,对应关系如表3.3所示。
表3。
3屏幕选择表
CS1
CS2
选屏
0
0
全屏
0
1
左屏
1
0
右屏
1
1
不选
(8)操作
设定开始页地址和列地址;
设定读写模式,进行读写操作。
只有理解了液晶显示器各个指令【4】的功能,再结合单片机的指令系统,就能编写C语言程序来达到混合显示汉字与数字的目的.通过程序将字的代码写入相应的DDRAM地址,就可以再相应的位置显示相应的字.
3。
汉字字模提取
液晶显示器件(LCD)独具的低压、微功耗特性使他在单片机系统中特得到了广泛的应用,常用的液晶显示模块分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块,其中图形液晶模块在我国应用较为广泛,因为汉字不能象西文字符那样用字符模块即可显示,要想显示汉字必须用图形模块。
液晶模块显示汉字方法:
使用图形液晶模块以点阵形式来显示汉字和图形,每8个点组成1个字节,每个点用一个二进制位表示,存1的点显示时在屏上显示一个亮点,存0的点则在屏上不显示,最常用的16×16的汉字点阵由32个字节组成。
以在我国应用较为普及的液晶显示驱动控制器12864为例,在液晶屏上竖向8个点为1个字节数据,通过字模提取软件按照先左后右,先上后下的方式对汉字进行字模提取。
图3-3字提取方格
由于D0—D7是从上到下排列的,最上面8行是上一页,我们先提取上面一页的数据16个,在按照相同的方法提取下一页的数据16个,在分别写入对应的DDRAM地址,就可以显示我们所需要的字。
简单的字可手工制作,也可以用起模软件zimo221【5】提取标准的宋体汉字,不过本文所用的液晶显示屏用这款软件要设计纵向取模并且要反字节,否则将显示乱码.数字只需起汉字的一半数据就可以了,如图3-3所示的左边8列或者右边8列。
1)AMPIRE12864液晶显示器主要硬件构成
AMPIRE12864液晶显示器主要包括以下几个硬件模块:
①显示数据RAM(DDRAM)
DDRAM(64×8×8bits)是存储图形显示数据的。
此RAM的每一位数据对应显示面板上一个点的显示(数据为H)与不显示(数据为L).DDRAM的地址与显示位置关系对照如表2-8所示。
表2—8DDRAM的地址与显示位置关系对照图
CS2=1
CS1=1
Y=
0
1
……
63
0
1
……
63
行号
X=0
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
0
7
……
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
8
56
X=7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
57
63
②I/O缓冲器(DB0~DB7)
I/O缓冲器为双向三态数据缓冲器。
是LCM(液晶显示模块)内部总线与MPU总线的结合部。
其作用是将两个不同时钟下工作的系统连接起来,实现通讯。
I/O缓冲器在片选信号/CS有效状态下,I/O缓冲器开放,实现LCM(液晶显示模块)与MPU之间的数据传递。
当片选信号为无效状态时,I/O缓冲器将中断LCM(液晶显示模块)内部总线与MPU数据总线的联系,对外总线呈高阻状态,从而不影响MPU的其它数据操作功能.
③输入寄存器
输入寄存器用于接收在MPU运行速度下传送给LCM(液晶显示模块)的数据并将其锁存在输入寄存器内,其输出将在LCM(液晶显示模块)内部工作时钟的运作下将数据写入指令寄存器或显示存储器内。
④输出寄存器
输出寄存器用于暂存从显示存储器读出的数据,在MPU读操作时,输出寄存器将当前锁存的数据通过I/O缓冲器送入MPU数据总线上。
⑤指令寄存器
指令寄存器用于接收MPU发来的指令代码,通过译码将指令代码置入相关的寄存器或触发器内。
⑥状态字寄存器
状态字寄存器是LCM(液晶显示模块)与MPU通讯时唯一的“握手”信号。
状态字寄存器向MPU表示了LCM(液晶显示模块)当前的工作状态。
尤其是状态字中的“忙”标志位是MPU在每次对LCM(液晶显示模块)访问时必须要读出判别的状态位。
当处于“忙”标志位时,I/O缓冲器被封锁,此时MPU对LCM(液晶显示模块)的任何操作(除读状态字操作外)都将是无效的。
⑦X地址寄存器
X地址寄存器是一个三位页地址寄存器,其输出控制着DDRAM中8个页面的选择,也是控制着数据传输通道的八选一选择器。
X地址寄存器可以由MPU以指令形式设置。
X地址寄存器没有自动修改功能,所以要想转换页面需要重新设置X地址寄存器的内容。
⑧Y地址计数器
Y地址计数器是一个6位循环加一计数器。
它管理某一页面上的64个单元。
Y地址计数器可以由MPU以指令形式设置,它和页地址指针结合唯一选通显示存储器的一个单元,Y地址计数器具有自动加一功能。
在显示存储器读/写操作后Y地址计数将自动加一。
当计数器加至3FH后循环归零再继续加一。
2)AMPIRE12864液晶显示器控制接口信号说明
AMPIRE12864液晶显示器共有5个控制引脚,对应5个控制信号.它们分别是寄存器选择信号RS,读写控制信号R/W,使能信号E,左屏片选信号CS1,右屏片选信号CS2。
下面通过几个表格来详细说明这些控制信号的作用。
RS,R/W的配合选择决定读写方式的4种模式,如表2—9.
表2—9RS,R/W的配合选择决定读写方式的4种模式
RS信号
R/W信号
功能说明
L
L
MPU写指令到指令暂存器(IR)
L
H
读出忙标志(BF)及地址记数器(AC)的状态
H
L
MPU写入数据到数据暂存器(DR)
H
H
MPU从数据暂存器(DR)中读出数据
使能信号E控制方式见表2—10。
表2—10使能信号E控制方式
E状态
执行动作
功能
高——>低
I/O缓冲——〉DDRAM
配合R/W写数据或指令
高
DDRAM-—>I/O缓冲
配合RS进行读数据或指令
低--〉高
无动作
3)AMPIRE12864液晶显示器指令说明
AMPIRE12864液晶显示器的寄存器选择信号RS,读写控制信号R/W与8位三态数据口输入输出的控制代码的不同组合就组成了不同的控制指令,这些指令控制液晶显示器完成各种操作。
下面就用一个表格对这些指令做出详细的说明,如表2-11所示.
表2—11AMPIRE12864液晶显示器指令说明
指令
指令码
功能
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:
基本指令操作
设定DDRAM列地址
0
0
1
0
AC5
AC4
AC3
AC2
AC1
AC0
设定DDRAM列地址(Y地址)
第一行:
80H-87H
第二行:
90H-97H
设定DDRAM行地址
0
0
0
1
1
1
1
P2
P1
P0
设定DDRAM页面地址(X地址)
读取忙标志和地址
0
1
BF
AC6
AC5
AC4
AC3
AC2
AC1
AC0
读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值
写数据到RAM
1
0
数据
将数据D7——D0写入到内部的RAM
读出RAM值
1
1
数据
从内部RAM读取数据D7—-D0
二、驱动程序源码分析
接口定义:
ucharxdataDB_at_0x3fff;//定义地址为3fffh的扩展口为AMPIRE12864的三态数据输入口,当然可根据自己具体情况定义;
ucharxdataCS_at_0x5fff;//定义地址5fffh的扩展口为AMPIRE12864的左右屏选择控制信号输入口;
ucharxdataRSRWE_at_0x7fff;//定义地址为7fffh的扩展口为AMPIRE12864的寄存器选择信号,读/写操作选择信号和使能信号的输入口。
1)检测忙信号标志BF
BF标志提供内部工作情况.BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据。
BF=0时模块为准备状态,随时可接受外部指令和数据。
利用表2—11中的“读取忙标志和地址”指令,可以将BF读到DB7总线,从而检验模块之工作状态。
检测忙信号标志BF驱动函数代码如下:
voidCheck_busy()
{
uchara;
RW=1;
RS=0;
E=1;//读出忙标志(BF)准备
while
(1)
{
E=0;//读出忙标志(BF)就绪
if(!
(P0&0x80))//读取忙信号
break;//不忙跳出
E=1;
a++;
if(a>10)//防止死循环
break;
}
//E=1;//读出忙标志(BF)准备
}
2)写控制命令
在AMPIRE12864的初始化,DDRAM列地址的设定和行地址的设定都是由写控制命令来完成的。
当R/W=0,RS=0时在使能信号的配合下就可以把控制命令写入到指令暂存器(IR)。
写时序图如图3—5示。
图3-5AMPIRE12864写时序图
写控制命令驱动函数代码如下:
voidWrite_inst(ucharinst)
{
Check_busy();
RS=0;
RW=0;
E=1;
P0=inst;
E=0;
_nop_();
}
3)写数据
当寄存器控选择控制信号RS=0写指令寄存器(IR)即为写控制命令,RS=1时写数据寄存器即为写数据。
写数据驱动函数代码如下:
voidWrite_data(uchardat)
{
Check_busy();
RS=1;
RW=0;
E=1;
P0=dat;
E=0;
_nop_();
}
1)设定显示字符行列地址
在AMPIRE12864上显示一个字符是必须先设定其行列地址,设定行列地址的操作指令见表2—11。
设定显示字符行列地址驱动函数代码如下:
voidset_xy(ucharx,uchary)//x为行,y为列
{
if(y>=64)//列地址大于等于64时右屏显示
{
CS=1;
y=y—64;
}
else//列地址小于64时左屏显示
{
CS=2;
}
write_cm(0x40|y);写列地址
_nop_();
write_cm(0xb8|x);写行地址
}
2)AMPIRE12864的初始化
在对AMPIRE12864操作前须初始化,对其做一些必要的设置。
这些设置包括:
基本指令操作设置;开显示,关光标,不闪烁;清除显示;光标的移动方向,DDRAM的地址计数器加1。
设置的操作指令详见表2-11。
AMPIRE12864初始化驱动函数代码如下:
voidLCD_Init()
{
write_cm(0x30);//30H-—基本指令操作
delayus(4);
write_cm(0x0c);//开显示,关光标,不闪烁。
delayus(10);
write_cm(0x01);//清除显示
delayms(10);
write_cm(0x06);//光标的移动方向左,DDRAM的地址计数器(AC)加1。
delayus(10);
}
3)AMPIRE12864显示功能模块
AMPIRE12864显示功能通过函数voiddisp(ucharindex[4][16])实现。
入口参数ucharindex[4][16]为字库索引数组,给出在指定位置显示的字符的图形点阵在ucharcodezk[][16]中的索引地址,本系统中所有字符的图形点阵都由字模提取软件提取并存储在图形点阵数组ucharcodezk[][16]中。
在voiddisp(ucharindex[4][16])调用了两个函数:
voidDisp_hz(ucharR,ucharL,uchar*p)用来显示汉字,其程序代码如下:
voidDisp_hz(ucharR,ucharL,uchar*p)
{
uchari;
for(i=0;i〈16;i++)
{
set_xy(2*R,16*L+i);//设定显示位置
write_data(p[i]);//写入DDRAM
set_xy(2*R+1,16*L+i);
write_data(p[i+16]);
}
}
入口参数ucharR,ucharL分别指明字符或汉字的显示位置的行号和列号,uchar*p为图形点阵数组的首地址指针。
voidDisp_zf(ucharR,ucharL,uchar*p)用来显示ASCII字符,其程序代码如下:
voidDisp_zf(ucharR,ucharL,uchar*p)
{
uchari;
for(i=0;i<8;i++)
{
set_xy(2*R,8*L+i);
write_data(p[i]);
set_xy(2*R+1,8*L+i);
write_data(p[i+8]);
}
}
入口参数ucharR,ucharL分别指明字符或汉字的显示位置的行号和列号,uchar*p为图形点阵数组的首地址指针。
AMPIRE12864显示功能模块程序代码如下:
voiddisp(ucharindex[4][16])
{
uchari,j;
for(i=0;i〈4;i++)
for(j=0;j〈16;j++)
if(index[i][j]>14)
{
Disp_hz(i,j/2,&zk[index[i][j]][0]);//显示汉字
j++;
}
else
Disp_zf(i,j,&zk[index[i][j]][0]);//显示ASCII字符
}
显示以一整屏为单位,在显示之前应先给index[4][16]赋值以确定液晶显示器的显示内容。
如给index[4][16]以下赋值:
index[0][2]=131;index[0][4]=133;
index[0][6]=135;index[0][8]=137;
index[0][10]=139;index[0][12]=139;