STM32 SPI协议接口下的OLED屏显示

本文详细介绍了如何使用STM32F103通过SPI协议驱动OLED显示屏,展示学号、姓名、温湿度及文本滚动。涉及SPI接口解析、硬件连接、代码修改及烧录步骤,同时展示了温湿度传感器数据的实时显示。
摘要由CSDN通过智能技术生成

任务要求

  1. 练习通过SPI总线实现OLED屏幕显示。显示自己的学号和姓名。
  2. 显示AHT20的温度和湿度;
  3. 上下或左右的滑动显示长字符;
    本人所用开发板:野火STM32F103指南者;
    代码编写烧录:KEIL5
    所用协议:SPI;
    所用例程来源:http://www.lcdwiki.com/zh/0.96inch_SPI_OLED_Module

SPI协议接口

SPI协议(SerialPeripheralInterface),即串行外围设备接口,是一种高速全双工的通信总线。
基本通信过程:

在这里插入图片描述
SPI接口位置:在这里插入图片描述

SPI引脚:
MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据;
MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据;
SCK:串口时钟,作为主设备的输入,从设备的输入;
NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。

SPI下的STM32与OLED连接

显示文本

1.在OLED官网下载例程:
http://www.lcdwiki.com/zh/0.96inch_SPI_OLED_Module在这里插入图片描述
下载完成解压后再用KEIL打开SPI对应的OLED显示例程“0.96inch_OLED_Demo_STM32F103ZET6_Hardware_4-wire_SPI”,如下:
在这里插入图片描述
2.STM32与OLED的连接依据main.c程序里的注释提示进行连接即可,如下:
在这里插入图片描述

注意:此时的OLED的CS接口不用连接,只需要六根线进行STM32与OLED的连接。

完成后,模块显示如下:在这里插入图片描述
此时直接编译烧录例程,不用改动,显示如下:
在这里插入图片描述

此时如果OLED屏不显示,可能是接线有问题,检查即可。

3.改写程序:
在oledfont.h头文件里添加个人需要显示的汉字字模,此时需要利用PCtoLCD软件,打开界面如下:
在这里插入图片描述

该软件为野火资料包里的开发软件自带。
关于字模软件的使用详见野火自带教程。

此时选取字模,添加进数组。如下:

const typFNT_GB16 cfont16[] = 
{
   
	"马",0x00,0x00,0x7F,0xE0,0x00,0x20,0x00,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x1F,0xFC,
   0x00,0x04,0x00,0x04,0x00,0x04,0xFF,0xE4,0x00,0x04,0x00,0x04,0x00,0x28,0x00,0x10,/*"妈",0*/
  "舒",0x10,0x00,0x11,0xF8,0x28,0x08,0x44,0x50,0x82,0x20,0x7C,0x10,0x13,0xFE,0x10,0x22,
   0xFE,0x24,0x10,0x20,0x10,0x20,0x7C,0x20,0x44,0x20,0x44,0x20,0x7C,0xA0,0x44,0x40,/*"舒",0*/
  "娅",0x20,0x00,0x23,0xFC,0x20,0x90,0x20,0x90,0xF8,0x90,0x48,0x92,0x4C,0x92,0x4A,0x94,
   0x8A,0x94,0x4A,0x98,0x30,0x90,0x10,0x90,0x28,0x90,0x48,0x90,0x87,0xFE,0x00,0x00,/*"娅",0*/

注意:此时我选择的是1616的OLED汉字显示,因此在添加字模时,也是添加进1616汉字显示对应的数组。添加后注意保存。

再进入test.c进行修改,将void TEST_MainPage(void)函数修改。如下:

void TEST_MainPage(void)
{
   	
	
	GUI_ShowString(20,0,"631807030324",8,1);
	GUI_ShowCHinese(16,20,16,"马舒娅",1);
	delay_ms(1500);			
}

修改完成,再进入main.c文件进行修改,如下:

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

此时全部程序已修改完毕,现在进行编译烧录,即可成功运行。
烧录完成,显示如下:
在这里插入图片描述

显示温湿度与文本的滚动显示

前提是利用I2C已经做出了基于STM32与AHT20的温湿度检测。

温湿度显示

1,在上文中的例程里加入之前测量温湿度的文件与头文件;
如下:
在这里插入图片描述
2,需要在主程序main()中加入读取温湿度的函数,如下:

void read_AHT20_once(void)
{
   

	
	delay_ms(10);
	
 
	reset_AHT20();
	delay_ms(10);
  
	
	init_AHT20();
	delay_ms(10);
	

	
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值