基于 SPI 协议的0.96 寸OLED显示
目录
一、 SPI 协议
1.简介
2.SPI的连接方式
3.通信过程
二、OLED
1.OLED原理
2.点阵编码原理与显示
三、OLED显示实验
Demo 程序
1.要求
2. OLED 显示汉字
3.上下或左右的滑动显示长字符
4.温湿度显示
四、总结
五、参考文献
一、 SPI 协议
1.简介
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是由 Motorola 公司提出的一种高速的,全双工,同步的通信总线,被广泛地使用在 ADC、LCD 等设备与 MCU 间要求通讯速率较高的场合。SPI总线系统可直接与各个厂家生产的多种标准外围器件连接,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOST和低电平有效的从机选择线C/S(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。
2.SPI的连接方式
SS( Slave Select):从设备选择信号线,常称为片选信号线。
SCK (Serial Clock):时钟信号线,用于通讯数据同步。
MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。
MISO(Master Input,,Slave Output):主设备输入/从设备输出引脚。
3.通信过程
二、OLED
1.OLED原理
OLED(OrganicLight-Emitting Diode),又称为有机电激光显示、有机发光半导体(OrganicElectroluminesence Display,OLED)。OLED属于一种电流型的有机发光器件,是通过载流子的注入和复合而致发光的现象,发光强度与注入的电流成正比。OLED在电场的作用下,阳极产生的空穴和阴极产生的电子就会发生移动,分别向空穴传输层和电子传输层注入,迁移到发光层。当二者在发光层相遇时,产生能量激子,从而激发发光分子最终产生可见光。
2.点阵编码原理与显示
汉字点阵编码
在汉字的点阵字库中,每个字节的每个位都代表一个汉字的一个点,每个汉字都是由一个矩形的点阵组成,0 代表没有点,1 代表有点,将 0 和 1 分别用不同颜色画出,就形成了一个汉字,常用的点阵矩阵有 1212, 1414, 16*16 三 种字库。
字库根据字节所表示点的不同有分为横向矩阵和纵向矩阵,目前多数的字库都是横向矩阵的存储方式(用得最多的应该是早期 UCDOS 字库),纵向矩阵一 般是因为有某些液晶是采用纵向扫描显示法,为了提高显示速度,于是便把字库 矩阵做成纵向,省得在显示时还要做矩阵转换。
OLED点阵显示
点阵屏像素按128列X64行组织,每一行128个像素单元的阴极是连接在一起,作为公共极(COM),每一列64个像素单元的阳极也连接在一起,作为一段(SEG)。行列交叉点上的LED就是一个显示单元,即一个像素。要点亮一个像素,只要在该像素所在列电极上加上正电压、行电极接地。同样,要驱动一整行图像,就需要同时把128列信号加载到列电极上,把该行行电极接地。该行显示时,其他63行均不能显示,其行电极应为高电平或悬空。
可见,整屏的显示,只能分时扫描进行,一行一行的显示,每次显示一行。行驱依次产生低电平扫描各行,列驱动读取显示数据依次加载到列电极上。扫描一行的时间称为行周期,完成一次全屏扫描,就叫做一帧。一般帧频大于60,人眼观察不到逐行显示。每行扫描显示用时叫占空比,占空比小,为达到相同的显示亮度,驱动电流就大。SSD1306段驱动最大电流为100uA,当整行128个像素全部点亮时,行电极就要流过12.8mA的电流。
三、OLED显示实验
Demo 程序
需要下载 0.96 寸 OLED 显示屏厂家给出的 Demo 程序。
程序下载链接:
0.96 寸 SPI_OLED 模块配套资料包。下载资料包之后打开其中的0.96inch_SPI_OLED_Module_SSD1306_MSP096X_V1.0\1-Demo\Demo_STM32\0.96inch_OLED_Demo_STM32F103RCT6_Software_4-wire_SPI
1.要求
1) 显示自己的学号和姓名;
2) 显示AHT20的温度和湿度;
3) 上下或左右的滑动显示长字符,比如“Hello,欢迎来到重庆交通大学物联网205实训室!”或者一段歌词或诗词
2. OLED 显示汉字
打开取字模软件
输入汉字生成字模
修改代码
打开 gui.c
下的 oledfont.h
头文件,将 cfont16[] 数组
内的内容修改成自己的中文文字点阵
将 test.c
里 void TEST_MainPage(void)
函数中的语句注释掉,添加自己的执行语句
void TEST_MainPage(void)
{ //GUI_ShowString(28,0,"OLED TEST",16,1);//GUI_ShowString(12,16,"0.96\" SSD1306",16,1);//GUI_ShowString(40,32,"64X128",16,1);//GUI_ShowString(4,48,"www.lcdwiki.com",16,1);GUI_ShowCHinese(40,16,16,"冉某人",1);GUI_ShowString(16,32,"631907030519",16,1);delay_ms(1500); delay_ms(1500);
}
修改mian函数中的while循环
编译烧录程序,结果如下
3.上下或左右的滑动显示长字符
跟前面一样,获取字模后,向 gui.c
下的 oledfont.h
头文件里的 cfont16[] 数组
内的添加中文文字点阵,我这里添加了“欢迎来到重庆”这 几个点阵
代码修改
修改 test.c
里 void TEST_MainPage(void)
函数如下
修改mian函数中的while循环
编译烧录程序,显示结果为
4.温湿度显示
跟前面一样,获取字模后,向 gui.c
下的 oledfont.h
头文件里的 cfont16[] 数组
内的添加中文文字点阵,我这里添加了“当前温湿度”这 几个点阵
移植 AHT20 温湿度采集代码
从里面移植下面 4 个文件:
bsp_i2c.h、bsp_i2c.c、sys.h、sys.c;
并将bsp_i2c.c文件中的串口发送改为 OLED 显示 void Show_OLED(void)
void Show_OLED(void)
{/*------------*/GUI_ShowCHinese(28,10,16,"当前温湿度",1);GUI_ShowCHinese(20,32,16,"温度:",1);GUI_ShowString(60,32,strTemp1,16,1);GUI_ShowString(68,32,strTemp2,16,1);GUI_ShowString(76,32,".",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);
}
修改main函数
#include "bsp_i2c.h" //注意添加头文件
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(); //读取温度并显示OLED_Clear(0); //清屏(全黑) delay_ms(1500);}
显示结果为
四、总结
简单了解了SPI 协议,并根据官方的代码再参考别人的代码进行了修改完成了0.96 寸OLED的显示
五、参考文献
基于 SPI 协议用 0.96 寸 OLED 显示汉字及温湿度数据_L-GRAZY的博客-CSDN博客
基于STM32的0.96寸OLED显示屏显示数据_Harriet的博客-CSDN博客_基于stm32的oled显示时间
基于SPI通信方式的OLED显示_不#曾&轻听的博客-CSDN博客_oled spi通讯
基于 SPI 协议的0.96 寸OLED显示相关推荐
- STM32Mini基于SPI接口的0.96寸OLED屏数据显示
文章目录 一.实验资料准备 1.下载工程包 2.引脚接法 3.字模软件准备 4.了解SPI(串行外设接口) (1)SPI的定义 (2)SPI的连接方式 (3)SPI的通讯过程 5.了解OLED屏的滚屏 ...
- STM32读取SM300D2七合一传感器模块数据在0.96寸OLED显示,通过DL-LN3X无线模块显示在上位机
先看这个: 资料 https://blog.csdn.net/gsh_hello_world/article/details/56277182 https://blog.csdn.net/gsh_he ...
- STM32驱动代码:STM32F4驱动7针0.96寸OLED显示字符、汉字
STM32F4驱动7针0.96寸OLED显示字符.汉字 适用于stm32f1.stm32f4移植 工程资料链接:STM32F4驱动7针0.96寸OLED.rar 一. 代码效果 二.硬件准备 1.准备 ...
- STC15W408AS单片机IIC驱动0.96寸OLED显示
STC15W408AS单片机IIC驱动0.96寸OLED显示 不同页的滚动效果() 全页的滚动效果 STC15W408AS最新系统板 注意图片上的0欧姆电阻贴错了位置,应该是与GND相连的,图片上是P ...
- 0.96寸OLED显示汉字图片及简单GIF
0.96寸OLED显示汉字图片及简单GIF 只是做一些简单显示,具体逻辑大家自行添加. 网上的OLED驱动很多,我懂的也不是很深,这里就不说了,我这里用的是中景园的驱动.这里重点说怎么改可以显示这些东 ...
- STM32实现0.96寸OLED显示模拟IIC和IIC四种实现(标准库和HAL库)
目录 本文通过四种方法实现OLED显示 设备选择 OLED介绍 接线表设计 OLED应用 1.标准库模拟IIC实现OLED显示 2.标准库IIC实现OLED显示 3.HAL库模拟IIC实现OLED显示 ...
- 0.96寸oled显示动画软件和步骤
0.96寸oled的SPI版本移植成功,并成功显示动画. 2021.4.9:最下方下载软件 制作动画步骤 使用软件: 第一个软件:进行gif的帧数删减,画面优化,最重要的是大小的改变0.96寸oled ...
- 0.96寸oled显示坏苹果(badapple)
前言 俗话说:有屏幕的地方就会有badapple. 下面带来使用0.96寸OLED屏幕显示badapple的教程. 1.获取视频 首先从网上下载badapple的视频,下载地址:badapple 2. ...
- 灵感手环第一步——0.96寸OLED显示实验
这算是我这个系列的第一篇博客吧.首先要解决的就是屏幕显示问题.我选择了目前新兴起的OLED显示模块. OLED(OrganicLightEmittingDiode),中文译作有机发光二极管,目前被广泛 ...
最新文章
- QListWidget 小练习
- 孙正义看未来30年:这个趋势,永远不会错(附完整PPT)
- 成功解决To fix this you could try to: 1. loosen the range of package versions you‘ve specified ​​​​​​​
- Java 堆内存优化
- C指针详解(经典,非常详细)
- Java的子类可以继承父类的私有变量和私有方法吗?
- mybatis 一对一 一对多 级联查询
- web3@0.20.1 在依据abi创建智能合约的时候报错 TypeError: web3.eth.contract is not a function
- ping端口_干货分享:shell脚本批量telnet ip 端口
- 东北大学软件项目管理与过程改进_可视化看板——汽车研发项目管理成功的奥秘...
- Postresql初始安装后用户的创建
- 数学物理计算机的思考
- 2017 Postgres大象会 TBase可靠性探究ppt
- win2003从组策略关闭端口(445/135/137/138/139/3389等)教程
- 关于课题的一点思考(基于多生理信号的情绪识别)
- PPT学习整理(五)编辑顶点
- 敬畏传奇——直面第一台可编程电子计算机:Colossus
- sqlmap安装配置教程
- Transfomer详解
- 界面设计方法 (1) — 1.界面的概念与分类
热门文章
- HCL实验:OSPF路由汇聚
- 详解色彩模型、色域以及颜色空间转换
- 比较不同利率下的贷款
- 校园歌手信息评分系统(C语言),大一新生期末实训
- python_给视频打马赛克
- xcopy 复制目录及子目录
- 申请加精—ERP实施方法论的比较(SAP、 Oracle、J.D.E、BANN、用友等实施方法论)...
- 人物-作家-马克·吐温:马克·吐温
- org.springframework.dao.InvalidDataAccessApiUsageException:The given object has a null identifi的解决方案
- 这些东西适合做什么?