完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、实验要求
要求: 理解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、在如下链接中下载字模软件: 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 原理和汉字点阵编码原理,收获颇多。 |
|
|
|
只有小组成员才能发言,加入小组>>
3310 浏览 9 评论
2991 浏览 16 评论
3492 浏览 1 评论
9055 浏览 16 评论
4086 浏览 18 评论
1175浏览 3评论
603浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
596浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2333浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 00:51 , Processed in 1.392474 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号