基于STM32的0.96寸OLED显示屏显示汉字+数字

文章目录

    • 一、SPI协议
      • 1.什么是SPI协议
      • 2. SPI 协议的物理层和协议层
    • 二、0.96寸OLED屏
    • 三、使用OLED屏显示数据
      • 1.下载程序
      • 2.打开工程
      • 3.部分代码
      • 4.编译并烧录
      • 5.运行结果
    • 四、小结
    • 五、参考链接

一、SPI协议

1.什么是SPI协议

SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率较高的场合。

2. SPI 协议的物理层和协议层

2.1. SPI物理层
SPI 通讯设备之间的常用连接方式如下:
基于STM32的0.96寸OLED显示屏显示汉字+数字_第1张图片
SPI 通讯使用 3 条总线及片选线,3 条总线分别为 SCK、MOSI、MISO,片选线为SS。

SS(Slave Select):从设备选择信号线,常称为片选信号线,也称为 NSS、CS。
当有多个 SPI 从设备与 SPI 主机相连时,设备的其它信号线 SCK、MOSI 及 MISO 同时并联到相同的 SPI 总线上,即无论有多少个从设备,都共同只使用这 3 条总线;而每个从设备都有独立的这一条 NSS 信号线,本信号线独占主机的一个引脚,即有多少个从备,就有多少条片选信号线。
SPI 通讯以 NSS 线置低电平为开始信号,以 NSS 线被拉高作为结束信号。

SCK (Serial Clock):时钟信号线,用于通讯数据同步。
它由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如 STM32 的 SPI 时钟频率最大为fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备。

MOSI (Master Output, Slave Input):):主设备输出/从设备输入引脚。
主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。

MISO(Master Input,,Slave Output):主设备输入/从设备输出引脚。
主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。

2.2. SPI协议层
SPI 协议定义了通讯的起始和停止信号、数据有效性、时钟同步等环节。
SPI 基本通讯过程如下图:
基于STM32的0.96寸OLED显示屏显示汉字+数字_第2张图片
这是一个主机的通讯时序。NSS、SCK、MOSI 信号都由主机控制产生,而 MISO 的信号由从机产生,主机通过该信号线读取从机的数据。MOSI 与 MISO 的信号只在 NSS 为低电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据。

更多内容请参考 【野火®】零死角玩转STM32—F103-MINI.pdf
提取码:1234

二、0.96寸OLED屏

  • 0.96寸OLED屏,支持黑白、黑蓝或者黄蓝双色显示
  • 128x64分辨率,显示效果清晰,对比度高
  • 超大可视角度:大于160°(显示屏中可视角度最大的一种屏幕)
  • 宽电压供电(3V~5V),兼容3.3V和5V逻辑电平,无需电平转换芯片
  • 默认为4线制SPI总线,可以选择3线制SPI总线或者IIC总线
  • 超低功耗:正常显示仅为0.06W(远低于TFT显示屏)
  • 提供丰富的STM32、C51、Arduino、Raspberry Pi以及MSP430平台示例程序
  • 提供底层驱动技术支持

产品如下图所示:
基于STM32的0.96寸OLED显示屏显示汉字+数字_第3张图片
接口定义:

  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接电源地;

引脚连线如下:

模块引脚 对应STM32开发板接线
GND GND
VCC 3.3V/5V
D0 PB13
D1 PB15
RES PB12
DC PB10
CS PB11

更多介绍请移步:0.96inch SPI OLED Module

三、使用OLED屏显示数据

本实验完整工程代码下载详见参考链接。

1.下载程序

程序下载链接:
0.96寸SPI_OLED模块配套资料包

2.打开工程

打开下载完的资料包,选择Demo,然后使用keil软件打开与自己平台相同的工程实例
基于STM32的0.96寸OLED显示屏显示汉字+数字_第4张图片

3.部分代码

我们这里要进行名字+数字显示,由于程序不能显示所有的中文,所以需要将要显示的文字对应的点阵表示添加到程序中

3.1.字模提取
进入汉字字模提取网页版(不用下载字模提取软件):https://www.23bei.com/tool-218.html
基于STM32的0.96寸OLED显示屏显示汉字+数字_第5张图片
输入需要取模的汉字,点击取模进行汉字的点阵表示
基于STM32的0.96寸OLED显示屏显示汉字+数字_第6张图片
3.2. 添加存储代码
本过程显示的中文内容为“小小星”,因此便添加对应的点阵表示代码如下:

	"小",0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x40,0x05,0x20,0x09,0x10,
	0x09,0x08,0x11,0x04,0x21,0x04,0x41,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
	"星",0x00,0x08,0x3F,0xFC,0x20,0x08,0x3F,0xF8,0x20,0x08,0x3F,0xF8,0x01,0x00,0x21,0x08,
	0x3F,0xFC,0x21,0x00,0x41,0x10,0xBF,0xF8,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,

oledfont.h文件进行存储代码添加:
基于STM32的0.96寸OLED显示屏显示汉字+数字_第7张图片
3.3. 显示代码修改
test.c文件中,将显示代码修改成以下代码:

void TEST_MainPage(void)
{	
	GUI_ShowString(28,0,"stars",16,1);	//显示英文字符串
	GUI_ShowCHinese(28,20,16,"小小星",1);	//显示中文汉字
	GUI_ShowString(4,48,"631907030123",16,1);	//显示数字
	delay_ms(1500);		
	delay_ms(1500);
}

基于STM32的0.96寸OLED显示屏显示汉字+数字_第8张图片
3.4. main函数

int main(void)
{	
	delay_init();	    	       //延时函数初始化	  
	NVIC_Configuration(); 	   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 	
	OLED_Init();			         //初始化OLED  
	OLED_Clear(0);             //清屏(全黑)
	while(1) 
	{	
		TEST_MainPage();         //主界面显示测试
	}
}

4.编译并烧录

点击左上角的编译按钮进行编译,生成相应的.hex文件
基于STM32的0.96寸OLED显示屏显示汉字+数字_第9张图片
打开mcuisp软件进行.hex文件烧录
基于STM32的0.96寸OLED显示屏显示汉字+数字_第10张图片

5.运行结果

基于STM32的0.96寸OLED显示屏显示汉字+数字_第11张图片

四、小结

本过程主要是理解OLED屏显和汉字点阵编码原理,再通过理解进行使用操作。资料包中除了给出的几个汉字点阵外,其他的汉字显示也都是依据点阵进行存储的。
其实,整个OLED显示屏也是一个点阵,显示过程就是将显示屏中点阵的每个小点进行改变,从而实现显示。
本次实验不难,代码资料都是在已有的基础上进行添加修改的,但了解代码本身的含义更为重要,这样才能更加清楚的明白OLED屏显和汉字点阵编码的原理。

五、参考链接

1.https://blog.csdn.net/qq_43279579/article/details/111414037
2.完整工程代码
提取码:1234

你可能感兴趣的:(学习,嵌入式系统,stm32,单片机,arm)