《遥控器开发基础教程4开源编队无人机SPI(OLED).docx》由会员分享,可在线阅读,更多相关《遥控器开发基础教程4开源编队无人机SPI(OLED).docx(11页珍藏版)》请在第一文库网上搜索。
1、COCOF1Y教程疯壳无人机系列目录.1一、O1ED简介二、SPI驱动C)1ED实验官网地址:http:/www.fengke.c1ub购买链接:http:ShOr)I官方QQ群:457586268SPI(O1ED)一、O1ED简介O1ED(OrganicE1ectro1uminesenceDisp1ay)有机发光显示器,与传统的显示器不同的是,传统的显示器需要背光,才能显示;而O1ED则不需要,其自身就能够发光。而O1ED之所以能够自发光,主要是通过电场驱动:有机半导体材料和发光材料通过过载流子注入和复合后实现发光。从本质上来说,就是通过FrO玻璃透明电极作为器件阳极,金属电极作为阴极,通过
2、电源驱动,将电子从阴极传输到电子传输层,空穴从阳极注入到空穴传输层,之后分迁移到发光层,二者相遇后产生激子,让发光分子激发,经过辐射后产生光源。简单来说,一块O1ED屏幕,就是由百千万个“小灯泡”组成。O1ED不仅更轻薄、功耗低、亮度高、发光率好、可以显示纯黑色,并且还可以做到弯曲,如当今的曲屏电视和手机等。当今国际各大厂商都争相恐后的加强了对O1ED技术的研发投入,使得O1ED技术在当今电视、电脑(显示器)、手机、平板等领域灵应用愈加广泛。如下图所示为O1ED显示屏模块实物图。二、SP1驱动O1ED实验在本节中应用的到的SP1与飞控开发基础篇SPI(六轴传感器数据获取)一节不同,本节用的到的
3、是通过GP1o模拟的SP1而飞控开发基础篇SPI(六轴传感器数据获取)中应用的是STM32硬件SPI。而SP1协议相关知识可以参考飞控开发基础篇SPI(六轴传感器数据获取)。根据原理图可知O1ED屏的电气连接关系,如下图所示。O1ED_SPI接口123456GXD3V3O1ED-SCKO1edZmqsiO1edIresO1ED-DCP1STM32最小系统GND可知O1ED的复位脚RES接在STM32的PB6、O1ED的命令/数据选择脚DC接在STM32的PB7O1ED的时钟线接在STM32的PA5、O1ED的数据输入接在STM32的PA7o这里的O1ED模块没有CS片选脚,是因为模块内部已经默
4、认接地了。O1ED显示的整体代码编写思路如下。代码思路1管脚配置1、定义结构体;2、使能时钟;3、填充结构体;4、装载结构体;2O1ED时序的实现1、写入数据/命令函数实现。3O1ED的配置及功能性函数实现1、O1ED初始化;2、O1ED功能性函数实现(如刷屏、描点、清屏等)。4逻辑处理1、显示逻辑。根据O1ED的驱动芯片SSD1306的手册可以得知控制时序,如下图所示。根据时序就可以编写对应时序的代码了。如下图所示为O1ED写时序的代码。向O1ED写入一个字节。25 dat:要写入的数据/命令26C1nd:数据/备令标志0,表示命令;1,表示数据:27voidO1ED_WR_Bvte(u8d
5、at,u8cmd)28 (29 u8i;30 if(cmd)31 O1ED_RS_SetO:32 e1se33 O1ED_RS_C1r();34 for(i=0i8i+)35 (36 O1|ED_SC1K_C1r();37 if(dat0x80)38 O1ED_SDIN_Set0;39 e1se40 O1ED_SDIN_C1r():41 O1ED_SC1K_Set();42 dat0;1,0-127:设置CoY扫描方向;bit3:0,普通模式.1.重定义模式CoM-1-COMO:驱动路数90123456789012S566666666667777222222222222222O1EDJn1BV
6、te(0xDA,O1ED,CMD)O1ED-WR-Byte(OXO1ED.CMD)01ED_WR_Byte(0x81,O1ED.CMD)O1EDjTCByteSxEF,O1ED二CMD)01ED_WR_Byte(0xD9,O1ED_CMD)O1ED_WR_Bvte(Oxf1,O1ED_CMD)O1EDWRBvte(OxDBfO1EDCMD)O1EDZWRZByte(0x30,O1ED二CMD)O1EDjn1Byte(OXA4,O1ED,CMD)01ED_WR_Byte(0xA6,O1ED_CMD)O1ED_WR_Bvte(0xAF,O1ED.CMD)O1EDC1earO;*件弓皿电比度设置25
7、5.默认0X7F(亮度设置,越大越亮)设置预充电周期13:0,PHASE1;7:4,PHASE2:设置VCoMH电压倍率6:4000,0.65*vcc;001,0.77*vcc:011,0.83*vcc;全局显示开启.bit。:1,开启.0,关闭.(白男W)设置显示方式:bit。:1,反相显示:0,正常显示开启显示O1ED的所有显示都是基于描点得来的,由点成线,再由线成面。O1ED的75画点76/x:012777/y:06378/t:1填充0,清空79voidO1ED_DrawPoint(u8x,u8v,u8t)8081u8pos,bx,temp=0;82if(x127y63)return;超
8、出范围了.83pos=7-y8;84bx=y%8;85temp=1(7-bx);86if(t)O1ED_GRAMxEpos=temp;87e1seO1ED_GRAMxposft=temp;88)O1ED显示单个字符的代码如下图所示。95voidO1EDeShowChar(u8x,u8y,u8chr,u8size,u8mode)9697u8temp,t,t1:98u8y=y:99Chr=Ch1;得到偏移后的值100for(t=0;tsize;t+)101102if(size=12)temp=o1ed_asc2_1206chrt:调用1206字体103e1setemp=o1ed_asc2_1608
9、chrt;调用1608字体104for(t1=0;t18;t1+)105(106if(temp0x80)O1ED_DrawPoint(x,y,mode):107e1seO1ED_DrawPoint(x,y,!mode);108temp=1;109y+;110if(y-y)=size)111112y=y:113x+;114break;115)116)117)1181显示字符需要对相应的字符取模,这里已经提供了两种取好模的字体,按照“阴码、逐列式、顺向”的取模方式,分别是12*6、16*8大小的字体,在o1edfont.h里,如下图所示。取模需要通过取模软件,这里使用的是“PCto1CD2002”,该软件有两大功能,一种是字符取模,另一种是图片取模。这里我们用到的是字符取模,根据代码驱动的描点方向,生成的12*6字模的字模选项设置如下图所示。字模选项这里以生成12*6的字符“1”做举例,按照上图设置好字模选项设置后,输入“1”,点击“生