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

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

本文介绍如何使用STM32F103C8T6蓝板通过软件模拟IIC协议驱动0.96英寸OLED驱动芯片SSD1306这个小屏幕相信每一个朋友在大学生活里都不会错过也是很多课设毕设显示需求的首选我一向喜欢直接干咱们也不说那些原理啥的直接站在前人的肩膀优化进而形成自己的框架。1. 硬件连接OLED引脚STM32引脚VCC3.3VGNDGNDSCLPB6SDAPB7可根据实际修改引脚只需在代码中对应修改即可。2. 驱动架构代码分为三个文件oled.h引脚定义、函数声明oled_font.h存放所有字库数据6x8 ASCII、8x16 ASCII、16x16汉字oled.cIIC模拟、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 i0; i8; 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 i0; i6; 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 i0; i8; i) OLED_WriteData(F8X16[c*16 i]); OLED_SetPos(x, y1); for(uint8_t i0; i8; i) OLED_WriteData(F8X16[c*16 i 8]); }3.5 显示汉字16x16void OLED_ShowChinese(uint8_t x, uint8_t y, uint8_t index) { uint16_t addr index * 32; // 每个汉字32字节 OLED_SetPos(x, y); for(uint8_t i0; i16; i) OLED_WriteData(F16x16[addr i]); OLED_SetPos(x, y1); for(uint8_t i0; i16; 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?pwdrxnz 提取码: rxnz--来自百度网盘超级会员v8的分享

相关文章:

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

本文介绍如何使用STM32F103C8T6(蓝板)通过软件模拟IIC协议驱动0.96英寸OLED(驱动芯片SSD1306),这个小屏幕相信每一个朋友在大学生活里都不会错过,也是很多课设毕设显示需求的首选,我一向喜欢直接…...

5大核心价值重构云游戏体验:Sunshine让你的游戏突破硬件与空间限制

5大核心价值重构云游戏体验:Sunshine让你的游戏突破硬件与空间限制 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 在数字娱乐日益碎片化的今天,玩家们面临…...

mbed OS双极性步进电机驱动库设计与应用

1. 项目概述BipoarStepperMotor 是一个面向 ARM Cortex-M 系统、专为 mbed OS 平台设计的双极性步进电机驱动库。该库不依赖特定硬件抽象层(HAL)变体,而是基于 mbed OS 提供的标准 DigitalOut 和 PwmOut 接口构建,具备良好的跨平台…...

【HALCON实战】set_window_param:解锁图形窗口高级定制与性能调优

1. 为什么你需要掌握set_window_param? 在机器视觉项目开发中,图形窗口就像工程师的眼睛。我见过太多同行把90%的精力花在算法优化上,却忽视了窗口显示这个"最后一公里"问题。直到某次在客户现场演示时,程序因为频繁刷新…...

DanKoe 视频笔记:个人成长:如何变得更加“不同意”(创造一个现实扭曲场)

在本节课中,我们将学习如何通过有意识地坚持自我、明确目标并有效沟通,来构建一个强大的“现实扭曲场”,从而更坚定地追求自己想要的生活,而非被动地迎合他人。 我们常常被教导要友善、随和,避免冲突。然而&#xff0c…...

WebPages 发布

WebPages 发布 引言 随着互联网技术的飞速发展,Web技术已经成为现代信息社会不可或缺的一部分。WebPages作为Web技术的重要应用,旨在为用户提供高效、便捷的网页浏览体验。本文将详细介绍WebPages的发布过程,包括技术选型、功能设计、性能优化以及用户体验等方面。 技术选…...

果实采摘机械手的设计【论文+CAD图纸+Creo三维+外文文献翻译】

果实采摘机械手作为现代农业装备领域的重要创新,其核心作用在于解决传统人工采摘效率低、劳动强度大、成本高等问题。通过机械结构与控制系统的协同设计,该设备可模拟人手抓取动作,精准完成果实识别、定位、采摘及收集全流程,显著…...

AVR机器人固件基座:负熵架构与确定性调度

1. 项目概述“Negentropic Base”是一个面向AVR微控制器平台的嵌入式固件基础框架,专为移动机器人(尤其是轮式探测车、自主巡线小车、轻量级自主导航平台)设计。其名称中的“Negentropic”(负熵)并非玄学术语&#xff…...

Tsunami Arduino硬件抽象库:高精度信号发生与频率测量

1. Tsunami信号发生器与频率计硬件抽象库概述Tsunami 是一款面向嵌入式测试与教学场景的多功能信号发生器与频率计硬件平台,其核心价值在于将高精度模拟信号生成、宽频带数字信号捕获与实时频率测量能力集成于紧凑的单板系统中。本库(tsunami-arduino&am…...

STM32L152C段式LCD驱动库深度解析与移植指南

1. 项目概述LCD_DISCO_L152C是专为 STM32L152C-DISCO 开发板设计的 LCD 驱动库,其核心目标是提供轻量、可靠、可移植的底层显示控制能力。该库并非从零构建,而是基于 ST 官方为 STM32L476VG-DISCO(如 NUCLEO-L476RG 或 DISCOVERY-BOARD-L476V…...

C语言在嵌入式开发中的核心地位与实践技巧

1. 为什么C语言仍然是嵌入式开发的基石?作为一名在嵌入式行业摸爬滚打十年的老工程师,我见过太多人轻视C语言的重要性。直到现在,我面试的应届生中仍有超过60%对指针的理解停留在"变量地址"这种表层概念。但现实是,全球…...

GyverTimers:ATmega硬件定时器寄存器级精准控制

1. GyverTimers 库深度技术解析:面向 ATmega328P 与 ATmega2560 的硬件定时器全功能控制 GyverTimers 是一款专为 AVR 微控制器设计的轻量级、高精度硬件定时器控制库,其核心价值在于 绕过 Arduino 框架的抽象层,直接操作 ATmega 系列 MCU 的…...

别再手动调参了!用GCNet模块给你的ResNet模型一键注入全局感知能力(附PyTorch代码)

全局感知能力升级:用GCNet模块为ResNet模型注入高效注意力机制 在计算机视觉领域,ResNet架构因其出色的性能和稳定性成为众多任务的基准模型。然而,随着注意力机制的兴起,传统卷积神经网络在长距离依赖建模上的局限性逐渐显现。本…...

BM42S3021-1热电偶模块嵌入式驱动与I²C集成实战

1. BM42S3021-1热电偶模块底层技术解析与嵌入式集成实践1.1 模块硬件架构与通信协议本质BM42S3021-1是Best Modules公司推出的高精度热电偶信号调理模块,其核心并非简单的IC从设备,而是一个集成了冷端补偿(Cold Junction Compensation, CJC&a…...

XBeeATCmds库:Arduino嵌入式AT命令封装实践

1. XBeeATCmds 库概述:面向嵌入式开发者的 AT 命令封装实践XBeeATCmds 是一个专为 Arduino 平台设计的轻量级 C 封装库,其核心目标是将 Digi XBee 系列模块(包括 Series 1、Series 2/2B、Series 3 及兼容 Zigbee、802.15.4、DigiMesh 协议的模…...

intv_ai_mk11多场景落地:覆盖内容运营、教育辅助、行政办公等6大方向

intv_ai_mk11多场景落地:覆盖内容运营、教育辅助、行政办公等6大方向 1. 模型介绍与核心能力 intv_ai_mk11是一款基于Llama架构的中等规模文本生成模型,特别适合处理通用问答、文本改写、解释说明和简短创作等任务。这个模型已经完成了本地部署优化&am…...

3个技巧让Blender对齐效率提升10倍:QuickSnap插件全攻略

3个技巧让Blender对齐效率提升10倍:QuickSnap插件全攻略 【免费下载链接】quicksnap Blender addon to quickly snap objects/vertices/points to object origins/vertices/points 项目地址: https://gitcode.com/gh_mirrors/qu/quicksnap 在三维建模的日常工…...

小白友好!MogFace本地部署全攻略,从安装到检测只需3步

小白友好!MogFace本地部署全攻略,从安装到检测只需3步 1. 工具简介 MogFace是一款基于CVPR 2022论文的高精度人脸检测工具,特别适合需要保护隐私的本地化应用场景。它能够准确识别照片中的多个人脸,无论这些人脸是大是小、是正脸…...

7个高效步骤:Meshroom开源三维重建工具从入门到精通

7个高效步骤:Meshroom开源三维重建工具从入门到精通 【免费下载链接】Meshroom 3D Reconstruction Software 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom 技术原理:三维重建的底层逻辑与技术选型 摄影测量技术的数学基础 三维重建技…...

STM32 SRAM调试实战与优化技巧

1. STM32 SRAM调试实战指南在嵌入式开发中,我们通常将程序烧录到Flash中运行。但当你需要快速验证代码、调试硬件问题或进行临时测试时,使用STM32内部SRAM运行程序会是个高效的选择。我最近在调试一个LED控制程序时,就采用了SRAM运行的方式&a…...

PySide6多线程避坑指南:你的‘暂停’和‘停止’真的安全吗?

PySide6多线程避坑指南:你的‘暂停’和‘停止’真的安全吗? 在PySide6的多线程开发中,暂停和停止线程看似简单的操作背后,隐藏着许多开发者容易忽视的陷阱。本文将深入剖析这些潜在问题,并提供经过实战验证的安全解决方…...

弹幕盒子:5分钟掌握专业弹幕制作,零基础也能轻松上手

弹幕盒子:5分钟掌握专业弹幕制作,零基础也能轻松上手 【免费下载链接】danmubox.github.io 弹幕盒子 项目地址: https://gitcode.com/gh_mirrors/da/danmubox.github.io 你是否曾为视频制作寻找合适的弹幕工具而烦恼?想要给视频添加互…...

ABAP - SMW0实现Excel模板下载与数据上传解析全流程指南(附完整代码)

1. 为什么需要Excel模板下载与上传功能 在企业级应用开发中,Excel模板的下载与上传功能几乎是标配。想象一下这样的场景:财务部门需要每月收集各部门的预算数据,如果让每个部门直接在SAP系统里录入,操作复杂且容易出错。而提供一个…...

3步解锁Windows 11 LTSC应用商店:企业版系统的应用生态解决方案

3步解锁Windows 11 LTSC应用商店:企业版系统的应用生态解决方案 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 在企业环境中部署的Window…...

告别复杂安装:用快马AI一键生成opencode可运行原型

最近在折腾一个开源项目时,被各种依赖安装和环境配置搞得头大。作为一个经常需要快速验证想法的开发者,我一直在寻找能跳过这些繁琐步骤的工具。直到发现了InsCode(快马)平台,它彻底改变了我的开发流程。 传统安装的痛点 以前要运行一个openc…...

Dramatron:AI驱动的剧本创作革命

Dramatron:AI驱动的剧本创作革命 【免费下载链接】dramatron Dramatron uses large language models to generate coherent scripts and screenplays. 项目地址: https://gitcode.com/gh_mirrors/dr/dramatron 价值定位:重新定义创意写作流程 在…...

AI辅助开发新体验:与快马平台协作迭代,智能生成与优化企业网站代码

AI辅助开发新体验:与快马平台协作迭代,智能生成与优化企业网站代码 最近在帮朋友做一个企业网站项目,尝试了用AI辅助开发的方式,整个过程比想象中顺畅很多。特别是通过InsCode(快马)平台的AI协作功能,从生成初始代码到…...

BEYOND REALITY Z-Image新手入门:三步生成你的第一张8K写真人像

BEYOND REALITY Z-Image新手入门:三步生成你的第一张8K写真人像 1. 为什么选择BEYOND REALITY Z-Image? 在当前的AI图像生成领域,写实人像一直是最具挑战性的任务之一。传统模型往往难以平衡细节精度与自然感,生成的图片要么过于…...

解锁Switch无限可能:TegraRcmGUI图形化注入工具实战指南

解锁Switch无限可能:TegraRcmGUI图形化注入工具实战指南 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI 当你想为Nintendo Switch安装自定义系统…...

STM32水质监测系统开发与物联网应用

1. 项目概述 作为一名嵌入式开发工程师,我最近完成了一个基于STM32的河流水质监测系统项目。这个系统能够实时检测水体的PH值、电导率和浊度等关键参数,并通过物联网技术实现远程监控和自动调节功能。在实际应用中,我发现这套系统特别适合用于…...