基于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所示。
在線路構成上,除使用芯片DP5020(4片)之外,還用到的芯片有SM245(2片)和SM5166(2片)。
圖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位數據的函數為:
- 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;
- }
實現指定寬度的數據發(fā)送函數為:
- 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原創(chuàng),未經許可禁止轉載!
網友評論
- 聯系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開放投稿
行業(yè)新聞
-
人均百萬?英偉達中國員工收入曝光! 2024-08-29
-
《黑神話:悟空》玩家硬盤升級攻略:提升游戲體驗,暢享3A大作 2024-08-29
論壇活動
more+
項目外包
more+
- NRF52810藍牙數字耳機找人定制
預算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預算:¥1100000015小時前
- 12V汽車啟動電源項目BMS設計
預算:¥50000023小時前
- 數據可視化軟件 開發(fā)
預算:¥5000023小時前
- PLC項目調試修改
預算:¥100001天前
- 起動電機控制器開發(fā)
預算:¥1100001天前