OLED显示-字库码表原理

OLED显示-字库码表原理一 字库和码表 在 OLED 显示屏上显示字符 和在点阵上显示图像是一样的 都是通过区域内的像素点的亮暗来呈现图案 以 1608 字体码表为例 代码中表现如下 const unsigned char asc2 1608 95 16 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

大家好,我是讯享网,很高兴认识大家。

一,字库和码表

在OLED显示屏上显示字符,和在点阵上显示图像是一样的
都是通过区域内的像素点的亮暗来呈现图案
以1608字体码表为例,代码中表现如下:

const unsigned char asc2_1608[95][16]={ { 
  
    
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ { 
  
    
  0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/ { 
  
    
  0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00},/*""",2*/ { 
  
    
  0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00},/*"#",3*/ { 
  
    
  0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00},/*"$",4*/ { 
  
    
  0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00},/*"%",5*/ { 
  
    
  0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08},/*"&",6*/ { 
  
    
  0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ { 
  
    
  0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00},/*"(",8*/ { 
  
    
  0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/ { 
  
    
  0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00},/*"*",10*/ }

讯享网

二,什么是1608

1608代表着字符显示的区域大小,即高度16位*宽度8位

1608区域
讯享网

1608解析

即每2个字节绘制一列,共8列,即16字节显示一个字符


三,1608的赋值顺序

我们知道了16字节控制一个字符的显示,现在说一下如何显示

这16个字节按照从上到下,从左到右的方式进行赋值

1608的赋值顺序

如果我们想要显示一个字母A,那么:

1608字母A

使用工具,转化为16字节字模配置

PC2LCD_A

PC2LCD_A_Config

讯享网{0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04},/*"A",0*/ 

四,1206和2412字体

重点说一下1206:
1206,即高度12*宽度06
我们发现高度12不是8的倍数(12*6=72依然是8的倍数)
但我们还会按照从上到下,从左到右的顺序控制显示

1206分析

如图,1206的第一列有1.5字节控制,第二列由剩余0.5字节+1字节控制

所以一个1206字符由3*3 = 9字节控制


五,代码操作

现在我们知道了OLED的显示和赋值原理,那么看一下代码控制显示的实现

/ * 在指定位置显示字符 * x:0~127 * y:0~63 * mode: 0:反白显示 1:正常显示 * size: 字号 12/16/24 / void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode) { u8 temp,t,t1; u8 y0=y; u8 csize=(size/8+((size%8)?1:0))*(size/2);//字符对应点阵字节数 chr=chr-' ';//得到在字库码表中的位置索引 for(t=0;t<csize;t++) { if(size==12) temp=asc2_1206[chr][t]; // 1206字体 else if(size==16) temp=asc2_1608[chr][t]; // 1608字体 else if(size==24) temp=asc2_2412[chr][t]; // 2412字体 else return; // 未匹配到字库-放弃 //画点 for(t1=0;t1<8;t1++) { if(temp&0x80) OLED_DrawPoint(x,y,mode); else OLED_DrawPoint(x,y,!mode); temp<<=1; y++; //判断是否画到了最底部 - 如1206,到达底部后,当前字节未画完,换新列继续画 if((y-y0)==size) { y=y0; x++; break; } } } }

修改记录:
:
修改错别字
添加使用PC2LCD生成字符码表的配置和截图
:
修改错别字

小讯
上一篇 2025-03-17 14:17
下一篇 2025-03-06 09:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/118551.html