登录/注册

oled驱动方式简介及相关程序

OLED驱动方式分为无源OLED(PMOLED)驱动方式和有源OLED(AMOLED)驱动方式。无源OLED属于电压驱动型,驱动方式比较简单,驱动视电流决定灰阶,在小尺寸、普通显示产品上,分辨率和画质不错,有源OLED属于电流驱动型,在电流整流性较无源OLED驱动方式佳,且不易产生漏电。

更多

以下是关于OLED驱动方式的简介及相关程序实现(中文):


OLED驱动方式简介

OLED(Organic Light-Emitting Diode)驱动分为被动矩阵(PMOLED)主动矩阵(AMOLED) 两种:

  1. PMOLED

    • 逐行扫描,每个像素点按行列坐标单独控制。
    • 优点:结构简单,成本低。
    • 缺点:刷新率低,功耗高,仅适合小尺寸屏。
  2. AMOLED

    • 每个像素集成薄膜晶体管(TFT)和电容,独立控制亮度。
    • 优点:响应快、对比度高、功耗低,适合大尺寸高分辨率屏。
    • 主流控制芯片:SSD1306、SH1106(单色屏),SSD1327(灰度屏)等。

关键驱动原理


编程示例(I2C驱动SSD1306)

环境说明

代码步骤

#include "stm32f1xx_hal.h"

// I2C地址(0x3C或0x3D)
#define OLED_ADDR 0x3C

// 发送命令函数
void OLED_WriteCmd(uint8_t cmd) {
    uint8_t data[2] = {0x00, cmd}; // 0x00表示命令
    HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDR, data, 2, HAL_MAX_DELAY);
}

// 发送数据函数
void OLED_WriteData(uint8_t dat) {
    uint8_t data[2] = {0x40, dat}; // 0x40表示数据
    HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDR, data, 2, HAL_MAX_DELAY);
}

// 初始化OLED
void OLED_Init() {
    HAL_Delay(100);
    OLED_WriteCmd(0xAE); // 关闭显示
    OLED_WriteCmd(0xD5); // 设置时钟分频
    OLED_WriteCmd(0x80); // 建议值
    OLED_WriteCmd(0xA8); // 设置多路复用率
    OLED_WriteCmd(0x3F); // 对应64行
    OLED_WriteCmd(0xD3); // 设置显示偏移
    OLED_WriteCmd(0x00); // 无偏移
    OLED_WriteCmd(0x40); // 设置起始行
    OLED_WriteCmd(0x8D); // 电荷泵设置
    OLED_WriteCmd(0x14); // 启用电荷泵
    OLED_WriteCmd(0x20); // 内存地址模式
    OLED_WriteCmd(0x00); // 水平地址模式
    OLED_WriteCmd(0xA1); // 段重映射(翻转水平)
    OLED_WriteCmd(0xC8); // 扫描方向(翻转垂直)
    OLED_WriteCmd(0xDA); // COM引脚配置
    OLED_WriteCmd(0x12);
    OLED_WriteCmd(0x81); // 对比度设置
    OLED_WriteCmd(0xCF); // 对比度值
    OLED_WriteCmd(0xD9); // 预充电周期
    OLED_WriteCmd(0xF1);
    OLED_WriteCmd(0xDB); // VCOMH电压
    OLED_WriteCmd(0x40);
    OLED_WriteCmd(0xA4); // 全局显示恢复
    OLED_WriteCmd(0xA6); // 正常显示(非反色)
    OLED_WriteCmd(0xAF); // 开启显示
}

// 清屏
void OLED_Clear() {
    for(uint8_t page=0; page<8; page++) {
        OLED_WriteCmd(0xB0 + page); // 设置页地址
        OLED_WriteCmd(0x00);        // 列低地址
        OLED_WriteCmd(0x10);        // 列高地址
        for(uint8_t col=0; col<128; col++) {
            OLED_WriteData(0x00);   // 写0清空像素
        }
    }
}

// 在(x,y)位置显示一个点
void OLED_DrawPixel(uint8_t x, uint8_t y) {
    if(x>=128 || y>=64) return;
    uint8_t page = y / 8;          // 计算页(每页8行)
    uint8_t bit_mask = 1 << (y%8); // 位掩码

    OLED_WriteCmd(0xB0 + page); // 跳转到指定页
    OLED_WriteCmd(0x00 + (x&0x0F));     // 列低地址
    OLED_WriteCmd(0x10 + (x>>4));       // 列高地址

    // 读取当前数据,修改对应位后写回
    // 注意:实际需实现读函数(略),此处简化直接写
    OLED_WriteData(bit_mask); 
}

// 主函数
int main() {
    HAL_Init();
    MX_I2C1_Init(); // 初始化I2C
    OLED_Init();
    OLED_Clear();

    // 在坐标(10,10)处画点
    OLED_DrawPixel(10, 10);

    while(1);
}

要点说明

  1. 页地址模式
    SSD1306将屏幕分为8页(Page0~7),每页8行,发送数据时按列填充字节(LSB对应顶部像素)。

  2. 显存更新流程

    • 设置目标页(0xB0~0xB7
    • 设置列地址(低4位0x00~0x0F + 高4位0x10~0x1F
    • 连续写入128字节填满一行
  3. 中文字符显示: 使用字库(如16×16点阵),将汉字拆解为32字节数据逐行写入。


进阶优化

  1. 双缓冲机制
    在MCU内存创建缓冲区,修改后一次性刷入GRAM,避免闪烁。
  2. 使用图形库
    • u8g2(跨平台):支持多种OLED控制器,内置绘图/字体功能。
    • LVGL(嵌入式GUI):复杂界面开发。

注意事项

通过上述代码框架,可扩展实现图形、文本及动态显示效果,满足嵌入式设备显示需求。

CH32V103基础教程87-硬件SPI驱动OLED

前面章节介绍了使用模拟SPI驱动OLED,本章教程将介绍使用硬件SPI驱动OLED

2023-05-10 16:17:21

CH32V103基础教程86-模拟SPI驱动OLED

前面章节有介绍过IIC驱动OLED,使用的为4引脚OLED屏,本章教程主要使用模拟SPI

2023-05-10 16:16:09

CH32V103基础教程69-IIC-硬件IIC驱动 OLED

本章教程主要在第十四章硬件IIC读写EEPROM的基础上进行改动,使用硬件IIC驱动OLED屏。 1、IIC简介及

2023-05-05 16:52:09

OLED 驱动模块程序代码

0.96 寸的OLED,网上也有很多相关的驱动代码,但是大部分代码都是能用即可,不是特别关注

资料下载 石玉兰 2021-12-27 19:13:37

基于SPI通信方式OLED显示

本文目的是通过SPI的通信方式进行OLED的显示,同时与之前学的I2C通信方式进行对比,在实践中学习SPI通信。目录(一)SPI

资料下载 佚名 2021-12-08 09:06:09

OLED显示屏驱动:8080并口,IIC,SPI三种驱动方式

本文介绍了OLED驱动的基本原理,又介绍了OLED的几种驱动

资料下载 佚名 2021-11-24 15:21:07

第4章:程序编写和调试环境简介PPT下载

第4章:程序编写和调试环境简介PPT下载

资料下载 hlly向山举目 2021-10-08 14:49:18

使用51单片机进行OLED驱动程序免费下载

本文档的主要内容详细介绍的是使用51单片机进行OLED驱动的程序免费下载。

资料下载 王杰 2019-08-27 17:29:00

CH32V103基础教程68-IIC-模拟IIC驱动 OLED

本章教程主要在第三十七章软件模拟IIC读写EEPROM的基础上进行改动,使用模拟IIC驱动OLED屏。 1、IIC简介及

2023-05-05 16:49:23

OLED通信方式概述

一、概述OLED通信方式有8080、6800、SPI、二、实验材料1、0.96寸OLED屏。2、最小系统STM32F103C8T6.3、杜邦线若

2022-02-16 06:22:33

OLED模块的驱动方式是怎样的

OLED模块的驱动方式是怎样的?

2022-01-27 07:10:37

OLED驱动的基本原理及驱动方式

本文介绍了OLED驱动的基本原理,又介绍了OLED的几种驱动

2021-12-07 07:39:58

各种OLED屏幕的使用方式的总结

本文主要是笔者在学习单片机过程中,所遇各种OLED屏幕的使用方式的总结归纳。关于SSD1306驱动的

2021-12-07 07:38:47

OLED模块及驱动简介

的关键部分进行了讲解分析,希望能够对初学者起到一定的帮助。(这不是我原创,我也不知道在哪翻到的一个PDF,网上还没有)一、模块及驱动简介1.引脚OLED

2021-12-07 06:17:03

OLED简介

摘抄自正点原子官方PPTOLED简介  OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic

2021-08-09 08:33:07
7天热门专题 换一换
相关标签