一、OLED原理

OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且OLED显示屏幕可视角度大,并且能够节省电能,从2003年开始这种显示设备在MP3播放器上得到了应用。
LCD都需要背光,而OLED不需要,因为它是自发光的。这样同样的显示,OLED效果要来得好一些。以目前的技术,OLED的尺寸还难以大型化,但是分辨率确可以做到很高。
OLED 8080并行接口线说明

  • CS:OLED片选信号。
  • WR:向OLED写入数据。
  • RD:从OLED读取数据。
  • D[7:0]:8位双向数据线。
  • RST(RES):硬复位OLED。
  • DC:命令/数据标志(0,读写命令;1,读写数据)。

    OLED8080并口读写过程:
    先根据要写入/读取的数据的类型,设置DC为高(数据)/低(命令),然后拉低片选,选中SSD1306,接着我们根据是读数据,还是要写数据置RD/WR为低,然后:
  • 1.读数据:在RD的上升沿, 使数据锁存到数据线(D[7:0])上;
  • 2.写数据:在WR的上升沿,使数据写入到SSD1306里面;

    OLED模块显存:SSD1306的显存总共为12864bit大小,SSD1306将这些显存分为了8页。每页包含了128个字节,总共8页,这样刚好是12864的点阵大小。

    程序显示原理:在STM32的内部建立一个缓存(共128*8个字节),在每次修改的时候,只是修改STM32上的缓存(实际上就是SRAM),在修改完了之后,一次性把STM32上的缓存数据写入到OLED的GRAM。当然这个方法也有坏处,就是对于那些SRAM很小的单片机(比如51系列)就比较麻烦了。
    SSD1306命令:
  • 命令0X81:设置对比度。包含两个字节,第一个0X81为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。
  • 命令0XAE/0XAF:0XAE为关闭显示命令;0XAF为开启显示命令。
  • 命令0X8D:包含2个字节,第一个为命令字,第二个为设置值,第二个字节的BIT2表示电荷泵的开关状态,该位为1,则开启电荷泵,为0则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。
  • 命令0XB0~B7:用于设置页地址,其低三位的值对应着GRAM的页地址。
  • 命令0X00~0X0F:用于设置显示时的起始列地址低四位。
  • 命令0X10~0X1F:用于设置显示时的起始列地址高四位。

二、OLED的使用

OLED初始化过程:

OLED初始化:

//初始化SSD1306
void OLED_Init(void)
{…//设置IO口模式,所有用到的io口设置为推挽模式。
GPIO_Init();…//初始化代码,写相关寄存器
OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示
OLED_WR_Byte(0xD5,OLED_CMD); //设置时钟分频因子,震荡频率
OLED_WR_Byte(80,OLED_CMD);   //[3:0],分频因子;[7:4],震荡频率
OLED_WR_Byte(0xA8,OLED_CMD); //设置驱动路数
OLED_WR_Byte(0X3F,OLED_CMD); //默认0X3F(1/64)
OLED_WR_Byte(0xD3,OLED_CMD); //设置显示偏移
OLED_WR_Byte(0X00,OLED_CMD); //默认为0
…
…
OLED_Clear();
}

OLED写一个字节:

//向SSD1306写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{DATAOUT(dat);      if(cmd)OLED_RS_Set();else OLED_RS_Clr();           OLED_CS_Clr();OLED_WR_Clr();  OLED_WR_Set();OLED_CS_Set();     OLED_RS_Set();
}


OLED更新缓存,显示内容:

u8 OLED_GRAM[128][8];
void OLED_Refresh_Gram(void)
{u8 i,n;            for(i=0;i<8;i++)  {  OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   for(n=0;n<128;n++)OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA); }
}


OLED画点函数:

void OLED_DrawPoint(u8 x,u8 y,u8 t)
{u8 pos,bx,temp=0;if(x>127||y>63)return;//超出范围了.pos=7-y/8;bx=y%8;temp=1<<(7-bx);if(t)OLED_GRAM[x][pos]|=temp;else OLED_GRAM[x][pos]&=~temp;
}

OLED字符显示函数:

//在指定位置显示一个字符,包括部分字符
//x:0~127  y:0~63
//mode:0,反白显示;1,            size:选择字体 12/16/24
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{                   u8 temp,t,t1; u8 y0=y;u8 csize=(size/8+((size%8)?1:0))*(size/2); //得到字体一个字符对应点阵集所占的字节数chr=chr-' ';//得到偏移后的值        for(t=0;t<csize;t++){   if(size==12)temp=asc2_1206[chr][t];       //调用1206字体else if(size==16)temp=asc2_1608[chr][t];   //调用1608字体else if(size==24)temp=asc2_2412[chr][t];   //调用2412字体else return;  //没有的字库for(t1=0;t1<8;t1++){if(temp&0x80)OLED_DrawPoint(x,y,mode);else OLED_DrawPoint(x,y,!mode);temp<<=1;y++;if((y-y0)==size){y=y0;x++;  break;}}    }
}

STM32F4 OLED详解相关推荐

  1. STM32F4 RTC详解

    一.RTC介绍 RTC(Real Time Clock):实时时钟. RTC是个独立的BCD定时器/计数器.RTC 提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志.R ...

  2. 液晶显示器LCD与OLED详解

    与传统的CRT显示器(阴极射线显像管,又称大屁股显示器)不同,LCD与OLED属于液晶显示器范畴,原理也完全不一样 一.LCD屏幕原理 上面已经说过,一副完整的图像是由无数多个像素点拼凑而成,每个像素 ...

  3. LED,LCD,OLED,miniLED,MicroLED显示详解

    本文首先简单介绍简单的器件以及显示原理,基本的名词解释 LED,LCD,OLED,miniLED,MicroLED显示详解 1,LED 2,LCD 2,OLED 3,miniLED 4,MicroLE ...

  4. 【51单片机快速入门指南】4.2: SSD1306 OLED屏(0.96寸、1.3寸)的I2C控制详解

    目录 硬知识 SSD1306简介 I2C 接口 从机地址位(SA0) I2C 总线写数据 命令解码器 晶振电路和显示时间发生器 复位 图形显示数据RAM (GDDRAM) 命令表 基本命令表 部分指令 ...

  5. OLED屏幕详解-显示原理

    上期我们看懂了LCD液晶屏幕的科普,现在让我们看看OLED O·LED OLED,全称Organic Light-Emitting Diode,又称又称为有机电激光显示.有机发光半导体.它直接由小灯泡 ...

  6. 进阶篇——树莓派OLED模块的使用 大量例程详解

    树莓派OLED模块的使用教程大量例程详解 #树莓派# 简介 Python有两个可以用的OLED库 [Adafruit_Python_SSD1306库]->只支持SSD1306 [Luma.ole ...

  7. spi协议时序图和四种模式实际应用详解

    大家好,我是无际. 上个章节我们讲解了spi接口定义,今天我们更加深入讲解下spi协议时序图和spi四种模式的用法. 刚开始接触单片机开发时,最怕就是看时序图,对于我来说就是奇怪的知识. 特别是SPI ...

  8. FreeRTOS 之一 源码目录文件 及 移植详解

    写在前面 2018/1/15更新了文章中的部分错误. FreeRTOS源码为最新版的10.0.1.FreeRTOS 10包含两个重要的新功能:流缓冲区和消息缓冲区. 从10.0.0开始,FreeRTO ...

  9. RISC-V应用创新大赛 | 一文详解RVB2601套件 助你快速上手赢比赛

    简介:参加RISC-V应用创新大赛 赢取开发资源和好礼 上周我们发布了平头哥芯片开放社区×阿里云天池"RISC-V应用创新大赛"正式开赛! 为大家介绍了RISC-V应用创新大赛的赛 ...

  10. fpga供电电压偏低会怎样_正点原子【FPGA-开拓者】第三章 硬件资源详解

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 本章,我们将向大家详细介绍ALIENTEK开拓者FPGA ...

最新文章

  1. log4j2.xml 文件
  2. hdu2457 Trie图+dp
  3. 【MySQL】PREPARE 的应用
  4. Qt文档阅读笔记-Object Model初步解析
  5. 用vertx compose写链式操作
  6. python chardet模块_python编码检测原理以及chardet模块应用
  7. Eclipse 官方简体中文语言包下载地址及安装方法
  8. 为什么红黑树查询快_面试被问“红黑树”,我一脸懵逼…
  9. linux防火墙reject,linux 防火墙配置与REJECT导致没有生效问题(示例代码)
  10. 数据可视化,2022的春运地图
  11. DSP28335 ecap使用
  12. 基于PL/SQL的数据库备份方法
  13. 鹰迪电商|抖音发布作品定位可以随便设置吗?
  14. 34. 实战:基于某api实现歌曲检索与下载(附完整源代码)
  15. [前端css-1] 拟物化图标
  16. Python自动化运维—Paramiko实验(思科)
  17. oracle10G-通过DBF文件恢复数据(模拟环境下实践)
  18. VIA威盛4-IN-1最新驱动 v4.55
  19. 北大操作系统陈向群第十一章知识点
  20. 手机版专题页面的注意事项

热门文章

  1. 盘古开源:中央网信办发布“十四五”国家信息化规划,数字化春风吹遍全国
  2. Web UI设计基础
  3. 如何查看centos系统版本以及配置信息
  4. wordpress英文主题怎样汉化成中文网站模板
  5. SSDP协议的Python示例
  6. kwgt公式代码大全_电脑文字识别ocr 数学公式 识别 mathtype
  7. 三菱四节传送带梯形图_PLC控制四节传送带设计
  8. 批处理学习笔记3:使用echo命令输出空格行
  9. 卡尔曼滤波和互补滤波的区别
  10. 微信小程序 源码资源汇总