1、MAX7219介紹
MAX7219是一種高集成化的串行輸入/輸出共陰極顯示驅動器,可實現微處理器與7段碼的接口,可以顯示8位或64位單一LED。芯片上包括BCD碼譯碼器、多位掃描電路、段驅動器、位驅動器、內含8×8位靜態RAM,用于存放顯示數據。只需外接一個電阻就可為所有的LED提供段電流。
MAX7219的三線串行接口適用于所有微處理器,單一位數據可被尋址和修正,無需重寫整個顯示器。MAX7219具有軟件譯碼和硬件譯碼兩種功能,軟件譯碼是根據各段筆劃與數據位的對應關系進行編碼,硬件譯碼采用BCD碼(簡稱B碼)譯碼。MAX7219工作模式包括150μA低壓電源關閉模式、模擬數字亮度控制、限掃寄存器(允許用戶從第1位數字顯示到第8位)及測試模式(點亮所有LED)。
2、MAX7219引腳功能
MAX1279引腳排列如圖1所示,
圖1 ?MAX1279引腳排列圖
引腳功能:
DIN:串行數據輸入端。當CLK為上升沿時,數據存入內部的16位寄存器
DOUT:串行數據輸出端,用于級連擴展
LOAD:裝載數據輸入,在裝載的上升沿,串行輸入的最后一個16位數據被鎖存。
CLK:串行時鐘輸入,其最大工作頻率可達10MHz。時鐘上升沿是數據輸入,時鐘下降時數據從串行數據輸出口輸出
DIG0~DIG7:8位LED位選線,從共陰極LED中吸入電流
SEGA~SEGGDP7段驅動和小數點驅動
ISET:通過一個10k電阻和Vcc相連,設置段電流
GND:地線
V+:電源
3、MAX7219的功能框圖
圖2 ?MAX7219的功能框圖
串行輸入數據在時鐘上升沿時移入內部的16位移位寄存器,在裝載的上升沿時數據被鎖存在每一位或寄存器中。裝載信號必須在第16個時鐘上升沿發生時或之后達到高電平,但要在下一個時鐘的上升沿和數據丟失之前到達。串行輸入數據通過移位寄存器傳輸,在以后數據輸出的16.5個時鐘循環出現,數據在時鐘的下降沿記錄下來。數據各位記錄為D0~D15(如表2所列),D8~D11為移位寄存器地址,D0~D7為數據,D12~D15是無關位。第一位接收到的位是最高位D15。D7為數據最高有效位,D0為數據最低有效位。
4、MAX7219控制字
MAX7219有14個可尋址的控制字寄存器(如表3),控制字寄存器由芯片的8×8雙端口SRAM識別,SRAM直接尋址,這樣單一的位能被更改或保留,條件是電源電壓明顯大于2V。控制字寄存器包括譯碼模式、顯示強度、掃描限制(被掃描位的個數)、關閉模式、顯示測試(點亮所有的LED)。另外還有一個空操作寄存器,該寄存器允許數據從DIN直送DOUT,在設備串接情況下,不會改變顯示或影響任何控制寄存器。
圖3 ? MAX7219內部的相關寄存器
分別介紹如下:
(1)譯碼控制寄存器(X9H)
如圖4所示,MAX7219有兩種譯碼方式:B譯碼方式和不譯碼方式。當選擇不譯碼時,8個數據為分別一一對應7個段和小數點位;B譯碼方式是BCD譯碼,直接送數據就可以顯示。實際應用中可以按位設置選擇B譯碼或是不譯碼方式。
圖4 ?MAX7219的譯碼控制寄存器
當選擇軟件譯碼方式時,數據D7~D0對應的MAX7219碼的各段筆劃如表5所列。當工作于硬件(B碼)譯碼模式時,譯碼器只選擇數據寄存器中較低的幾位(D3~D0),不考慮D4~D6位。D7位顯示十進制小數點,獨立于譯碼器,當D7=1時,十進制小數DP點亮。字符0~9對應的16進制碼為×0~×9,字符-、E、H、L、P和消隱分別對應的16進制碼為×A~×F。
(2)掃描界限寄存器(XBH)
如圖5所示,此寄存器用于設置顯示的LED的個數(1~8),比如當設置為0xX4時,LED0~5顯示。
圖5 ?MAX7219的掃描界限控制寄存器
(3)亮度控制寄存器(XAH)
共有16級可選擇,用于設置LED的顯示亮度,從0xX0~0xXF
(4)關斷模式寄存器(XCH)
共有兩種模式選擇,一是關斷狀態,(最低位D0=0)一是正常工作狀態(D0=1)。
(5)顯示測試寄存器(XFH)
顯示檢測寄存器有兩種操作模式:一般測試和顯示測試。顯示測試模式時所有的LED點亮,方法是將所有控制字寄存器(包括關閉寄存器)置成無效。在顯示測試模式下掃描8位的串行接口8位LED顯示驅動器MAX7219工作周期是31/32。正常測試的16進制碼為×0,顯示測試的16進制碼為×1。
(6)空操作寄存器
空操作寄存器在MAX7219串接時使用,把所有芯片的LOAD端連在一起,并將DOUT連接到下一個MAX7219的DIN上。DOUT是CMOS輸出,可以驅動后邊的串接MAX7219。例如,4個MAX7219串聯,然后寫第4個片子,再送入設想的16位字,緊跟3個空操作碼(×0××),當LOAD升高時,所有裝置的數據被鎖存,前3個芯片接到空操作命令,第4個芯片接到設想的數據。
5、 應用實例
圖3 為8051 與MAX7219 接口組成的8位L ED 硬件掃描動態顯示器。假如使顯示器顯示出“HEL P7219”, 軟件譯碼和硬件譯碼的具體實現方法如下。
(1) 軟件譯碼編程:
先找出各字符的編碼,根據a 、b 、c 、d 、e 、f 、g 各段與數據位的對應關系,可得: H 中a 、d 段為0 , 。其余為1 ,即00110111 或37H ,同樣E、L 、P 、7、2、1、9 的編碼分別為4FH、0EH、67H、70H、6DH、30H、73H。將HEL P7219 字符編碼分別存入8051 地址為50H 單元(片內RAM存放顯示數據的8 個字節單元首地址) 。顯示器最左邊一位為第一位,R0 為對應的顯示位,R1 為顯示數據單元地址,R2 為顯示位數,共8 位。因8051 串行輸出的時序順序為將一字節的最低位最先送出, 而MAX7219 的時序順序為將接收到的第一位當作該一字節數據的最高位, 所以需要改變送出位的順序。
程序如下:
SHOW: CL R P1. 0 ;LOAD 置低
MOV A , # 09H ;譯碼模式控制字
LCALL CHAN GE
MOV A , # 00H ;軟件譯碼
LCALL CHAN GE
SETB P1. 0 ; 置LOAD 為高, 鎖存軟件譯碼控制字
ACALL DISPLA Y8 ;顯示8 位數據
DISPLA Y8 :MOV R0 , # 01H ;置顯示位,從第0 位開始
MOV R1 , # 50H ;置顯示數據首址
MOV R2 , # 08H ;共8 位顯示
A GAIN : CL R P1. 0
MOV A ,R0 ;顯示位
LCALL CHAN GE
MOV A , @R1 ;取出顯示數據
LCALL CHAN GE ;輸出數據
SETB P1. 0
INC R0 ;指向下一位
INC R1 ;指向下一位顯示數據
DJNZ R2 ,A GAIN ;8 位未完,繼續
RET
CHAN GE : MOV C ,ACC. 7 ; 改變位順序,對應于接收位
MOV 0A0H ,C
MOV C ,ACC. 6
MOV 0A1H ,C
MOV C ,ACC. 5
MOV 0A2H ,C
MOV C ,ACC. 4
MOV 0A3H ,C
MOV C ,ACC. 3
MOV 0A4H ,C
MOV C ,ACC. 2
MOV 0A5H ,C
MOV C ,ACC. 1
MOV 0A6H ,C
MOV C ,ACC. 0
MOV 0A7H ,C
MOV A ,0A0H
MOV SBU F ,A (下轉P45圖3 8051 與MAX7219 組成的8 位L ED 顯示器)
JNB TI , $ ;等待發送完畢
CL R TI ;清TI 標志,允許再發
RET
(2) 硬件譯碼編程:
若采用B 碼譯碼顯示“HEL P7219”字符串,對應的編碼分別為:0CH、0BH、0DH、0EH、07H、02H、01H、09H。8 個數據字節存50H開始的單元中,程序如下:
SHOW: CL R P1. 0 ;LOAD 置低
MOV A , # 09H ;譯碼模式控制字
LCALL CHAN GE
MOV A , # FFH ;B 碼硬件譯碼
SETB P1. 0 ; 置LOAD 為高, 鎖存硬件譯碼控制字
ACALL DISPLA YS ;顯示8 位數據