STM32:OLED屏幕开发

一、OLED原理

        所谓的屏幕就是由一个个小灯组成,每个小灯称之为一个像素。只要在屏幕上有选择地点亮一部分小灯,就可以显示我们想要的图案。所谓下分辨率就是屏幕上的小灯数量。常见单片机中常见的屏幕分辨率常见的就是128(列长)*64(行高)。如果每个小灯都由单片机直接相连控制,那么需要8000多个引脚才能满足需求,着显然是不切实际的。因此需要借助“屏幕驱动芯片”来控制OLED。我们只需要通过IIC或者SPI等通信协议与屏幕驱动芯片进行通信,就可以操控屏幕上着8000多个小灯的亮灭了。

        对于CH1116屏幕驱动芯片,就可以驱动128*64分辨率的屏幕。这类芯片将整个屏幕分成8个页。每页为是128*8.因此每页的行数就成了8行,每一列上有8个数据刚好可以用8个字节0/1表示。CH1116的IIC设备地址为0x7A。

        CH1116的关键操作为设置页地址和列地址

指令说明
启动IIC通信  0x7A  0x00为OLED的外设地址,指令要以0x00开头
设置第0页的页地址0xB0
设置第7页的页地址0xB7
设置列地址0x5A(低4位)0x0A设置列地址要分为两次,0xYZ设置地址时,要设置0x0Z 和0x1Y。因此设置第90列的像素列,即0x5A需要列0x0A(低4位),0X15(高4位).
设置列地址0x5A(高4位)0X15
设置数据,即像素亮灭       0x40

 发送0x40 0x00 <当前列数据bitmap 下一数据bitmap  ....>

。例如确定第0页和列地址为0x5A后,发送:

0x40  0x01 0x03  ;那么屏幕上的第90列的第一个像素点和第91列的前两个像素点就会亮。

CH1116有一个非常方便的特性,就是在设置数据时,当前页和列的数据被设置好后,列地址会自动加1.例如,确定好第0页和第0列后,一股脑发送0x40 0xFF 0xFF .....0xFF(128个0xFF),那么OLED屏幕的前8行就全部被点亮了。

二、准备工作

        新建工程,设置IIC1 的模式,由于要操作的数据要求更新要快,因此要把IIC的速度模式设置成快速模式。此时IIC的时钟频率也变到了400000。一般没做其他操作情况下,STM32的内部时钟一直都采用8M速度运行。

        由于我的开发板上有外部晶振,可以给STM32提速。将高速时钟源HSE设置为Crystal/Ceramic Resonator ,随后打开 Clock Configuration 时钟设置。将HCLK这里设置最大值72.。也就是切换到了外部晶振和72MHZ的时钟频率

而后勾选上为每个外设生成对饮的头文件和源文件。保存并生成代码

结合STM32:AHT20温湿度传感器驱动程序开发-CSDN博客中的配置,实现AHT20温湿度测试结果在OLED屏幕上显示。

三、OLED驱动库

(1) 资源下载

https://download.csdn.net/download/superSmart_Dong/88555975 可下载。

其中oled.c/oled.h为oled驱动实现,font.h/font.c为字模图模。aht20.c/aht20.h为AHT驱动实现。

(2)字模图模获取地址。

led.baud-dance.com

(3) 资源库的说明。

在波特律动LED字模生成器获取字模。

获取到的字模放在如下数组中,并调整数组大小和头文件等。这样才可以在OLED显示

获取到的图模数据复制下来,记下图模宽和高。

将复制的数据贴到font.c和在font.h中声明。调用

OLED_DrawPicture(oled_x,oled_y, size_wide,size_hight, iconVardata, OLED_COLOR_NORMAL);

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

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

相关文章

【云栖 2023】张治国:MaxCompute 架构升级及开放性解读

云布道师 本文根据 2023 云栖大会演讲实录整理而成&#xff0c;演讲信息如下 演讲人&#xff1a;张治国|阿里云智能计算平台研究员、阿里云 MaxCompute 负责人 演讲主题&#xff1a;MaxCompute架构升级及开放性解读 活动&#xff1a;2023云栖大会 MaxCompute 发展经历了三个阶…

发币成功,记录一下~

N年前就听说了这样一种说法——“一个熟练的区块链工程师&#xff0c;10分钟就可以发出一个新的币” 以前仅仅是有这么一个认识&#xff0c;但当时并不特别关注这个领域。 最近系统性学习中&#xff0c;今天尝试发币成功啦&#xff0c;记录一下&#xff5e; 发在 Sepolia Tes…

Minikube Mac安装使用

minikube start | minikube 安装minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 sudo install minikube-darwin-amd64 /usr/local/bin/minikube 1 2 启动本地集群 minikube start --driverdocker # 等待几分钟 让docker 拉…

分布式锁实现对比

1、对比 tairzookeper性能高 低可靠性低 高 2、zookeper实现分布式锁 特点&#xff1a; Zookeeper能保证数据的强一致性&#xff0c;用户任何时候都可以相信集群中每个节点的数据都是相同的。 加锁 客户端在ZooKeeper一个特定的节点下创建临时顺序节点&…

kerberos-MS14-068(kerberos域用户提权)

点击星标&#xff0c;即时接收最新推文 微软官方在2014年11月18日发布了一个紧急补丁&#xff0c;Windows全版本服务器系统受到影响&#xff0c;包括Windows Server 2003&#xff0c;Windows Server 2008&#xff0c;Windows Server 2008 R2&#xff0c;Windows Server 2012和W…

【ROS】RViz2源码分析(三):核心类VisualizerApp

【ROS】郭老二博文之:ROS目录 1、简述 VisualizerApp包含了三个主要的功能: QApplication:程序中主要调用app_->processEvents()来处理刷新界面,处理闪屏VisualizationFrame:窗口类都在此;RosClientAbstractionIface包含rclcpp::Node:代表ROS节点2、VisualizationF…

LeetCode热题100——二分查找

二分查找 1. 搜索插入位置2. 搜素二维矩阵3. 在排序数组中查找第一个和最后一个元素位置 1. 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 // 题…

【电路笔记】-星三角变换(Star-Delta Transformation)

星三角变换&#xff08;Star-Delta Transformation&#xff09; 文章目录 星三角变换&#xff08;Star-Delta Transformation&#xff09;1、概述1.1 单相配置1.2 多相配置 2、三相连接2.1 Y配置2.2 Δ配置 3、Y-Δ 和 Δ-Y 变换3.1 Y-Δ变换3.2 Δ-Y变换3.3 应用 4、总结 本文…

蓝桥杯每日一题2023.11.20

题目描述 “蓝桥杯”练习系统 (lanqiao.cn) 题目分析 方法一&#xff1a;暴力枚举&#xff0c;如果说数字不在正确的位置上也就意味着这个数必须要改变&#xff0c;进行改变记录即可 #include<bits/stdc.h> using namespace std; const int N 2e5 10; int n, a[N], …

在springBoot中同时使用mysql和MongoDB

在SpringBoot中非关系向数据库MongoDB和关系型数据库MySQL都可通过引入相关依赖并按照指定配置单独集成; mysql引入依赖: compile "org.springframework.boot:spring-boot-starter-web:1.5.18.RELEASE"compile "org.springframework.boot:spring-boot-start…

Java将List转换为Tree数据

思路 我们首先要知道数据中&#xff0c;哪两列能够体现父子级我们需要找到最顶层父 id 是什么&#xff0c;因为只有知道最顶层的父 id&#xff0c;我们才能进行递归我们要在不改变数据的原有结构下&#xff0c;而转换为 Tree 结构&#xff0c;那么就需要创建新的结构 代码 /…

【活动通知】2023 Elastic Meetup 北京站将于12月2日下午1点30在北京召开

《2023 Elastic Meetup 北京站》活动将于 12 月 2 日下午 1 点 30 在北京市海淀区西北旺东路10号腾讯北京总部大楼213会议室举办&#xff0c;届时将有行业专家及知名企业分享他们在 Elasticsearch 应用中的经验与观点&#xff0c;带来最前沿的技术分享与思想碰撞。 请使用电脑浏…

C++标准模板库(STL)-set介绍

在C中&#xff0c;set是一种容器&#xff0c;它包含了唯一元素的有序集合。set库提供了一系列的类模板&#xff0c;用于创建和操作集合。 set基本操作 insert()&#xff1a;此操作用于将元素插入到set中。调用insert()函数&#xff0c;并传入需要插入的元素即可。例如&#x…

车载毫米波雷达行业发展5——企业

5.1 博世 5.1.1 公司简介 博世集团创立于 1886 年&#xff0c;业务涵盖汽车与智能交通技术、工业技术、消费品、能源与建 筑技术四大领域&#xff0c;是德国最大的工业企业之一、全球最大的汽车零部件供应商、最早研究车载毫米波雷达的企业之一。博世在高级辅助驾驶和自动驾驶…

移动语义和完美转发

移动语义和完美转发 移动语义 移动语义是 C11 引入的一项特性&#xff0c;通过右值引用&#xff08;Rvalue Reference&#xff09;实现。它的目标是提高对于临时对象或即将销毁的对象的效率&#xff0c;避免不必要的深拷贝&#xff0c;而是在必要的时候将资源所有权从一个对象…

B Label, BL Label 指令

B Label, BL Label 跳转到标号Label 处&#xff0c;B跳转指令的跳转范围大小为[0,32MB], 可以往前跳&#xff0c;也可以往后条&#xff0c;无条件跳转指令B主要用在循环&#xff0c;分之结构的汇编程序中&#xff0c;使用示例如下。 CMP R2, #0 REQ label 若R2 0,则跳转到labe…

mfc140u.dll丢失的解决方法,以及mfc140u.dll解决方法的优缺点

在使用电脑过程中&#xff0c;有时会遇到一些与动态链接库文件&#xff08;DLL&#xff09;相关的错误。其中&#xff0c;mfc140u.dll丢失的错误是较为常见的一种。当这个关键的mfc140u.dll文件丢失或损坏时&#xff0c;可能会导致某些应用程序无法正常运行。在本文中&#xff…

linux清理僵尸进程

当你top看到这个&#xff0c;或者按M后看到内存吃的很多&#xff0c;那你看下有没有&#x1f9df; 二选一查看是什么进程 ps aux | egrep "Z|defunct" ps -aux | awk {if($8"Z"){print $2,$11}}没用直接杀杀杀 kill -9 查到的PID号可中断下载文件 wget…

AlmaLinux download

前言 一个开源的、社区拥有和管理的、永远免费的企业级Linux发行版&#xff0c;专注于长期稳定性&#xff0c;提供一个健壮的生产级平台。AlmaLinux操作系统是1:1二进制兼容RHEL和pre-Stream CentOS。 AlmaLinux download VersionAlmaLinux downloadAlmaLinux backup阿里云…

webshell免杀之传参方式

1.Cookie 由于Cookie基本上是每个web应用都需要使用到的&#xff0c;php应用在默认情况下&#xff0c;在Cookies请求头中会存在一个PHPSESSIDxxxx这样的cookie&#xff0c;其实这个就可以成为我们的传参位置 使用burp抓包将内容改成base64加密后的命令 可以看到已经执行成功了…