SSD1306 芯片本身内部没有预装中文汉字库(通常只内置了简单的 ASCII 字符表,用来显示英文字母和数字)。
英文字符:可以通过内置码表直接调用。
中文汉字:SSD1306 根本不知道什么是“张”、“福”或“国”,它只知道屏幕上第几行第几列的像素点是亮(1)还是暗(0)。
所以此时取模软件的作用:就是把一个汉字的笔画,像做十字绣一样,打散成由黑白点组成的阵列(例如16x16像素点阵),并转换成一串十六进制数值(如 0x00, 0x10, 0x22...)
如果使用C/C++(如 WiringPi / Pigpio):
取模软件是必不可少的。需要先把要显示的汉字用取模软件生成十六进制数组,写进代码的头文件或字模库里,再由程序逐字节发送给 SSD1306。
如果使用Python(如ssd1306 库):
在 Python 中,通常不需要手动使用取模软件。因为 Python 的 Pillow (PIL) 图形库可以直接加载电脑或树莓派中的 .ttf 字体文件,在后台自动实时完成“画字”和“取模”的工作,再直接把图像刷到 OLED 屏幕上。
| 以树莓派Pico开发板为例,请注意按下图的引脚标识接线,接错会导致设备烧毁! |

下载ssd1306和main这两个py程序,直接上传至树莓派pico文件内。运行main程序即可正常显示
| ssd1306.py | main.py |
如果你还没有搭建好树莓派Python编程环境可参考这个帖子→:如何搭建Python编程环境


具体显示内容,可以自行根据代码内进行修改。
| 以ESP32-S3开发板为例,请注意按下图的引脚标识接线,接错会导致设备烧毁! |

需要在Arduino IDE中点击左侧栏的 库管理器(Library Manager)(或按 Ctrl + Shift + I),搜索并安装U8g2库:
U8g2
| ssd1306_0.96下载这个源代码直接用Arduino IDE编译上传程序,然后查看屏幕显示状态(如下图) |
如果你还没有搭建好ESP32的ArduinoIDE的编程环境可参考这个帖子→:搭建ArduinoIDE编程环境

显示结果:
以上代码结构逻辑可以拆解为以下 4 个步骤:
1. 初始化硬件与对象构造
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE, SCL_PIN, SDA_PIN);
硬件 I2C 绑定:创建了一个用于 SSD1306 屏幕的驱动对象。在构造函数中传入了屏幕方向(不旋转 U8G2_R0)、复位引脚(无 U8X8_PIN_NONE)以及自定义的 I2C 引脚(GPIO12 为 SCL,GPIO10 为 SDA)。
2.显示环境配置(setup 内)
这三行完成了屏幕的开机初始化,并告诉 U8g2 使用包含汉字的字库来处理中文字符串。
u8g2.begin(); // 启动屏幕驱动芯片 u8g2.enableUTF8Print(); // 开启 UTF-8 字符解析,使 print() 能识别中文 u8g2.setFont(u8g2_font_wqy12_t_gb2312); // 设置 12 像素中文字体(内含常用汉字和英文字符)
3. 缓冲区绘制(显存画图)
全缓存模式 (_F_):此时所有的 print() 操作都只是在 ESP32-S3 的内存缓冲区里“画图”,并没有直接发送给屏幕。
Y 轴基线坐标:Y 轴坐标指的是文字底部所在的位置,因此分别设为 15、38、60 可以将 64 像素高度的屏幕等距分成三行。
u8g2.clearBuffer(); // 清空内存缓冲区(准备画新画面)
u8g2.setCursor(0, 15); // 设置光标位置 (X=0, Y=15)
u8g2.print("1.hello 跃动芯火"); // 写入第一行文字
u8g2.setCursor(0, 38); // 移动光标到第二行 (Y=38)
u8g2.print("2.www.ydxhuo.com");
u8g2.setCursor(0, 60); // 移动光标到第三行 (Y=60)
u8g2.print("3.128x64");4.刷新屏幕输出
将内存里的图像通过 I2C 总线发送给 SSD1306 的显存,屏幕随即点亮并显示出这三行字。
u8g2.sendBuffer(); // 将内存缓冲区画好的内容一次性打包发送给屏幕
关于51和STM32的资料请查看:0.96显示屏Arduino/C51/STM32使用资料
联系人:张工
电话:0755-32914578
QQ:2251000002
微信:扫下方二维码添加,请备注来意
提供:人工智能,IOT物联网,工控数显,嵌入式软硬件开发,科创教育,产品定制,生产,方案解决...