【STM32+OLED屏显应用实例】
一,相关技术
.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屏显应用实例】相关推荐
- STM32+OLED屏显应用实例
文章目录 一.SPI介绍 1.SPI的定义 2.SPI的连接方式 3.SPI的通讯过程 二.OLED介绍 三.显示自己的学号和姓名 3.1 文字取模 3.2 编写代码 3.3 实验结果 四.显示AHT ...
- 使用STM32实现OLED屏显
目录 一.SPI协议的介绍 1.概述 2.特点 3.通信原理 4.通讯过程 二.OLED的介绍 1.概述 2.优点及实物图 (1)功耗低 (2)响应速度快 (3)较宽的视角 (4)能实现高分辨率显示 ...
- 基于STM32的OLED屏显实例
文章标题 一.SPI协议 1.什么是SPI 2.SPI物理层 3.SPI协议层 4.SPI特点 5.通讯引脚 二.OLED屏显原理 1.简介 2.OLED屏显原理 三.OLED屏显实例 1.显示自己的 ...
- 基于SPI协议OLED屏显实例
目录 一.SPI协议 1.1 SPI简介 1.2 SPI四线 1.3 SPI四种工作模式 1.4 SPI时序图 二.项目实现 2.1 实验准备 2.2 字模提取 2.3 程序代码 2.4 硬件连接 2 ...
- 【嵌入式系统开发16】基于OLED屏显和汉字点阵编码原理显示姓名学号,湿度温度,滚动长字符
要求 理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能: 显示自己的学号和姓名: 显示AHT20的温度和湿度: 上下或左右的滑动显示长字符,比如"H ...
- OLED屏显+汉字点阵
stm32采用SPI实现OLED屏显 简介 OLED屏显例子 一.准备工作 二.显示学号和姓名 三.滑动显示 四.显示温湿度 总结+参考 简介 SPI SPI是串行外设接口(Serial Periph ...
- OLED屏显+实践操作
目录 一.题目要求 二.SPI介绍 2.1 SPI简介 2.2 SPI特点 三.OLED介绍 3.1 OLED概述 3.2 OLED模块描述 3.2 OLED模块原理图 四.STM32+OLED显示个 ...
- OLED屏显传感器数据显示到OLED上
前言 目录 一.SPI介绍 Ⅰ.什么是SPI Ⅱ.SPI接口介绍 Ⅲ.数据传输 Ⅳ.工作模式 Ⅴ.优缺点 二.OLED屏显字模提取 Ⅰ.OLED定义 Ⅱ.OLED模块介绍 Ⅲ .获取资料途径 三.字模 ...
- OLED屏显实现字体显示
目录 1.什么是SPI ①.SPI协议概括 2.任务 3.从官网获取参考资料 4.获取字模 5.显示自己的学号和姓名 ①.找到项目 ②.修改代码 修改 test.c 下的 TEST_MainPage ...
最新文章
- java regexp_java中使用regexp
- C语言指针表示二维数组的方法!_只愿与一人十指紧扣_新浪博客
- autofac 的好博文
- OSS在private权限下的无参数访问(Nginx反向代理实现)
- 答网友提问:使用 SAP Fiori Tools 创建的 Fiori Elements 应用,如何进行二次开发?
- MFC 常见窗口操作
- Unix系统使用的地址索引结构有什么特点?
- 【最短路径】 SPFA算法优化
- html文本框部分字体变颜色,实现文本框内,部分字体颜色、字号等自定义
- 分类和聚类有什么区别?
- RTDS学习笔记——网口连接
- Photoshop插件-奥顿效果(梦幻柔焦)-脚本开发-PS插件
- 二级倒立摆建模(一)
- 微信java sdk 多公众号_Java版微信公众号支付开发全过程
- win7旗舰版升级成win7SP1
- 程序员啊 ,请保护好你的眼睛 !
- 为什么我无法访问自己的工作组Workgroup
- jQuery项目:京东商品详情页
- USB TypeC接口和USB PD快充协议,有何区别?
- 华为交换机SEP双半环设计方案及配置详细步骤
热门文章
- 流体力学—作用在流体上的力
- [全民写端]#3添加OptiFine
- DJ下载工具|DJ格式转换工具|剪切工具_已迁移
- 基于ssm的民宿预订网站的设计与实现
- 【100个 Unity实用技能】☀️ | 修改Unity UI控件中默认字体配置
- 爆炸,解体,入侵,你想得到的你想不到的大BUG们
- [Linux]CentOS5.x安装MONO和XSP教程与问题处理
- 使用易康(eCognition Developer 8.9)对遥感影像进行面向对象分类
- cocoscreator文字阴影
- mysql cte_mysql8 公用表表达式CTE的使用方法实例分析