基于STM32的0.96寸OLED显示屏显示汉字+数字
文章目录
- 一、SPI协议
- 1.什么是SPI协议
- 2. SPI 协议的物理层和协议层
- 二、0.96寸OLED屏
- 三、使用OLED屏显示数据
- 1.下载程序
- 2.打开工程
- 3.部分代码
- 4.编译并烧录
- 5.运行结果
- 四、小结
- 五、参考链接
一、SPI协议
1.什么是SPI协议
SPI 协议
是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口
,是一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率较高的场合。
2. SPI 协议的物理层和协议层
2.1. SPI物理层
SPI 通讯设备之间的常用连接方式如下:
SPI 通讯使用 3 条总线及片选线,3 条总线分别为 SCK、MOSI、MISO,片选线为SS。
① SS(Slave Select):从设备选择信号线,常称为片选信号线,也称为 NSS、CS。
当有多个 SPI 从设备与 SPI 主机相连时,设备的其它信号线 SCK、MOSI 及 MISO 同时并联到相同的 SPI 总线上,即无论有多少个从设备,都共同只使用这 3 条总线;而每个从设备都有独立的这一条 NSS 信号线,本信号线独占主机的一个引脚,即有多少个从备,就有多少条片选信号线。
SPI 通讯以 NSS 线置低电平为开始信号,以 NSS 线被拉高作为结束信号。
②SCK (Serial Clock):时钟信号线,用于通讯数据同步。
它由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如 STM32 的 SPI 时钟频率最大为fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备。
③MOSI (Master Output, Slave Input):):主设备输出/从设备输入引脚。
主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。
④MISO(Master Input,,Slave Output):主设备输入/从设备输出引脚。
主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。
2.2. SPI协议层
SPI 协议定义了通讯的起始和停止信号、数据有效性、时钟同步等环节。
SPI 基本通讯过程如下图:
这是一个主机的通讯时序。NSS、SCK、MOSI 信号都由主机控制产生,而 MISO 的信号由从机产生,主机通过该信号线读取从机的数据。MOSI 与 MISO 的信号只在 NSS 为低电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据。
更多内容请参考 【野火®】零死角玩转STM32—F103-MINI.pdf
提取码:1234
二、0.96寸OLED屏
- 0.96寸OLED屏,支持黑白、黑蓝或者黄蓝双色显示
- 128x64分辨率,显示效果清晰,对比度高
- 超大可视角度:大于160°(显示屏中可视角度最大的一种屏幕)
- 宽电压供电(3V~5V),兼容3.3V和5V逻辑电平,无需电平转换芯片
- 默认为4线制SPI总线,可以选择3线制SPI总线或者IIC总线
- 超低功耗:正常显示仅为0.06W(远低于TFT显示屏)
- 提供丰富的STM32、C51、Arduino、Raspberry Pi以及MSP430平台示例程序
- 提供底层驱动技术支持
产品如下图所示:
接口定义:
- 本模块支持IIC、3线制SPI以及4线制SPI接口总线模式切换(如图2红框内所示),具体说明如下:
a、使用4.7K电阻只焊接R3、R4,则选择4线制SPI总线接口(默认);
b、使用4.7K电阻只焊接R2、R3,则选择3线制SPI总线接口;
c、使用4.7K电阻只焊接R1、R4、R6、R7、R8,则选择IIC总线接口; - 接口总线模式切换后,需要选择相应配套的软件和相应的接线引脚(如图1所示),模块才能正常运行。相应的接线引脚说明如下:
a、选择4线制SPI总线接口,所有的引脚都需要使用;
b、选择3线制SPI总线接口,只有DC引脚不需要使用(可以不接),其他引脚都需要使用;
c、选择IIC总线接口,只需要使用GND、VCC、D0、D1这四个引脚,同时将RES接高电平(可以接VCC),DC和CS接电源地;
引脚连线如下:
模块引脚 | 对应STM32开发板接线 |
---|---|
GND | GND |
VCC | 3.3V/5V |
D0 | PB13 |
D1 | PB15 |
RES | PB12 |
DC | PB10 |
CS | PB11 |
更多介绍请移步:0.96inch SPI OLED Module
三、使用OLED屏显示数据
本实验完整工程代码下载详见参考链接。
1.下载程序
程序下载链接:
0.96寸SPI_OLED模块配套资料包
2.打开工程
打开下载完的资料包,选择Demo,然后使用keil软件打开与自己平台相同的工程实例
3.部分代码
我们这里要进行名字+数字显示,由于程序不能显示所有的中文,所以需要将要显示的文字对应的点阵表示添加到程序中
3.1.字模提取
进入汉字字模提取网页版(不用下载字模提取软件):https://www.23bei.com/tool-218.html
输入需要取模的汉字,点击取模进行汉字的点阵表示
3.2. 添加存储代码
本过程显示的中文内容为“小小星”,因此便添加对应的点阵表示代码如下:
"小",0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x40,0x05,0x20,0x09,0x10,0x09,0x08,0x11,0x04,0x21,0x04,0x41,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,"星",0x00,0x08,0x3F,0xFC,0x20,0x08,0x3F,0xF8,0x20,0x08,0x3F,0xF8,0x01,0x00,0x21,0x08,0x3F,0xFC,0x21,0x00,0x41,0x10,0xBF,0xF8,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,
在oledfont.h
文件进行存储代码添加:
3.3. 显示代码修改
在test.c
文件中,将显示代码修改成以下代码:
void TEST_MainPage(void)
{ GUI_ShowString(28,0,"stars",16,1); //显示英文字符串GUI_ShowCHinese(28,20,16,"小小星",1); //显示中文汉字GUI_ShowString(4,48,"631907030123",16,1); //显示数字delay_ms(1500); delay_ms(1500);
}
3.4. main函数
int main(void)
{ delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 OLED_Init(); //初始化OLED OLED_Clear(0); //清屏(全黑)while(1) { TEST_MainPage(); //主界面显示测试}
}
4.编译并烧录
点击左上角的编译按钮进行编译,生成相应的.hex文件
打开mcuisp软件进行.hex文件烧录
5.运行结果
四、小结
本过程主要是理解OLED屏显和汉字点阵编码原理,再通过理解进行使用操作。资料包中除了给出的几个汉字点阵外,其他的汉字显示也都是依据点阵进行存储的。
其实,整个OLED显示屏也是一个点阵,显示过程就是将显示屏中点阵的每个小点进行改变,从而实现显示。
本次实验不难,代码资料都是在已有的基础上进行添加修改的,但了解代码本身的含义更为重要,这样才能更加清楚的明白OLED屏显和汉字点阵编码的原理。
五、参考链接
1.https://blog.csdn.net/qq_43279579/article/details/111414037
2.完整工程代码
提取码:1234
基于STM32的0.96寸OLED显示屏显示汉字+数字相关推荐
- 基于STM32的0.96寸OLED显示屏显示数据和滚动显示
文章目录 一.SPI 二.OLED显示屏显示数据 2.1 代码实现 2.2 结果展示 三.0.96寸OLED滚动显示数据 3.1 滚动方式 3.2 对显示文字进行取模 3.3 代码实现 3.4 结果展 ...
- 基于STM32的0.96寸OLED显示屏显示固定数据、滑动数据、温湿度数据
目录 OLED显示原理 一.实验工具 二.OLED显示固定数据 1.显示数据相关函数 2.main函数 3.总显示函数 4.取字模 5.实现效果如下: 三.OLED实现滑动显示数据 1.添加滑动命令 ...
- 基于STM32F103C8T6的0.96寸OLED显示屏显示数据
一.了解SPI(串行外设接口) SPI全称是Serial Perripheral Interface,也就是串行外围设备接口.SPI是Motorola公司推出的一种同步串行接口技术,是一种高速,全双工 ...
- 关于基于stm32的0.96寸oled显示屏的学习理解心得。
关于基于stm32的0.96寸oled显示屏的学习理解心得. oled粗了解 如何理解OLED分辨率? 这里0.96寸OLED分辨率是12864;即OLED显示是128行64列; 但是由于OLED不能 ...
- 基于STM32的0.96寸OLED屏显示学号姓名和滚动显示
文章目录 **一.SPI(串行外设接口)** **二.使用0.96寸OLED显示屏显示学号姓名** **三.0.96寸OLED在STM32f103上实现滚动显示长字符** **四.参考资料** 一.S ...
- STM32的0.96寸OLED显示屏显示数据
目录 一.SPI 1.简介 2.工作模式 3.通讯引脚 二.用0.96OLED显示数据 1.OLED原理简介 三.OLED显示实验 (1).实验目的 (2).实验实现 1.显示学号和姓名 2.显示AH ...
- 基于stm32、0.96寸OLED实现的贪吃蛇小游戏(详细源码注释)
简介:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的贪吃蛇小游戏.项目源码地址:点击下载. 硬件设计: 普通摇杆,0.96寸OLED 单色屏幕(SPI协议通讯), ...
- 基于stm32、0.96寸OLED实现的俄罗斯方块小游戏(详细源码注释)
概述:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的俄罗斯方块小游戏.项目源码地址:点击下载. 硬件要求: 普通摇杆,两个电位器和一个开关组成,左右摇动控制一个电 ...
- 【STM32】0.96寸OLED显示屏(7针SPI协议)软件模拟SPI
Author:AXYZdong 自动化专业 工科男 有一点思考,有一点想法,有一点理性 [自制展示]2020鼠年大吉 文章目录 概述 3.1硬件设计 3.2软件设计 3.2.1编程要点 3.2.2代码 ...
最新文章
- P6242-[模板]线段树3【吉司机线段树】
- 丰富“WinForms” 的一个别样项目(学生管理)
- html label修改字体颜色,Swift label文字显示不同颜色(字体)
- 迷你世界显示未连接服务器成功,迷你世界登录未成功是什么意思 | 手游网游页游攻略大全...
- UVA 12501 Bulky process of bulk reduction ——(线段树成段更新)
- js datagrid新增一行_Django接口新增页面编写_2(十五)
- ZooKeeper之Web管理工具Shepher介绍
- oracle数据库主键自增序列_【oracle】oracle数据库建立序列、使用序列实现主键自增...
- [CATARC_2017] 第八周
- oracle归档日志太多(ORA-00257: archiver error. Connect internal only, until freed)错误的处理方法
- Ajax之跨域访问与JSONP
- Windows操作系统的发展历程
- sas最新sid及安装方法
- CImageList
- 手工皮具的大坑之路-封边感悟与工具
- SDU信息门户(8)组队和文件系统分析
- 微服务架构-分布式解决方案-110:基于canal整合kafka异步解决数据一致性的问题
- Fragment 中 commit already called
- Google Chrome浏览器JS调试工具
- 快手2019秋季校园招聘算法笔试A卷编程题 - 题解
热门文章
- cannot mysql server on_轻松解决cant connect to MySQL server on 'xxx'(10038)错误
- 网络唤醒全攻略(Wake On Lan)
- 合工大计算机组成原理ppt,合工大考研课件计算机组成原理第六章
- 常见 TCP 拥塞避免算法浏览(下)
- 从G_BEGIN_DECLS和 G_END_DECLS说起
- Pytorch搭建YoloV5目标检测平台
- Android Studio自动生成UML关系图的方法步骤
- Matlab的simplify函数化简符号表达式
- AUTOSAR知识点Com(十一):CANSM工具配置
- 前端实习生笔试_2019字节跳动前端实习生笔试面试