# STM32_OLED

#### 介绍
基于 stm32 的12864 OLED 驱动模板代码:

* 移植方便,底层接口配置方便(SPI 和 IIC 可选)

* 字体大小等配置采用表驱动模式,添加/修改/删除方便快捷,支持中英文混合输入显示 (中文编码 GB2312)

* 支持多种取模方式,可根据字体字宽比选择不同的取模方式用来减少点阵数据的大小

* OLED 采用双缓冲机制,实现 OLED 的画面操作和显示功能分离,降低画面操作的耗时,同时进一步解耦

* 仿照函数 printf,实现格式化输出,支持窗口 printf 功能(支持回车换行操作),实现滚动式输出(窗口大小、字体可配置)

* 代码注释丰富,风格统一,便于阅读和使用

#### 软件架构

##### 文件介绍

* oled.c 和 oled.h

    > 实现具体功能,对外提供的 API 接口函数

* oledio.c 和 oledio.h

    > 硬件接口功能,实现 SPI 或 IIC 通信函数;移植需要修改
    
* oledconf.c 和 oledconf.h

    > 字体配置、图形配置和功能配置等
    
* fontxxx.h 和 bmp.h

    > 用来存放字体和图形BMP的点阵数据


#### 使用说明

1.  移植需修改 oledio.c 相关硬件接口函数; 通过宏定义 "_DRIVE_INTERFACE_TYPE" 选择接口类型

2.  使用前初始化函数 OLED_Init, 同时可以使用 OLED_Clear 立即清屏

3.  周期调用函数 OLED_ShowTask, 用来同步画面内容(即缓冲同步到 OLED 上显示)

4.  可定义宏定义 "_USE_OLED_PRINTF" 使能OLED 的式样化输出功能, 即类似 printf 的功能

5.  下列代码在源文件可配置需要字体,需要同步修改头文件的枚举定义 `efontSize`
```c
/** 字体大小配置表 */
static fontConfig_t sg_tFontCfgTable[FONT_MAX_NUM] =
{
    {FONT_MODE_COLUMN_BY_ROW, 12, 12, ASCII_6X12_DATA, FONT_12X12_IDX, FONT_12X12_DATA},
    {FONT_MODE_COLUMN_BY_ROW, 16, 16, ASCII_8X16_DATA, FONT_16X16_IDX, FONT_16X16_DATA},
    {FONT_MODE_COLUMN_BY_ROW, 24, 24, ASCII_12X24_DATA, FONT_24X24_IDX, FONT_24X24_DATA},
    {FONT_MODE_COLUMN_BY_ROW, 32, 32, ASCII_16X32_DATA, FONT_32X32_IDX, FONT_32X32_DATA},
};
```

6.  下列代码在源文件可配置需要字体,需要同步修改头文件的枚举定义 `efontSize`
```c
/** 图形配置表 */
static graphicConfig_t sg_tGraphicTable[OLED_GRAPHIC_NUM] =
{
    {FONT_MODE_PROGRESSIVE, 86, 64, "bootLog", LOG_BMP},
};
```

#### 关于作者

1.  CSDN 博客 [blog.csdn.com](https://blog.csdn.net/qq_24130227?spm=1010.2135.3001.5343)
2.  联系邮箱 `const_zpc@163.com`
3.  欢迎各位推送维护该功能代码