中级会员
- 积分
- 224
- 金钱
- 224
- 注册时间
- 2019-4-17
- 在线时间
- 34 小时
|
先上两张张效果图。
大家有什么问题也可以相互讨论。
辛苦移植了一整天,这里要感谢@冰封嗜魔 http://www.openedv.com/forum.php?mod=viewthread&tid=16099
参考了他的帖子,不需要外挂flash,直接读取保存在SD卡中的字库,
这部分代码如下:
void Get_HzMat(unsigned char *code,unsigned char *mat,u8 size)
{
unsigned char qh,ql;
unsigned char i;
unsigned long foffset;
FIL file;
UINT BR;
u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数
qh=*code;
ql=*(++code);
if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)//非 常用汉字
{
for(i=0;i<csize;i++)*mat++=0x00;//填充满格
return; //结束访问
}
if(ql<0x7f)ql-=0x40;//注意!
else ql-=0x41;
qh-=0x81;
foffset=((unsigned long)190*qh+ql)*csize; //得到字库中的字节偏移量
switch(size)
{
case 12:
f_open(&file,"0:/SYSTEM/font12/MDL12.FON",FA_OPEN_EXISTING|FA_READ);
f_lseek (&file, foffset);
f_read (&file, mat, 24, &BR);
f_close(&file);
break;
// case 16:
// f_open(&file,"0:/SYSTEM/FONT2/QNHG16.FON",FA_OPEN_EXISTING|FA_READ);
// f_lseek (&file, foffset);
// f_read (&file, mat, 32, &BR);
// f_close(&file);
// break;
case 16:
f_open(&file,"0:/SYSTEM/font16/YMMCT16.FON",FA_OPEN_EXISTING|FA_READ);
f_lseek (&file, foffset);
f_read (&file, mat, 32, &BR);
f_close(&file);
break;
case 24:
f_open(&file,"0:/SYSTEM/font24/ZZGFGMT24.FON",FA_OPEN_EXISTING|FA_READ);
f_lseek (&file, foffset);
f_read (&file, mat, 72, &BR);
f_close(&file);
case 32:
f_open(&file,"0:/SYSTEM/font32/QNHG32.FON",FA_OPEN_EXISTING|FA_READ);
f_lseek (&file, foffset);
f_read (&file, mat, 128, &BR);
f_close(&file);
break;
}
}
新增加了一些字体,都保存在0:/SYSTEM/font12文件夹下,我会把字体打包发上来。
void Show_Font(u16 x,u16 y,u8 *font,u8 size,u8 mode)
{
u8 temp,t,t1;
u16 y0=y;
u8 dzk[128];
u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数
if(size!=12&&size!=16&&size!=24&&size!=32)return; //不支持的size
printf("csize is %d \r\n",csize);
printf("font is %s \r\n",font);
Get_HzMat(font,dzk,size); //得到相应大小的点阵数据
for(t=0;t<csize;t++)
{
temp=dzk[t]; //得到点阵数据
printf("temp is %d",temp);
for(t1=0;t1<8;t1++)
{
// if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
// else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);
if(temp&0x80)OLED_DrawPoint(x,y,mode);
else OLED_DrawPoint(x,y,!mode);
temp<<=1;
y++;
if((y-y0)==size)
{
y=y0;
x++;
break;
}
}
}
}
但是似乎出现了一个bug,如果大家解决的话告诉我一声
不适用外挂flash后,fatfs似乎不能识别中文了,我想问题出在mycc936.c中的这段代码
// SPI_Flash_Read((u8*)&t,ftinfo.ugbkaddr+i*4+gbk2uni_offset,4);//读出4个字节
我用这段代码代替:
// f_open(&file,"0:/SYSTEM/FONT/UNIGBK.BIN",FA_OPEN_EXISTING|FA_READ);// f_lseek (&file, i*4+gbk2uni_offset);// f_read (&file, (u8*)&t, 4, &BR);// f_close(&file);
但是似乎没有效果。
|
|