基于C8051F020单片机的双接口OLED控制器设计与实现

2019-02-20 02:07武春锋王永伟王志乾刘绍锦刘玉生
现代电子技术 2019年4期
关键词:字符时序指令

武春锋 王永伟 王志乾 刘绍锦 刘玉生

关键词: 有机电致发光二极管; C8051F020单片机; 控制器; SSD1309芯片; 双接口; 判忙函数

中图分类号: TN111?34; TP368.2                文献标识码: A                    文章编号: 1004?373X(2019)04?0014?05

Design and implementation of dual?interface OLED controller based on C8051F020 SCM

WU Chunfeng1,2, WANG Yongwei3, WANG Zhiqian1, LIU Shaojin1, LIU Yusheng1,2

(1. Changchun Institute of Optics, Fine Mechanics and Physics, Chinese Academy of Sciences, Changchun 130033, China;

2. University of Chinese Academy of Sciences, Beijing 100049, China; 3. The Air Force's Military Representative Office in Changchun, Changchun 130033, China)

Abstract: A design and implementation scheme of the dual?interface OLED controller based on the C8051F020 single chip microcomputer (SCM) is proposed. A printed circuit board with two OLED interfaces is designed taking the C8051F020 as the core control unit. The busy judgment function is called during the writing process of the command function and data function, so as to ensure that the drive chip can receive control instructions when it is not busy. The transmission sequence of signals like chip selection, write enabling, parallel data is appropriately arranged, so as to satisfy the set up time and hold time of the address or data. The experimental results show that the two OLEDs can accurately display the reserved information, and have the advantages of high brightness, fast response speed, and wide viewing angle. The scheme has an ideal effect, and its dual?interface function can further expand its practicability and be transplanted in display terminals of relevant instruments and apparatus.

Keywords: OLED; C8051F020 SCM; controller; SSD1309 chip; dual interface; busy judgment function

有机电致发光二极管(Organic Light Emitting Diode,OLED),又称有机电致显示,是一种较为新型的显示技术[1]。与目前各类平板显示技术相比,OLED具有亮度高、响应速度快、适应温度范围广、易于制作在柔性衬底上等优点[2?3]。本文基于C8051F020单片机设计的OLED控制器具有控制两块OLED显示的功能[4]。利用Cadence制作控制器印刷电路板,在Silicon Laboratories IDE开发软件中编写驱动两块OLED显示的程序[5]。随后进行了板级调试和显示实验。两块OLED的型号分别为MCOB21605G1V?EWP和MCOT128032BX?WM,均为Midas公司产品。前者可以显示2行,每行显示16个字符,每个字符5列;后者可以显示128列,32行;分别简记为OLED1602和OLED128032。

1  控制器总体设计

双接口OLED控制器结构如图1所示,其由核心控制单元、电源管理单元、OLED1602和OLED128032显示单元以及接口单元构成[6]。C8051F020与OLED的通信经由接口完成。OLED1602和OLED128032的驱动芯片HD44780与SSD1309均由厂家集成在屏幕面板上,单片机按照一定的时序规则发出HD44780和SSD1309的控制信号,即可驱动两块OLED显示。

2  硬件设计

2.1  核心控制单元

本设计以新华龙C8051F020单片机为主控制器。C8051F020是片内资源丰富的高速SoC单片机,有5个16位定时器/计数器、22个中断源,允许大量的模拟和数字外设中断微控制器,具有很高的执行效率[7]。与标准8051结构相比,C8051F020的内核CIP?51采用流水线结构,指令执行速度有了很大的提高[8?9]。在标准8051中,一条指令需要12个或24个时钟周期,而对于CIP?51内核,大多数指令的执行时间为1或2个时钟周期[10]。

针对本控制器,单片机I/O分配如下:P0口控制两块OLED使能、读/写、命令/数据选择等;P4口连接OLED1602的8位双向数据端口,指令/数据码从P4口写入HD44780,判忙信号通过P4.7被C8051F020读取;P6.5和P6.6控制OLED128032与单片机的通信协议;P7口连接OLED128032的8位双向数据端口,指令/数据码从P7口写入SSD1309。

2.2  电源管理单元

电源管理单元如图2所示。为了满足系统各单元不同的电源要求,电源管理单元分配如下:

1) 双接口OLED控制器的系统输入电压为直流12 V,分别接至LM7805芯片的电压输入端和OLED128032接口的显示电压输入端。

2) 使用LM7805芯片进行12 V到5 V转换,将输出的5 V电压供给OLED1602和TPS73HD318芯片。

3) 使用TPS73HD318芯片进行5 V到3.3 V和1.8 V的转换,将输出的3.3 V和1.8 V电压分别作为C8051F020的输入电压和OLED128032的逻辑输入电压。

2.3  OLED1602和OLED128032显示单元

HD44780集成了显示数据寄存器(Display Data RAM,DDRAM)、字符发生只读存储器(Character Generator ROM,CGROM)、字符發生读写存储器(Character Generator RAM,CGRAM)。CGROM中固化了192个常用字符的字模,这些字模分别对应着一个字符代码,例如:A字模的字符代码即为其ASCII码0x41。DDRAM寄存要显示字模的字符代码。若要显示CGROM中没有的字模,需自定义字模并写入CGRAM中,然后将自定义字模的字符代码写入DDRAM中。CGRAM中最多写入8个8 B的字模,字符代码依次为0,1,…,7。

与HD44780不同的是,SSD1309没有集成字符发生存储器,显示字符的必要条件是先自定义字模。OLED128032显示字符的原理与OLED1602有所区别,它的32行被分成了4页,每页128列,每列有8个可发光点阵。用户向某列写入8位二进制数据即可控制点阵发光[11]。同理,向不同页的多个列写入数据即可显示自定义的中英文、数字、图形等字符。显然,相比OLED1602,OLED128032的显示效果更灵活多变。

2.4  OLED1602和C8051F020的接口单元

OLED1602与C8051F020的通信方式为并行方式。指令/数据选择引脚RS、读/写引脚R/W、片选使能引脚E、8位双向并行数据端口DB0~DB7分别接到单片机的P0.5,P0.6,P0.7,P4.0~P4.7口。OLED128032与微处理器的通信方式可通过BS1和BS2设置为I2C、串行或并行。本控制器设置OLED128032与C8051F020的通信为8位并行方式。复位引脚RES#、片选引脚CS#、指令/数据选择引脚D/C#、读引脚RD#、写引脚W#、8位双向并行数据端口D0~D7分别接到单片机的P0.0,P0.1,P0.2,P0.3,P0.4,P7.0~P7.7。

综上所述,设计基于C8051F020的双接口OLED控制器的印刷电路板。图3是焊接元器件后的控制器。

3  软件设计

基于上述硬件条件,在Silicon Laboratories IDE开发软件中编写驱动两块OLED显示的程序。首先要初始化C8051F020,包括关看门狗、使用外部晶振、端口初始化等步骤[12],然后编写OLED1602的驱动程序,最后编写OLED128032的驱动程序。

3.1  OLED1602软件策略

3.1.1  OLED1602读写时序

对OLED1602的基本操作分为四种:读状态、读数据、写命令和写数据。OLED1602的读/写操作时序如图4所示。读/写时序中地址建立时间tSP1最小值和地址保持时间tHD1最小值分别为30 ns和10 ns;读操作数据建立时间tD最大值为100 ns,数据保持时间tHD2最小值为20 ns;写操作数据建立时间tSP2最小值为40 ns,数据保持时间tHD2最小值为10 ns。

C8051F020向HD44780发送写命令和写数据指令时,RS,R/W,E,DB[7:0]之间的时序应满足图4b)要求[13]。用示波器测量出写命令函数中四者之间的时序如图5所示。

由图5a)、图5b)知,地址建立时间[t′SP1]>500 ns,[t″SP1]>410 ns,地址保持时间[t′HD1]>100 ns,[t″HD1]>200 ns。由图5c)知,写操作数据建立时间[t′SP2]>100 ns,数据保持时间[t′HD2]>500 ns。满足图4时序要求。

3.1.2  判忙函数

C8051F020使用外部11.059 2 MHz晶振,时钟周期约为90 ns。写指令函数中,RS由高变低后,R/W由高变低。如图5a)、图5b)可知,[t′SP1]比[t″SP1]近似多90 ns,即前后两指令有1个时钟周期的延迟。然而HD44780的部分指令响应时间相比单片机是偏慢的,例如:控制显示器开指令、显示模式指令、设定CGRAM地址指令等的执行时间为40 μs。只有当前指令执行完毕,HD44780才可以接收下一条指令。HD44780的读取忙信号指令可以有效地解决这个问题,当前指令未执行完时,并行数据口的最高位DB7为高,即忙状态;否则DB7为低,可接收下条指令。

判忙函数通过读取DB7的状态来控制是否给HD44780发送新的指令。在写命令函数和写数据函数中调用判忙函数,以保证在HD44780不忙的时间发送相关时序。图4a)读操作数据建立时间tD最大值为100 ns,而HD44780读取忙信号指令的执行时间为40 μs。因此,只要在判忙函数中延时40 μs后读取DB7的状态,即可满足要求。

3.1.3  OLED1602显示控制流程

OLED1602的显示控制流程归纳为:先初始化,然后显示CGROM固化的字模,最后显示自定义字符。清屏、光标归位、显示模式、开显示等操作在初始化过程完成,可设置显示模式为2行5[×]8点阵字符、显示不移动、光标自动右移且不闪烁。

显示CGROM固化的字模分为2个步骤:

1) 指定首个字模的显示位置,每行最多显示16个字符。若显示第1行,需加上指令码0x80;若显示在第2行,需加上指令码0xC0。

2) 将字符代码写入DDRAM中。英文字母、阿拉伯数字、常用标点的字符代码即为其ASCII码,通过键盘直接输入即可。

显示自定义字符可分为5个步骤:

1) 建立字模。

2) 指定写入CGRAM的首个字模的地址,需加上指令码0x40。例如:显示5[×]8点阵字符,首个地址为0x40,则最多可写入8个字模,每个字模包括8 B。

3) 将自定义的字模写入CGRAM。

4) 指定首个字模的显示位置,每行最多显示16个字符。若显示第1行,需加上指令码0x80;若显示在第2行,需加上指令码0xC0。

5) 将字符代码写入DDRAM中。英文字母、阿拉伯数字、常用标点的字符代码即为其ASCII码,通过键盘直接输入即可。自定义字模的字符代码为0~7。

3.2  OLED128032软件策略

3.2.1  OLED128032写时序

对OLED128032的基本操作有写命令和数据。写时序如图6所示。地址建立时间tAS最小值和地址保持时间tAH最小值分别为20 ns和0 ns;写数据建立时间tDSW最小值和写数据保持时间tDWH最小值为40 ns和15 ns。片选建立时间tCS最小值为0 ns。

C8051F020向SSD1309发送写命令和写数据时,RS,R/W,E,DB3之間的时序应满足图6要求。C8051F020的指令执行时间约为90 ns,所以,合理控制CS#,D/C#,WR#以及D[7:0]的发送顺序即可满足时序要求。例如:在写命令函数中,依次将D/C#,CS#,WR#由高变为低,即满足图6地址和数据建立时间的要求。

3.2.2  OLED128032显示控制流程

OLED128032的显示控制流程如图7所示,首先进行初始化,设置列地址显示顺序和行扫描顺序,清屏,开显示等。向某个位置显示一个自定义字节可分为3步:首先确定要显示的页,OLED128032共有4页,向SSD1309写入命令0xBx,x表示0~3页;然后确定要显示的列,需要向SSD1309连续写2个字节0x1x和0x0y,x为列地址的高4位,y为列地址的低4位;最后直接写入8位二进制数据即可。将所有字模写入对应的列即可完整地显示自定义字符。

4  实验效果与评测

将驱动程序烧写进C8051F020后,显示效果如图8所示。双接口OLED控制器不但准确地显示了预先设置的信息,而且亮度高、响应速度快。另外,实验证明,用户可从多个不同的角度观察到清晰的显示效果。可以将本文设计的双接口OLED控制器移植到如图9所示的某型号光电测量设备,取代原LCD显示模块。

5  结  语

本文设计并实现一种基于C8051F020单片机的双接口OLED控制器。在软件设计部分,通过引入判忙函数保证了驱动芯片在不忙状态下接收控制指令,避免了单片机和OLED速度不匹配带来的误操作。为满足地址/数據的建立时间和保持时间的时序要求,在写命令和写数据函数中合理安排了CS#,D/C#,WR#以及D[7:0]等信号的发送顺序。实验证明,设计的控制器驱动两块OLED显示效果理想。双接口进一步拓展控制器的实用性,可将其移植于相关仪器仪表的显示终端。

参考文献

[1] 蒋明明.OLED驱动芯片恒流驱动模块的设计[D].哈尔滨:哈尔滨工业大学,2013.

JIANG Mingming. Design of constant current driving module for OLED driver chip [D]. Harbin: Harbin Institute of Technology, 2013.

[2] 相恒阳.基于嵌入式银网格透明电极的柔性高效有机发光二极管[D].苏州:苏州大学,2016.

XIANG Hengyang. High?performance flexible organic light?emitting diodes using embedded silver network transparent electrodes [D]. Suzhou: Soochow University, 2016.

[3] 周福强.基于FPGA的OLED驱动设计[D].南京:南京理工大学,2013.

ZHOU Fuqiang. Design of OLED driver based on FPGA [D]. Nanjing: Nanjing University of Science and Technology, 2013.

[4] 陈东成,胡敬营,吕卫国,等.基于IP核的多接口LCD控制器的设计及实现[J].液晶与显示,2017,32(2):117?123.

CHEN Dongcheng, HU Jingying, L? Weiguo, et al. Design and implementation of muti?interface LCD controller based on IP cores [J]. Chinese journal of liquid crystals and displays, 2017, 32(2): 117?123.

[5] 周润景,袁伟亭,张鹏飞.Cadence高速电路板设计与仿真[M].北京:电子工业出版社,2015.

ZHOU Runjing, YUAN Weiting, ZHANG Pengfei. Design and simulation of Cadence high?speed circuit board [M]. Beijing: Publishing House of Electronics Industry, 2015.

[6] 韩毅,甄娜,张伟方.基于瑞萨单片机的智能模型车设计与实现[J].计算机工程,2011,37(10):243?245.

HAN Yi, ZHEN Na, ZHANG Weifang. Design and implementation of intelligent model car based on Renesas single chip microcomputer [J]. Computer engineering, 2011, 37(10): 243?245.

[7] 郑喜凤,盖鑫玮,魏春娟.基于C8051F020的OLED驱动控制系统[J].液晶与显示,2009,24(4):567?570.

ZHENG Xifeng, GAI Xinwei, WEI Chunjuan. Driving and controlling system for OLED based on C8051F020 [J]. Chinese journal of liquid crystals and displays, 2009, 24(4): 567?570.

[8] 江贤志,刘华章,张教育,等.基于C8051F020单片机的RS485串行通信设计[J].电子测量技术,2014,37(3):121?124.

JIANG Xianzhi, LIU Huazhang, ZHANG Jiaoyu, et al. Design of RS485 serial communication based on MCU C8051F020 [J]. Electronic measurement technology, 2014, 37(3): 121?124.

[9] 张建民,郭伙令,龙佳乐,等.基于单片机的智能SMS心率计设计[J].现代电子技术,2017,40(6):148?150.

ZHANG Jianmin, GUO Huoling, LONG Jiale, et al. Design of an intelligent SMS cardiotachometer based on single chip microcontroller [J]. Modern electronics technique, 2017, 40(6): 148?150.

[10] 鲍可进.C8051F单片机原理及应用[M].北京:中国电力出版社,2008.

BAO Kejin. Principle and application of C8051F MCU [M]. Beijing: China Electric Power Press, 2008.

[11] 杨延宁,刘立军,张志勇.基于Proteus的单片机汉字点阵显示电路设计[J].液晶与显示,2009,24(1):98?102.

YANG Yanning, LIU Lijun, ZHANG Zhiyong. Circuit design of dot?matrix Chinese characters display based on Proteus in MCU [J]. Chinese journal of liquid crystals and displays, 2009, 24(1): 98?102.

[12] 张培仁,孙力.基于C语言C8051F系列微控制器原理与应用[M].北京:清华大学出版社,2007.

ZHANG Peiren, SUN Li. Principle and application of C8051F series microcontroller based on C language [M]. Beijing: Tsinghua University Press, 2007.

[13] 王石.基于FPGA芯片的功能仿真平台构建及静态时序分析[D].西安:西安电子科技大学,2008.

WANG Shi. Construction of function simulation platform and static timing analysis based on FPGA chips [D]. Xian: Xidian University, 2008.

猜你喜欢
字符时序指令
听我指令:大催眠术
寻找更强的字符映射管理器
基于Sentinel-2时序NDVI的麦冬识别研究
字符代表几
一种USB接口字符液晶控制器设计
ARINC661显控指令快速验证方法
消失的殖民村庄和神秘字符
LED照明产品欧盟ErP指令要求解读
基于FPGA 的时序信号光纤传输系统
一种毫米波放大器时序直流电源的设计