4 软件体系规划及完成
4. 1 操作YD2502 的程序规划
YD2502 的指令码格局如下:
其间: CA1 ,CA0 组合功用为内部寄存器通道的挑选,功用如下:
DISP :显现操控位。
当DISP 设置为“1”时,液晶显现模块为开显现状况。
当DISP 设置为“0”时,液晶显现模块为关显现状况。
X:表明未用位,可设为“0”。
ATmega128 拜访外部存储器的软件规划过程是:先用extern 声明一个外部变量,再用map2ping_init 函数(外部存储地址分配函数) 分配给此变量一个外部存储地址(因A Tmega128 内部有4 kB 的SRAM 所以外部存储地址规模为1000H~0FFFFH) ,那么对该变量的操作就完成了CPU 对相应地址的外部存储空间的拜访。
依据此过程,对YD2502 写指令和写数据的详细函数如下:
extern unsigned char LCD_DA TA ;
void mapping_init (void) {
asm(“。 area memory (abs) n”
“。 org 0x4000n ” / / 分配给LCD_DA TA 的地址为4000H
“ _LCD_DA TA : : . blkb 1\ n”/ / 存储空间为1
“。 text/ n”) ;}
写指令函数如下:
void LCD_writeinstr (unsigned char data) {
PORTD = 0xFC ; / / 置/ CS 为低电平,而且置RS 为低电平,处于写指令状况
LCD_DA TA = data ; / / 送数据
PORTD | = 0x03 ;} / / 置/ CS 和RS为高电平
写数据函数如下:
void LCD_writedata (unsigned char data) {
PORTD = 0xFE ; / / 置/ CS 为低,而且置RS 为高电平,处于写数据状况
LCD_DA TA = data ; / / 送数据
PORTD | = 0x01 ;} / / 置/ CS 为高电平除了上面两个根本的函数外,对YD2502 最根本的操作是往VRAM 里写数据,依据上面给出的指令码,详细函数如下:
# define HREG 0x09 / / 显现地址高8 位寄存器指令
# define L REG 0x08 / / 显现地址低8 位寄存器指令
# define DA TARW 0x0A / / 显现数据读写通道指令
void LCD_filldata ( unsigned int address ,
unsigned char data) {
unsigned char addrh ,addrl ;
addrh = (char) (address > > 8) ; / / 取内存地址的高8 位数据
addrl = (char) (address 0xFF) ; / / 取内存地址的低8 位数据
LCD_writeinst r ( HREG) ; / / 送显现地址高8 位寄存器指令
LCD_writedata (addrh) ; / / 送内存地址的高8 位数据
LCD_writeinst r (L REG) ; / / 送显现地址低8 位寄存器指令
LCD_writedata (addrl) ; / / 送内存地址的低8 位数据
LCD_writeinst r (DA TARW) ; / / 送显现数据读写通道指令
LCD_writedata (data) ;} / / 送数据
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 +[ IN T( X/ 8) ] ×3
当Y > 0 时 SRAM = ( Y – 1) ×100H +[ IN T( 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