基于STM32的0.96寸OLED显示屏显示数据

文章目录

实验要求

理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能:

  1. 显示自己的学号和姓名;

  2. 显示AHT20的温度和湿度;

  3. 上下或左右的滑动显示长字符,比如“Hello,欢迎来到重庆交通大学物联网205实训室!”或者一段歌词或诗词(最好使用硬件刷屏模式)。

一、了解SPI(串行外设接口)

  • SPI的定义

SPI(Serial Peripheral Interface)就是串行外围设备接口。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚。SPI 是一个环形总线结构,由 ss(cs)、sck、sdi、sdo 构成,时序主要是在 sck 的控制下,两个双向移位寄存器进行数据交换。
上升沿发送、下降沿接收、高位先发送。
上升沿到来的时候,sdo 上的电平将被发送到从设备的寄存器中。
下降沿到来的时候,sdi 上的电平将被接收到主设备的寄存器中。

  1. SPI的连接方式
    基于STM32的0.96寸OLED显示屏显示数据
    SS( Slave Select):从设备选择信号线,常称为片选信号线。
    SCK (Serial Clock):时钟信号线,用于通讯数据同步。
    MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。
    MISO(Master Input,,Slave Output):主设备输入/从设备输出引脚。
  2. SPI的通讯过程
    基于STM32的0.96寸OLED显示屏显示数据
    MOSI 与 MISO 的信号只在 NSS 为低电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据。

二、使用0.96寸OLED显示屏显示数据

  1. 实验工具与材料
    软件:keil
    硬件:PC机,STM32开发板(本过程采用的是野火stm32mini开发板),0.96寸OLED显示屏,下载器(本过程采用ST_Link)

  2. 0.96寸OLED显示屏相关介绍
    参考下面链接:
    http://www.lcdwiki.com/zh/``0.96inch_SPI_OLED_Module

  3. 运行厂家给出的Demo程序
    ①下载程序
    程序下载链接
    http://www.lcdwiki.com/res/Program/OLED/0.96inch/SPI_SSD1306_MSP096X_V1.0/0.96inch_SPI_OLED_Module_SSD1306_MSP096X_V1.0.zip

②打开资料包,选择与自己平台相同的实例,打开Demo的工程,使用keil编译
③将程序烧录到开发板
④连接显示屏和开发板
基于STM32的0.96寸OLED显示屏显示数据
⑤运行结果
基于STM32的0.96寸OLED显示屏显示数据

三、自行修改程序实现显示

显示要求: 显示姓名 显示一串数字

1.姓名中文的点阵(16*16)
由于程序并不需要显示所有的中文,所以将对应需要的文字添加到程序就可以了。
使用PCtoLCD2002生成要用到的字的字模 记得在选项里更改部分参数
基于STM32的0.96寸OLED显示屏显示数据实现显示代码

void TEST_MainPage(void)
{	
	GUI_ShowCHinese(28,20,16,"***",1);
	//GUI_ShowString(40,32,"64X128",16,1);
	GUI_ShowString(4,48,"***",16,1);
	//GUI_ShowString(4,48,"www.lcdwiki.com",16,1);
	delay_ms(1500);		
	delay_ms(1500);
}

main函数

int main(void)
{	
	delay_init();	    	       //延时函数初始化	  
	OLED_Init();			         //初始化OLED  
	OLED_Clear(0);             //清屏(全黑)
	while(1) 
	{	
		TEST_MainPage();         //界面显示
	}
}

烧录显示结果
基于STM32的0.96寸OLED显示屏显示数据

总结

通过使用SPI通信方式进行OLED的显示,接触到了许多新鲜的事物,比如说中文字库点阵、OLED屏幕滑动显示等,同时与I2C通信方式进行OLED显示进行了对比,发现SPI的速度确实要比I2C的传输速度更快,更适合用作高速传输通信。由于我也是初学SPI,如有错误希望大家批评指正。

参考的哈莉特博客

上一篇:STM32 中断中调用freeRTOS API 需要注意的地方


下一篇:shell 脚本之循环使用 for while 详解