MAX7219是一種高集成化的串行輸入/輸出的共陰極LED顯示驅動器。每片可驅動8位7段加小數點的共陰極數碼管,可以數片級聯(lián),而與微處理器的連接只需3根線。MAX7219內部設有掃描電路,除了更新顯示數據時從單片機接收數據外,平時獨立工作,極大地節(jié)省了MCU有限的運行時間和程序資源。
MAX7219芯片上包括BCD譯碼器、多位掃描電路、段驅動器、位驅動器和用于存放每個數據位的8×8靜態(tài)RAM以及數個工作寄存器。通過指令設置這些工作寄存器,可以使MAX7219進入不同的工作狀態(tài)。
1 管腳說明
圖1是MAX7219的管腳分布圖。其中:
(1)DIN 為串行數據輸入端。當CLK為上升沿時,數據被載入16 b內部移位寄存器。
(2)CLK 為串行時鐘輸入端。其最大工作頻率可達10 MHz。
(3)LOAD 為片選端,當LOAD為低電平時,芯片接收來自DIN的數據,接收完畢,LOAD回到高電平時,接收的數據將被鎖定。
(4)DIG0~DIG7 為吸收顯示器共陰極電流的位驅動線。其最大值可達500 mA,關閉狀態(tài)時,輸出+VCC。
(5)SEGA~SEGG,DP 為驅動顯示器7段及小數點的輸出電流,一般為40 mA左右,可軟件調整,關閉狀態(tài)時,接入GND。
(6)DOUT 為串行數據輸出端,通常直接接入下一片MAX7219的DIN端。
2 操作指令
MAX7219有5個工作狀態(tài)寄存器,分別是譯碼方式選擇、亮度調節(jié)、掃描位數設定、待機開關、顯示器檢測。除空指令外,7219的所有操作指令都是2個字節(jié),前一個是操作代碼,后一個是操作數。下面用十六進制數對控制命令加以說明。
[!--empirenews.page--]
2.1 譯碼方式選擇
操作代碼為“09H”,操作數為“0”或“0FFH”。選中“0”則不使用BCD譯碼器,在顯示數字或符號時,按每段點亮與否編排傳送碼。而選中 “0FFH”時,則按8421標準二進制編碼來代表相應的顯示數字,如表1所示。需要說明的是,無論譯碼與否,表1中操作數的最高位D7均為小數點,“1”為亮,“0”為滅,所以表1中所列是小數點不亮時的操作數。
2.2 亮度調節(jié)
操作代碼為“0AH”,操作數如表2所示。
這個指令可以用來調節(jié)顯示器的亮度,改變其操作數可以改變MAX7219內部掃描脈沖的寬度,從而使電流的平均值有所變化,這個電流平均值可以從最小的1/32至最大的31/32之間進行16級調節(jié)。
MAX7219還提供了一種硬件調整顯示器亮度的方式,即通過第18管腳的ISET和+VCC之間跨接的一個電阻來調節(jié)其亮度,段驅動平均電流大約為流過此電阻電流的100倍,實際應用中常用十幾kΩ的電阻直接接入即可。
2.3 掃描位數設定
操作代碼為“0BH”,操作數如表3所示。
如果所用的顯示器少于8位,則應通過這條指令設置相應的位數。因為設置的位數如果比實際使用的位數大,就會形成“虛位”,而一旦對“虛位”進行操作,將會引起整個顯示器的混亂,這是需要加以注意的。
另外,掃描位數的設置,會影響到掃描頻率的變化,相應地,顯示器亮度也會隨著變化,所以應先確定掃描位數,再設置顯示器亮度。
2.4 待機開關
操作代碼為“0CH”,操作數為“0”或“1”。
操作數為“0”,則顯示器不工作(滅燈),反之,顯示器正常工作。待機狀態(tài)下,7219的工作電流僅為150μA。
2.5 顯示器檢測
操作代碼為“0FH”,操作數為“0”或“1”?! ?/p>
選擇操作數為“1”時,可點亮整個顯示器,通常用來檢查數碼管及連接電路是否存在故障。檢測時,不會改變各位原有的顯示數據,即檢測完畢后,再送入不檢測指令“0”,又可恢復顯示原數據。
[!--empirenews.page--]
2.6 位操作指令
位操作指令就是對8個數碼管顯示內容的操作,也是2個字節(jié),第1個字節(jié)是位的代碼,如表4所示,第2個字節(jié)則根據譯碼方式的選擇,來使用表1中的編碼。
需要說明的是,上述所有指令的輸入,不分先后(但每個指令2個字節(jié)的秩序不能顛倒)。通常,前5條指令一般在上電初始化程序中加以設置,而在工作程序中,僅使用位操作指令即可。另外,MAX7219上電時,譯碼方式、亮度調節(jié)、掃描位數、待機開關、顯示檢測等5 個控制寄存器全部歸零。
3 與單片機的連接
3.1 與單片機任意3個端口連接的方式
假定按圖3所示方法連接。
MAX7219每次接收2個字節(jié),高位在先,其指令可編寫為:
[!--empirenews.page--]
3.2 用單片機的串行接口
如果將MAX7219的DIN接入單片機的RXD,CLK接入TXD,LOAD選任一口線,則可通過單片機串行口對MAX7219像對其他設備一樣按模式0進行發(fā)送操作。但由于串行口數據緩沖寄存器SBUF為右移發(fā)送,所以MAX7219的所有命令和操作數與第一種方式相比均應反轉,見表5~9。注意表 6中操作數的最低位D0為小數點。
4 MAX7219的多片級聯(lián)
MAX7219可以多片級聯(lián),只需將上一片的DOUT連接下一片的DIN即可,CLK和LOAD線全部公用,連在一起。
在多片級聯(lián)時,對MAX7219的操作指令要注意LOAD信號的起止點,操作開始時,LOAD下降為低電平,按照每片MAX7219兩個字節(jié),如果有N片,則
發(fā)送2N個字節(jié)后,LOAD上升為高電平。還需注意的是,先發(fā)送的指令將到達級聯(lián)的最后一片。
還有一條專為MAX7219多片級聯(lián)設置的一條空操作指令,操作代碼為“00H”。當不希望對級聯(lián)中的某片或某幾片MAX7219進行操作時,就可以用空操作指令跳過這片或這幾片。例如,如果4個7219串聯(lián),為了寫入第4個芯片,要在3個空操作指令碼后發(fā)送2個字節(jié)的指令,當LOAD升為高電平時,數據被鎖存到所有設備,前3個芯片收到的是空操作命令,而第4個收到預期的數據。
參考文獻
[1] Serially Interfaced.8 - Digit LED display drivers.