新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2022-4-20
- 在线时间
- 19 小时
|
25金钱
OLED怎么像LCD直接调用字库显示的?
中景园OLED0.96 。阴码+逆向(低位在前)+列行式+C51格式
这个程序设计有什么不合理的地方吗?(正点LCD+中景OLED拼凑的)。运行出来显示的地方都糊了,大片都是点亮的。
莫不是字库调出来的数据顺序是不对的(和中景园oled扫描方式不兼容)?
我:
void OLED_Show_ZH(u8 x,u8 y,u8 *font,u8 size,u8 mode)
{
u8 m,temp;
u8 dzk[72]; //获取临时存放点阵的数据
u8 x0=x,y0=y;
u16 i,size1=(size/8+((size%8)?1:0))*size; //得到字体一个字符对应点阵集所占的字节数
if(size!=12&&size!=16&&size!=24)return; //不支持的size
Get_HzMat(font,dzk,size); //得到相应大小的点阵数据
for(i=0;i<size1;i++)
{
temp=dzk[i]; //得点阵每个字节数据
for(m=0;m<8;m++) //竖着写一个字节
{
if(temp&0x80) OLED_DrawPoint(x,y,mode); //mode=1点亮(在1选择填充模式)
//LCD_Fast_DrawPoint(x,y,POINT_COLOR);
else OLED_DrawPoint(x,y,!mode); //mode=0点暗(1填充模式)
//LCD_Fast_DrawPoint(x,y,BACK_COLOR);
temp<<=1; //移位从上到下写像素点点亮
y++;
}
if((x-x0)==size) {x=x0-1;y0=y0+8;} //一页字宽的字节填完
y=y0; x++;
}
}
}
正点原子(dzk,调用的字库):
void Show_Font(u16 x,u16 y,u8 *font,u8 size,u8 mode)
{
u8 temp,t,t1;
u16 y0=y;
u8 dzk[72]; //重要
u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数
if(size!=12&&size!=16&&size!=24)return; //不支持的size
Get_HzMat(font,dzk,size); //得到相应大小的点阵数据
for(t=0;t<csize;t++)
{
temp=dzk[t]; //得到点阵数据
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); }
temp<<=1;
y++;
if((y-y0)==size)
{
y=y0;
x++;
break;
}
}
}
}
中景园--这个跟OLED肯定兼容(【Hzk】是提前存好的特殊字数据,非字库):
void OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1,u8 mode)
{
u8 m,temp;
u8 x0=x,y0=y; //得到字体一个字符对应点阵集所占的字节数
u16 i,size3=(size1/8+((size1%8)?1:0))*size1;
for(i=0;i<size3;i++)
{
if(size1==16)
{temp=Hzk1[num][i];}//调用16*16字体
else if(size1==24)
{temp=Hzk2[num][i];}//调用24*24字体
else if(size1==32)
{temp=Hzk3[num][i];}//调用32*32字体
else if(size1==64)
{temp=Hzk4[num][i];}//调用64*64字体
else return;
for(m=0;m<8;m++)
{
if(temp&0x01)OLED_DrawPoint(x,y,mode);
else OLED_DrawPoint(x,y,!mode);
temp>>=1;
y++;
}
x++;
if((x-x0)==size1)
{x=x0;y0=y0+8;}
y=y0;
}
}
|
最佳答案
查看完整内容[请看2#楼]
这种东西还是需要自己琢磨的,
别人也没有时间帮你分析显示代码
加上你提供的资料不全。
因为即使是同一家产品,
由于控制器不同,可能显示方式也不一致。
就我的经验,比较快速的基本方法是:
1、先使用厂家的提供的例程,能够正常显示(一般会包含少量几个汉字)
2、那几个汉字能够正确显示后,看看例程中那几个汉字的字模排列方式(有专门的反字模软件工具)。
3、确定字模排列方式后,按照该方式自己取几个汉字(ATK ...
|