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

SPI协议层
SPI 基本通讯过程

MOSI 与 MISO 的信号只在 NSS 为低电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据。

通讯的起始和停止信号
在图 25-2 中的标号① 处, NSS 信号线由高变低,是 SPI 通讯的起始信号。 NSS 是每个
从机各自独占的信号线,当从机在自己的 NSS 线检测到起始信号后,就知道自己被主机选
中了,开始准备与主机通讯。在图中的标号⑥ 处, NSS 信号由低变高,是 SPI 通讯的停止
信号,表示本次通讯结束,从机的选中状态被取消。
数据有效性

SPI 使用 MOSI 及 MISO 信号线来传输数据,使用 SCK 信号线进行数据同步。 MOSI 及
MISO 数据线在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的。数据
传输时, MSB 先行或 LSB 先行并没有作硬性规定,但要保证两个 SPI 通讯设备之间使用同
样的协定,一般都会采用图 25-2 中的 MSB 先行模式。
CPOL/CPHA 及通讯模式

1.2OLED屏的滚屏命令
水平左右移

OLED_WR_Byte(0x2E,OLED_CMD);        //关闭滚动
OLED_WR_Byte(0x26,OLED_CMD);        //水平向左或者右滚动 26/27
OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
OLED_WR_Byte(0x07,OLED_CMD);        //终止页 7
OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
OLED_WR_Byte(0xFF,OLED_CMD);        //虚拟字节
OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动

垂直和水平滚动

OLED_WR_Byte(0x2e,OLED_CMD);        //关闭滚动
OLED_WR_Byte(0x29,OLED_CMD);        //水平垂直和水平滚动左右 29/2a
OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
OLED_WR_Byte(0x07,OLED_CMD);        //终止页 1
OLED_WR_Byte(0x01,OLED_CMD);        //垂直滚动偏移量
OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动

1.3 OLED引脚接法

二.基于SPI的OLED显示
2.1 显示自己的学号和姓名
2.1.1 完整代码
3.1.2 修改代码

#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
int main(void)
{   delay_init();                  //延时函数初始化      NVIC_Configuration();        //设置NVIC中断分组2:2位抢占优先级,2位响应优先级     OLED_Init();                     //初始化OLED  OLED_Clear(0);             //清屏(全黑)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);        //开启滚动while(1) {    }
}

修改test.c中的TEST_MainPage函数中GUI_ShowString,

需要将对应的字模点阵加入到oledfont.h里

2.1.3 汉字取模点阵软件

不同的取模方式对应的十六进制码是不一样的 添加到oledfont.h

主程序

#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
int main(void)
{   delay_init();                  //延时函数初始化      NVIC_Configuration();        //设置NVIC中断分组2:2位抢占优先级,2位响应优先级     OLED_Init();                     //初始化OLED  OLED_Clear(0);             //清屏(全黑)while(1) { TEST_MainPage();         //主界面显示测试}
}

3.1.4 编译烧录

3.1.5 运行结果


3.2 显示AHT20的温度和湿度
3.2.1 完整代码

#include "delay.h"
#include "usart.h"
#include "bsp_i2c.h"
#include "sys.h"#include "oled.h"
#include "gui.h"
#include "test.h"int main(void)
{   delay_init();                  //延时函数初始化          uart_init(115200);     IIC_Init();NVIC_Configuration();      //设置NVIC中断分组2:2位抢占优先级,2位响应优先级     OLED_Init();                     //初始化OLED  OLED_Clear(0); while(1){//printf("温度湿度显示");read_AHT20_once();OLED_Clear(0); delay_ms(1500);}
}

主要是将温度采集通过串口发到OLED屏。

3.2.3编译烧录

3.2.4 运行结果

3.3 左右的滑动显示长字符
3.3.1 完整代码
3.3.2 修改代码
main.c

#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
int main(void)
{   delay_init();                  //延时函数初始化      NVIC_Configuration();        //设置NVIC中断分组2:2位抢占优先级,2位响应优先级     OLED_Init();                     //初始化OLED  OLED_Clear(0);             //清屏(全黑)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);        //开启滚动while(1) {    }
}

继续添加字模数据

3.3.3 编译烧录

3.3.4 运行结果显示

四,总结
通过对ISPI协议的学习,我明白了这些芯片底层的逻辑,并且通过逻辑分析仪更加深层次的理解了协议的工作原理,本次实验让我的动手能力得到了很大的提升。也学习到了很多实用的东西,希望以后可以多学习一些关于这方面的一些的知识。

【STM32+OLED屏显应用实例】相关推荐

  1. STM32+OLED屏显应用实例

    文章目录 一.SPI介绍 1.SPI的定义 2.SPI的连接方式 3.SPI的通讯过程 二.OLED介绍 三.显示自己的学号和姓名 3.1 文字取模 3.2 编写代码 3.3 实验结果 四.显示AHT ...

  2. 使用STM32实现OLED屏显

    目录 一.SPI协议的介绍 1.概述 2.特点 3.通信原理 4.通讯过程 二.OLED的介绍 1.概述 2.优点及实物图 (1)功耗低 (2)响应速度快 (3)较宽的视角 (4)能实现高分辨率显示 ...

  3. 基于STM32的OLED屏显实例

    文章标题 一.SPI协议 1.什么是SPI 2.SPI物理层 3.SPI协议层 4.SPI特点 5.通讯引脚 二.OLED屏显原理 1.简介 2.OLED屏显原理 三.OLED屏显实例 1.显示自己的 ...

  4. 基于SPI协议OLED屏显实例

    目录 一.SPI协议 1.1 SPI简介 1.2 SPI四线 1.3 SPI四种工作模式 1.4 SPI时序图 二.项目实现 2.1 实验准备 2.2 字模提取 2.3 程序代码 2.4 硬件连接 2 ...

  5. 【嵌入式系统开发16】基于OLED屏显和汉字点阵编码原理显示姓名学号,湿度温度,滚动长字符

    要求 理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能: 显示自己的学号和姓名: 显示AHT20的温度和湿度: 上下或左右的滑动显示长字符,比如"H ...

  6. OLED屏显+汉字点阵

    stm32采用SPI实现OLED屏显 简介 OLED屏显例子 一.准备工作 二.显示学号和姓名 三.滑动显示 四.显示温湿度 总结+参考 简介 SPI SPI是串行外设接口(Serial Periph ...

  7. OLED屏显+实践操作

    目录 一.题目要求 二.SPI介绍 2.1 SPI简介 2.2 SPI特点 三.OLED介绍 3.1 OLED概述 3.2 OLED模块描述 3.2 OLED模块原理图 四.STM32+OLED显示个 ...

  8. OLED屏显传感器数据显示到OLED上

    前言 目录 一.SPI介绍 Ⅰ.什么是SPI Ⅱ.SPI接口介绍 Ⅲ.数据传输 Ⅳ.工作模式 Ⅴ.优缺点 二.OLED屏显字模提取 Ⅰ.OLED定义 Ⅱ.OLED模块介绍 Ⅲ .获取资料途径 三.字模 ...

  9. OLED屏显实现字体显示

    目录 1.什么是SPI ①.SPI协议概括 2.任务 3.从官网获取参考资料 4.获取字模 5.显示自己的学号和姓名 ①.找到项目 ②.修改代码 修改 test.c 下的 TEST_MainPage ...

最新文章

  1. java regexp_java中使用regexp
  2. C语言指针表示二维数组的方法!_只愿与一人十指紧扣_新浪博客
  3. autofac 的好博文
  4. OSS在private权限下的无参数访问(Nginx反向代理实现)
  5. 答网友提问:使用 SAP Fiori Tools 创建的 Fiori Elements 应用,如何进行二次开发?
  6. MFC 常见窗口操作
  7. Unix系统使用的地址索引结构有什么特点?
  8. 【最短路径】 SPFA算法优化
  9. html文本框部分字体变颜色,实现文本框内,部分字体颜色、字号等自定义
  10. 分类和聚类有什么区别?
  11. RTDS学习笔记——网口连接
  12. Photoshop插件-奥顿效果(梦幻柔焦)-脚本开发-PS插件
  13. 二级倒立摆建模(一)
  14. 微信java sdk 多公众号_Java版微信公众号支付开发全过程
  15. win7旗舰版升级成win7SP1
  16. 程序员啊 ,请保护好你的眼睛 !
  17. 为什么我无法访问自己的工作组Workgroup
  18. jQuery项目:京东商品详情页
  19. USB TypeC接口和USB PD快充协议,有何区别?
  20. 华为交换机SEP双半环设计方案及配置详细步骤

热门文章

  1. 流体力学—作用在流体上的力
  2. [全民写端]#3添加OptiFine
  3. DJ下载工具|DJ格式转换工具|剪切工具_已迁移
  4. 基于ssm的民宿预订网站的设计与实现
  5. 【100个 Unity实用技能】☀️ | 修改Unity UI控件中默认字体配置
  6. 爆炸,解体,入侵,你想得到的你想不到的大BUG们
  7. [Linux]CentOS5.x安装MONO和XSP教程与问题处理
  8. 使用易康(eCognition Developer 8.9)对遥感影像进行面向对象分类
  9. cocoscreator文字阴影
  10. mysql cte_mysql8 公用表表达式CTE的使用方法实例分析