当前位置: 首页 > news >正文

【已验证】STM32驱动OLED(SSD1306)显示字符

本文介绍如何使用STM32F103C8T6(蓝板)通过软件模拟IIC协议驱动0.96英寸OLED(驱动芯片SSD1306),这个小屏幕相信每一个朋友在大学生活里都不会错过,也是很多课设毕设显示需求的首选,我一向喜欢直接干,咱们也不说那些原理啥的,直接站在前人的肩膀优化,进而形成自己的框架。


1. 硬件连接

OLED引脚STM32引脚
VCC3.3V
GNDGND
SCLPB6
SDAPB7

可根据实际修改引脚,只需在代码中对应修改即可。


2. 驱动架构

代码分为三个文件:

  • oled.h:引脚定义、函数声明

  • oled_font.h:存放所有字库数据(6x8 ASCII、8x16 ASCII、16x16汉字)

  • oled.c:IIC模拟、OLED初始化、显示函数实现

这种结构将字库与驱动分离,便于维护和扩充汉字。


3. 关键代码实现

3.1 引脚定义与IIC宏

// oled.h #define OLED_SCL_PORT GPIOB #define OLED_SCL_PIN GPIO_PIN_6 #define OLED_SDA_PORT GPIOB #define OLED_SDA_PIN GPIO_PIN_7 #define OLED_SCL_H HAL_GPIO_WritePin(OLED_SCL_PORT, OLED_SCL_PIN, GPIO_PIN_SET) #define OLED_SCL_L HAL_GPIO_WritePin(OLED_SCL_PORT, OLED_SCL_PIN, GPIO_PIN_RESET) #define OLED_SDA_H HAL_GPIO_WritePin(OLED_SDA_PORT, OLED_SDA_PIN, GPIO_PIN_SET) #define OLED_SDA_L HAL_GPIO_WritePin(OLED_SDA_PORT, OLED_SDA_PIN, GPIO_PIN_RESET)

3.2 软件IIC核心函数

// oled.c static void IIC_Start(void) { OLED_SDA_H; OLED_SCL_H; delay_us(5); OLED_SDA_L; delay_us(5); OLED_SCL_L; } static void IIC_Stop(void) { OLED_SCL_L; OLED_SDA_L; delay_us(5); OLED_SCL_H; delay_us(5); OLED_SDA_H; } static void IIC_SendByte(uint8_t byte) { for(uint8_t i=0; i<8; i++) { if(byte & 0x80) OLED_SDA_H; else OLED_SDA_L; byte <<= 1; delay_us(2); OLED_SCL_H; delay_us(2); OLED_SCL_L; delay_us(2); } } static void OLED_WriteCmd(uint8_t cmd) { IIC_Start(); IIC_SendByte(0x78); // 写地址 IIC_WaitAck(); IIC_SendByte(0x00); // 命令模式 IIC_WaitAck(); IIC_SendByte(cmd); IIC_WaitAck(); IIC_Stop(); }

3.3 SSD1306初始化序列

void OLED_Init(void) { // 初始化GPIO(使能时钟,开漏输出) OLED_WriteCmd(0xAE); // 关闭显示 OLED_WriteCmd(0x81); // 对比度设置 OLED_WriteCmd(0xFF); OLED_WriteCmd(0xA4); // 正常显示 OLED_WriteCmd(0xA6); // 正显(0亮1灭) OLED_WriteCmd(0x20); // 寻址模式 OLED_WriteCmd(0x10); // 页寻址模式 OLED_WriteCmd(0xB0); // 起始页0 OLED_WriteCmd(0x00); // 起始列低4位 OLED_WriteCmd(0x10); // 起始列高4位 OLED_WriteCmd(0x40); // 起始行 OLED_WriteCmd(0xA1); // 列重映射(SEG0->列127) OLED_WriteCmd(0xA8); // 多路复用比 OLED_WriteCmd(0x3F); OLED_WriteCmd(0xC8); // COM扫描方向(反向) OLED_WriteCmd(0xD3); // 显示偏移 OLED_WriteCmd(0x00); OLED_WriteCmd(0xDA); // COM引脚配置 OLED_WriteCmd(0x12); OLED_WriteCmd(0xD9); // 预充电周期 OLED_WriteCmd(0x22); OLED_WriteCmd(0xDB); // VCOMH电压 OLED_WriteCmd(0x20); OLED_WriteCmd(0x8D); // 电荷泵 OLED_WriteCmd(0x14); OLED_WriteCmd(0xAF); // 开启显示 }

3.4 显示字符

// 6x8 ASCII显示 void OLED_ShowChar_6x8(uint8_t x, uint8_t y, uint8_t ch) { uint8_t c = ch - 32; OLED_SetPos(x, y); for(uint8_t i=0; i<6; i++) OLED_WriteData(F6x8[c][i]); } // 8x16 ASCII显示 void OLED_ShowChar_8x16(uint8_t x, uint8_t y, uint8_t ch) { uint8_t c = ch - 32; OLED_SetPos(x, y); for(uint8_t i=0; i<8; i++) OLED_WriteData(F8X16[c*16 + i]); OLED_SetPos(x, y+1); for(uint8_t i=0; i<8; i++) OLED_WriteData(F8X16[c*16 + i + 8]); }

3.5 显示汉字(16x16)

void OLED_ShowChinese(uint8_t x, uint8_t y, uint8_t index) { uint16_t addr = index * 32; // 每个汉字32字节 OLED_SetPos(x, y); for(uint8_t i=0; i<16; i++) OLED_WriteData(F16x16[addr + i]); OLED_SetPos(x, y+1); for(uint8_t i=0; i<16; i++) OLED_WriteData(F16x16[addr + 16 + i]); }

5. 字库说明

  • 6x8 ASCII:共95个字符,每个6字节,适合显示简单英文。

  • 8x16 ASCII:共95个字符,每个16字节,高度为16,可显示更清晰的英文。

  • 16x16汉字:用户可自行添加汉字,每个汉字32字节(列行式逆向输出)。示例中内置了“野火电子”四个汉字,可根据需要扩充。

字库数据存放在独立的头文件oled_font.h中,便于维护和替换。


6. 效果展示

通过网盘分享的文件:STM32_OLED_SoftIIC.zip
链接: https://pan.baidu.com/s/1CdxPxJS3hajggX4NcLUoxQ?pwd=rxnz 提取码: rxnz
--来自百度网盘超级会员v8的分享

http://www.jsqmd.com/news/568002/

相关文章:

  • 网易云音乐直链解析技术方案:打造稳定访问的音乐资源管理解决方案
  • Anubi基金会为何押注Cassava?深度解析Web3数据层+社交任务的黄金组合
  • DanKoe 视频笔记:个人成长:如何变得更加“不同意”(创造一个现实扭曲场)
  • 2026年成都商用家具批发市场服务商综合评估与选择指南 - 2026年企业推荐榜
  • 如何选择ComfyUI-FramePackWrapper的模型加载方案?从技术选型到场景适配全解析
  • YOLOv12涨点改进| TGRS 2026 |全网独家首发、特征融合改进篇| 引入DAWIM差异感知小波交互融合模块,增强边缘、纹理和结构信息,结合频域信息,增强小目标检测、分割涨点,发论文热点创新
  • 驱动管理效率革命:如何用DriverStore Explorer解决Windows系统维护难题?
  • 2026武汉酒店攻略:景点周边高性价比之选全解析 - 2026年企业推荐榜
  • SeqGPT-560M开源可部署:支持国产昇腾/海光平台适配(需定制镜像)
  • 别再傻傻分不清了!一文搞懂微信支付代金券和商家券的核心区别与适用场景
  • YOLOv13涨点改进| TGRS 2026 |全网独家首发、特征融合改进篇| 引入DAWIM差异感知小波交互融合模块,增强边缘、纹理和结构信息,结合频域信息,增强小目标检测、分割涨点,发论文热点创新
  • 2026年武汉首饰翻新机构综合实力排行榜发布 - 2026年企业推荐榜
  • 前瞻2026:金堂墙布选购指南,五大服务商深度解析 - 2026年企业推荐榜
  • 从外包到自主:2026年企业AI营销孵化服务深度测评与选型指南 - 2026年企业推荐榜
  • 让Claude code界面化的超好用工具:图文并茂教你用Paperclip建个AI团队 | Paperclip使用完全指南
  • 如何免费搭建个人知识库?Trilium Notes中文版完全指南
  • 胡桃工具箱:免费开源的原神桌面助手如何提升你的游戏体验
  • 甘孜中蜂蜂王优质厂家深度测评:2026年谁更靠谱? - 2026年企业推荐榜
  • YOLOv13涨点改进| TGRS 2026 | 独家创新首发、特征融合改进篇| 引入STSAM协同时空注意力融合模块,发论文热点创新,注意力能够互相引导强化边界和结构细节,增强目标检测、图像分割涨点
  • 2026年四川一次性餐具采购全攻略:品牌、趋势与选购标准 - 2026年企业推荐榜
  • 深入解析C语言编译过程:从源码到可执行文件
  • intv_ai_mk11实战案例:市场部用AI批量生成小红书/公众号/微博三平台适配文案
  • 2026家用碾米机选购全攻略:聚焦乐山制造,五大可靠品牌深度解析 - 2026年企业推荐榜
  • 2026保定短视频推广服务商深度测评:谁在领跑本地流量新赛道? - 2026年企业推荐榜
  • Visual Studio项目配置:如何让AForge.Video.FFMPEG不再报错
  • 2026年重庆基础设施建设关键期,浇筑母线槽服务商如何选择? - 2026年企业推荐榜
  • 职场晋升五大核心法则:如何成为领导最需要的人
  • Evo-1的‘瘦身’秘诀:我们是如何把VLA模型塞进树莓派的?
  • Linux运维的‘后悔药’:用ReaR 2.4给你的服务器上个‘系统快照’保险
  • 2026年猪副产品供应链深度解析:聚焦贵州市场,甄选五家核心服务商 - 2026年企业推荐榜