The MAX7219/MAX7221 are compact, serial input/output common-cathode display drivers that interface microprocessors (µPs) to 7-segment numeric LED displays of up to 8 digits, bar-graph displays, or 64 individual LEDs. Included on-chip are a BCD code-B decoder, multiplex scan circuitry, segment and digit drivers, and an 8x8 static RAM that stores each digit. Only one external resistor is required to set the segment current for all LEDs. The MAX7221 is compatible with SPI™, QSPI™, and MICROWIRE™, and has slew-rate-limited segment drivers to reduce EMI.
A convenient 4-wire serial interface connects to all common µPs. Individual digits may be addressed and updated without rewriting the entire display. The MAX7219/MAX7221 also allow the user to select code-B decoding or no-decode for each digit.
The devices include a 150µA low-power shutdown mode, analog and digital brightness control, a scan-limit register that allows the user to display from 1 to 8 digits, and a test mode that forces all LEDs on.
For applications requiring 3V operation or segment blinking, refer to the MAX6951 data sheet.
MAX7219是MAXIM公司生產的串行輸入/輸出共陰極數碼管顯示驅動芯片,一片MAX7219可驅動8個7段(包括小數點共8段)數字LED、LED條線圖形顯示器、或64個分立的LED發光二級管。該芯片具有10MHz傳輸率的三線串行接口可與任何微處理器相連,只需一個外接電阻即可設置所有LED的段電流。。它的操作很簡單,MCU只需通過模擬SPI三線接口就可以將相關的指令寫入MAX7219的內部指令和數據寄存器,同時它還允許用戶選擇多種譯碼方式和譯碼位。此外它還支持多片7219串聯方式,這樣MCU就可以通過3根線(即串行數據線、串行時鐘線和芯片選通線)控制更多的數碼管顯示。MAX7219的外部引腳分配如圖1所示及內部結構如圖2所示。
圖1 MAX7219的外部引腳分配
圖2 MAX7219的內部引腳分配
各引腳的功能為:
DIN:串行數據輸入端
DOUT:串行數據輸出端,用于級連擴展
LOAD:裝載數據輸入
CLK:串行時鐘輸入
DIG0~DIG7:8位LED位選線,從共陰極LED中吸入電流
SEG A~SEG G DP 7段驅動和小數點驅動
ISET: 通過一個10k電阻和Vcc相連,設置段電流
MAX7219有下列幾組寄存器:(如圖3)
MAX7219內部的寄存器如圖3,主要有:譯碼控制寄存器、亮度控制寄存器、掃描界限寄存器、關斷模式寄存器、測試控制寄存器。編程時只有正確操作這些寄存器,MAX7219才可工作。
圖 3 MAX7219內部的相關寄存器
分別介紹如下:
(1) 譯碼控制寄存器(X9H)
如圖4所示,MAX7219有兩種譯碼方式:B譯碼方式和不譯碼方式。當選擇不譯碼時,8個數據為分別一一對應7個段和小數點位;B譯碼方式是BCD譯碼,直接送數據就可以顯示。實際應用中可以按位設置選擇B譯碼或是不譯碼方式。
圖4 MAX7219的譯碼控制寄存器
(2) 掃描界限寄存器(XBH)
如圖5所示,此寄存器用于設置顯示的LED的個數(1~8),比如當設置為0xX4時,LED 0~5顯示。
圖5 MAX7219的掃描界限控制寄存器
(3) 亮度控制寄存器(XAH)
共有16級可選擇,用于設置LED的顯示亮度,從0xX0~0xXF
(4) 關斷模式寄存器(XCH)
共有兩種模式選擇,一是關斷狀態,(最低位 D0=0)一是正常工作狀態(D0=1)。
(5) 顯示測試寄存器(XFH)
用于設置LED是測試狀態還是正常工作狀態,當測試狀態時(最低位 D0=1)各位顯示全亮,正常工作狀態(D0=0)。
各寄存器具體操作見驅動程序詳解。
2 讀寫時序說明
MAX7129是SPI總線驅動方式。它不僅要向寄存器寫入控制字,還需要讀取相應寄存器的數據。
要想與MAX7129通信,首先要先了解MAX7129的控制字。MAX7129的控制字格式如圖6。
圖6 控制字(即地址及命令字節)
如圖,工作時,MAX7219規定一次接收16位數據,在接收的16位數據中:D15~D12可以與操作無關,可以任意寫入,D11~D8決定所選通的內部寄存器地址,D7~D0為待顯示數據或是初始化控制字。在CLK脈沖作用下,DIN的數據以串行方式依次移入內部16位寄存器,然后在一個LOAD上升沿作用下,鎖存到內部的寄存器中。注意在接收時,先接收最高位D16,最后是D0,因此,在程序發送時必須先送高位數據,在循環移位。工作時序圖見圖7。
由于51是8位單片機故需要分兩次來送數據。具體操作見驅動程序詳解。
圖7 數據讀寫時序
3 電路原理圖
電路原理圖
電路原理圖如圖7,MAX7219與單片機的連接只需要3條線:LOAD(CS)片選引腳、CLK串行時鐘引腳、DIN串行數據引腳。其中C1 為電源濾波電容,R1用來設置段電流。 MAX7219的PCB布線有些難度,作者可以提供畫好的PCB給讀者。有需要的讀者請與作者聯系。郵箱:zhaoliang_0801@dl.cn
圖8 電路原理圖
4 驅動程序
//管腳定義
sbit LOAD=P1^2; //MAX7219片選 12腳
sbit DIN=P1^1; //MAX7219串行數據 1腳
sbit CLK=P1^0; //MAX7219串行時鐘 13腳
//寄存器宏定義
#define DECODE_MODE 0x09 //譯碼控制寄存器
#define INTENSITY 0x0A //亮度控制寄存器
#define SCAN_LIMIT 0x0B //掃描界限寄存器
#define SHUT_DOWN 0x0C //關斷模式寄存器
#define DISPLAY_TEST 0x0F //測試控制寄存器
//函數聲明
void Write7219(unsigned char address,unsigned char dat);
void Initial(void);
//地址、數據發送子程序
void Write7219(unsigned char address,unsigned char dat)
{
unsigned char i;
LOAD=0; //拉低片選線,選中器件
//發送地址
for (i=0;i<8;i++) //移位循環8次
{
CLK=0; //清零時鐘總線
DIN=(bit)(address&0x80); //每次取高字節
address<<=1; //左移一位
CLK=1; //時鐘上升沿,發送地址
}
//發送數據
for (i=0;i<8;i++)
{
CLK=0;
DIN=(bit)(dat&0x80);
dat<<=1;
CLK=1; //時鐘上升沿,發送數據
}
LOAD=1; //發送結束,上升沿鎖存數據
}
//MAX7219初始化,設置MAX7219內部的控制寄存器
void Initial(void)
{
Write7219(SHUT_DOWN,0x01); //開啟正常工作模式(0xX1)
Write7219(DISPLAY_TEST,0x00); //選擇工作模式(0xX0)
Write7219(DECODE_MODE,0xff); //選用全譯碼模式
Write7219(SCAN_LIMIT,0x07); //8只LED全用
Write7219(INTENSITY,0x04); //設置初始亮度
}
測試程序
void main(void)
{
unsigned char i;
Initial(); //MAX7219初始化
while(1)
{
for(i=1;i<9;i++)
{
Write7219(i,i); //數碼管顯示1~8
}
}
}
典型應用電路: