原创 学习笔记:12864并行驱动(2)

2012-3-28 20:28 2001 10 10 分类: MCU/ 嵌入式

 

(5)相关存储器驱动:

1.显示汉字中文字库(CGROM)和英文字库(HCGROM)

12864提供8列4行的汉字显示空间,CGROM存储的是GB2312编码的汉字(编码表见资料附录),每个汉字为16×16的点阵,在编写程序时无需对对照汉字的编码,直接将汉字些在字符串数组中就行了,编译器会直接将其转化成GB2312码。同样英文字符在HCGROM中的存储形式为ASCII码。

1.gif

 

一个英文字符占用一字节空间,16×8点阵,其高位为0-7,地位为0-f。

在显示汉字或英文字符时通过将字符编码写入DDRAM来实现,英文字符在DDRAM中的编码范围为02H-7FH。中文字型为A1A0H-F7FFH(先写高字节再写低字节)。

在显示字库前要先确定显示坐标,其地址范围为80H-9FH。

2.gif

 

 

/****************************************************************

函数名称:Write_String

函数功能:向12864写入字符串

入口参数:x~(0-7),y~(0-3)---设定第一个字符的坐标

*s ----需要显示的字符串

出口参数:无

备 注:

*****************************************************************/

void Write_String(uchar y,uchar x,uchar *s)

{

switch(y)

{

case 0:Write_Com(0x80+x);break;

case 1:Write_Com(0x90+x);break;

case 2:Write_Com(0x88+x);break;

case 3:Write_Com(0x98+x);break;

default:break;

}

while(*s)

{

Write_Data(*s);

s++;

}

}

 

2.显示自定义字型(CGRAM)

 

    有时候需要显示特殊字型,在字库中找不到,就可用取模软件对字型进行取模,并写入CGRAM中,但是需要注意的是CGRAM中的内容断电既消失,每次上电都需对其进行重新写入。CGRAM在DDRAM长哦你的编码地址为0000H\0002H\0004H\0006H。

 

/****************************************************************

函数名称:Set_CGRAM

函数功能:向CGRAM相应地址设置自定义字符

入口参数:CGRAM_add~(0-3)-----设置CGRAM地址B4,B5

*table-------自定义字形点阵数据数组

出口参数:无

备 注:

*****************************************************************/

void Set_CGRAM(uchar CGRAM_add,uchar code *table)

{

uchar i;

Write_Com(0x30);

Write_Com(CGRAM_add<<4|0x40);

for(i=0;i<16;i++)

{

Write_Data(table[2*i]);   //先写高字节,再写低字节

Write_Data(table[2*i+1]);

}

}

 

 

   点阵数据为16*16横向取模,CGRAM只能存四个自定义字形。CGRAM地址共有6位,高两位为字符地址,后四位为行地址,程序指定B4,B5字形唯一地址,行地址B0-B3可从0自动增加到f,故CGRAM可存4个16*16自定义字形,在DDRAM中的地址分别为0000H,0002H,0004H,0006H

 

3.gif

 

 

 

/****************************************************************

函数名称:Display_CGRAM

函数功能:显示CGRAM中的16×16字符

入口参数:y~(0-3),x~(0-7)------定义显示坐标

DDRAM_add-------16*16自定义字符在DDRAM中的地址,

两字节共有四个分别为0000H\0002H\0004H\00006H

出口参数:无

备 注:先写高字节,再写低字节

*****************************************************************/

void Display_CGRAM(uchar y,uchar x,uint DDRAM_add)

{

switch(y)

{

case 0:Write_Com(0x80+x);break;

case 1:Write_Com(0x90+x);break;

case 2:Write_Com(0x88+x);break;

case 3:Write_Com(0x98+x);break;

default:break;

}

Write_Data(DDRAM_add>>8&0x0f);

Write_Data(DDRAM_add&0x0f);

}

 

CGRAM中的地址B4\B5对应于DDRAM中0000H\0002H\0004H\0006H

 

3.绘图RAM(GDRAM)

绘图显示RAM提供128×64个字节的记忆空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个字节的数据到GDRAM,而地址结束其(AC)会自动加一,在写入GDRAM时,绘图显示必须关闭。绘图步骤如下:

①关闭绘图显示功能;

②(扩展指令集)设置GDRAM垂直Y位置——(0~31);

③(扩展指令集)设置GDRAM水平X位置——(0~15);

④将D15~D8数据写入GDRAM中;

⑤将D7~D0数据写入GDRAM中;

⑥打开绘图显示功能。

4.gif


 

 

 

/****************************************************************

函数名称:Display_GDRAM

函数功能:显示图片

入口参数:*img-----图片点阵数组

出口参数:无

备 注:图片横向取模

*****************************************************************/

void Display_GDRAM(uchar code *img)

{

uchar i,j;

Write_Com(0x34);     //扩展指令集,关闭绘图模式

for(i=0;i<32;i++)      //写入上半屏数据

{

Write_Com(0x80+i);

Write_Com(0x80);

for(j=0;j<16;j++)

{

Write_Data(*img);

img++;

}

}

 

for(i=0;i<32;i++)   //写入下半屏

{

Write_Com(0x80+i);

Write_Com(0x88);

for(j=0;j<16;j++)

{

Write_Data(*img);

img++;

}

}

Write_Com(0x36);  //扩展指令,打开绘图模式

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /3 下一条