#申请原创# @21小跑堂
在以往的点阵屏中,多使用74HC595作为串并转换的芯片,它所处理的数据宽度只有8位。而现在的显示面板设计多使用16位的驱动IC,例如DP5020就是其中的一种,这样就可以有效地缩减芯片的使用量并可以大幅地化简电路的设计复杂度。此外,该芯片还有一大特点就是其输出端口提供了2~60mA的恒定电流驱动,因而使得LED的发光亮度更均匀且能精确控制,该芯片的内部结构如图1所示。 图1 内部结构
该芯片的引脚排列如图2所示,各引脚的功能则如图3所示。
图2 引脚排列
图3 引脚功能
该芯片在显示面板的设计中,其典型的应用方式见图4所示。 图4 典型应用
DP5020的工作时序如图5 所示,这是后续对其进行驱动的主要基础。 图5时序关系
前面之所以对DP5020作这么详细的介绍,就在于所驱动红色P4.75点阵屏就是基于该芯片来设计的,这块点阵屏的规格为16*64,其外观如图6所示。
在线路构成上,除使用芯片DP5020(4片)之外,还用到的芯片有SM245(2片)和SM5166(2片)。 图6 点阵屏外观
该点阵屏所使用的接口为HUB08,各引脚的名称如图7所示。 图7 HUB08接口
为驱动该点阵屏,所使用的是N76E003最小系统开发板,调试下载工具为MU_LINK,连接方式如图8所示。 图8 开发板及下载工具
点阵屏与开发板的连接关系为: A---P0.0 B---P0.1 C---P0.2 D---P0.3 R1 ---P1.4 OE ---P0.5 LAT ---P0.6 CLK ---P0.7 所做的相应定义为: sbit LA=P0^0; sbit LB=P0^1; sbit LC=P0^2; sbit LD=P0^3; sbit LSCL=P0^7; // CLK sbit LSTB=P0^6; // LAT sbit LR1=P1^4; // R1 sbit LEN=P0^5; // OE UINT8 ScanRow=0;
使用DP5020发送16位数据的函数为: void DP5020_OutByte(UINT16 dat)
{
UINT8 i=0 ;
for(i=0;i<16;i++)
{
LSCL=0;
if(dat&0x8000)
{
LR1=1;
}
else
{
LR1=0;
}
dat=dat<<1;
LSCL=1;
}
}
进行输出行选择的函数为: void SeleRow(UINT8 Nd)
{
UINT8 N=Nd;
N=N%16;
if(N&0x01) LA=1;
else LA=0;
if (N&0x02) LB=1;
else LB=0;
if (N&0x04) LC=1;
else LC=0;
if (N&0x08) LD=1;
else LD=0;
}
实现指定宽度的数据发送函数为: void DisCol(UINT16 *dat,UINT16 len)
{
while(len--)
{
DP5020_OutByte(dat);
}
}
进行显示驱动的函数为: void Display(void)
{
DisCol(0x5555,4);
LEN=1;
LSTB=1;
LSTB=0;
SeleRow (ScanRow)
LEN=0;
ScanRow++;
if(ScanRow>15) ScanRow=0;
}
实现驱动测试的主程序为: void main (void)
{
Set_All_GPIO_Quasi_Mode;
set_CLOEN;
ScanRow=0;
while(1)
{
Display();
}
}
经测试,其显示效果如图9所示,说明驱动正常。 图9 驱动测试
在以上驱动程序的基础上,将测试的固定数值改为读取字库中的字模即可实现字符或汉字的显示。
以工具软件PCtoLCD2002来提取字模的方式如图10所示,是垂直镜像字。 图10 字模提取方式 将字模存放到数组的格式为: UINT8 code tab[]={ 0x00,0x00,0xF8,0x23,0x00,0x10,0x00,0x10,0x00,0x00,0xFC,0x07,0x20,0xF1,0x20,0x11, 0x20,0x11,0x20,0x11,0x24,0x11,0x24,0x12,0x24,0x12,0x1C,0x14,0x00,0x28,0xFE,0x47,/*"远",0*/ ... };
实现满屏显示的函数为: void DisCol(UINT16 lenght)
{
UINT16 dat,n;
UINT8 m=8;
n= lenght-2
while(lenght--)
{
dat=( tab [m*32+ScanRow*2+1]<<8)+ tab [m*32+ScanRow*2];
DP5020_OutByte(dat);
m=m+1;
}
}
其显示的效果如图11所示,说明显示效果正确。 图11 汉字显示效果
若在屏上想实现单字显示,则其显示函数应修改为: void DisCol(UINT16 lenght)
{
UINT16 dat,n;
UINT8 m=8;
n= lenght-2;
while(lenght--)
{
if(lenght>n) dat=( tab [m*32+ScanRow*2+1]<<8)+ tab [m*32+ScanRow*2];
else dat=0x0;
DP5020_OutByte(dat);
m=m+1;
}
}
其显示的效果如图12所示,当然通过修改变量n的表达式也能指定其它数量的显示字数。 图12 单字显示效果
这样就解决了基于DP5020点阵屏的显示驱动问题,并得到了良好的显示效果。感兴趣的话,还可参考前面介绍74HC595的驱动方法来实现数值的显示及电子时钟功能。
|
使用驱动IC,提升点阵屏的显示效果,降低操作繁琐程度,优化使用体验。