字符集:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
要想屏幕上显示字符,需要相应的字库,现在先做一个字库。
打开取模软件pctolcd2002完美版,再点击选项,配置如下所选,点击确定。


点阵格式:阴码字体亮,阳码字体不亮
字符走向:逆向低位在前,顺向高位在前(主要看驱动IC的编码格式)、
取模方式:指字模图形的扫描方向
输出数制:生成字模的数的进制
每行显示数据:生成数组的大小,字符的长(页)x字符的宽(如8*16字体,2页*8列 = 16;如12*24字体,3页*12列 = 36;如16*32字体,4页*16列 = 64)
选择字库字体大小,最好选择8的倍数,因为64行已经分为8页(每页8行),如果不是8的倍数,就会显示到其他页去,操作会变得麻烦一些。

一个8x16的英文字库就完成了,字符在字库中的存取是二维数组Ascii_8*16[95][16];就拿字符 ' A ' 来说,字符 ' A ' 存在Ascii_8*16[33][0] ~ Ascii_8*16[33][16]之间


生成12*24的字库,首先要调节字体大小,其次要调节每行显示数据:24/8=3页,3*12=36,所以每行显示数据的点阵设置为36,最后,点击生成字模,复制粘贴到OLED_Fonnt.h文件中

字库中存取了三种字体,第一个比较特殊(在网上找的,但不完整),自己尝试着生成,发现自己生成的字体显示不清晰,如果有朋友有完整的,请@我分享我一份,其他两个是自己生成的

显示字符串从一个字符开始,字符串只不过是一串字符,完成显示一个字符后再循环多次,就可以完成字符串显示了,字符显示先定义起始光点,再把字库中的数据写入,即可完成。就拿8*16字体来说,8列*16行(2页),所以要写2页(i < 2),字宽写8列(j < 8),第一页设置起始光点写入数据,第二页再设置起光点偏移一位( + i),因为字宽是8,数据再偏移八位( + i*8),完成显示
/**
* @brief OLED显示一个字符
* @param Line 行位置
* @param Column 列位置
* @param Fontsize 字体大小
* @param Char 要显示的一个字符,
* @retval 无
*/
void OLED_ShowChar(uint8_t Line, uint8_t Column, uint16_t Fontsize, char Char)
{
uint8_t i, j;
switch(Fontsize) {
case 8: {
OLED_SetCursor(Line, Column);
for (j=0; j<6; j++) {//字宽为6
OLED_Write_Data(Ascii_6x8[Char-' '][j]);
}
break;
}
case 16: {
for(i=0; i<2; i++) {
OLED_SetCursor(Line+i, Column); //循环2次显示上/下半部分内容
for (j=0; j<8; j++) {//字宽为8
OLED_Write_Data(Ascii_8x16[Char-' '][j+i*8]);
}
}
break;
}
case 24: {
for(i=0; i<3; i++) {
OLED_SetCursor(Line+i, Column); //循环3次显示上/中/下半部分内容
for (j=0; j<12; j++) {//字宽为12
OLED_Write_Data(Ascii_12x24[Char-' '][j+i*12]);
}
}
break;
}
}
}
