文章目录[隐藏]
一. 相关知识
1.1 关于I2C协议
I2C 通讯协议 (Inter - Integrated Circuit) 是由 Phiilps 公司开发的,由于它引脚少,硬件实
现简单,可扩展性强,不需要 USART 、 CAN 等通讯协议的外部收发设备,现在被广泛地
使用在系统内多个集成电路 (IC) 间的通讯。
1.2 关于SPI协议
SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface) ,即串行外围设
备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADC 、 LCD 等设备与 MCU 间,
要求通讯速率较高的场合。
通讯的起始和停止信号
在图 25-2 中的标号① 处, NSS 信号线由高变低,是 SPI 通讯的起始信号。 NSS 是每个从机各自独占的信号线,当从机在自己的 NSS 线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。在图中的标号⑥ 处, NSS 信号由低变高,是 SPI 通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。
数据有效性
SPI 使用 MOSI 及 MISO 信号线来传输数据,使用 SCK 信号线进行数据同步。 MOSI 及MISO 数据线在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的。数据传输时, MSB 先行或 LSB 先行并没有作硬性规定,但要保证两个 SPI 通讯设备之间使用同样的协定,一般都会采用图 25-2 中的 MSB 先行模式。
1.3 OLED屏的滚动
- 水平左右移
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); //开启滚动
二. 温度采集
2.1 完整代码
链接:https://pan.baidu.com/s/1TZNBqkWH_aRGktK8Wk8cTA
提取码:qwer
2.2 打开工程
2.3 烧录结果
生成HEX文件后发送到上位机,随后调制助手会显示传感器传来的温度和湿度的数据;对传感器哈几口气,发现:温度显示明显上升,湿度上升到接近90
不过,呜呜呜,视频被俺误删了,有机会再补上。
三. 温度显示
3.1 完整代码
链接:https://pan.baidu.com/s/1vawtPaudZmzuWdMjImrF3Q
提取码:qwer
3.2 具体操作
3.2.1 字模软件下载
3.2.2 字模软件设置
设置如下图所示
行前缀的括号去掉
行后缀的括号去掉,保留逗号
3.2.3 生成并保存字模
3.2.4 修改eoldfont文件
修改文件夹下文件 HARDWARE/OLED/oledfont.h
由于是生成的16*16得中文字模,故生成的内容放在对应的位置,如下图示
添加内容
3.2.5 修改test函数
3.3 结果
烧录结果
四. 信息滚动播放
4.1 修改main函数
进行滚动相关的设置
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.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); //清屏(全黑)
OLED_WR_Byte(0x2E,OLED_CMD); //关闭滚动
OLED_WR_Byte(0x27,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); //虚拟字节
TEST_MainPage();
OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动
while(1)
{
}
}
4.2 修改test.c
4.3 字模相关操作
此处字模的操作同上,在此不再赘述
- 注意!!!字模软件进入后,设置被清空了,需要从新设置一次,并注意选择C51格式
4.4 结果
编译后烧录Hex文件的结果
五. 总结
此次实验是利用oled屏幕进行相关的显示,由于有许多大佬提前铺好了路,很多东西不需要自己调整,只需要设置要显示的内容就行了。感觉还是很好玩的,不过,后面再认真学习其背后的东西,想来就不会这么顺利完成了。总之,还有许多需要学习的东西。
参考博客:
https://blog.csdn.net/qq_60678931/article/details/121410035?spm=1001.2014.3001.5501
版权声明:本文为CSDN博主「Melon-Youth」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46112781/article/details/121504505
暂无评论