首頁 > 評測 > 基于DP5020點陣屏的顯示驅動

基于DP5020點陣屏的顯示驅動

  
  • 作者:
  • 來源:
  • [導讀]
  • #申請原創(chuàng)# @21小跑堂 在以往的點陣屏中,多使用74HC595作為串并轉換的芯片,它所處理的數據寬度只有8位。而現在的顯示面板設計多使用16位的驅動IC,例如DP5020就是其中的一種,這樣就可以有效地縮減芯片的使用量
#申請原創(chuàng)#   @21小跑堂
在以往的點陣屏中,多使用74HC595作為串并轉換的芯片,它所處理的數據寬度只有8位。而現在的顯示面板設計多使用16位的驅動IC,例如DP5020就是其中的一種,這樣就可以有效地縮減芯片的使用量并可以大幅地化簡電路的設計復雜度。此外,該芯片還有一大特點就是其輸出端口提供了2~60mA的恒定電流驅動,因而使得LED的發(fā)光亮度更均勻且能精確控制,該芯片的內部結構如圖1所示。
1  內部結構

該芯片的引腳排列如圖2所示,各引腳的功能則如圖3所示。

2  引腳排列

3  引腳功能


該芯片在顯示面板的設計中,其典型的應用方式見圖4所示。
4 典型應用


DP5020的工作時序如圖5 所示,這是后續(xù)對其進行驅動的主要基礎。
5時序關系

前面之所以對DP5020作這么詳細的介紹,就在于所驅動紅色P4.75點陣屏就是基于該芯片來設計的,這塊點陣屏的規(guī)格為16*64,其外觀如圖6所示。

在線路構成上,除使用芯片DP50204片)之外,還用到的芯片有SM2452片)和SM51662片)。
6 點陣屏外觀


該點陣屏所使用的接口為HUB08,各引腳的名稱如圖7所示。
7  HUB08接口


為驅動該點陣屏,所使用的是N76E003最小系統(tǒng)開發(fā)板,調試下載工具為MU_LINK,連接方式如圖8所示。
8 開發(fā)板及下載工具

點陣屏與開發(fā)板的連接關系為:
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發(fā)送16位數據的函數為:
  1. void DP5020_OutByte(UINT16 dat)
  2. {
  3.     UINT8 i=0 ;
  4.     for(i=0;i<16;i++)
  5.     {
  6.         LSCL=0;
  7.         if(dat&0x8000)
  8.         {
  9.             LR1=1;
  10.         }
  11.         else
  12.         {
  13.             LR1=0;
  14.         }
  15.         dat=dat<<1;
  16.         LSCL=1;
  17.     }
  18. }
復制代碼

進行輸出行選擇的函數為:
  1. void  SeleRow(UINT8 Nd)
  2. {
  3.     UINT8 N=Nd;
  4.         N=N%16;
  5.     if(N&0x01)  LA=1;
  6.     else  LA=0;
  7.     if (N&0x02)  LB=1;
  8.     else  LB=0;
  9.     if (N&0x04)  LC=1;
  10.     else  LC=0;
  11.     if (N&0x08)  LD=1;
  12.     else  LD=0;
  13. }
復制代碼

實現指定寬度的數據發(fā)送函數為:
  1. void DisCol(UINT16 *dat,UINT16 len)
  2. {
  3.     while(len--)
  4.     {
  5.              DP5020_OutByte(dat);
  6.     }
  7. }
復制代碼

進行顯示驅動的函數為:
  1. void  Display(void)
  2. {
  3.           DisCol(0x5555,4);
  4.           LEN=1;
  5.           LSTB=1;
  6.           LSTB=0;
  7.       SeleRow (ScanRow)
  8.       LEN=0;
  9.       ScanRow++;
  10.           if(ScanRow>15)  ScanRow=0;
  11. }
復制代碼

實現驅動測試的主程序為:
  1. void main (void)
  2. {
  3.          Set_All_GPIO_Quasi_Mode;       
  4.          set_CLOEN;
  5.          ScanRow=0;
  6.      while(1)
  7.      {
  8.                    Display();
  9.      }
  10. }
復制代碼

經測試,其顯示效果如圖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*/
...
};


實現滿屏顯示的函數為:
  1. void DisCol(UINT16 lenght)
  2. {
  3.           UINT16 dat,n;
  4.           UINT8 m=8;
  5.       n= lenght-2
  6.       while(lenght--)
  7.       {
  8.                    dat=( tab [m*32+ScanRow*2+1]<<8)+ tab [m*32+ScanRow*2];
  9.                    DP5020_OutByte(dat);
  10.                    m=m+1;
  11.      }
  12. }
復制代碼

其顯示的效果如圖11所示,說明顯示效果正確。
11  漢字顯示效果


若在屏上想實現單字顯示,則其顯示函數應修改為:
  1. void DisCol(UINT16 lenght)
  2. {
  3.           UINT16 dat,n;
  4.           UINT8 m=8;
  5.       n= lenght-2;
  6.       while(lenght--)
  7.       {
  8.                    if(lenght>n) dat=( tab [m*32+ScanRow*2+1]<<8)+ tab [m*32+ScanRow*2];
  9.                    else dat=0x0;
  10.                    DP5020_OutByte(dat);
  11.                    m=m+1;
  12.      }
  13. }
復制代碼

其顯示的效果如圖12所示,當然通過修改變量n的表達式也能指定其它數量的顯示字數。
12  單字顯示效果

這樣就解決了基于DP5020點陣屏的顯示驅動問題,并得到了良好的顯示效果。感興趣的話,還可參考前面介紹74HC595的驅動方法來實現數值的顯示及電子時鐘功能。


  • 本文系21ic原創(chuàng),未經許可禁止轉載!

網友評論