STM32实现OLED屏显示字符串

目录

一、题目要求

二、关于SPI

三、关于OLED

 四、OLED显示姓名学号

1、显示汉字取模

2、程序代码分析如下

3、实验效果展示

五、总结

六、参考链接


一、题目要求

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

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

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

3) 上下或左右的滑动显示长字符,如一段歌词或诗词(最好使用硬件刷屏模式)。

二、关于SPI

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议。

SPI内部结构框图如下

通常SPI通过4个引脚与外部器件相连:
● MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
● MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
● SCK:串口时钟,作为主设备的输出,从设备的输入
● NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片
选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。从设备的NSS
引脚可以由主设备的一个标准I/O引脚来驱动。一旦被使能(SSOE位),NSS引脚也可以作为
输出引脚,并在SPI处于主模式时拉低;此时,所有的SPI设备,如果它们的NSS引脚连接
到主设备的NSS引脚,则会检测到低电平,如果它们被设置为NSS硬件模式,就会自动进
入从设备状态。当配置为主设备、NSS配置为输入引脚(MSTR=1,SSOE=0)时,如果NSS
被拉低,则这个SPI设备进入主模式失败状态:即MSTR位被自动清除,此设备进入从模式

SPI总线传输过程 

· 主机先将NSS信号拉低,这样保证开始接收数据;

· 接收端检测到时钟的边沿信号时,它将立即读取数据线上的信号,这样就得到了一位数据(1bit);

· 主机发送到从机时:主机产生相应的时钟信号,然后数据一位一位地将从MOSI信号线上进行发送到从机;

· 主机接收从机数据:如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过MISO信号线发送;

具体框图如下 

三、关于OLED

 OLED(Organic Light-Emitting Diode),又称为有机电激光显示、有机发光半导体(Organic Electroluminescence Display,OLED)。OLED属于一种电流型的有机发光器件,是通过载流子的注入和复合而致发光的现象,发光强度与注入的电流成正比。OLED在电场的作用下,阳极产生的空穴和阴极产生的电子就会发生移动,分别向空穴传输层和电子传输层注入,迁移到发光层。当二者在发光层相遇时,产生能量激子,从而激发发光分子最终产生可见光。

接口定义

                                                                        图 2

 1、本模块支持IIC、3线制SPI以及4线制SPI接口总线模式切换(如图2红框内所示),具体说明如下:
A、使用4.7K电阻只焊接R3、R4,则选择4线制SPI总线接口(默认);
B、使用4.7K电阻只焊接R2、R3,则选择3线制SPI总线接口;
C、使用4.7K电阻只焊接R1、R4、R6、R7、R8,则选择IIC总线接口;
2、接口总线模式切换后,需要选择相应配套的软件和相应的接线引脚(如图1所示),模块才能正常运行。相应的接线引脚说明如下:
A、选择4线制SPI总线接口,所有的引脚都需要使用
B、选择3线制SPI总线接口,只有DC引脚不需要使用(可以不接),其他引脚都需要使用;
C、选择IIC总线接口,只需要使用GND、VCC、D0、D1这四个引脚,同时将RES接高电平(可以接VCC),DC和CS接电源地;

模块引脚说明 

 更多详细资料前往:0.96inch SPI OLED Module

 四、OLED显示姓名学号

1、显示汉字取模

通过取模软件将需要OLED显示的汉字或图片转化为16进制

取模软件链接如下:0.96inch SPI OLED Module

汉字取模软件设置如下:

对于字模生成流程如下:

  

至此汉字取模成功.

2、程序代码分析如下

my_Test();                 //学号姓名字符串显示函数

GUI_ShowString(50,0,"JAY",16,1);               字符显示函数

GUI_ShowCHinese(45,24,16,"周杰伦",1);     汉字显示函数

void my_Test(void)
{
	GUI_ShowString(50,0,"JAY",16,1);
	GUI_ShowCHinese(45,24,16,"周杰伦",1);
	//GUI_ShowString(40,32,"64X128",16,1);
	GUI_ShowString(15,48,"123456789",16,1);
	//GUI_ShowString(4,48,"www.lcdwiki.com",16,1);
	delay_ms(1500);		
	delay_ms(1500);
}

汉字字模存储数组

 主函数main.c

程序过程文件传送门:工程代码

功能实现:显示姓名学号后刷屏显示一段歌词

int main(void)
{	
	delay_init();	    	       //延时函数初始化	  
	NVIC_Configuration(); 	   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 	
	OLED_Init();			         //初始化OLED  
	OLED_Clear(0);             //清屏(全黑)
	while(1) 
	{	
		my_Test();				 //学号姓名字符串显示
		OLED_Clear(0);           //刷屏
		my_Test_v2();            //显示一段歌词
		OLED_Clear(0);           //刷屏
	}
}

3、实验效果展示

OLED显示

五、总结

 通过OLED显示实验基本掌握了SPI通信协议和软件取字模转化为16进制,总体来说,本实验是一个非常有趣的实验,可以通过OLED显示自己喜欢的图片和文字。

取字模的时候,注意字模的格式,前缀后缀不要忘记更改,以及取模走向和自定义格式等。

六、参考链接

【嵌入式16】STM32+OLED屏显应用实例

SPI协议详解(图文并茂+超详细)

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

猜你喜欢

转载自blog.csdn.net/qq_52791446/article/details/127587803