基于DP5020点阵屏的显示驱动
- [导读]
- #申请原创# @21小跑堂 在以往的点阵屏中,多使用74HC595作为串并转换的芯片,它所处理的数据宽度只有8位。而现在的显示面板设计多使用16位的驱动IC,例如DP5020就是其中的一种,这样就可以有效地缩减芯片的使用量
#申请原创# @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的驱动方法来实现数值的显示及电子时钟功能。
- 本文系21ic原创,未经许可禁止转载!
网友评论
- 联系人:巧克力娃娃
- 邮箱:board@21ic.com
- 我要投稿
-
欢迎入驻,开放投稿
行业新闻
-
RAK831 Lite:基于树莓派3的LoRa网关... 2022-06-17
-
Imagination推出PowerVR AX2185和AX2145神经... 2022-06-17
-
ODROID-GO是一款兼容Arduino的基于ESP32的便... 2022-06-17
项目外包
more+
- PID温度控制器
预算:¥700003天前
- 摄像头的可视画面需要一直超上(linux系统,ARM)
预算:¥1000018小时前
- DICOM协议搭建(ARM架构,linux系统)
预算:¥1000017小时前
- 需MIPI摄像头隔离电路,实现3-4米能长距离
预算:¥1000017小时前
- 膨宫仪的控制板,控制流量和检测压力
预算:¥1000016分钟前
- 无创自动测量血压计 NIBP模块
预算:¥100007小时前