OLED显示屏其实就是个128*64
64=8 * 8 八页的界面

OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。

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

在STM32的内部建立一个 缓存(共128*8个字节),在每次修改的时候,只是修改STM32上的缓存(实际上就是SRAM),在修改完了之后,一次性把STM32上的缓存数据写入到OLED的GRAM。

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(size12)temp=asc2_1206[chr][t]; //调用1206字体
else if(size16)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;
}
}
}
}

字符码表

const unsigned char oled_asc2_1206[95][12]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/" ",0/
{0x18,0x00,0x24,0xC0,0x1B,0x00,0x0D,0x80,0x32,0x40,0x01,0x80},/"%",5/
{0x03,0x80,0x1C,0x40,0x27,0x40,0x1C,0x80,0x07,0x40,0x00,0x40},/"&",6/

{0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x06,0x40,0x00,0x00},/“c”,67/
{0x00,0x00,0x03,0x80,0x04,0x40,0x24,0x40,0x3F,0xC0,0x00,0x40},/“d”,68/

{0x00,0x00,0x40,0x20,0x7B,0xE0,0x04,0x00,0x00,0x00,0x00,0x00},/"}",93/
{0x40,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x40,0x00},/"~",94/
};
const unsigned char oled_asc2_1608[95][16]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/" ",0/ {0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00},/"%",5/
{0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08},/"&",6/

{0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00},/“7”,23/
{0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00},/“8”,24/
{0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xF0,0x00,0x00},/“9”,25/
}
字节是自己可以生成的


OLED显示STM32相关推荐

  1. 【STM32】OLED 显示实验代码详解

    文章目录 main.c oled.c oled.h main.c #include "led.h" #include "delay.h" #include &q ...

  2. STM32中断中调用OLED显示出现OLED花屏

    STM32中断中调用OLED显示出现OLED花屏 在TIM5中断处理函数中,我写了OLED显示,经过DEBUG发现程序执行到OLED显示语句的时候,OLED就会花屏. //中断服务处理函数 void ...

  3. STM32与OLED显示姓名学号

    一.SPI简介 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是由 Motorola 公司提出的一种高速的,全双工,同步的通信总线,被广泛地使用在 ADC.LC ...

  4. STM32通过I2C接口实现温湿度(AHT20)的采集与OLED显示及显示姓名学号

    文章目录 一.了解I2C总线协议 二.实现AHT20采集程序 三.温湿度采集--OLED显示 三.总结 四.参考链接 一.了解I2C总线协议 1.什么是I2C协议 I2C 通讯协议(Inter-Int ...

  5. 【STM32】OLED显示程序

    00. 目录 文章目录 00. 目录 01. OLED概述 02. OLED初始化 03. 硬件设计 04. 程序示例 05. 结果显示 06. 附录 07. 声明 01. OLED概述 OLED,即 ...

  6. STM32——OLED显示实验

    一.关于OLED 1.OLED(有机发光二极管)又称有机电激光显示.OLED同时具备自发光,不需背光源.对比度高.厚度薄.视角广.反应速度快.可用于挠曲面板.使用温度范围广.构造及制作过程简单等特性. ...

  7. 基于stm32与陀螺仪(mpu6050)的PID角度环算法,角度用OLED显示,使得智能车能在长时间跑直线和转直角弯,减小误差

    首先,我做智能车用的是stm32f103c8t6作为主控芯片,得到小车自身对于开始位置的三维变换角度所用的是mpu6050模块,其与主控芯片采用I2C通信.此通信原理接下来会加入介绍资料.其次还有一个 ...

  8. 基于STM32和ATH20实现OLED显示温湿度

    基于STM32和ATH20实现OLED显示温湿度 什么是OLED 一.主要代码 二. 硬件连接及结果 1.硬件连接 2.烧录显示 总结 参考文献 什么是OLED 有机电致发光器件(OLED)属于低电压 ...

  9. 基于STM32移植U8g2图形库——OLED显示(HAL库)

    前言:本文主要内容为将优秀的图形库U8g2移植到STM32单片机上,用于OLED显示精美UI.其实,目前GitHub上有需要优秀的开源GUI库,但是大部分的GUI解决方案并不适合0.96 OLED(1 ...

最新文章

  1. [转] python运行时内存分析工具meliae
  2. LNK1169 找到一个或多个多重定义的符号
  3. xgboost模型参数详解
  4. CPU 的 ring0、ring1、ring2、ring3
  5. 软件稳定性测试的测试点
  6. java kotlin lateinit_kotlin - 如何检查“lateinit”变量是否已初始化?
  7. BeetleX网关之请求聚合
  8. div内容用html语言写,html – 使用DIV作为另一个元素的背景
  9. DevExpress ActiveX
  10. python大神的程序_6年Python大神总结10个开发技巧,80%的人都不会
  11. vue组件弹出框点击显示隐藏
  12. 172.阶乘后的零 (力扣leetcode) 博主可答疑该问题
  13. excel文件损坏修复绝招_ps文件损坏有修复的软件!超强开挂辅助神器
  14. Windows 平台下 LiteIDE 的安装和使用
  15. 502 java_502 Bad Gateway
  16. 教学信息管理系统+SQL
  17. office 打开wps乱_为什么word文档用wps打开,格式乱了
  18. C语言/C++常见习题问答集锦(六十四) 之兔子繁殖(递归与非递归)
  19. cad高程标注插件lisp_【源码】CAD高程转标高,CAD插件大全,小懒人CAD工具箱
  20. 【python练习】羊车门问题

热门文章

  1. Python之浅谈exec函数
  2. Java 泛型方法/接口、泛型限定
  3. Ubuntu 20.04 日常软件及开发环境安装命令,包括QQ、搜狗、Chrome、vlc、网易云音乐安装方法(待整理!!!)
  4. JS实现敏感词过滤功能
  5. linux系统中的挂载点:
  6. overleaf表格_LaTeX基本命令使用教程(清晰实例)(Overleaf平台)(论文排版)
  7. Python自动化脚本:清空回收站的内容
  8. L1-020 帅到没朋友(两种方法)
  9. 无线安全[测试标准]
  10. MSSQL 数据页查询使他 DBCC PAGE 详细说明