0 工具准备
PCtoLCD2002
NodeMCU(ESP8266)(验证OLED字模效果)
0.96寸OLED显示屏
1 基于PCtoLCD实现OLED汉字取模方法
1.1 基础知识介绍
0.96存OLED显示屏包含128x64个像素点,x轴方向为128个像素点,y轴方向为64个像素点。它采用 SSD1306作为显示控制芯片,SSD1306把OLED显示屏y轴的64个像素分为8个PAGE,把x轴分为128个列(COL),每个PAGE对应1个字节的数据,以字节方式写入。
下面提一下SSD1306的数据写入方式,SSD1306初始化默认设置为页寻址模式,页寻址模式的寻址指针移动如下所示:
寻址方式决定了每个像素数据在OLED上的设置过程,假如我们显示一个16*16像素的汉字,那么它便会占用2PAGE和16COL,用上面的方式首先会从第1个PAGE的第1列开始填充数据,当第1个PAGE填充完后需要手动将指针移动到第1个PAGE的第2列开始填充数据。当第1个PAGE的所有数据填充完以后,进行第2个PAGE数据的填充。根据这一特点,我们PCtoLCD软件的取模方式就需要设置为列行式。
1.2 使用PCtoLCD生成汉字字模“好”
(1)打开PCtoLCD2002,依次点击模式 ->字符模式
(2)点击选项,按照下图设置取模方式,随后点击确定即可
(3)在下拉框输入“好”,点击生成字模即可生成“好”字的字模
生成的字模数据如下:
0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,
0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,/“好”,0/
2 实例验证
前面我们已经生成了OLED的“好”字字模,接下来我们使用NodeMCU(ESP8266)来验证OLED字模效果。
2.1 定义汉字字模
const unsigned char cnFont[] =
{0x10, 0x10, 0xF0, 0x1F, 0x10, 0xF0, 0x00, 0x80, 0x82, 0x82, 0xE2, 0x92, 0x8A, 0x86, 0x80, 0x00,0x40, 0x22, 0x15, 0x08, 0x16, 0x61, 0x00, 0x00, 0x40, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, /*"好",0*/
};
2.2 汉字显示函数
#define CN_FONT_SIZE 32
/*** @brief 显示汉字* * @param x 列坐标(0-127)* @param y 行坐标(0-7)* @param fontAddr 字体地址*/
void ICACHE_FLASH_ATTR oled_show_cn(u8 x, u8 y, u8 fontAddr)
{int c = 0, i = 0;c = CN_FONT_SIZE * fontAddr;// 画第一页OLED_Set_Pos(x, y); // 设置画点起始处for (i = 0; i < CN_FONT_SIZE / 2; i++) // 循环8次(8列){OLED_WR_Byte(userFont[c + i], OLED_DATA);}// 画第二页OLED_Set_Pos(x, y + 1); // 页数加1for (i = 0; i < CN_FONT_SIZE / 2; i++) // 循环8次{OLED_WR_Byte(userFont[c + i + CN_FONT_SIZE / 2], OLED_DATA);}
}
2.3 汉字显示应用
我们在坐标(0,0)的位置显示汉字“好”,上层应用调用oled_show_cn函数实现如下:
#define CN_FONT_HAO 0
oled_show_cn(0, 0, CN_FONT_HAO);
2.4 测试验证
将编译好的bin文件烧录到ESP8266,效果如下:
至此,基于PCtoLCD实现OLED汉字取模的验证完成,测试成功。