SSD1306-7针脚OLED的使用指南及心得分享

        最近,想捣鼓捣鼓显示屏,本来想试着把TFT移植到32,试了好久不行,因为我太菜了。所以想着先从OLED开始,因为之前移植成功过。但是想深入了解一下,就细看了一下工程的底层代码。下面我写一下我的体会,如有不对的地方请批评指正。

        首先,对于显示屏来说,我觉得归根结底就两个方面,一个是写指令,一个是写数据(这个概念应该要有)。至于什么是写指令,什么是写数据。你在纸上写字,第一步应该要想写在哪个地方对吧,第二步再写字。所以简单来说,写指令就像是第一步,把你想写的位置告诉显示屏的芯片。学数据是第二步写字的过程,把要写的数据告诉显示屏的芯片。当然写指令还有着其他的意义。这就要具体对照数据手册来看了。

	OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
	OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
	OLED_WR_Byte(0x10,OLED_CMD);//---set high column address

          比如上述三行代码,是我从OLED初始化函数中截出来的,就是写命令的例子,把后面注释翻译过来便是本条指令的意义。下面便是SSD1306手册中的基本指令表,最后一行我们可以找到0xAE,所表示的意义和注释中的一样,这便是写命令的意义。

        说完写命令到底是干什么的,我们来看看代码中是怎么实现写命令的,一般OLED分为4线,7线,7线中又分为3SPI、4SPI、IIC这三种通信协议,不熟悉通信模式的可以看看别的博主的讲解,我觉得看看时序图就可以理解了。

        这里我稍微讲一下4线SPI。 了解的可以跳过这一段。我们都知道通信分为同步通信和异步通信。同步通信就是有时钟信号作为参考,SPI属于同步通信。4线SPI的话四线就是时钟信号、MOSI(主机发送从机接收)、MISO(主机接收从机发送)、片选信号SS/CS。3线SPI便是把MOSI和MISO作为一根线引入。OLED的通信模式通过背面的电阻连接来决定。你们的OLED后面应该都有。显示哪几个电阻,就用0欧姆的电阻连接或者直接用锡连接。然后时钟信号滴答滴答自己跳,片选信号选中芯片,我们只需要在合适的时间改变我们要发送的值是不是就可以通信了呢?这就是SPI的大概了。

        回到OLED,我的OLED选择了3线SPI。并且通过软件模拟SPI的通信过程。何为软件模拟,就是把通信过程中高低电平的变化通过软件模拟出来。通过普通IO口就可以实现。可以节省硬件资源,让别的引脚干别的更重要的事情。比如高低电平转换是不是可以模拟时钟。MOSI、MISO的高低电平是不是可以代表我们发送的数据?这个地方卡了我一段时间,因为我SPI没学好。哈哈哈哈。所以这里听不懂的建议再去了解一下通信过程。

        最后接好线,讲一下这七根线分别是VCC(3.3V)、GND、D0(SCL)、D1(SDA)、RES(复位)、DC(写命令或者写数据上文讲的)、CS(片选)。VCC、GND不用我多说吧,供电引脚;D0、D1、CS是我前文提到的三线SPI。一般情况使用软件实现的。我认为应该是为了增强可移植性。你想别的芯片那个引脚可能没有特定功能但是一定可以作为普通IO口输出对吧。

        OK,根据你设置的GPIO引脚或者别的开源的库的引脚来连接。然后可以通过编写软件来模拟SPI给显示屏写指令或者数据了。下面是一个函数的例子。

void OLED_WR_Byte(u8 dat,u8 cmd)
{	
	u8 i;			  
	if(cmd)
	  OLED_DC_Set();//高电平
	else 
	  OLED_DC_Clear();//低电平  
	OLED_CS_Clear();//低电平
	for(i=0;i<8;i++)
	{			  
		OLED_SCLK_Clear();//低电平
		if(dat&0x80)
		   OLED_SDIN_Set();//高电平
		else 
		   OLED_SDIN_Clear();//低电平
		OLED_SCLK_Set();//高电平
		dat<<=1;   
	}				 		  
	OLED_CS_Set();//高电平
	OLED_DC_Set();//高电平   	  
} 

        其中两个参数,一个作为8位的数据,进行传输;一个cmd作为写命令或者写数据;如果cmd为1,DC引脚电平拉高,反之拉低;CS拉低片选中OLED;for循环里进行数据传输;里面的代码就是模拟的3线SPI传输的过程。data左移为一位一位传输。最后片选和DC拉高为默认状态。

        OK,写命令写数据的函数相信大家应该大概明白了。之后初始化里面的内容大家随便找一个开源库都可以看到是这个函数的集合,就是把芯片初始化的命令写到里面去,OLED才能正常使用,就像单片机一些引脚要初始化一样。写数据的函数也是一样。大家理解上面这个函数相信别的函数也就迎刃而解。最后附一张我的OLED图片。

        好的,今天的使用体会就写到这,请大家批评指正。嘻嘻

物联沃分享整理
物联沃-IOTWORD物联网 » SSD1306-7针脚OLED的使用指南及心得分享

发表评论