OLED效果设计笔记1:显示横向滚动字幕

news2025/1/16 1:56:46

 本文使用芯片:STM32 F103 C8T6 最小系统板

从这个笔记开始,学习一下OLED的一些显示动画效果的实现,尝试自己能够做出一些接近实际产品的界面切换,动画效果设计~

文章提供源码,测试效果图,原理介绍,测试工程下载。

 

目录

OLED 基础知识学习:

滚动显示硬件支持:

初步设计思路:

构想与瑕疵:

下载测试:

横向滚动字幕程序设计:

滚动控制的OLED命令:

下载测试与注意点:

 引脚接线:

测试工程下载:


OLED 基础知识学习:

对于OLED的显示基础以及基础代码,本文不讲,不了解的可以看以下文章:

STM32 F103C8T6学习笔记8:0.96寸单色OLED显示屏显示字符_NULL指向我的博客-CSDN博客

STM32 F103C8T6学习笔记9:0.96寸单色OLED显示屏—自由取模显示—显示汉字与图片_NULL指向我的博客-CSDN博客

有时OLED屏幕大小有限制,我们需要显示的句子长度可能超过了屏幕的长度,此时就需要滚动显示来解决,这样我们的句子显示长度在一定程度上会增长,但滚动显示字幕又有几个设计方案,不同的方案对应不同的使用场景,我们将会逐个学习。

滚动显示硬件支持:

我们可以从器件手册的FEATURES小节可以知道支不支持硬件滚动。SSD1306器件手册中FEATURES描述说明了它是支持滚动显示的,现在市面上许多0.96寸等OLED显示屏都是使用SSD1306驱动,支持滚动显示的。

初步设计思路:

构想与瑕疵:

我们先初步构想实现一下字幕滚动,本质是打印起点X或者Y坐标的增加,通过这个方式可以使打印起点不断变化,结合SSD1306支持的滚动显示以及合适时长的延时,从而实现滚动字幕,但实际是否如我们构想的那样呢,现在实践测试一下:

首先编写适当的字符串打印代码,如下:

//显示一个字符号串
void OLED_ShowString_2(u8 x,u8 y,u8 *chr,u8 Char_Size)
{
	unsigned char j=0;
	while (chr[j]!='\0')                    //循环打印直到字符串结尾
	{		
			OLED_ShowChar(x,y,chr[j],Char_Size);//打印一个字符
			x+=8;j++;        										//下标下移,打印下个字符
			if(x>120){x=0;}											//X不能超过120,否则会印在下一行
	}
}

然后在主函数写上对应打印逻辑:


char  buf[20];   //用于暂存oled数据
uint16_t choice,x,y;

int main(void)
{	
	init_ALL();     //初始化所有函数
  while(1)
	{
			sprintf(buf,"Hello World");
			OLED_ShowString_2(x,2,(u8 *)buf,16);
			delay_ms(55);     //延时55ms
			x++;              //X坐标增加
			if(x>=128) {x=0;} //x坐标不超过128
	}
}

下载测试:

下载测试发现基本的效果实现了,但文字刷新有拖尾现象,这是因为之前刷新过的区域没有被清除显示的原因。

其次我们将其改为长字符串,会发现显示更不正常了,因为长字符串本身显示占用就长于屏幕总长了,(此处将Hello World 改为 Welcome to my world),而我们选择滚动显示的原因就是想要在有限的长度显示更多的信息,这样编程显然达不到我们的需求~

横向滚动字幕程序设计:

滚动控制的OLED命令

其实SSD1306中有关于滚动控制的OLED命令如下:

它的一个重要配置是需要我们配置0~7页,哪些页需要滚动,这个只要设置起始与终止页即可,这样这俩页之间打印的内容就会滚动播放了,(注意:有些字符字母只占一页,但大部分汉字占俩页,一定要界定好!)

另一个配置就是设置滚动速度,这个填的越长,时间间隔就越大。

				OLED_WR_Byte(0x2E,OLED_CMD); //关闭滚动
				OLED_WR_Byte(0x26,OLED_CMD); //向右滚动,27则向左
				OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节 发送空字节 设置为0x00即可
				OLED_WR_Byte(0x02,OLED_CMD); //起始页 这里为2
				OLED_WR_Byte(0x07,OLED_CMD); //滚动速度 设置滚动步长的时间间隔, 帧为单位 
				OLED_WR_Byte(0x04,OLED_CMD); //终止页 这里为4(表示从页这开始不用滚动)
				OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节
				OLED_WR_Byte(0xFF,OLED_CMD); //虚拟字节
				OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动

我们将其添加入程序:

这个滚动显示就是命令,一般只要设置好就行

char  buf[20];   //用于暂存oled数据
uint16_t choice,x,y;

int main(void)
{	
	init_ALL();     //初始化所有函数
	
	sprintf(buf,"Hello World ");
	OLED_ShowString(0,2,(u8 *)buf,16);
	
	delay_ms(5);                 //延时等显示稳定

	OLED_WR_Byte(0x2E,OLED_CMD); //关闭滚动
	OLED_WR_Byte(0x26,OLED_CMD); //向右滚动,27则向左
	OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节 发送空字节 设置为0x00即可
	OLED_WR_Byte(0x02,OLED_CMD); //起始页 这里为2
	OLED_WR_Byte(0x07,OLED_CMD); //滚动速度 设置滚动步长的时间间隔, 帧为单位 
	OLED_WR_Byte(0x04,OLED_CMD); //终止页 这里为4(表示从页这开始不用滚动)
	OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节
	OLED_WR_Byte(0xFF,OLED_CMD); //虚拟字节
	OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动
	
  while(1)
	{
		
	}
}

下载测试与注意点:

现在的效果正是我们需要的,并且不需要MCU一直刷新了,配置一次即可自动滚动,但经过我的测试,这种滚动显示,有以下注意点:

1.还是不能显示过长的字符串

2.起点横向的X坐标只能是0,过大会有显示错误

3.配置滚动之前,建议延时5ms先等显示稳定

因此这个SSD1306命令式的写法虽然方便好用,但也有限制,它的横向滚动设置,只能是0~~128这 个区间,不能设置成别的区间,比如我只想他在屏幕一半区域滚动~

 引脚接线:

SCL    接   PB6

SDA    接   PB7

//-----------------OLED IIC端口定义----------------  					   

#define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_6)//SCL
#define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_6)

#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_7)//SDA
#define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_7)

测试工程下载:

https://download.csdn.net/download/qq_64257614/88251719?spm=1001.2014.3001.5503

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

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

相关文章

每日一题:leetcode 1267 统计参与通信的服务器

这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有。 如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其他服务…

Python“牵手”搜款网(VVIC)商品列表数据,关键词搜索搜款网API接口数据,搜款网API接口申请指南

搜款网(VVIC)平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范,搜款网API接口是指通过编程的方式,让开发者能够通过HTTP协议直接访问搜款网平台的数据,包括商品信息、店铺信息、物流…

Cesium 后台返回的图片如何在代码里生成路径

文章目录 需求分析解决 需求 Cesium 中给地球加皮肤,但是皮肤是后台接口返回的图片,是动态值 分析 我们平常所了解到的贴图,路径只能是静态目录下的图片,而去请求后台的图片时出现了跨域,所以这个方法不可行&#…

安全服务工程师-徐庆臣(黑客洗白者)

职位描述 负责安全服务项目中的实施部分,包括:漏洞扫描、渗透测试、安全基线检 查、代码审计、应急响应等; 爆发高危漏洞后时行漏洞的分析应急; 对公司安全产品的后端支持; 掌握专业文档编写技巧; 关注行业…

计算机网络(10) --- 高级IO

计算机网络(9) --- 数据链路层与MAC帧_哈里沃克的博客-CSDN博客数据链路层与MAC帧https://blog.csdn.net/m0_63488627/article/details/132178583?spm1001.2014.3001.5501 1.IO介绍 1.IO本质 1.如果数据没有出现,那么读取文件其实会被阻塞住…

Linux下的系统编程——系统调用(五)

前言: 由操作系统实现并提供给外部应用程序的编程接口。(Application Programming Interface,API)。系统调用就是应用程序同系统之间数据交互的桥梁。 open/close函数 1.open函数: (1)int open(char *pathname, int flags) …

【C/C++】继承中构造函数与析构函数执行的顺序

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

14.4K Star,一款外观漂亮、运行快速、动画细腻的开源免费UI组件库

之前给大家推荐了很多后台模版&#xff0c;有读者希望推荐一些跟通用的好看组件&#xff0c;毕竟出了后台还有很多其他场景嘛。所以&#xff0c;今天继续给大家推荐一个广受好评的UI组件库&#xff1a;NextUI 主要特性 NextUI的主要目标是简化开发流程&#xff0c;为增强的用户…

Docker file解析

文章目录 简介构建的三步骤Docker执行Dockerfile的大致流程DockerFile常用保留字指令创建第一个Dockerfile镜像的缓存特性 Docker file 解析 简介 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本&#xff0c;记录了镜像构…

PHP竞赛管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 竞赛管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 下载地址 https://download.csdn.net/download/qq_41221322/88244066 二、功能介绍 后…

【校招VIP】前端校招考点之页面转换算法

考点介绍&#xff1a; 在地址映射过程中&#xff0c;若在页面中发现所要访问的页面不在内存中&#xff0c;则产生缺页中断。当发生缺页中断时&#xff0c;如果操作系统内存中没有空闲页面&#xff0c;则操作系统必须在内存选择一个页面将其移出内存&#xff0c;以便为即将调入的…

C++信息学奥赛1147:最高分数的学生姓名

#include <iostream> #include <string> using namespace std; int main() {int n;// 输入一个整数ncin>>n;cin.ignore();string arr;string str;int max0;int fen;// 循环读取n个评分和对应的字符串for(int i0;i<n;i){cin>>fen>>arr;if(fen&…

分布式事务(7):SpringCloud2.0整合LCN

目前LCN版本已经升级为4.0了,但是官方没有SpringCloud2.0的demo案例。 因为LCN本身是开源的,有些大神对LCN框架源码做修改,可以支持SpringCloud2.0版本。 下载地址:https://download.csdn.net/download/u013938578/88251904 1 下载LCN服务端源码 https://download.csdn.…

ubuntu22.04.1-live的vm虚拟机扩展磁盘

1、虚拟机分配硬盘100G&#xff0c;进系统df -h根目录只有50G 2、查看所有块设备 lsblk 3、 查看卷信息vgdisplay 4、在原有基础上增加49G lvextend -L 49G /dev/ubuntu-vg/ubuntu-lv 5、调整大小 resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

深入理解线性回归模型的评估与优化方法

文章目录 &#x1f340;引言&#x1f340;模型评估方法&#x1f340;均方误差&#xff08;MSE&#xff09;&#x1f340;均方根误差&#xff08;RMSE&#xff09;&#x1f340;绝对平均误差&#xff08;MAE&#xff09;&#x1f340;模型优化策略&#x1f340;特征工程&#x1…

百度开源2019新型冠状病毒RNA预测算法

为应对2019年新型冠状病毒&#xff08;2019-nCoV&#xff09;爆发&#xff0c;中国科技巨头百度开源了其RNA&#xff08;核糖核酸&#xff09;预测算法LinearFold。该工具可以显著加快病毒RNA二级结构的预测时间&#xff0c;为一线研究人员提供在危机时期更好地了解病毒和开发靶…

多线程学习之多线程的三种实现方式及应用

一、继承Thread类 1.1方法 方法名说明void run()在线程开启后&#xff0c;此方法将被调用执行void start()使此线程开始执行&#xff0c;Java虚拟机会调用run方法() run()方法和start()方法的区别&#xff1a; run()&#xff1a;封装线程执行的代码&#xff0c;直接调用&am…

PDF如何转ppt?PDF转ppt的方法

PDF是一种广泛应用于文档传输和存储的格式&#xff0c;然而&#xff0c;在某些情况下&#xff0c;我们可能需要将PDF文件转换为PPT&#xff0c;以便更加灵活地编辑和展示内容。那么&#xff0c;PDF如何转ppt呢?在本文中&#xff0c;我们将介绍几种常用的方法和工具&#xff0c…

智慧编织非遗篇章,AI激活文化精髓的未来!

引言&#xff1a;非遗&#xff0c;指一系列与人类活动、传统技艺、知识体系和社会实践有关的非物质文化元素。它是一个民族难以估量的瑰宝&#xff0c;在中国悠久的历史中&#xff0c;古代先民在劳动生活中创造了大量非物质文化遗产&#xff0c;例如陶瓷的烧制、刺绣、织布技艺…

大隐隐于市,分享5个不为人知的小众软件

​ 电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。今天分享5个实用的软件&#xff0c;简单实用&#xff0c;效果拉满&#xff0c;堪称工作生活必备&#xff0…