STM32F103基于spi实现OLED显示

Posted 醉意丶千层梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F103基于spi实现OLED显示相关的知识,希望对你有一定的参考价值。

一、原理

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

二、实现

代码过于多,只展示部分核心代码.更多代码可以直接下载源码

1.显示中文

把需要显示的中文字符存放在该文件里面

通过提取子模软件提取对应汉字的点阵,点阵大小为16*16

在main函数中调用显示中文的函数

	GUI_ShowCHinese(10,0,16,"重庆交通大学",1);

函数原型

  • x为相对于屏幕左边偏移量
  • y为相对于屏幕上边偏移量
  • hsize为点阵大小,选择16
  • str为显示的字符串
  • mode为模型,选择1
    其他显示函数参数大同小异

2.滚动显示

水平滚动

	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(0x02,OLED_CMD); //终止页 2

	OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节

	OLED_WR_Byte(0xFF,OLED_CMD); //虚拟字节
	
	//博客id
	GUI_ShowCHinese(10,0,16,"醉意丶千层梦",1);	

	//开启滚动
	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);        //开启滚动

3.显示字符串

	GUI_ShowString(10,24,"631907060520",16,1);

函数原型

  • x为相对于屏幕左边偏移量
  • y为相对于屏幕上边偏移量
  • chr为显示的字符串
  • Char_Size为字体大小,可以选择16
  • mode 默认选择1即可

4.读取温湿度

参考前面的博客STM32F103基于I2C协议的AHT20温湿度传感器的数据采集 了解如何获取温湿度的值

		AHT20_Read_CTdata(CT_data);;  //crc校验后,读取AHT20的温度和湿度数据 
		c1 = CT_data[0]*1000/1024/1024;  //计算得到湿度值c1(放大了10倍)
		t1 = CT_data[1]*2000/1024/1024-500;//计算得到温度值t1(放大了10倍)

		//转为字符串易于显示
		temp[0]=t1/100+'0';
		temp[1]=(t1/10)%10+'0';
		temp[2]='.';
		temp[3]=t1%10+'0';
		temp[4]='\\0';
		
		hum[0]=c1/100+'0';
		hum[1]=(c1/10)%10+'0';
		hum[2]='.';
		hum[3]=c1%10+'0';
		hum[4]=32;
		hum[5]='%';
		hum[6]='\\0';

5.显示温湿度

		//显示温度
		GUI_ShowCHinese(15,28,16,"温度",1);
		GUI_ShowString(47,28,":",16,1);
		GUI_ShowString(62,28,temp,16,1);
		GUI_ShowCHinese(96,28,16,"℃",1);

		//显示湿度
		GUI_ShowCHinese(15,48,16,"湿度",1);
		GUI_ShowString(47,48,":",16,1);
		GUI_ShowString(62,48,hum,16,1);

三、结果

1.开机显示欢迎信息

2.循环读取温湿度以及滚动显示我的id

四、总结

结合oled显示数据,可以使得数据可视化更加方便

五、参考

六、源码

1.github

https://github.com/TangtangSix/Stm32OLED

2.gitee

https://gitee.com/tangtangsix/Stm32OLED
.

以上是关于STM32F103基于spi实现OLED显示的主要内容,如果未能解决你的问题,请参考以下文章

基于STM32F103C8T6最小系统板HAL库CubeMX SPI驱动7针 OLED显示屏(0.96寸 1.3寸通用)

基于STM32F103C8T6最小系统板HAL库CubeMX SPI驱动7针 OLED显示屏(0.96寸 1.3寸通用)

基于I2C/SPI的温湿度采集与OLED显示

OLED程序在stm32f103上的移植

基于STM32F103的网络天气时钟--------单片机获取天气后OLED显示

STM32F103VE基于标准库下DHT11数据I2C oled显示