|
发表于 2011-8-19 10:37:33
|
显示全部楼层
我正好刚研究完1602的CGRAM。具体是这样的
1602总共有8x8字节的CGRAM,如果用5x8点阵,就只能写8个字,如果用5x11点阵就只有4个字了。
就是说有8个CGRAM,每个CGRAM有8个字节的空间,这8个字节对应着5x8点阵的8行。
定义好的字符对应的DDRAM地址是0x00-0x07,直接调用就好。
我举个例子:
unsigned char code chs[][8]={ //LCD自造字符数据
0x04,0x04,0x04,0x07,0x04,0x04,0x1f,0x00, //上
0x1f,0x04,0x04,0x06,0x05,0x04,0x04,0x00};//下
unsigned char code cgramaddr[][8]={ //CGRAM地址
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47, //第一个
0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};//第二个
char i;
for(i=0;i<2;i++) //循环写入第一个和第二个CGRAM
{
for(j=0;j<8;j++)
{
lcdwrite_cmd(cgramaddr[j]);//lcdwrite_cmd是1602命令写入子函数
lcdwrite_dat(chs[j]); //lcdwrite_dat是1602数据写入子函数
}
}
//1602经过初始化之后可以直接执行下列函数
lcdwrite_dat('a'); //这是直接写入字符a
lcdwrite_dat(0x61);//通过写入DDRAM地址显示字符a
lcdwrite_dat(0x00);//写入DDRAM地址显示第一个自定义字符
lcdwrite_dat(0x01);//写入DDRAM地址显示第二个自定义字符 |
|