VP2188是精电蓬远生产的一款彩色STN液晶显示模块,此模块为点阵透射式彩色STN显示屏,色阶为65 k色、白色LED背光,其核心控制器是Philips COG封装的PCF8837.PCF8837是单片式彩色STN控制驱动器,存储容量为176*132*16=45 kB,有3种颜色显示模式(RGB 565或444或332),驱动能力为176行,396列(132*RGB)输出.
PCF8837的特点是有内部集成驱动电源功能模块及OPT功能模块,具备内部DC-DC升压、变换及电压、帧频率温度补偿电路,可以通过软件管理驱动电源的工作 ,并有灵活的串口和并口连接方式、矩阵式存储器管理以及由此带来的方便的图像管理功能、区域滚动模式,此外有可软件编程的局部显示及色阶模式,通过PWM16脉宽调制和相位混频组合实现FRC4的多极灰度控制、N-线反转和超频反转以消减串色等等.
1 PCF8837的主要特点
PCF8837驱动电压和偏压生成电路包括电压乘法器、偏压生成电路1、偏压生成电路2、行倍压电路,它们共生成V1、V2、V3、Vc、MV1、MV2、MV3 7个电压值,其中偏压生成电路1通过SETVOP指令对VPR编程生成电压V2,公式为:
V2=a+b × VOP,(a=3.79,b=0.015,VOP=VT+VPR+(VCON-63)+ MVOP)
式中VT为附加的温度补偿参数,由传感器输出和TCVOPAB和TCVOPCD指令设定;VPR为主要的参考量,由SETVOP指令设定,范围14~214 dec;VCON 为对比度参数,由SETCON设置,范围为7位2进制数-63H~63H MMVOP是OTP中的预设偏移量.
偏压生成电路2通过生成电压V1,Vc,MV1,行倍压指令SETBS通过对VB模块编程在VBIASGEN模块生成电压V3、MV3,MV2由电源电压Vss供给,和Vss电压相同.
此外,PCF8837还可以分段设置温度补偿以及设置最佳对比度,消除来自周围的光线干扰,这些功能是在通过一次可编程(OTP,One-Time-Programmable)校准功能设置的.
PCF8837显示存储器为矩阵式寻址结构,它的1个单元为16位,代表1个显示像素的3色数据RGB.矩阵式存储器管理为局部图像显示和图像旋转显示提供了简便的方法.
PCF8837的寻址由行列地址指针X、Y共同决定,每组指针都配有两组可编程的地址寄存器:起始点地址寄存器XS和YS,结束点地址寄存器指针XE和YE.通过指令PTLAR可以设置有效显示区域的起始地址和结束地址,通过指令PTLON可以打开局部显示模式.指令PTLMCTL控制局部模式的N线反转功能和行选脉冲,提供局部显示的效果.通过指令MADCTL设置MY、MX、V、LAO、RGB来实现图像的旋转功能.MY、MX、V,LAO、RGB的取值和图像显示的关系如表1所示.
表1 图像旋转需设定的参数
参数 | 0 | 1 |
MX | 图像正常 | 水平镜像颠倒 |
MY | 垂直镜像颠倒 | 图像正常 |
V | 水平寻址方式写存储器 | 垂直寻址方式写存储器 |
RGB | 显示数据顺序为R、G、B | 显示数据顺序为B、G、R |
图1为存储器实现图象旋转时的数据送显流程,X为显示数据行,Y为显示数据列.根据此流程图,要实现图像的逆时针旋转90°,只需要设定好需要显示的起始行和列以及结束的行和列,将MX、V和RGB的值取反,然后开局部显示即可.其他的显示效果也可以通过设置MADCTL指令的相应位来实现.通过指令VSCRDEF设置滚动模式列的定义以及滚动列的顶部和底部,SEP指令设置滚动模式起始行和启动滚动模式.PCF8837还提供休闲模式的开关,当不用显示时可以打开休闲模式,此时仅保留MSN数据,且频率降低,使驱动器的功率消耗减小.
图1 程序流程图
2 硬件接口电路
VP2188一共有27根输出引脚,分别为控制、数据信号线DB0-DB15,读信号RD(低电平有效),写信号WR(低电平有效),数据和控制信号选择RS(低电平为控制信号、高电平为数据信号),片选信号CS(低电平有效),复位信号RESETB(低电平有效),电源VDD,液晶驱动电源PS1、PS2,背光灯正极LED 、负极LED-,地线GND.
接口方式为串口3线9位或并口8位/16位,可满足80系列接口时序.当使用51系列单片机8位接口时可将PCF8837高8位悬空.
与51系列单片机8位并口接口的示意图如图2所示:单片机P0与VP2188数据低8位相连高8位不用悬空.P2口0~4位分别作读写、数据程序选择、片选以及复位信号.
图2 硬件连接图
3 PCF8837的指令系统与软件编程
PCF8837支持两套不同的指令系统,通过ISS管脚设置指令0或1来选择,这里我们只介绍指令系统0,指令1只是和指令1代码不同,其功能是一样的,其中数据传送格式位如表2所示.
PCF有3种不同的数据格式支持不同的色阶:
(1)64*210色(16位)RGB 5-6-5位输人.数据来自于接口的16位直接存储于RAM 中.
(2)4*210色(12位)RGB 4-4-4位输入.数据来自于接口的12位,按照LUT图映射成16位后存储于RAM 中.
(3)256色(8位)RGB 3-3-2位输入.数据来自于接口的8位,按照可编程LUT图(RGBSET指令)映射成12位,再按照LUT图映射成16位后存储于RAM 中.
D/C | D15 | D14 | D13 | D12 | D11 | D10 | D9 | D8 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
8位 | R4 | R3 | R2 | R1 | R0 | G5 | G4 | G3 | ||||||||
8位 | G2 | G1 | G0 | B4 | B3 | B2 | B1 | B0 | ||||||||
16位 | R4 | R3 | R2 | R1 | R0 | G5 | G4 | G3 | G2 | G1 | G0 | B4 | B3 | B2 | B1 | B0 |
数据传送如果采用16位接口模式,那么数据格式(1)中一像素16位色阶信息仅需一步就可以传输到显示RAM.数据格式(2)中传送过来的R4、G5、G4、B4舍弃不用,数据格式(3)舍弃高8位.8位接口模式中一像素16位色阶信息需二步传输到数据锁存器再转送到显示RAM,如果只传送一位字节,则所传送的字节不送到RAM 中.采用数据格式(2)还可以分3步传送2个像素色阶信息.
PCF8837的OTP编程要设定的参数有显示器识别信息、分段温度补偿参数、驱动电压和偏压生成电路参数、分段帧频设置参数、N线反转间隔、行列充电时间、RGB相位混合偏移量、振荡器调整等等 .初始化程序中需要设定的量有局部标准显示模式、内部振荡器、显示对比度、电压器偏压值、接口模式、存储器控制等 .
当采用8位接口模式与51单片机如上图连接时,主要的编程如下(由于篇幅有限,这里省略了某些控制指令的设置,用户可根据实际需要添加设置):
- //DEMO源程序
- //写指令函数
- void Write_com2188(unsigned char c1)
- {RS=0;
- CS2188=0;
- LCD+RD=1;
- WE=0;
- P0=c1;
- _nop_();
- _nop_();
- WE=1:
- _nop_();
- CS2188=1;
- )
- //写8位数据函数
- void Write_data2188(unsigned char c1)
- {RS=1;
- CS2188=0;
- LCD_RD=1;
- WE=0;
- P0=c1;
- _nop_();
- _nop_();
- WE=1;
- _nop_();
- CS2188=1;
- }
- //初始化程序
- void Init_lcd2188(unsigned char contrast)
- {Write_com2188(0x01); //软件复位
- DelayX10ms(10); //延时0.1s
- Write_com2188(0x11); //休眠结束
- Write_com2188(0x03); //倍压开
- Write_com2188(0x29); //显示开
- Write_com2188(0xc0); //选内部振荡器
- Write_com2188(0x13); //标准模式开
- Write_com2188(0x20); //反转关
- Write_com2188(0x3a); //像素接口
- Write_data2188(0x02); //8位
- Write_com2188(0xb); //设置vop
- Write_data2188(0x13); //vop数值
- Write_com2188(0x25); //设置对比度
- Write_data2188(contrast);//对比度数值
- Write_com2188(0xc7);//设置偏压比
- Write_com2188(0x01);//偏压比数值
- Write_com2188(0x36);//MADCTL
- Write_data2188(0x00);//正向
- Write_com2188(Oxl1);//休眠结束
- Write_com2188(0x29);//开显示
- )
- //旋转功能实现
- void Circum_lcd2188()
- {Write_com2188(0x30); //设置局部显示区域的RAM 地址
- Write_data2188(0xxx); //局部显示区域RAM 起始
- Write_data2188(0xxx); //局部显示区域RAM结束
- Write_com2188(0x36); //设置MADCTL命令
- Write_com2188(0x11); //休眠结束
- Write_com2188(0x29); //开显示
- Write_com2188(0x12); //局部模式开