微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于AVR单片机的VRAM型彩色液晶显示模块设计

基于AVR单片机的VRAM型彩色液晶显示模块设计

时间:04-09 来源:互联网 点击:

存储地址范围为1000H~0FFFFH),那么对该变量的操作就实现了CPU对相应地址的外部存储空间的访问。

根据此步骤,对YD2502写指令和写数据的具体函数如下:

写指令函数如下:

写数据函数如下:

除了上面两个基本的函数外,对YD2502最基本的操作是往VRAM 里写数据,根据上面给出的指令码,具体函数如下:

4.2 画点函数的实现

要在液晶上实现显示字符和画图等功能,在屏幕上显示一个点是实现这些功能的基础。画点函数实现的步骤是:首先确定该点对应的VRAM中的内存位置,找到该点具体对应的数据位,填充显示颜色的数据,该点就按对应的颜色显示出来了。

4.2.1 显示内存与屏幕点阵的对应关系

YD2502屏幕点阵为320×240,每一个点对应3个像素(RGB),屏幕上8个点对应内存3个字节,一行对应320/8×3=120个字节,其对应关系如下:

其中R,G,B表示红、绿、蓝三原色,D7~D0表示对应的数据位。

对于屏幕上坐标为(X,Y)的点,其对应内存地址的计算方法为:

当Y=0时  SRAM=0EFH×100H+[INT(X/8)]×3

当Y>0时  SRAM=(Y-1)×100H+[INT(X/8)]×3

通过(X/8)的余数得出具体的内存位置:

当余数为0  则 RAM=SRAM  [1110,0000]

当余数为1  则 RAM=SRAM  [0001,1100]

当余数为2  则 RAM1=SRAM  [0000,0011]

RAM2 = SRAM + 1[1000 ,0000 ]

当余数为3  则 RAM = SRAM + 1[0111 ,0000 ]

当余数为4  则 RAM = SRAM + 1[0000 ,1110 ]

当余数为5  则 RAM1 = SRAM + 1[0000 ,0001 ]

RAM2 = SRAM + 2[1100 ,0000 ]

当余数为6  则 RAM = SRAM + 2[0011 ,1000 ]

当余数为7  则 RAM = SRAM + 2[0000 ,0111 ]

其中[ ]内为“1”的位表示应该填充颜色的位置,SRAM表示该点对应的基础地址,RAM、RAM1和RAM2表示该点对应的实际内存地址。

当数据位为“1”时,对应色点为亮;为“0”时,对应色点为暗。通过RGB三原色组合而得到的8种颜色代码如下:

例1:若X 、Y坐标为(7,0)

SRAM = 0EFH ×100H + 0 = 0EF00H

余数为7 ,则 RAM = 0EF00H + 2 = 0EF02H

若此点为红色,则送入0EF02H 内存单元里的数据为[ 0EF02H] 11111000B + 00000100B

例2 :若X 、Y坐标为(15,5)

SRAM = (5 - 1) ×100H + 1 ×3 = 403H

余数为5 ,则 RAM1 = 403H + 1 = 404H

RAM2 = 403H + 2 = 405H

若此点为白色,则送入这两个单元的数据为

[ 404H] 11111110B + 00000001B

[ 405H] 00111111B + 11000000B

4.2.2 画点函数的具体实现

从例1和例2可以看出,要只显示一个色点,就必须知道该点对应的内存中的数据,而前面提到过内存中的数据是不能读出的,所以要将写入内存中的数据先保存起来,即在向YD2502的显示缓冲区里写数据之前,应先将此数据写入61LV5128 。若在坐标(X,Y)处画颜色为color的点,其具体函数如下:

以上只给出了余数是0的情况,其他的情况可依此类推。计算内存地址的LCD_pixeladdr函数可根据给出的内存地址计算方法编写,读写61LV5128的read_exram函数和write_exram函数可根据具体的硬件设计编写,这里不再给出。

4.3 显示汉字和其他功能的实现

在屏幕上显示16×16点阵汉字的基本步骤是:首先取得该汉字的32个字节的点阵数据,再确定屏幕上显示的位置,利用画点函数即可显示该汉字。因本模块使用了硬件汉字库技术,所以汉字的点阵数据是从汉字库中获取的。

在计算机汉字系统中,汉字是用机内码的形式存储的,将汉字机内码减去0A0A0H就得到该汉字的区位码,通过区位码就可以找到该汉字点阵数据在汉字库中的位置。例如:汉字“中”的机内码是十六进制的“D6D0”,其中前两位“D6”表示机内码的区码,后两位“D0”表示机内码的位码。所以“中”的区位码为0D6D0H - 0A0A0H =3630H,将区码和位码分别转换为十进制,得汉字“中”的区位码为“5448”。即“中”的点阵位于第54区的第48个字的位置,在文件HZK16中的位置为第32×[(54 - 1)×94 + (48 - 1)] = 160928D以后的32个字节为“中”的点阵数据,用SUPER2PRO25编程器读入文件HZK16后利用其编辑功能中的缓冲区编辑查找到274A0H(160928D的十六进制表示)开始的32个字节:01H,00H,01H,00H,01H,04H,7FH,FEH,41H,04H,41H,04H,41H,04H,41H,04H,7FH,FCH,41H,04H,01H,00H,01H,00H,01H,00H,01H,00H,01H,00H,01H,00H。这些数据与其点阵图形的对应关系如图4所示,图中黑色方格表示二进制位“1”,即对应该显示的点,白色方格表示二进制位“0”,即不该显示的点。因此要在液晶屏幕上显示16×16点阵的汉字,首先应找到该汉字在硬件汉字库中的位置,取出其后的32个字节数据。取这32个字节数据的函数如下:


图4 汉字“中”的点阵图形

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top