全部博文(321)
分类: 嵌入式
2014-05-14 23:18:30
十、字库
原理:汉字:一个字的行宽16位,2个字节,×16行,则32个字节(在LCD屏上)表示一个字。===VS内存中汉字占2个字节。
如何取出来:unsigned short t = ziku[0]<<8|ziku[1];
For(i=0; i<16; i++)
{
If(t&(16-i))
//该点显示字的颜色
Else
//该点显示字的底色
}
如何实现字的颜色:
Void setpixel(unsigned int x, unsigned int y, unsigned short c)
{
Buf[y*240+x] = c;
}
分区:先找出区码,再找出位码;一个区码有94个汉字。假设区码0xb3,位码0xc5,则偏移地址:(0xb3-0xa1)*94*32+(0xc5-0xa1)*32--------即绝对地址=基地址+偏移地址==注意:位码和区码都是从0xA1开始。汉字在内存中占2个字节,eg:char *p = "你好"第一个字节P[2]就是区码,第二个字节P[3]是位码。=====理解:汉字在内存2中的存储;汉字的字模32存储。
单独托一个二进制文件是托不进去的,要建文件夹。
1.hzk16in.s==字库:(要有个hzk16in.s<==>hzk16in.h)
EXPORT hzkdata
AREA hzk,DATA,READONLY,ALIGN=4(AREA 段名,DATA数据段。)
hzkdata
incbin hzk16;//INCBIN的作用是把二进制文件插入到源文件;即把二进制文件展开
END
2.显示汉字和数据,字符。注:数组名做参数传递进来变为指针,所以无法知道数组的大小
3.显示连续的汉字时,可以定义一个指针指向该字符,通过定义的指针,‘\0’,可判断出结束条件。就可以知道传进来的字符串的大小了。
4. addr =(U8 *)hzkdata+(c[k]-0xa1)*94*32+(c[k+1]-0xa1)*32;//该字的首地址
5.通过循环16*16次,等到一个汉字。注:汉字在内存中是两个字节,但是在LCD上是32个字节。16*16.位。32字节
6.temp = ((*(addr+i)<<8)|(*(addr+i+1)));//取内容temp & (1<<(15-j)
7.英文字符在内存中是一个字节,所以直接可用(c[num]=='\0' )来判定结束。