SSD1306俗讲2

这篇主要讲字模,在讲字模之前我们先看他的底层实现

其他许多文档中提到12 16 24字体其实都是他们的高度

OLED_GRAM[x][7-y/8]|=1<<(7-y%8);
这是一个画点的函数,把数组OLED_GRAM种的指定的位置为1,采用了简单的与1或的关系。

void OLED_DrawPoint(u8 x,u8 y,u8 t)
就是画点为1或者0的函数

所以此函数只与显存数组有关系,与字库没有任何直接关系,和取模走向有关系,是逆向,还是顺向

void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
接下来看此函数,是用来显示字符,字符来自取模软件,所以此函数的实现与取模绝对相关。

函数的主要原理是 先定义一个临时变量,按ascii序号字体大小从字库中找到对应的所以的字节,按取模的规则写入到 OLED_GRAM,把OLED_GRAM相应的位置高或者置低,循环把一个字写完

这里补充一下取模软件 PCtoLCD2002 ,阴码,逐列式,顺向,C51

void OLED_DrawPoint(u8 x,u8 y,u8 t)
{
u8 pos,bx,temp=0;
if(x>127||y>63)return;//超出范围了.
pos=7-y/8;
bx=y%8;
temp=1<<(7-bx);
if(t)OLED_GRAM[x][pos]|=temp;
else OLED_GRAM[x][pos]&=~temp; 
}
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

你可能感兴趣的:(SSD1306俗讲2)