资源描述
JH-A56256L VRAM液晶显示控制板技术手册
JH-A56256L可控制5寸,5.6寸/7寸模拟彩色TFT模拟液晶显示屏。工作电压为5V,电流为150mA(仅就本控制板而言,不包含屏和背光的电流).本控制板采用I/O连接方式,可显示256色(256 color);为提高读写速度(access speed)、简化程序,显示屏中每个点影射显示缓存中的一个字节,显示屏中的行列号与缓存器的行列号一一对应,用户只需把数据连续写进SRAM中即可,对用户来讲,直接输入的是LCD上的点的坐标.详细的程序编写请参考DEMO程序。由于显示缓存采用SRAM,显示容量大,对于320(480)×234点阵彩色LCD,可储存1页显示内容。
适配CPU:51,96,X86,8088,Z80,DSP,ARM.
本控制板的响应速度很快。能达到100ns的写时间.在使用过程中,如果有需要的话,本公司可以提供以下常用软件给客户使用:
1 字库提取软件
2 BMP图象转换软件
3 串口调试软件
4 针对本控制板的程序范例(画点,线,圆,彩条,光标,读取VRAM中的数据等等)
5 有偿提供不规则封闭图象的填充程序,任意曲线的绘制程序(这些程序对饼状图,GPS地图,示波器,生物或物理信号的波形显示很有用的哦,可以节省你的不少时间,当然,这个程序需要好点的CPU才行的。用8位的单片机的话,就是老蜗牛了).
一、接口定义:
1、CPU侧接口(双排压线)
引脚
符号
功能
备注
1
NC
2
GND
液晶屏逻辑地
0V
3
VCC
液晶屏逻辑电源
5V
4
RD
读操作信号,低电平有效
IN 3.3V
5
WR
写操作信号,低电平有效
IN 3.3V
6
CS
片选信号,低电平对屏操作有效
IN 3.3V
7
RS
1---对数据通道操作,0---写命令寄存器
IN 3.3V
8
DATA0
数据总线
INOUT 3.3V
9
DATA1
数据总线
INOUT 3.3V
10
DATA2
数据总线
INOUT 3.3V
11
DATA3
数据总线
INOUT 3.3V
12
DATA4
数据总线
INOUT 3.3V
13
DATA5
数据总线
INOUT 3.3V
14
DATA6
数据总线
INOUT 3.3V
15
DATA7
数据总线
INOUT 3.3V
16
NC
保留
本控制板有如下性能:
1、 本控制板可工作于8位数据总线模式
2、 用户的CPU不需要计算行列与SRAM地址的对应关系,直接输入坐标地址即可。
3、 本控制板的写周期可做到100ns,无需任何等待。请详细参考时序图
4、 连续读或写入时,地址自动加1,遇到行末自动跳到下一行。本控制板可以设定是行方向地址自动增加还是列方向地址自动增加。
2 TTL接口控制板尺寸
16 pin双排座的PIN间距为2.54mm
3 CS与RS,WR,RD,DATA组合功能如下:
CS
RS
DATA[7:0]
WR
RD
功能
0
0
0x00
0
1
保留
0
1
00xXX
0
1
保留
0
0
0x01
0
1
保留
0
1
00xXX
0
1
保留
0
0
0x02
0
1
保留
0
1
X
0
1
保留
0
0
0x03
0
1
地址指向行地址寄存器
0
1
X
0
1
写入行地址的
0
0
0x04
0
1
地址指向列地址的高位寄存器
0
1
0xXX
0
1
写入列地址的高2位
0
0
0x05
0
1
地址指向列地址低8位寄存器
0
1
0xXX
0
0
写入列地址的低8位
0
0
0x1f
0
1
地址指向数据通道
0
1
X
0
1
向控制板写入数据
0
1
X
1
0
从控制板读出显示数据
0
0
0x10
0
1
地址指向地址增加方向的寄存器
0
1
0xXX
0
1
0x00---行方向地址自动增加
0x01---列方向地址自动增加
0
0
0x11
0
1
地址指向背光控制寄存器(暂时保留)
0
1
0xXX
0
1
0x00---背光关
0x01---背光开
0
0
0x12
0
1
选择LCD显示的页面(暂时保留)
0
1
0xXX
0
1
0 1,2,3可选4页(暂时保留)
0
0
0x13
0
1
选择CPU操作的页面页面(暂时保留)
0
1
0xXX
0
1
0 1,2,3可选4页(暂时保留)
0
0
0x14
0
1
选择LCD的工作版本
0
1
0xXX
0
1
00选择早期版本,0x01选择最新版本(内部默认是早期版本) 注1
1
×
×
×
不选通
说明:在读写显示数据时,要保证指令寄存器的值设为0x1f,选择数据通道,不能被修改为其他值,否则,会读写不正常。因为本方案针对的模拟屏的行数是234行,小于256,所以,行地址只需要一个字节。
注1: 在实际使用中,有的客户发现,有的LCD在使用时,会发现顶部或底部有一行扫描不到的情况。比如,群创的TN01,TN02能正常使用,而TN03的底部会发现有一行扫描不到,这时候只需把寄存器14设为0X01就可以了。SetReg(0x14,0x01); 详细情况请参考程序范例。
256色的设置方法:
D7 D6 D5 D4 D3 D2 D1 D0
256色
R2
R1
R0
G2
G1
G0
B1
B0
256色
颜色灰度
R2、R1、R0
G2、G1、G0
B1、B0
基
本
颜
色
最黑
000
000
00
亮蓝
000
000
11
亮绿
000
111
00
亮青
000
111
11
亮红
111
000
00
亮紫
111
000
11
亮黄
111
111
00
亮白
111
111
11
蓝
色
灰
度
最黑
000
000
00
较暗
000
000
01
较亮
000
000
10
最亮
000
000
11
绿
色
灰
度
最黑
000
000
00
较暗
000
001
00
…
…
…
…
较亮
000
110
00
最亮
000
111
00
红
色
灰
度
最黑
000
000
00
较暗
001
000
00
…
…
…
…
较亮
110
000
00
最亮
111
000
00
1 写行地址位的时序
2写列地址位的时序
3 写显示数据进显存中的时序
4 从显存中读出显示数据的时序
注意:读操作时,低电平要保证有150ns以上的空间,CPU才能在RD上升沿时得到正确的数据,否则,CPU在RD信号的上升沿采集到的数据是不正确的。
四、简单的单片机接口应用框图
8051控制方式
16×16点阵汉字字符输入程序(51):
汉字左上角为汉字在显示屏中坐标,汉字字模有两种方式,如下表,以下演示程序是以第二种字模编写的。
(1)
左半字模 右半字模
第1字节
第2字节
第3字节
第4字节
…
…
第31字节
第32字节
(2)
左半字模 右半字模
第1字节
第17字节
第2字节
第18字节
…
…
第16字节
第32字节
根据客户的取字模式来把字符中的点阵信息显示出来。显示的时候,要用前景色去修改点阵数据中为1的BIT对应的点的显示数据。用背景色去修改点阵数据中为0的BIT的数据。
假如某个字符的第1个字节的点阵数据如下,而我们想把这个字符显示在33行,100列上(33,100)。我们把前景色设为白色(0xffh),背景色设为兰色(0x03),我们用FontData来保存字模的点阵数据.
0
0
1
0
1
1
0
0
当用户设置好工作模式寄存器1,前景色寄存器,被景色寄存器以及该字符显示位置的起始点后,就可以把这个点阵数据送给控制板了。
本手册上的51单片机的连接方式,命令地址为
FontColo 保存前景色的寄存器
BackColo 保存背景色的寄存器
WCMD 0xfc00 命令通道地址
WDAT 0xfd00 数据通道地址
WCMD=0x03; //送行的地址的前缀命令 相当于mov dptr,#CMDAddr,mov a,#00h,movx //@dptr,a,这三条汇编指令
WDAT=0x00; //送行的地址 如果是从0列开始写,
WCMD=0x04; //送列的高2位地址的前缀命令
WDAT=0x00; //送列的高2位地址,
WCMD=0x05; //地址指针指向列地址低位寄存器
WDAT=0x00; //送列地址的低8位的地址,如果从0行开始写,则这个值送0
WCMD=0x1F; //送完行列的初始地址后,要把指针指向数据通道。这步很重要!!
WDAT=0x03; //往控制板上写入一个点的显示数据---蓝色
注意: 行方向可以在送完初始地址后,可以连续地写入数据。而如果想画一条竖线,必须把地址变化方式设为列方向自动增加。
////////////////////////////////////////////////////////////////
//画点的函数----坐标和颜色
void DrawDot(unsigned int y,unsigned int x,unsigned char color)
{
DrawInitail(y,x);
WDAT=color;
}
////////////////////////////////////////////////////////////////
/画线的函数 入口参数---线的起点和终点----
// DrawLine(300,0,300,233,0xe0)
void DrawLine(unsigned int ysta,unsigned int xsta,unsigned int yend,
unsigned int xend,unsigned char color)
{ unsigned int DeltaX;
unsigned int DeltaY;
unsigned int X; //列号,列间距
unsigned int Y; //两行之间的间距
unsigned int i;
DeltaX=xend-xsta; //列间距
DeltaY=yend-ysta;//行间距
Y=ysta;
X=xsta;
DrawInitail(Y,X);
if(DeltaX==0) //这是纵向画的线,在同一列上画线
{ //纵向画线,每次都需要送一次点的坐标
SetReg(0x10,0x01);//这句很关键,要把地址变化方式设为列方向自动增加
for (i=0;i<DeltaY;i++)
{
WDAT=color;
}
SetReg(0x10,0x00);//这句很关键,要把地址变化方式设为行方向自动增加
//因为默认的情况下是行方向自动增加的。
}
else if(DeltaY==0) //这是须横向画的线,行间距为0,在同一行上画线
{
for (i=0;i<DeltaX;i++)//在列方向上跨步前进
{
WDAT=color;
}
}
// else //这是斜线
}
////////////////////////////////////////////////////////////////////
//显示一个16X16点阵汉字的程序,有32个字节,列方向两个字节,行方向有16个字节
j=0;
while(j<16)
{
DrawInitail(y+j,x);//把字符将要显示的左上角坐标设置好
FontDat=FontArr[CntFontData];//得到8个点的显示信息
//字符被放在一个数组里面
for(i=0;i<8;i++) //处理字模的左半部分
{
c=(bit)(FontDat&0x80);
FontDat=FontDat<<1;
if (c==0)
WDAT=BackColor;
else
WDAT=FontColor;
}
CntFontData=CntFontData+1;
FontDat=FontArr[CntFontData];
for(i=0;i<8;i++) //处理字模的右半部分
{
c=(bit)(FontDat&0x80);
FontDat=FontDat<<1;
if (c==0)
WDAT=BackColor;
else
WDAT=FontColor;
}
CntFontData=CntFontData+1;
j++; //j 是行的计数器
}
展开阅读全文