STM32F4 OLED详解
一、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详解相关推荐
- STM32F4 RTC详解
一.RTC介绍 RTC(Real Time Clock):实时时钟. RTC是个独立的BCD定时器/计数器.RTC 提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志.R ...
- 液晶显示器LCD与OLED详解
与传统的CRT显示器(阴极射线显像管,又称大屁股显示器)不同,LCD与OLED属于液晶显示器范畴,原理也完全不一样 一.LCD屏幕原理 上面已经说过,一副完整的图像是由无数多个像素点拼凑而成,每个像素 ...
- LED,LCD,OLED,miniLED,MicroLED显示详解
本文首先简单介绍简单的器件以及显示原理,基本的名词解释 LED,LCD,OLED,miniLED,MicroLED显示详解 1,LED 2,LCD 2,OLED 3,miniLED 4,MicroLE ...
- 【51单片机快速入门指南】4.2: SSD1306 OLED屏(0.96寸、1.3寸)的I2C控制详解
目录 硬知识 SSD1306简介 I2C 接口 从机地址位(SA0) I2C 总线写数据 命令解码器 晶振电路和显示时间发生器 复位 图形显示数据RAM (GDDRAM) 命令表 基本命令表 部分指令 ...
- OLED屏幕详解-显示原理
上期我们看懂了LCD液晶屏幕的科普,现在让我们看看OLED O·LED OLED,全称Organic Light-Emitting Diode,又称又称为有机电激光显示.有机发光半导体.它直接由小灯泡 ...
- 进阶篇——树莓派OLED模块的使用 大量例程详解
树莓派OLED模块的使用教程大量例程详解 #树莓派# 简介 Python有两个可以用的OLED库 [Adafruit_Python_SSD1306库]->只支持SSD1306 [Luma.ole ...
- spi协议时序图和四种模式实际应用详解
大家好,我是无际. 上个章节我们讲解了spi接口定义,今天我们更加深入讲解下spi协议时序图和spi四种模式的用法. 刚开始接触单片机开发时,最怕就是看时序图,对于我来说就是奇怪的知识. 特别是SPI ...
- FreeRTOS 之一 源码目录文件 及 移植详解
写在前面 2018/1/15更新了文章中的部分错误. FreeRTOS源码为最新版的10.0.1.FreeRTOS 10包含两个重要的新功能:流缓冲区和消息缓冲区. 从10.0.0开始,FreeRTO ...
- RISC-V应用创新大赛 | 一文详解RVB2601套件 助你快速上手赢比赛
简介:参加RISC-V应用创新大赛 赢取开发资源和好礼 上周我们发布了平头哥芯片开放社区×阿里云天池"RISC-V应用创新大赛"正式开赛! 为大家介绍了RISC-V应用创新大赛的赛 ...
- fpga供电电压偏低会怎样_正点原子【FPGA-开拓者】第三章 硬件资源详解
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 本章,我们将向大家详细介绍ALIENTEK开拓者FPGA ...
最新文章
- log4j2.xml 文件
- hdu2457 Trie图+dp
- 【MySQL】PREPARE 的应用
- Qt文档阅读笔记-Object Model初步解析
- 用vertx compose写链式操作
- python chardet模块_python编码检测原理以及chardet模块应用
- Eclipse 官方简体中文语言包下载地址及安装方法
- 为什么红黑树查询快_面试被问“红黑树”,我一脸懵逼…
- linux防火墙reject,linux 防火墙配置与REJECT导致没有生效问题(示例代码)
- 数据可视化,2022的春运地图
- DSP28335 ecap使用
- 基于PL/SQL的数据库备份方法
- 鹰迪电商|抖音发布作品定位可以随便设置吗?
- 34. 实战:基于某api实现歌曲检索与下载(附完整源代码)
- [前端css-1] 拟物化图标
- Python自动化运维—Paramiko实验(思科)
- oracle10G-通过DBF文件恢复数据(模拟环境下实践)
- VIA威盛4-IN-1最新驱动 v4.55
- 北大操作系统陈向群第十一章知识点
- 手机版专题页面的注意事项