关于128x64OLED屏幕字体类型以及字体大小添加方法

本文介绍了如何解决128x64OLED屏幕上字体不满意的问题,通过特定网站生成自定义字体,并详细讲解了将生成的代码整合到驱动库中的步骤,包括修改数据类型以确保兼容性,以及如何在以后的开发中方便调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于128x64OLED屏幕字体类型以及字体大小添加方法


  • 🌿针对esp8266-oled-ssd1306库的使用,字体调整。

    • 通过128x64OLED显示字体和调用现成封装库发现,没有合适自己的字体和字体大小怎么办?今天带大家来解决这个问题。
      使用别人的封装库,会发现现有的库封装的字体不能满足自己开发需求的时候,就需要我们手动添加自己所需要的字体和字体大小进去,才能实现我们想要的图形显示效果。
      我们今天解决这一个问题首先需要:http://oleddisplay.squix.ch/#/home进入这个网站,借助这个网站,帮我们生产需要的字体,以及大小和相关参数的设置需求。

    在这里插入图片描述
    然后点击Create即可生成代码。

### STM32 驱动 OLED 屏幕显示中文字库 为了使 STM32 单片机能驱动 OLED 屏幕显示中文字符,通常会采用特定的字体库来处理汉字编码到点阵图案的转换。以下是具体实现过程: #### 1. 准备工作 确保已经安装好必要的开发环境,并配置好了 STM32CubeMX 或其他 IDE 工具链。 #### 2. 创建字库文件 `oledfont.h` 创建一个新的头文件用于定义所需的 ASCII 和 GBK 编码表以及相应的位图数组。此部分代码应放置于项目中的适当位置以便后续调用[^2]。 ```c #ifndef __OLEDFONT_H__ #define __OLEDFONT_H__ #include "stdint.h" extern const uint8_t Font_16x16[]; // ... 更多字体大小... #endif /* __OLEDFONT_H__ */ ``` 实际的字体数据可以通过第三方工具生成或手动编写。对于每个字符,都需要提供其宽度、高度及其像素矩阵表示形式。 #### 3. 修改测试函数以支持中文显示 编辑现有的测试程序,在其中加入对新添加功能的支持。这里展示了一个简单的例子,展示了如何混合使用英文字母、数字和中文字符: ```c void TEST_MainPage(void) { GUI_ShowString(28, 0, "stars", 16, 1); // 显示英文字符串 GUI_ShowChinese(28, 20, 16, "小小星", 1); // 显示中文汉字 GUI_ShowString(4, 48, "631907030123", 16, 1); // 显示数字 delay_ms(1500); } ``` 上述代码片段实现了在指定坐标处绘制不同类型的文本内容的功能。`GUI_ShowChinese()` 是专门用来渲染中文字符的方法;它接收四个参数——X 坐标、Y 坐标、字号大小及待打印的文字串指针。 #### 4. 实现核心逻辑 下面是一个简化版的核心算法框架,负责将输入的 Unicode/GBK 编码映射至预存好的图像资源上,并最终传输给显示器控制器进行刷新操作[^1]。 ```c void GUI_ShowChinese(uint8_t x, uint8_t y, uint8_t size, char *str, uint8_t mode){ while(*str != '\0'){ unsigned int code = (unsigned int)(*str++); if(code >= 0x81 && code <= 0xFE){ // 判断是否为双字节字符(即可能是CJK统一汉字) code <<= 8; code |= (*str++); DrawBitmap(x,y,size,(uint8_t*)GetFontData(code)); // 获取对应字模并绘图 x += GetCharWidth(size)*mode; // 更新下一个字符起始位置 } else{ // 处理ASCII范围内的简单情况 DrawAsciiCharacter(x,y,*(--str),size,mode); str++; x+=GetCharWidth(size)*mode; } } } static void DrawBitmap(uint8_t posX,uint8_t posY,uint8_t fontSize,uint8_t* bitmapPtr){ // 绘制位图的具体实现... } static uint8_t* GetFontData(unsigned int unicodeCodePoint){ // 返回指向所需字形数据的指针... } static uint8_t GetCharWidth(uint8_t fontSize){ switch(fontSize){ case 16: return 16; default: return 8; } } ``` 这段伪代码描述了从接收到的 UTF-8 序列解析出完整的 UCS-2 符号的过程,接着定位到匹配项所在的内存偏移量,最后按照设定的比例缩放后输出至目标设备。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值