DD RAM DATA
CHARACTER CODES CGRAM ADDRESS CGRAM DATA PETERNS
7 6 5 4 3 2 1 0 5 4 3 2 1 0 7 6 5 4 3 2 1 0
LLLLXLLL L L L L H H H H
L L H H L L L L
L H L H L L L L
L H H L H H H L
LLL H L L XXX L L L L H
H L H L L L L H
H H L H H H H L
H H H
zhey这样显示的就是一个S型
自编字形的列位置对应于CGRA DATA 的0—4 位,行位置对应于
CGRAM ADDRESS 的0—2 位 这个是咋么对应的,还有1602两行5*8的单元格一共有32个,我想问就是自定义的单元格最多是可以定义多少个
希望哪个知道的告诉我一下 ,先谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1602 是只能显示16个字符,能显示两行
一个字符是8位
内部RAM地址映射表如下
第一行 00H 01H 02H 03H ......27H
第二行 40H 41H 42H 43H ......67H
当我们向00-0F,40H-4FH地址的任何一位写入数据时可以立即显示出来
但是将数据写到10-27H,50-67H的时候必须通过特别指令移位移动到正常的显示区域。
注意它最多只能写八个汉字,一个汉字是连个字节。
一个字要用到上下两行
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地址显示第二个自定义字符
一周热门 更多>