快捷搜索:

OLED显示屏在陀螺经纬仪中的应用设计

陀螺经纬仪经由过程敏感地球自转的水中分量来测定仪器架设点真北方位的周详仪器,事情环境类似于电子经纬仪,所不合的是电子经纬仪只能测定两个目标的相对夹角,而陀螺经纬仪不仅可以测定目标之间的相对夹角,而且可以测定目标与地舆北或真北方位之间的夹角。仪器事情平日在田野进行,情况前提较为恶劣。曩昔显示部分用液晶实现,带来的问题是除重量和体积外,低温靠加热实现,功耗大年夜,田野功课对电池要求较高。另一个问题是采取任何步伐,都无法办理太阳照射下,液晶显示不清楚这个问题,这是因为液晶显示自身特点抉择的。

OLED在显示信息方面有许多吸惹人的特征。OLED无LCD的视角问题,可供给全视角显示。因为OLED具有能自发光的特征,在亮度上也比LCD 高得多,也不像LCD 必要背光源,以是不仅前进了电源的有效功率,功耗只有LCD 的一半,而且器件厚度也比LCD 薄。OLED 相应光阴比范例LCD 快一千倍。以是,它具有高效率、高比较度、宽视角、事情电压低等优点[1 -2]。台湾铼宝公司临盆的内嵌SSD1303驱动芯片的超薄OLED显示屏P09703点阵数128X64,厚度仅2.05毫米,重量仅11.1克,事情温度-40℃到+85℃。在陀螺经纬仪上选用该产品,很好的办理了显示问题。下面重点评论争论电路设计的实现问题。

1 SSD1303简介

今朝,主要有Solomon 公司和美国的Clare公司等几家公司临盆OLED 驱动IC。Solomon 投入市场的SSD1303,是一枚把行驱动、列驱动和节制器集成为一体的OLED 驱动器芯片。这个驱动器为132 × 64点阵OLED 图形显示而设计的,包括行驱动器、列驱动器、电流参考发生器、比较度节制、振荡器和几个MCU 接口模式。事情逻辑电压2.4V~3.5V,具有富厚的软件功能,支持4种颜色选择和每种颜色64级节制,它的软件比较度具有256级节制,内嵌的132 × 64 bit 的图形动态随机存储器( GDDRAM),供给了行remapping、列remapping、垂直滚动和部分显示功能。使该驱动器得当于不合像素尺寸和颜色的多种OLED 显示。

2 P09703与LPC2131的硬件连接

LPC2100/lLPC2105/LPC2106 系列微节制器是飞利浦半导体推出的基于16/32 位ARM7TDMI-S CPU,并带有128/256 k字节(kB)嵌入的高速Flash存储器的微节制器,128位宽度的存储器接口和独特的加速布局使32位代码能够在最大年夜时钟速度下运行。对代码规模有严格节制的利用可应用16 位Thumb 模式将代码规模低落跨越30%,而机能的丧掉却很小。因为LPC2100/lLPC2105/LPC2106系列微节制器采纳异常小的64脚封装、极低的功耗、多个32位准时器、4路10位ADC PWM 输出以及多达9个外部中断,这使它们分外适用于工业节制、医疗系统、造访节制和电子收款机(POS)等利用领域。由于LPC2100系列微节制器没有外部总线节制器,以是它们外接扩展芯片不是很方便。不过,由于它们的速率很快,以是纵然应用软件模拟总线外接扩展芯片也比通俗的80c51快得多,而富厚的片内资本也不是通俗51能够相比的。

鉴于P09703与P09702具有相同的图形显示节制器SSD1303,而P09702硬件接口得当试验连接,下面以P09702与LPC2131为例进行阐明,因为OLED显示屏P09702的逻辑电平为2.4V - 3.5V,我们选用PHILIPS公司临盆的基于ARM7TDMI-S、单电源供电的微节制器LPC2131作为节制器,图一给出了包括电源、时钟、复位等一个嵌入式处置惩罚系统正常事情的最小电路外,电源电路供给模拟3.3V和数字3.3V,以前进系统事情稳定性。同时绘制了P09702与LPC2131的硬件连接要领。

超薄显示屏OLED在陀螺经纬仪中的利用

3 软件编程

在与谋略机连接方面,SSD1303的接口,包括数据输入缓存器、数据输出存器,指令寄存器及译码器,忙状态触发器以及时序节制电路等,具有高机能的接口节制电路。谋略机可以随时造访SSD1303而不必要判断其当前状态,与曩昔用的以T6963C节制器不合,SSD1303判断忙状态在操作上不是那么紧张,由于SSD1303的接口部能够合时地接管谋略机的造访。只是在谋略机对显示存储器大年夜量的数据传输时与节制部向驱动部传输显示数据相冲突,会在显示屏上呈现“雪花”。然则因为这个间隙光阴很短,加上人眼在视觉上的惰性而看不出“雪花”征象,无意偶尔判断忙标志再进行显示数据传输时,忙标志已经消掉了。恰是因为这些,谋略机造访SSD1303的操作流程异常简单。但要留意的是SSD1303的接口节制电路内有几套时序电路以适配不同谋略机操作时序的要求。时序适配电路的设置端为BS0,BS1,BS2。在P09703中选择BS1和BS2不合的连接,以确定选择Intel8080时序照样M6800时序。在P09702中因为没有BS1和BS2的选择,出厂时已经设置为Intel8080时序,以是下面的法度榜样为Intel8080时序。

#define AD0_PIN_NUM 8 //8位数据总线

#define DC_PIN_NUM 5 //P0.5 数据/指令节制位,低电平—指令操作,高电平—数据操作

#define WR_PIN_NUM 6 //P0.6 写数据/指令节制位,高电平变低电日常平凡写入

#define RD_PIN_NUM 7 //P0.7 读数据/指令节制位,低电平有效

#define CS_PIN_NUM 16 //P0.16 使能位,低电平有效

void ExBusInit(void) //初始化P09702OLED显示屏总线

{ uint32 temp;

// 设置引脚连接模块:DC_PIN_NUM、WR_PIN_NUM、RD_PIN_NUM、CS_PIN_NUM、 AD0_PIN_NUM为GPIO

PINSEL0 &= ~(3 《《 (2 * DC_PIN_NUM));

PINSEL0 &= ~(3 《《 (2 * WR_PIN_NUM));

PINSEL0 &= ~(3 《《 (2 * RD_PIN_NUM));

PINSEL0 &= ~(3 《《 (2 * (CS_PIN_NUM-16)));

for (temp= AD0_PIN_NUM; temp 《 16; temp++){

PINSEL0 &= ~(3 《《 (2 *temp));

}

// 设置引脚偏向,所有相关引脚为输出

temp = 0xff 《《 AD0_PIN_NUM;

IODIR = IODIR | temp;

IODIR = IODIR | (1 《《 WR_PIN_NUM) | (1 《《 RD_PIN_NUM) | (1 《《 DC_PIN_NUM) | (1 《《 CS_PIN_NUM);

// 设置引脚输出值,除CS_PIN_NUM输出为低电平外,另外均为高电平

IOCLR = (1 《《 CS_PIN_NUM);

IOSET = (1 《《 DC_PIN_NUM) | (1 《《 WR_PIN_NUM) | (1 《《 RD_PIN_NUM);

temp = 0xff 《《 AD0_PIN_NUM;

IOSET = IOSET | temp;

}

uint8 ReadData(void) //从P09702OLED显示屏读取数据

{ uint32 temp,temp1;

temp1 = IODIR;

IODIR = temp1 & (~(0xff 《《 AD0_PIN_NUM)); // 设置AD0_PIN_NUM为输入

IOCLR = 1 《《 RD_PIN_NUM;

temp = IOPIN;

IOSET = 1 《《 RD_PIN_NUM;

IODIR = temp1 | (0xff 《《 AD0_PIN_NUM);

temp = temp 》》 AD0_PIN_NUM;

return (uint8) temp;

}

void WriteCommand(uint8 Data) //写指令代码到P09702OLED显示屏

{ IOCLR = 1 《《 DC_PIN_NUM;

IOSET = Data 《《 AD0_PIN_NUM;

Data = ~Data;

IOCLR = Data 《《 AD0_PIN_NUM;

IOCLR = 1 《《 WR_PIN_NUM;

IOSET = 1 《《 WR_PIN_NUM;

IOSET = 1 《《 DC_PIN_NUM;

}

void WriteData(uint8 Data) //写参数及数据到P09702OLED显示屏

{ IOSET = Data 《《 AD0_PIN_NUM;

Data = ~Data;

IOCLR = Data 《《 AD0_PIN_NUM;

IOCLR = 1 《《 WR_PIN_NUM;

IOSET = 1 《《 WR_PIN_NUM;

}

main(){ int j, i;

ExBusInit(); //初始化P09702OLED显示屏总线

InitOled(); //初始化P09702OLED显示屏,因为SSD1303软件节制指令异常富厚,该函数内容较长,在这里不做描述,详情见P09702利用条记,这里要阐明的是:InitOled()中的comm_out2()函数用WriteCommand()函数替代

for(i=0;i《8;i++)

WriteCommand (0xB0+i); //设置显示位置—行

WriteCommand (0x02); //设置显示位置—列低地址

WriteCommand (0x10); //设置显示位置—列高地址

for(j=0;j《128;j++)

WriteData((0xFF); //屏幕显示,全亮

}

}

上述仅是对P09702基础的利用,有关更多的SSD1303软件节制指令,经由过程该文先容的措施,并结合SSD1303的指令集[4],读者能够对P09702利用自若。

滥觞;国际led网

您可能还会对下面的文章感兴趣: