(5)相关存储器驱动:
1.显示汉字中文字库(CGROM)和英文字库(HCGROM)
12864提供8列4行的汉字显示空间,CGROM存储的是GB2312编码的汉字(编码表见资料附录),每个汉字为16×16的点阵,在编写程序时无需对对照汉字的编码,直接将汉字些在字符串数组中就行了,编译器会直接将其转化成GB2312码。同样英文字符在HCGROM中的存储形式为ASCII码。
一个英文字符占用一字节空间,16×8点阵,其高位为0-7,地位为0-f。
在显示汉字或英文字符时通过将字符编码写入DDRAM来实现,英文字符在DDRAM中的编码范围为02H-7FH。中文字型为A1A0H-F7FFH(先写高字节再写低字节)。
在显示字库前要先确定显示坐标,其地址范围为80H-9FH。
/****************************************************************
函数名称: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
/****************************************************************
函数名称: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中;
⑥打开绘图显示功能。
/****************************************************************
函数名称: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); //扩展指令,打开绘图模式
}
文章评论(0条评论)
登录后参与讨论