摘要:本文在介绍具有USB,I2C,ADC,DDC和PWM功能,嵌入8032控制器内核的uPSD3200单片机的基础上,重点分析利用uPSD3200单片机与台湾铼宝公司最新产品,内嵌SSD1303驱动芯片的超薄OLED显示屏P09703的硬件连接和软件编程,同时给出利用uPSD3200单片机一个A/D口实现32个按键的原理图,从而实现完整的人机对话设计。
关键词:OLED SSD1303 uPSD3200 单片机 在自动控制和智能化仪器仪表中,人机交互是不可缺少的一部分。如何选择合适的显示器件和用最少的单片机口线实现键盘输入,以便将更多的单片机口线用作其它功能控制,是每个从事自动控制和智能化仪器仪表电气设计工程师要考虑的问题。就显示器件而言,随着科学技术的发展,电子显示技术也在不断地更新换代。从传统的阴极射线管(CRT)发展到液晶屏(LCD)。现正在向新一代显示技术过渡。作为新型显示技术候选的有:等离子体放电显示屏(PDP)、有机电致发光屏(OLED)、发光二极管(LED)、电场激发发光(FED)等。目前在研究开发方面竞争得最激烈的是PDP、OLED、LCD。它们各有所长,但追求的最终目标都是一样的,即要求达到质轻、体薄、高亮度、快速响应、高清析度、低电压、高效率、长寿命、低成本。 目前,在光电显示领域,CRT已经走向末路,LCD正处于发展的顶峰时期,与技术成熟、产业链完善、规模庞大的LCD产业相比,OLED还处于发展的初级阶段,它的优势可以从技术与产业两方面来看,在技术上:OLED很薄、很轻,厚度可以做到比LCD薄;由于是不需要背光源的主动发光,所以OLED视角很广,一般认为接近180度;并且具有省电、耐低温特性,在低温下的性能远远优于LCD;响应速度快,图像刷新率几乎是LCD的100至1000倍;除了图像质量的根本性改进外,还具有抗震性好这一特性,这对于便携式设备而言十分有利;不仅如此,由于可弯曲的塑料也可以用作基质材料,所以OLED显示屏的外形不受限制,可以是任何形状,可以放到任意物体的表面。由于使用了新的基质材料,OLED显示屏比目前最薄的薄膜电晶体管(TFT)屏幕还要平整得多[1]。台湾铼宝公司生产的内嵌SSD1303驱动芯片的超薄OLED显示屏P09703点阵数128X64,厚度仅2.05毫米,重量仅11.1克,工作温度-40℃到+85℃。下面给出uPSD3200单片机与OLED显示屏P09703的硬件连接和软件编程。
1 uPSD3200单片机简介 带可编程逻辑的单片机uPSD3200系列是ST公司最新推出的在Flash PSD结构中嵌入8032控制器内核(12CLOCK)的可编程器件。uPSD3200系列带两块Flash存储器,SRAM(支持后备
电池),通用I/O口,带有16个宏单元的3000门可编程逻辑电路PLD,管理监控功能,并可实现USB,I2C,ADC,DDC和PWM功能,片内8032微控中心,带两个标准异步通讯口,三个16位定时/计数器和两个外部中断。何FlashPSD系列一样,uPSD3200系列同样可以通过JATG ISP接口进行在系统编程。uPSD3200系列芯片在税控收款机、POS机、微型打印机、出车计价器和GPS系统等领域有着广泛的应用[2]。在成功推出uPSD3200系列后,ST公司2004年推出内嵌高速8032控制器内核(4CLOCK)的uPSD3300系列,在原来uPSD3200系列的基础上提供8路10位ADC,IrDA,JTAG调试等增强功能,使其能更广阔的应用前景。
2 P09703与uPSD3200的硬件连接 台湾铼宝公司最新推出的超薄OLED显示屏P09703主要特性为:
由于OLED显示屏P09703的逻辑电平为2.4V - 3.5V,我们选用ST公司生产的uPSD3200系列单片机时,注意选用3.3V器件,我们以uPSD3234BV为例,给出OLED显示屏P09703与uPSD3234BV单片机的硬件连接图,同时给出利用uPSD3200单片机一个A/D口实现32个按键的原理图,可以大幅度减少对I/O口的占用。如图一所示,这里要说明的是由于OLED显示屏P09703内藏控制器为台湾SOLOMON生产的SSD1303,该控制器在接口控制电路内有两套时序电路,由时序适配电路设置以适配不同计算机操作时序的要求。时序适配电路的设置端为BS1和BS2。BS1和BS2的时序设置如表一所示。OLED显示屏P09703种没有串行接口,图二为P09703OLED显示屏8080时序图。
图一 P09703与uPSD3234BV硬件连接原理图
图二 P09703OLED显示屏8080时序图
3 软件编程 在与计算机连接方面,SSD1303的接口,包括数据输入缓存器、数据输出锁存器,指令寄存器及译码器,忙状态触发器以及时序控制电路等,具有高性能的接口控制电路。计算机可以随时访问SSD1303而不需要判断其当前状态,与以前用的以T6963C控制器不同,SSD1303判断忙状态在操作上不是那么重要,因为SSD1303的接口部能够适时地接收计算机的访问。只是在计算机对显示存储器大量的数据传输时与控制部向驱动部传输显示数据相冲突,会在显示屏上出现“雪花”。但是由于这个间隙时间很短,加上人眼在视觉上的惰性而看不出“雪花”现象,有时判断忙标志再进行显示数据传输时,忙标志已经消失了。正是由于这些,计算机访问SSD1303的操作流程非常简单。 sbit DC_PIN_NUM = P0︿5; //P0.5 数据/指令控制位,低电平—指令操作,高电平—数据操作 sbit WR_PIN_NUM = P0︿6; //P0.6 写数据/指令控制位,高电平变低电平时写入 sbit RD_PIN_NUM = P0︿7; //P0.7 读数据/指令控制位,低电平有效 unsigned char ReadData(void) //从P09703OLED显示屏读取数据 { unsigned char temp; DC_PIN_NUM = 1; RD_PIN_NUM = 0; RD_PIN_NUM = 1; temp = P4; return temp; } unsigned char ReadCommand(void) //从P09703OLED显示屏读取寄存器状态 { unsigned char temp; DC_PIN_NUM = 1; RD_PIN_NUM = 0; RD_PIN_NUM = 1; temp = P4; return temp; } void WriteCommand(unsigned char Data) //写指令代码到P09703OLED显示屏 { DC_PIN_NUM = 0; P4=Data; WR_PIN_NUM = 0; WR_PIN_NUM = 1; } void WriteData(uint8 Data) //写参数及数据到P09703OLED显示屏 { DC_PIN_NUM = 1; P4=Data; WR_PIN_NUM = 0; WR_PIN_NUM = 1; } main(){ int j, i; InitOled(); //初始化P09703OLED显示屏,由于SSD1303软件控制指令非常丰富,该函数内容较长,在这里不做描述,详情见P09703应用笔记,这里要说明的是:InitOled()中的comm_out2()函数用WriteCommand()函数替代 for(i=0;i<8;i++) WriteCommand (0
xB0+i); //设置显示位置—行 WriteCommand (0
x02); //设置显示位置—列低地址 WriteCommand (0
x10); //设置显示位置—列高地址 for(j=0;j<128;j++) WriteData((0
xFF); //屏幕显示,全亮 } } 上述仅是对P09703基本的应用,有关更多的SSD1303软件控制指令,通过该文介绍的方法,并结合SSD1303的指令集[3],读者能够对P09703有更深了解。对于按键我们给出了电路原理图,由于编成相对简单,这里就不做描述了。