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