STM32——OLED(2)

目录

一、OLED显示屏介绍

引脚说明:

二、OLED驱动

[1. 基本认识](#1. 基本认识)

[2. OLED 驱动原理 及过程](#2. OLED 驱动原理 及过程)

[三、SSD1306工作时序 (8080时序)](#三、SSD1306工作时序 (8080时序))

[1. 8080并口读/写过程](#1. 8080并口读/写过程)

[2. SSD1306工作时序 (8080时序)](#2. SSD1306工作时序 (8080时序))

四、屏幕显示

[1. GRAM](#1. GRAM)

补:

[2. 画点原理](#2. 画点原理)

[3. 显示字符](#3. 显示字符)

显示步骤:

具体操作:(使用的软件:PCtoLCD2002)

五、OLED基本驱动实现(任意地方画点)


一、OLED显示屏介绍

一块小尺寸(0.96寸)、高亮、自带升压电路的**++高性能OLED显示模块++**,分辨率为128 * 64,采用 SSD1306 驱动 IC。

引脚说明:

① CS:OLED片选信号(低电平有效)

② WR:向 OLED写入 数据

③ RD:向 OLED读取 数据

④ D[7:0]:8位 双向 数据线

⑤ RST( RES ):硬复位 OLED(低电平有效)

⑥ DC:数据 / 命令标志(0:命令;1:数据)

二、OLED驱动

1. 基本认识

(1)8080时序:LCD驱动芯片一般使用8080时序 控制,实现 数据写入 / 读取

(2)初始化序列(数组):屏厂提供,用于初始化特定屏幕,不同屏幕厂家不完全相同

(3)画点函数、读点函数(非必需):基于这两个函数可以 实现各种绘图功能

2. OLED 驱动原理 及过程

OLED屏驱动的核心是:++OLED驱动芯片++。

(1)选择驱动芯片时序:根据时序实现数据写入/读取。( 8080底层操作函数:写数据、写命令、读数据

(2)初始化LCD:由厂家提供,用于初始化屏幕。发送初始化序列/数组 )

(3)实现画点函数:有了画点函数,就可以 实现各种操作函数了。

(4)实现读点函数:用于读取屏幕颜色,一般上 GUI了才用,可不用。

三、SSD1306工作时序 (8080时序)

并口总线时序 ,常用于MCU屏 驱动 IC的访问,由 Intel提出,也叫 英特尔总线

1. 8080并口读/写过程

(1)设置DC为高(数据)/低(命令) :根据写入 / 读取的数据类型。

(2)拉低片选:选中 SSD13063。

(3)设置RD / WR为低:根据是读数据还是写数据

(4)拉高RD / WR,出现上升沿 :在 RD的上升沿,使数据锁存到 数据线 D[7:0]上。在 WR的上升沿,使数据写入到 SSD1306里。

2. SSD1306工作时序 (8080时序)

四、屏幕显示

1. GRAM

图形显示数据RAM是一个位映射静态RAM++保存要显示的位模式++。内存大小为128 * 64位,可分为8页,从页0到页7,用于黑白128 * 64点阵显示。

补:

对 GRAM 进行操作时,列地址指针会自动递增 。当 列地址指针到达 列结束地址时,重置为 开始地址,但 页地址指针不变。用户必须 设置新的页面和列地址,以便访问 下一页GRAM内容。

2. 画点原理

建立一个 OLED的 GRAM :单片机内部需要 128 * 8个字节,每次修改 的时候,只是修改单片机上的 GRAM(实际上就是 SRAM),在修改完之后,++一次性把单片机 内部的 GRAM 写入到OLED 的 GRAM++

一个通用的点 (x,y) 置 1 表达式为:OLED_GRAM [ x ] [ y / 8 ] |= 1 << y % 8

3. 显示字符

ASCII字符:基于拉丁字母的一套电脑编码系统,共128个字符:33个控制字符 和 95个显示字符。

计算机使用的 二进制字符编码 ,就叫 内码,简称 编码

显示步骤:

(1)必须先有其 点阵数据 ,点阵数据的集合,叫做 字库。

(2)单片机根据点阵数据 按取模方向进行 描点还原,显示出 字符。

(3)ASCII 字符宽度 = 汉字宽度的一半。

从上到下 从左到右 高位在前

具体操作:( 使用的软件:++PCtoLCD2002++)

(1)设置字体大小

(2)设置自摸选择

(3)输入ASCII字符集(95个)

(4)生成字模

五、OLED基本驱动实现(任意地方画点)

**1. 确定 lO 连接关系:**开发板 OLED接口 原理图。

**2. 初始化 IO 口:**初始化连接 OLED的各个 IO 口。

3. 编写 8080接口 函数: oled_wf_byte

cpp 复制代码
/* 此为示例函数 */

void oled_wr_byte(uint8_t data, uint8_t cmd) 
{	
	OLED_RS (cmd);	/* 数据类型,由传参决定 */
    OLED_CS ( 0 );	/* 拉低片选线,选中 SSD1306 */
    OLED_WR ( 0 );	/* 拉低WR线,准备数据 */
    oled_data_out(data); /* WR低电平期间,准备数据*/
 	OLED_WR ( 1 );	/* 在WR上升沿,数据发出 */
    OLED_CS ( 1 );	/* 取消片选 */
 	OLED_RS ( 1 );	/* 释放RS线,恢复默认 */
}

void oled_data_out(uint8_t data)
{
    GPIOC->ODR = (GPIOC->ODR & 0XFF00) | (data & 0X00FF);
}

4. 编写 OLED初始化函数: 编写 oled_int 函数,完成初始化序列配置。

5. 编写 OLED画点 函数编写: oled_draw_point函数,实现OLED任意位置画点。

cpp 复制代码
/* 此为示例函数 */

void oled_draw_point(uint8_t  x, uint8_t  y, uint8_t  dot) 
{	
	uint8_t pos, bx, temp = 0;
	if (x > 127 || y > 63)	 return;    /* 超出范围 */ 		
	pos = y / 8; 		/*  页地址 */
	bx = y % 8; 		/*  计算y在对应字节里面的位置 */
	temp = 1 << bx;	/*  转换后y对应的bit位置 */
	
	if ( dot )	/*  画实心点 */
		g_oled_gram[ x ][ pos ] |= temp;
	else
		g_oled_gram[ x ][ pos ] &= ~temp;
}

可以结合这篇文章:

STM32------LCD(1)认识

http://t.csdnimg.cn/u90RThttp://t.csdnimg.cn/u90RT

相关推荐
美式小田2 小时前
单片机学习笔记 9. 8×8LED点阵屏
笔记·单片机·嵌入式硬件·学习
兰_博3 小时前
51单片机-独立按键与数码管联动
单片机·嵌入式硬件·51单片机
猫爪笔记3 小时前
前端:HTML (学习笔记)【2】
前端·笔记·学习·html
_不会dp不改名_3 小时前
HCIA笔记3--TCP-UDP-交换机工作原理
笔记·tcp/ip·udp
时光の尘3 小时前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
-一杯为品-3 小时前
【51单片机】程序实验5&6.独立按键-矩阵按键
c语言·笔记·学习·51单片机·硬件工程
嵌入式大圣5 小时前
单片机结合OpenCV
单片机·嵌入式硬件·opencv
熙曦Sakura5 小时前
完全竞争市场
笔记
dr李四维6 小时前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
日晨难再6 小时前
嵌入式:STM32的启动(Startup)文件解析
stm32·单片机·嵌入式硬件