文章目录

  • 一、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平台示例程序
  • 提供底层驱动技术支持

产品如下图所示:

接口定义:

  1. 本模块支持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总线接口;
  2. 接口总线模式切换后,需要选择相应配套的软件和相应的接线引脚(如图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显示屏显示汉字+数字相关推荐

  1. 基于STM32的0.96寸OLED显示屏显示数据和滚动显示

    文章目录 一.SPI 二.OLED显示屏显示数据 2.1 代码实现 2.2 结果展示 三.0.96寸OLED滚动显示数据 3.1 滚动方式 3.2 对显示文字进行取模 3.3 代码实现 3.4 结果展 ...

  2. 基于STM32的0.96寸OLED显示屏显示固定数据、滑动数据、温湿度数据

    目录 OLED显示原理 一.实验工具 二.OLED显示固定数据 1.显示数据相关函数 2.main函数 3.总显示函数 4.取字模 5.实现效果如下: 三.OLED实现滑动显示数据 1.添加滑动命令 ...

  3. 基于STM32F103C8T6的0.96寸OLED显示屏显示数据

    一.了解SPI(串行外设接口) SPI全称是Serial Perripheral Interface,也就是串行外围设备接口.SPI是Motorola公司推出的一种同步串行接口技术,是一种高速,全双工 ...

  4. 关于基于stm32的0.96寸oled显示屏的学习理解心得。

    关于基于stm32的0.96寸oled显示屏的学习理解心得. oled粗了解 如何理解OLED分辨率? 这里0.96寸OLED分辨率是12864;即OLED显示是128行64列; 但是由于OLED不能 ...

  5. 基于STM32的0.96寸OLED屏显示学号姓名和滚动显示

    文章目录 **一.SPI(串行外设接口)** **二.使用0.96寸OLED显示屏显示学号姓名** **三.0.96寸OLED在STM32f103上实现滚动显示长字符** **四.参考资料** 一.S ...

  6. STM32的0.96寸OLED显示屏显示数据

    目录 一.SPI 1.简介 2.工作模式 3.通讯引脚 二.用0.96OLED显示数据 1.OLED原理简介 三.OLED显示实验 (1).实验目的 (2).实验实现 1.显示学号和姓名 2.显示AH ...

  7. 基于stm32、0.96寸OLED实现的贪吃蛇小游戏(详细源码注释)

    简介:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的贪吃蛇小游戏.项目源码地址:点击下载. 硬件设计: 普通摇杆,0.96寸OLED 单色屏幕(SPI协议通讯), ...

  8. 基于stm32、0.96寸OLED实现的俄罗斯方块小游戏(详细源码注释)

    概述:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的俄罗斯方块小游戏.项目源码地址:点击下载. 硬件要求: 普通摇杆,两个电位器和一个开关组成,左右摇动控制一个电 ...

  9. 【STM32】0.96寸OLED显示屏(7针SPI协议)软件模拟SPI

    Author:AXYZdong 自动化专业 工科男 有一点思考,有一点想法,有一点理性 [自制展示]2020鼠年大吉 文章目录 概述 3.1硬件设计 3.2软件设计 3.2.1编程要点 3.2.2代码 ...

最新文章

  1. P6242-[模板]线段树3【吉司机线段树】
  2. 丰富“WinForms” 的一个别样项目(学生管理)
  3. html label修改字体颜色,Swift label文字显示不同颜色(字体)
  4. 迷你世界显示未连接服务器成功,迷你世界登录未成功是什么意思 | 手游网游页游攻略大全...
  5. UVA 12501 Bulky process of bulk reduction ——(线段树成段更新)
  6. js datagrid新增一行_Django接口新增页面编写_2(十五)
  7. ZooKeeper之Web管理工具Shepher介绍
  8. oracle数据库主键自增序列_【oracle】oracle数据库建立序列、使用序列实现主键自增...
  9. [CATARC_2017] 第八周
  10. oracle归档日志太多(ORA-00257: archiver error. Connect internal only, until freed)错误的处理方法
  11. Ajax之跨域访问与JSONP
  12. Windows操作系统的发展历程
  13. sas最新sid及安装方法
  14. CImageList
  15. 手工皮具的大坑之路-封边感悟与工具
  16. SDU信息门户(8)组队和文件系统分析
  17. 微服务架构-分布式解决方案-110:基于canal整合kafka异步解决数据一致性的问题
  18. Fragment 中 commit already called
  19. Google Chrome浏览器JS调试工具
  20. 快手2019秋季校园招聘算法笔试A卷编程题 - 题解

热门文章

  1. cannot mysql server on_轻松解决cant connect to MySQL server on 'xxx'(10038)错误
  2. 网络唤醒全攻略(Wake On Lan)
  3. 合工大计算机组成原理ppt,合工大考研课件计算机组成原理第六章
  4. 常见 TCP 拥塞避免算法浏览(下)
  5. 从G_BEGIN_DECLS和 G_END_DECLS说起
  6. Pytorch搭建YoloV5目标检测平台
  7. Android Studio自动生成UML关系图的方法步骤
  8. Matlab的simplify函数化简符号表达式
  9. AUTOSAR知识点Com(十一):CANSM工具配置
  10. 前端实习生笔试_2019字节跳动前端实习生笔试面试