带字库的12864还是经常用到,下面是我的一些小小的收获和记录。
1,我现在使用的12864的显示坐标和字库的定义如下:
四行汉字的初始坐标依次是:80H,90H,88H,98H
字符和汉字都是按照一定的编码规则进行编码存储的,字符编码为02H-7FH,共126个字符。
这126个字符于编码一一对应,即笑脸符号对应02H,心形对应03H,以此类推。(00H,01H为乱码)
汉字编码是按照ST7902GB来编制,一个汉字对应2个字节。
2,定义要显示的汉字
uchar code dis1[] = {"中华人民共和国"};
上面7个汉字在Keil中调试查看其存储形式如下
如图7个汉字对应14个字节,所以上面数组dis1[ ]的下标最大为13,而不是6.
所以要显示汉字“中”,
可以这么写
lcd_pos(0,0);//设置显示位置第一行第一列
lcd_wdat(dis1[0]);
lcd_wdat(dis1[1]);
或者直接写“中”的编码0xD6D0
lcd_wdat(0xD6);
lcd_wdat(0xD0);
上面两种写法是等价的,但只写lcd_wdat(dis1[0]);即只取数组的第一个数组送显是不对的,显示的不是所需要的。
要是显示整个数组的汉字,可以这样
lcd_pos(1,0); //设置显示位置为第二行的第1个字
i = 0;
while(dis1[i] != '\0')
{
lcd_wdat(dis1[i]); //显示字符
i++;
}
注意:也许有人要问,字符和汉字都进行编码,会不会混了。不会的,仔细观察,字符的编码只是02-7F,而汉字为A*B*H,汉字的高低字节都是以A或B开头的,他们混不了的。