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;
	else
		g_oled_gram[ x ][ pos ] &= ~temp;
}


可以结合这篇文章:

    STM32——LCD(1)认识

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

尚硅谷 Vue3+TypeScript 学习笔记(中)

目录 三、路由 3.1. 【对路由的理解】 3.2. 【基本切换效果】 3.3. 【两个注意点】 3.4.【路由器工作模式】 3.5. 【to的两种写法】 3.6. 【命名路由】 3.7. 【嵌套路由】 3.8. 【路由传参】 query参数 params参数 3.9. 【路由的props配置】 3.10. 【 replace属性…

Java实现快乐贩卖馆管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视频收藏模块2.4 视频评分模块2.5 视频交易模块2.6 视频好友模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 搞笑视频表3.2.2 视频收藏表3.2.3 视频评分表3.2.4 视频交易表 四、系…

Zustand:简化状态管理的现代React状态库

Zustand&#xff1a;简化状态管理的现代React状态库 Zustand是一个用于管理状态的现代React状态库。它提供了简洁、可扩展和高效的状态管理解决方案&#xff0c;使得在React应用中处理复杂的状态逻辑变得更加容易和直观。本文将介绍Zustand的主要特点、使用方法以及它在React开…

vim常用命令以及配置文件

layout: article title: “vim文本编译器” vim文本编辑器 有三种模式: 命令模式 文本模式, 末行模式 vim命令大全 - 知乎 (zhihu.com) 命令模式 插入 i: 切换到输入模式&#xff0c;在光标当前位置开始输入文本。 a: 进入插入模式&#xff0c;在光标下一个位置开始输入文…

JavaWeb02-MyBatis

目录 一、MyBatis 1.概述 2.JavaEE三层架构简单介绍 &#xff08;1&#xff09;表现层 &#xff08;2&#xff09;业务层 &#xff08;3&#xff09;持久层 3.框架 4.优势 &#xff08;1&#xff09;JDBC的劣势 &#xff08;2&#xff09;MyBatis优化 5.使用 &#…

算法刷题:移动零

移动零 .题目链接详解curdesc算法原理 答案 . 题目链接 移动零 详解 题目要求我们要把数组中所有的零都移动到数组的末尾,且要求其余数字顺序不改变.这道题,我们使用到的是双指针算法: 利用两个指针,将数组分为三个部分, 三个区间分别为 [0,desc][desc1,cur-1][cur,n-1] 在…

HTML 标签

HTML&#xff1a;超文本标记语言 HTML骨架结构&#xff1a; html标签&#xff1a;网页的整体 head标签&#xff1a;网页的头部 body标签&#xff1a;网页的身体 HTML的注释 VS code中&#xff1a;ctrl/ 浏览器不会执行注释 HTML标签的构成&#xff1a; 双标签&#xff1a…

DC-9靶机渗透详细流程

信息收集&#xff1a; 1.存活扫描&#xff1a; arp-scan -I eth0 -l 发现靶机ip&#xff1a;192.168.10.132 └─# arp-scan -I eth0 -l 192.168.10.1 00:50:56:c0:00:08 (Unknown) 192.168.10.2 00:50:56:e5:b1:08 (Unknown) 192.168.10.132 //靶机 00:0c…

物联网和工业4.0

在当今这个快速发展的技术时代&#xff0c;物联网&#xff08;IoT&#xff09;和工业4.0成为了推动全球进入新工业时代的两大驱动力。对于刚入行的人来说&#xff0c;深入理解这两个概念及其背后的技术原理&#xff0c;对于把握未来的职业机会至关重要。 物联网&#xff0c;简…

备战蓝桥杯---动态规划(理论基础)

目录 动态规划的概念&#xff1a; 解决多阶段决策过程最优化的一种方法 阶段&#xff1a; 状态&#xff1a; 决策&#xff1a; 策略&#xff1a; 状态转移方程&#xff1a; 适用的基本条件 1.具有相同的子问题 2.满足最优子结构 3.满足无后效性 动态规划的实现方式…

Go内存优化与垃圾收集

Go提供了自动化的内存管理机制&#xff0c;但在某些情况下需要更精细的微调从而避免发生OOM错误。本文介绍了如何通过微调GOGC和GOMEMLIMIT在性能和内存效率之间取得平衡&#xff0c;并尽量避免OOM的产生。原文: Memory Optimization and Garbage Collector Management in Go 本…

2024-02-08(Flume)

1.Flume 的架构和MQ消息队列有点类似 2.Flume也可以做数据的持久化操作 在Channel部分选择使用File channel组件 3.Flume进行日志文件监控 场景&#xff1a;企业中应用程序部署后会将日志写入到文件中&#xff0c;我们可以使用Flume从各个日志文件将日志收集到日志中心以便…

用bootstrap结合jQuery实现简单的模态对话框

嗨害嗨&#xff0c;我又来了奥。今天呢&#xff0c;给大家分享一个工作中常用到的插件——模态对话框的用法。想必大家在工作中也遇到很多页面&#xff0c;需要用模态对话框进行交互的吧&#xff0c;现在呢&#xff0c;就让我们一起来了解一下它的使用吧。 首先&#xff0c;我…

Dlib检测人脸特征点标号图

dlib进行人脸检测时候&#xff0c;所有人脸的标号图&#xff0c;c检索的时候注意从0索引开始

Infuse通过Alist添加115网盘资源

说明 通过Alist代理管理115网盘&#xff0c;Infuse再添加Alist代理的115网盘的WebDAV 准备一台Linux服务器安装Alist 我这里用的华为云CentOS7&#xff0c;使用Docker容器 安装Alist docker run -d --restartalways -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID0 …

深入浅出:Golang的Crypto/SHA256库实战指南

深入浅出&#xff1a;Golang的Crypto/SHA256库实战指南 介绍crypto/sha256库概览主要功能应用场景库结构和接口实例 基础使用教程字符串哈希化文件哈希化处理大型数据 进阶使用方法增量哈希计算使用Salt增强安全性多线程哈希计算 实际案例分析案例一&#xff1a;安全用户认证系…

跟着pink老师前端入门教程-day23

苏宁网首页案例制作 设置视口标签以及引入初始化样式 <meta name"viewport" content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0"> <link rel"stylesheet" href"css/normaliz…

如何从格式化的 U盘恢复不见的数据

格式化与使用任何容量有限的存储设备&#xff08;例如 USB 闪存驱动器&#xff09;密切相关。在大多数情况下&#xff0c;一次性删除所有内容比逐个删除文件更快、更方便。但是&#xff0c;如果您犯了错误并意外格式化了错误的驱动器怎么办&#xff1f;是否可以从格式化的闪存驱…

C++重新入门-C++运算符

目录 1. 算术运算符 2. 关系运算符 3.逻辑运算符 4.位运算符 5.赋值运算符 6.杂项运算符 7.C 中的运算符优先级 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 内置了丰富的运算符&#xff0c;并提供了以下类型的运算符&#xff1a; 算术运算符关系运算符逻…

Python入门:常用模块—os模块及sys模块

os模块 sys模块 import sys print(sys.argv) # 命令参数list&#xff0c;第一个元素是程序本身路径 print(sys.exit()) # 退出程序&#xff0c;正常退出是exit(0) print(sys.version) # 获取python解释程序的版本信息 print(sys.maxint()) # 最大…