STM32——OLED(2)

目录

一、OLED显示屏介绍

引脚说明:

二、OLED驱动

1. 基本认识

2. OLED 驱动原理 及过程

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

1. 8080并口读/写过程

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

四、屏幕显示

1. GRAM

补:

2. 画点原理

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

/* 此为示例函数 */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任意位置画点。

/* 此为示例函数 */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;elseg_oled_gram[ x ][ pos ] &= ~temp;
}


可以结合这篇文章:

    STM32——LCD(1)认识

http://t.csdnimg.cn/u90RTicon-default.png?t=N7T8http://t.csdnimg.cn/u90RT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/470384.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三百四十七回

文章目录 1. 概念介绍2. 原理与方法2.1 知识对比2.2 使用方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"加密包crypto"相关的内容&#xff0c;本章回中将介绍characters包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 在项目中会遇到获取字…

【教程】C++语言基础学习笔记(十)——结构体

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【C语言基础学习】系列文章 第一章 《项目与程序结构》 第二章 《数据类型》 第三章 《运算符》 第四章 《流程控制》 第五章…

C语言------一种思路解决实际问题

1.比赛名次问题 ABCDE参加比赛&#xff0c;那么每个人的名次都有5种可能&#xff0c;即1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff1b; int main() {int a 0;int b 0;int c 0;int d 0;int e 0;for (a 1; a < 5; a){for (b 1; b < 5; b){for…

Python eval函数

在Python编程中&#xff0c;eval()函数是一个强大且灵活的内置函数&#xff0c;用于动态执行字符串表达式或代码。尽管eval()函数具有强大的功能&#xff0c;但它也带来了一些潜在的安全风险&#xff0c;因此在使用时需要谨慎。本文将深入探讨eval()函数的用法、语法、示例代码…

网红铁头因涉黄经历遭全网封杀

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 铁头根本没意识到自己是公众人物了。 知名网红“铁头惩恶扬善”帐号被全网封禁&#xff0c;原因是因为遭到别人举报&#xff0c;1月12日凌晨“铁头”在直播的时候呢&#xff0c;自爆其涉黄经历。 铁头居然自己在直…

刚刚下载!unity应该怎么操作?来看看基操

也用了挺长时间unity了&#xff0c;有时候还是容易忘记基础使用&#xff0c;写一些吧。 以下应该是前年吧在学习飞宇unity时简单记录的。 文章目录 01游戏引擎是啥&#xff1f;02 Unity&#xff0c;你的优势呢&#xff1f;03 动~下载 & 安装04 你好&#xff0c;编辑器05 迈…

SpringCloud之Eureka注册中心和负载均衡

SpringCloud之Eureka注册中心和负载均衡 微服务技术栈认识微服务单体架构分布式架构微服务 微服务拆分及远程调用微服务拆分注意事项 Eureka注册中心提供者与消费者原理分析服务调用出现的问题Eureka的作用 使用流程1、搭建EurekaServer2、注册user-service3、在order-service完…

2024 年 7 款最佳电脑录屏软件 [免费和付费]

录屏是捕获桌面上活动的软件应用程序。用户可以根据自己的要求创建视频记录。免费屏幕录像机广泛用于演示、演示、教程、游戏等。 录音机还有助于内容创建、远程协作和员工培训。这些录音机具有多种特性和功能。它提供了音频录制、网络摄像头集成和快速编辑工具的选项。您可以根…

python 人脸检测器

import cv2# 加载人脸检测器 关键文件 haarcascade_frontalface_default.xml face_cascade cv2.CascadeClassifier(haarcascade_frontalface_default.xml)# 读取图像 分析图片 ren4.png image cv2.imread(ren4.png) gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 进行人脸…

猫头虎分享已解决Bug || 数据库锁定(Database Locking):DBLockTimeout, DatabaseDeadlock

猫头虎分享已解决Bug &#x1f43e; || 文件系统错误&#xff08;File System Error&#xff09;&#xff1a;FileSystemCorruption, FileSystemNotMounted 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; …

抽象的问题1

vue3&#xff0c;在使用v-mode绑定属性时&#xff0c;发生了奇怪的问题&#xff0c;渲染失败了 代码如下 <template><div><form><div>账号<input v-model"form_user_Data.username" type"text"></div><div>密…

云备份项目:在云端保护您的数据【一、初识】

桃李不言&#xff0c;下自成蹊 文章目录 项目简介项目设计方案服务端功能划分客户端功能划分 项目环境搭建环境准备第三方库JsonCppbundle数据压缩库httplib 总结 ☘️项目源代码&#xff1a;云备份 ☘️云备份专栏&#xff1a;云备份 项目简介 云备份系统是一个自动化的备份解…