基于SPI通信方式的OLED显示

news/2024/11/7 3:39:08/

基于SPI通信方式的OLED显示

文章目录

        • 基于SPI通信方式的OLED显示
          • 1、SPI简介
          • 2、OLED屏幕介绍
          • 3、OLED显示屏显示数据
          • 4、总结
          • 5、参考文献

1、SPI简介

SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设 备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间, 要求通讯速率较高的场合。

SPI 通讯设备之间的常用连接方式

在这里插入图片描述

SPI 通讯使用 3 条总线及片选线,3 条总线分别为 SCK、MOSI、MISO,片选线为 S S ,它们的作用介绍如下

在这里插入图片描述

SPI 基本通讯过程

在这里插入图片描述

这是一个主机的通讯时序。NSS、SCK、MOSI 信号都由主机控制产生,而 MISO 的信 号由从机产生,主机通过该信号线读取从机的数据。MOSI 与 MISO 的信号只在 NSS 为低 电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据

CPOL/CPHA 及通讯模式

SPI 一共有四种通讯模 式,它们的主要区别是总线空闲时 SCK 的时钟状态以及数据采样时刻

“时钟极性 CPOL”和“时钟相位 CPHA”

时钟极性 CPOL 是指 SPI 通讯设备处于空闲状态时,SCK 信号线的电平信号(即 SPI 通 讯开始前、 NSS 线为高电平时 SCK 的状态)。CPOL=0 时, SCK 在空闲状态时为低电平, CPOL=1 时,则相反。

时钟相位 CPHA 是指数据的采样的时刻,当 CPHA=0 时,MOSI 或 MISO 数据线上的 信号将会在 SCK 时钟线的“奇数边沿”被采样。当 CPHA=1 时,数据线在 SCK 的“偶数 边沿”采样。

在这里插入图片描述

当 CPHA=0 的时序图。首先,根据 SCK 在空闲状态时的电平,分为两种 情况。SCK 信号线在空闲状态为低电平时,CPOL=0;空闲状态为高电平时,CPOL=1。 无论 CPOL=0 还是=1,因为我们配置的时钟相位 CPHA=0,在图中可以看到,采样时 刻都是在 SCK 的奇数边沿。注意当 CPOL=0 的时候,时钟的奇数边沿是上升沿,而 CPOL=1 的时候,时钟的奇数边沿是下降沿。所以 SPI 的采样时刻不是由上升/下降沿决定 的。MOSI 和 MISO 数据线的有效信号在 SCK 的奇数边沿保持不变,数据信号将在 SCK 奇 数边沿时被采样,在非采样时刻,MOSI 和 MISO 的有效信号才发生切换。

当 CPHA=1 时,不受 CPOL 的影响,数据信号在 SCK 的偶数边沿被采样

在这里插入图片描述

由 CPOL 及 CPHA 的不同状态,SPI 分成了四种模式,主机与从机需要工作在相同的模式下才可以正常通讯,实际中采用较多的是“模式 0”与“模式 3”。

在这里插入图片描述

2、OLED屏幕介绍

OLED即有机发光管(Organic Light-Emitting Diode,OLED)。OLED显示技术具有自发光、广视角、几乎无穷高的对比度、较低功耗、极高反应速度、可用于绕曲性面板、使用温度范围广、构造及制程简单等有点,被认为是下一代的平面显示屏新兴应用技术。

OLED显示和传统的LCD显示不同,其可以自发光,所以不需要背光灯,这使得OLED显示屏相对于LCD显示屏尺寸更薄,同时显示效果更优。

常用的OLED屏幕有蓝色、黄色、白色等几种。屏的大小为0.96寸,像素点为
128*64,所以我们称为0.96oled屏或者12864屏。

OLED模块显存
OLED本身是没有显存的,它的显存是依赖于SSD1306提供的

SSD1306的显存总共为12864bit大小,SSD1306将这些显存分为了8页。每页包含了128个字节,总共8页,这样刚好是12864的点阵大小。

在这里插入图片描述

SSD1306芯片
SSD1306是一个单片CMOS、OLED/PLED驱动芯片可以驱动有机/聚合发光二极管点阵图形显示系统。由128 segments 和64 Commons组成。该芯片专为共阴极OLED面板设计。

SSD1306中嵌入了对比度控制器、显示RAM和晶振,并因此减少了外部器件和功耗。有256级亮度控制。数据/命令的发送有三种接口可选择:6800/8000串口,I2C接口或SPI接口。适用于多数简介的应用,注入移动电话的屏显,MP3播放器和计算器等。

SSD1306芯片特性
分辨率:128 * 64 点阵面板;
电源:
VDD = 1.65V to 3.3V,用于IC逻辑;
VCC = 7V to 15V,用于面板驱动;
点阵显示:
OLED驱动输出电压,最大15V;
Segment最大电流:100uA;
常见最大反向电流:15mA;
256级对比亮度电流控制;
嵌入式128 * 64位SRAM显示缓存;
引脚选择MCU接口:
8位6800/8000串口
3/4线SPI接口
I2C接口
SSD1306芯片命令

在这里插入图片描述

命令0X81:设置对比度。包含两个字节,第一个0X81为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。
命令0XAE/0XAF:0XAE为关闭显示命令;0XAF为开启显示命令。
命令0X8D:包含2个字节,第一个为命令字,第二个为设置值,第二个字节的BIT2表示电荷泵的开关状态,该位为1,则开启电荷泵,为0则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。
命令0XB0~B7:用于设置页地址,其低三位的值对应着GRAM的页地址。
命令0X00~0X0F:用于设置显示时的起始列地址低四位。
命令0X10~0X1F:用于设置显示时的起始列地址高四位。

3、OLED显示屏显示数据

①下载程序
程序下载链接:
0.96寸SPI_OLED模块配套资料包
②打开资料包,选择与自己平台相同的实例,打开Demo的工程,使用keil编译
③将程序烧录到开发板
④连接显示屏和开发板

修改程序

添加自己的字模文件

在这里插入图片描述

修改显示函数

在这里插入图片描述

修改主函数并添加滚动代码,放在while外

在这里插入图片描述

//从左到右滑动( OLED 屏的滚屏命令)OLED_WR_Byte(0x2E,OLED_CMD);        //关闭滚动OLED_WR_Byte(0x27,OLED_CMD);        //水平向左或者右滚动 26/27OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔OLED_WR_Byte(0x07,OLED_CMD);        //终止页 7OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节OLED_WR_Byte(0xFF,OLED_CMD);        //虚拟字节TEST_MainPage();                    //显示内容OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动

编译烧录,效果展示

在这里插入图片描述

显示温度湿度

在指定位置重新修改显示函数

在这里插入图片描述

    GUI_ShowCHinese(20,32,16,"温度:",1);GUI_ShowString(60,32,strTemp1,16,1);GUI_ShowString(68,32,strTemp2,16,1);GUI_ShowString(84,32,strTemp3,16,1);GUI_ShowCHinese(92,32,16,"℃",1);GUI_ShowCHinese(20,48,16,"湿度:",1);GUI_ShowString(60,48,strHumi1,16,1);GUI_ShowString(68,48,strHumi2,16,1);GUI_ShowString(76,48,".",16,1);GUI_ShowString(84,48,strHumi3,16,1);GUI_ShowCHinese(92,48,16,"%",1);

重新修改主函数,把之前的注释掉

在这里插入图片描述

int main(void)
{	delay_init();	    	       //延时函数初始化	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级OLED_Init();			         //初始化OLEDIIC_Init();                     //初始化IICOLED_Clear(0);             		//清屏(全黑)while(1) {read_AHT20_once();         //读取温度并显示	delay_ms(1500);}	

编译烧录,效果展示

在这里插入图片描述

4、总结

本次实验主要对SPI协议进行了粗略的理解和对OLED屏幕的简单理解和使用,还不够深入,还有进一步的研究空间。

5、参考文献

https://blog.csdn.net/qq_43279579/article/details/111414037

https://blog.csdn.net/qq_45237293/article/details/111712565


http://www.ppmy.cn/news/777161.html

相关文章

计算机领域常用的英文名称和缩写,计算机中常用的英文缩写有哪些

计算机中常用的英文缩写有哪些-计算机缩写?在使用计算机的过程中, 你可能会碰到各种各样的专业术语, 特别是那些英文缩写常让我们不知所云,那么计算机缩写,计算机中常用的英文缩写有哪些呢?昂立外语【上海口译培训】来跟大家分享一下吧。 其他缩写 DVD digital bersatile …

LCD开发笔记-技术点总结

开发技术总结: 一、数据迁移 1、模型更改后: 1.1Enable-migrations 1.2修改实体对象 add-migration 修改的标记名称 1.3update-database 2、添加模型: 2.1将实体添加到上下文 add-migration 添加的标记名 update-database 二、规约 [Require…

LCD1602显示屏只亮不显示字符

代码能在普中的板子能正常显示,但是换了块板子就不行: 调节显示屏下方的可调电阻 在调试中找到自己适合的值,就可以看见字符了

L1-023 输出GPLT(Python实现) 测试点全过

题目 给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输…

【转】随身HiFi 安卓OTG功能在音频上的妙用

原文网址:http://article.pchome.net/content-1745467.html 随身HiFi 安卓OTG功能在音频上的妙用 [PChome电脑之家音频频道原创]说起Android的OTG功能不知为何会让人想到NFC,它和NFC一样同样是经常被人忽略的一方面,笔者敢说有很多网友这两个…

浅谈DSD音频 是发展趋势还是厂商噱头

1DSD和现行的PCM截然不同 [PChome电脑之家音频频道原创]随着索尼Hi-Res Audio概念的提出以及近期一些支持DSD解码设备的上市,DSD的曝光率似乎又高了起来,同时这也勾起了无数发烧友的好奇心,现今有很多厂商都以此作为宣传和卖点,声…

php界面框架luy_May 18:PHP (了解一下,25种框架)

1、Laravel Laravel是一个简单优雅的PHPWeb开发框架,可以将开发者从意大利面条式的代码中解放出来,通过简单、高雅、表达式语法开发出很棒的Web应用,Laravel拥有更富有表现力的语法、高质量的文档、丰富的扩展包,被称为“巨匠级PH…

测试听力 html,听力测试,看看你的耳朵听力受损了没

41# Lai: 今天用AU做噪声分析偶然发现自己14k以上完全听不到了(14K以上噪声很小),吓得我以为天塌了。来博主这里测试发现正常听音音量到18K左右都没问题,一个视频那里可以听到18秒,19秒就听不见了。16K及以上右耳比较敏感。19K及以上得开70%的…