基于IIC接口的OLED数据显示实验

一、实验要求

要求:
理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能:
1、显示自己的学号和姓名;
2、上下或左右的滑动显示长字符,比如“Hello,欢迎来到重庆交通大学物联网205实训室!”或者歌词、诗词。

二、OLED 原理和汉字点阵编码原理

1、OLED 原理

OLED是一种由有机分子薄片组成的固态设备,施加电力之后就能发光。OLED能让电子设备产生更明亮、更清晰的图像,其耗电量小于传统的发光二极管,也小于当今人们使用的液晶显示器。

在本文中,您将了解到OLED技术的工作原理,OLED有哪些类型,OLED同其他发光技术相比的优势与不足,以及OLED需要克服的一些问题。

类似于LED,OLED是一种固态半导体设备,其厚度为100-500纳米,比头发丝还要细200倍。OLED由两层或三层有机材料构成;依照最新的OLED设计,第三层可协助电子从阴极转移到发射层。本文主要涉及的是双层设计模型。

1 、OLED的结构

OLED由以下各部分组成:
在这里插入图片描述
OLED的工作原理是怎样的
基层–基层用来支撑整个OLED.
阳极–阳极在电流流过设备时消除电子。
有机层–有机层由有机物分子或有机聚合物构成。
导电层–该层由有机塑料分子构成,这些分子传输由阳极而来的“空穴”。可采用聚苯胺作为OLED的导电聚合物。
发射层–该层由有机塑料分子构成,这些分子传输从阴极而来的电子;发光过程在这一层进行。可采用聚芴作为发射层聚合物。
阴极–当设备内有电流流通时,阴极会将电子注入电路。

2 、OLED的制造
OLED生产过程中最重要的一环是将有机层敷涂到基层上。完成这一工作,有三种方法:

2.1 真空沉积或真空热蒸发

位于真空腔体内的有机物分子会被轻微加热,然后这些分子以薄膜的形式凝聚在温度较低的基层上。这一方法成本很高,但效率较低。

2.2 有机气相沉积

在一个低压热壁反应腔内,载气将蒸发的有机物分子运送到低温基层上,然后有机物分子会凝聚成薄膜状。使用载气能提高效率,并降低OLED的造价。

2.3 喷墨打印

利用喷墨技术可将OLED喷洒到基层上,就像打印时墨水被喷洒到纸张上那样。喷墨技术大大降低了OLED的生产成本,还能将OLED打印到表面积非常大的薄膜上,用以生产大型显示器,例如80英寸大屏幕电视或电子看板。

3、 OLED的发光过程
OLED发光的方式类似于LED,需经历一个称为电磷光的过程。
具体过程如下:

1、OLED设备的电池或电源会在OLED两端施加一个电压。

2、电流从阴极流向阳极,并经过有机层。

3、阴极向有机分子发射层输出电子。

4、阳极吸收从有机分子传导层传来的电子。(这可以视为阳极向传导层输出空穴,两者效果相等。

5、在发射层和传导层的交界处,电子会与空穴结合。

6、电子遇到空穴时,会填充空穴。

7、这一过程发生时,电子会以光子的形式释放能量。

8、OLED发光。

9、光的颜色取决于发射层有机物分子的类型。生产商会在同一片OLED上放置几种有机薄膜,这样就能构成彩色显示器。

10、光的亮度或强度取决于施加电流的大小。电流越大,光的亮度就越高。

2、汉字点阵编码原理

1、汉字点阵编码
在汉字的点阵字库中,每个字节的每个位都代表一个汉字的一个点,每个汉字都是由一个矩形的点阵组成,0 代表没有点,1 代表有点,将 0 和 1 分别用不同颜色画出,就形成了一个汉字,常用的点阵矩阵有 1212, 1414, 16*16 三 种字库。
字库根据字节所表示点的不同有分为横向矩阵和纵向矩阵,目前多数的字库都是横向矩阵的存储方式(用得最多的应该是早期 UCDOS 字库),纵向矩阵一 般是因为有某些液晶是采用纵向扫描显示法,为了提高显示速度,于是便把字库 矩阵做成纵向,省得在显示时还要做矩阵转换。

2、OLED点阵显示
点阵屏像素按128列X64行组织,每一行128个像素单元的阴极是连接在一起,作为公共极(COM),每一列64个像素单元的阳极也连接在一起,作为一段(SEG)。行列交叉点上的LED就是一个显示单元,即一个像素。要点亮一个像素,只要在该像素所在列电极上加上正电压、行电极接地。同样,要驱动一整行图像,就需要同时把128列信号加载到列电极上,把该行行电极接地。该行显示时,其他63行均不能显示,其行电极应为高电平或悬空。
可见,整屏的显示,只能分时扫描进行,一行一行的显示,每次显示一行。行驱依次产生低电平扫描各行,列驱动读取显示数据依次加载到列电极上。扫描一行的时间称为行周期,完成一次全屏扫描,就叫做一帧。一般帧频大于60,人眼观察不到逐行显示。每行扫描显示用时叫占空比,占空比小,为达到相同的显示亮度,驱动电流就大。SSD1306段驱动最大电流为100uA,当整行128个像素全部点亮时,行电极就要流过12.8mA的电流。

三、使用STM32F103的IIC接口实现

1、STM32平台使用说明

1、按如下进行接线:
在这里插入图片描述
2、下载相关资料包资料包,解压后打开“3-STM32测试程序”文件夹,选择STM32F103RCT6单片机测试程序,如下图所示:
在这里插入图片描述
3、打开上述文件夹中的USER文件夹,选择如下文件程序OLED打开:
在这里插入图片描述
在后续步骤中进行更改实现本次实验要求。

2、字模软件下载及其设置

1、在如下链接中下载字模软件:
下载地址
提取码:hd48
2、打开文件夹中的字模软件应用程序:
在这里插入图片描述
3、打开之后在设置中进行如下更改,以符合后面我们程序工程的要求:
在这里插入图片描述
更改之后点击确定即可。

3、实验步骤及其程序更改

1、在我们刚刚打开的OLED工程中,找到oledfont.h函数:
在这里插入图片描述
2、在其中对其进行修改,以符合我们的实验要求,这里先需要用到字模软件:
(将自己的名字,和“欢迎”两字生成字模)
在这里插入图片描述
在这里插入图片描述
3、将上面生成的字模复制粘贴到oledfont.h函数(最后面)中红框中的位置,因为我们先实现滚动显示 “欢迎 hello ”这一要求,所以先把名字那几行注释掉,后面要实现显示名字这一要求时再回来进行更改:
在这里插入图片描述
4、然后打开main.c函数,进行如下修改,修改主程序中原本要执行的内容,以及添加滚动函数(红框内为滚动函数):
在这里插入图片描述
滚动函数如下:

	  OLED_WR_Byte(0x2e,OLED_CMD);;//关滚动
	  OLED_WR_Byte(0x2A,OLED_CMD);//29向右,2a向左
	  OLED_WR_Byte(0x00,OLED_CMD);//A:空字节
	  OLED_WR_Byte(0x00,OLED_CMD);//B:水平起始页
	  OLED_WR_Byte(0x00,OLED_CMD);//C:水平滚动速度
	  OLED_WR_Byte(0x07,OLED_CMD);//D:水平结束页
	  OLED_WR_Byte(0x01,OLED_CMD);//E:每次垂直滚动位移
	  OLED_WR_Byte(0x2f,OLED_CMD);//开滚动  

修改之后的主函数:

#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "bmp.h"

 int main(void)
  {	u8 t;
		delay_init();	    	 //延时函数初始化	  
		NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 	LED_Init();			     //LED端口初始化
	//		delay_ms(8000);
		OLED_Init();			//初始化OLED  
		OLED_Clear(0)  	; 
	
		t=' ';

//	  OLED_ShowString(4,3,"hello",16);
//	  OLED_ShowCHinese(6,0,0);//欢
//	  OLED_ShowCHinese(26,0,1);//迎
//	  delay_ms(50000);
//	  OLED_WR_Byte(0x2e,OLED_CMD);;//关滚动
//	  OLED_WR_Byte(0x2A,OLED_CMD);//29向右,2a向左
//	  OLED_WR_Byte(0x00,OLED_CMD);//A:空字节
//	  OLED_WR_Byte(0x00,OLED_CMD);//B:水平起始页
//	  OLED_WR_Byte(0x00,OLED_CMD);//C:水平滚动速度
//	  OLED_WR_Byte(0x07,OLED_CMD);//D:水平结束页
//	  OLED_WR_Byte(0x01,OLED_CMD);//E:每次垂直滚动位移
//	  OLED_WR_Byte(0x2f,OLED_CMD);//开滚动  
	while(1) 
	{		
		OLED_ShowCHinese(6,0,0);//罗
		OLED_ShowCHinese(26,0,1);//建
		OLED_ShowCHinese(46,0,2);//勇
		OLED_ShowString(4,3,"631807030220",16);    
		t++;
		delay_ms(50000);
	}	  	
}

5、我们在上述中先将main.c函数中的显示姓名和学号的函数先注释掉,先实现滚动显示“欢迎 hello”这一要求:
在这里插入图片描述
6、运行编译函数,发现没有错误,生成.hex文件:
在这里插入图片描述
在这里插入图片描述
7、将生成hex文件烧录进stm32板子中,OLED模块显示效果如下(实现左右和上下同时滚动显示):
在这里插入图片描述
8、然后我们注释掉main.c中的滚动显示函数,实现显示姓名学号的函数:
在这里插入图片描述
9、编译之后无错,将生成的hex文件烧录到板子中,可以得到正确的显示结果:
在这里插入图片描述

四、总结

本次通过基于IIC接口的OLED数据显示实验,并学会了如何使用字模软件,以及了解了OLED 原理和汉字点阵编码原理,收获颇多。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值