找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7540|回復(fù): 7
收起左側(cè)

串行輸入輸出共陰極顯示驅(qū)動(dòng)器MAX7219應(yīng)用(單片機(jī)代碼+仿真)

  [復(fù)制鏈接]
ID:57821 發(fā)表于 2018-12-29 18:05 | 顯示全部樓層 |閱讀模式
MAX7219PROTEUS仿真

              MAX7219是美國MAXIM(美信)公司生產(chǎn)的串行輸入/輸出共陰極顯示驅(qū)動(dòng)器。它采用了3線串行接口,傳送速率達(dá)10M數(shù)據(jù),能驅(qū)動(dòng)8位七段數(shù)字型LED或條形顯示器或64只獨(dú)立的LED。MAX7219內(nèi)置BCD碼譯碼器、多路掃描電路、段和數(shù)字驅(qū)動(dòng)器和存儲(chǔ)每一位的8*8靜態(tài)RAM。能方便的用模擬或數(shù)字方法控制段電流的大小,改變顯示器的數(shù)量;能進(jìn)入低功耗的關(guān)斷模式(僅消耗150uA電流,數(shù)據(jù)保留);能方便地進(jìn)行級(jí)聯(lián)。可廣泛用于條形圖顯示、七段顯示、工業(yè)控制、儀器儀表面板等領(lǐng)域。而且其最重要的一點(diǎn)是,每個(gè)顯示位都能個(gè)別尋址和刷新,而不需要重寫其他的顯示位,這使得軟件編程十分簡單且靈活。MAX719后綴表示其封裝方式和工作溫度,如表所示:
后綴
封裝
工作溫度
CNG
窄24腳
0----70℃
CWG
SO24腳
0----70℃
ENG
窄24腳
-40---85℃
EWG
SO24腳
-40---85℃
. MAX7219的結(jié)構(gòu)和功能



1.引腳說明
MAX7219的引腳排列如圖所示,各引腳功能敘述如下:
(1)腳:DIN,串行數(shù)據(jù)輸入。在CLK的上升沿到來時(shí),數(shù)據(jù)被移入到內(nèi)部的16位移位寄存器中。
(2)、(3)、(5)~(8)、(10)、(11)腳:DIG0—DIG7,輸入。8位數(shù)字位位選線,從共陰極顯示器吸收電流。
(4)、(9)腳:GND,地。兩個(gè)引腳必須連接在一起。
(12)腳:LOAD,數(shù)據(jù)裝載輸入端。在LOAD上升沿,移位寄存器接受的數(shù)據(jù)被鎖存。
(13)腳:CLK,時(shí)鐘輸入端,最高時(shí)鐘頻率10MHz。在CLK的上升沿,數(shù)據(jù)被移入到內(nèi)部的16位移位寄存器中。在CLK的下降沿,數(shù)據(jù)從DOUT腳輸出。
(14)~(15)、(20)~(23)腳:輸出。七段驅(qū)動(dòng)器和小數(shù)點(diǎn)驅(qū)動(dòng)器。它供給顯示器電流。
(18)腳:ISET,電流調(diào)節(jié)端。通過一個(gè)電阻和VCC相連,來調(diào)節(jié)最大段電流。
(19)腳:VCC。電源輸入端。
(24)腳:DOUT。串行數(shù)據(jù)輸出。輸入到DIN的數(shù)據(jù)在16.5各時(shí)鐘周期后,在DOUT端有效。該腳常用于幾個(gè)MAX7219的級(jí)聯(lián)。



2.串行數(shù)據(jù)傳送的說明
MAX7219采用串行尋址方式,在傳送的串行數(shù)據(jù)中包含內(nèi)部RAM的地址。加在DIN腳上的串行數(shù)據(jù),必須在LOAD信號(hào)為高電平的前提下,以每個(gè)字節(jié)為一個(gè)數(shù)據(jù)包,在CLK信號(hào)上升沿移入16位的移位寄存器。然后在LOAD信號(hào)的上升沿鎖存進(jìn)數(shù)字或控制寄存器中。LOAD信號(hào)必須在第16個(gè)CLK信號(hào)上升沿的同時(shí),或在下一個(gè)CLK信號(hào)上升沿之前升高,否則,數(shù)據(jù)會(huì)丟失。DIN腳上的串行數(shù)據(jù)在16.5個(gè)CLK信號(hào)后出現(xiàn)在DOUT腳上,以便級(jí)聯(lián)應(yīng)用時(shí)傳到下一個(gè)MAX7219上。
其數(shù)據(jù)串行傳送時(shí)序圖如下圖所示:

發(fā)送的16位串行數(shù)據(jù)格式為:
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
X
X
X
X
地址
高         數(shù)據(jù)               低
發(fā)送的16位串行數(shù)據(jù)格式如上表所示:D15在先,D15---D12位(4位)可為任意值。D11---D8位(4位)指定14個(gè)內(nèi)部寄存器的地址。D7---D0位(8位)為送入的指定寄存器的數(shù)據(jù)(包括顯示數(shù)據(jù)和控制數(shù)據(jù))。
3.寄存器功能及說明
MAX7219內(nèi)部共有14個(gè)可尋址的數(shù)字、控制寄存器和空操作寄存器。數(shù)字寄存器由一個(gè)片內(nèi)8×8靜態(tài)RAM組成。控制寄存器包括譯碼方式、亮度控制、掃描數(shù)量、停機(jī)模式、測試模式等寄存器組成,如下表所示:
寄存器名稱
十六進(jìn)制數(shù)地址
寄存器名稱
十六進(jìn)制數(shù)地址
空操作
00H
DIG6
07H
DIG0
01H
DIG7
08H
DIG1
02H
譯碼控制
09H
DIG2
03H
亮度控制
0AH
DIG3
04H
掃描控制
0BH
DIG4
05H
停機(jī)控制
0CH
DIG5
06H
顯示測試控制
0FH
下面從使用的角度,對(duì)MAX7219內(nèi)部控制器的功能加以說明:
(1)譯碼控制寄存器(地址09H):譯碼方式寄存器可以對(duì)每個(gè)數(shù)進(jìn)行設(shè)置,使其為BCD譯碼方式或不譯碼方式。寄存器的每一位和一個(gè)數(shù)位相對(duì)應(yīng)。為“1”時(shí),選擇BCD譯碼方式,為“0”選擇不譯碼方式。例如,0---7位不譯碼,則給譯碼寄存器09H送00H。第一位譯碼,其余位不譯碼,則給譯碼寄存器09H送01H。
譯碼方式控制寄存器舉例(地址09H):

寄存器數(shù)據(jù)
16進(jìn)制代碼(HEX)
D7
D6
D5
D4
D3
D2
D1
D0
第1-8位LED不譯碼
0
0
0
0
0
0
0
0
00
第1位譯碼,其余不
0
0
0
0
0
0
0
1
01
低四位譯碼,高不
0
0
0
0
1
1
1
1
0F
第1-8位LED譯碼
1
1
1
1
1
1
1
1
FF
* 當(dāng)采用BCD譯碼方式時(shí),譯碼器僅對(duì)寄存器中數(shù)據(jù)的低四位(D3-D0)有效,高四位(D7-D4)位無效。BCD碼的字形為:當(dāng)數(shù)據(jù)為00-09H時(shí),顯示為0-9;當(dāng)數(shù)據(jù)為0AH-0EH時(shí),顯示為-,E,H,L,P。當(dāng)數(shù)據(jù)為0FH時(shí),數(shù)據(jù)被消隱,處于不顯示狀態(tài)。
代碼BCD字形表:
顯示字符
寄存器數(shù)據(jù)
段碼點(diǎn)亮=1
D7
D6
D5
D4
D3
D2
D1
D0
DP
A
B
C
D
E
F
G
0

×
×
×
0
0
0
0

1
1
1
1
1
1
0
1

×
×
×
0
0
0
1

0
1
1
0
0
0
0
2

×
×
×
0
0
1
0

1
1
0
1
1
0
1
3

×
×
×
0
0
1
1

1
1
1
1
0
0
1
4

×
×
×
0
1
0
0

0
1
1
0
0
1
1
5

×
×
×
0
1
0
1

1
0
1
1
0
1
1
6

×
×
×
0
1
1
0

1
0
1
1
1
1
1
7

×
×
×
0
1
1
1

1
1
1
0
0
0
0
8

×
×
×
1
0
0
0

1
1
1
1
1
1
1
9

×
×
×
1
0
0
1

1
1
1
1
0
1
1
-

×
×
×
1
0
1
0

0
0
0
0
0
0
1
E

×
×
×
1
0
1
1

1
0
0
1
1
1
1
H

×
×
×
1
1
0
0

0
1
1
0
1
1
1
L

×
×
×
1
1
0
1

0
0
0
1
1
1
0
P

×
×
×
1
1
1
0

1
1
0
0
1
1
1

×
×
×
1
1
1
1

0
0
0
0
0
0
0
小數(shù)點(diǎn)由D7設(shè)置,D7=1亮,D7=0不亮。
* 當(dāng)采用不譯碼方式時(shí),數(shù)據(jù)位D7-D0和字段的對(duì)應(yīng)關(guān)系如圖3所示:



需要說明的是:不管對(duì)MAX7219設(shè)置的是譯碼方式還是非譯碼方式,D7位始終和數(shù)碼位的小數(shù)點(diǎn)DP相連,當(dāng)D7=1時(shí),小數(shù)點(diǎn)亮,當(dāng)D7=0時(shí),小數(shù)點(diǎn)滅。
(2)亮度控制寄存器(地址0AH):MAX7219的亮度控制有兩種方式:即模擬法和數(shù)字法。
* 模擬法:在引腳ISET和VCC之間接電阻RSET,各段驅(qū)動(dòng)峰電流約為RSET中電流(Iset)的100倍,RSET的最小阻值為9.53KΩ,這時(shí)數(shù)碼顯示處于最亮狀態(tài)。RSET可用電位器代替,放到面板上用來調(diào)節(jié)數(shù)碼顯示的亮度。
* 數(shù)字法:將數(shù)據(jù)寫入到亮度控制寄存器中,即可按16各等級(jí)控制亮度。數(shù)值為00H,對(duì)應(yīng)電流1/32Iset(最暗);數(shù)值為0FH,對(duì)應(yīng)電流31/32Iset(最亮)。此數(shù)值加1,電流增大1/16。
亮度寄存器格式(地址0AH)
占空比
寄存器數(shù)據(jù)
16進(jìn)制代碼(HEX)
D7
D6
D5
D4
D3
D2
D1
D0
1/32
×
×
×
×
0
0
0
0
×0
3/32
×
×
×
×
0
0
0
1
×1
5/32
×
×
×
×
0
0
1
0
×2
7/32
×
×
×
×
0
0
1
1
×3
9/32
×
×
×
×
0
1
0
0
×4
11/32
×
×
×
×
0
1
0
1
×5
13/32
×
×
×
×
0
1
1
0
×6
15/32
×
×
×
×
0
1
1
1
×7
17/32
×
×
×
×
1
0
0
0
×8
19/32
×
×
×
×
1
0
0
1
×9
21/32
×
×
×
×
1
0
1
0
×A
23/32
×
×
×
×
1
0
1
1
×B
25/32
×
×
×
×
1
1
0
0
×C
27/32
×
×
×
×
1
1
0
1
×D
29/32
×
×
×
×
1
1
1
0
×E
31/32
×
×
×
×
1
1
1
1
×F
(3)掃描位數(shù)(界限)寄存器(地址0BH):掃描(界限)寄存器用來設(shè)定多少個(gè)數(shù)位處于顯示態(tài),范圍為1到8。MAX7219的各個(gè)數(shù)位按1300Hz的掃描頻率分路驅(qū)動(dòng),輪流點(diǎn)亮8各顯示器。若需要顯示的數(shù)位少,可降低掃描數(shù)量,以提高掃速和亮度。該寄存器的低3位指定要掃描的數(shù)位,即00-07H分別對(duì)應(yīng)1-8個(gè)數(shù)位。但此值最好不要小于4,否則需要改變RSET的值。
掃描位數(shù)寄存器(地址0BH)的格式:

寄存器數(shù)據(jù)
16進(jìn)制代碼(HEX)
D7
D6
D5
D4
D3
D2
D1
D0
顯示位1
×
×
×
×
×
0
0
0
×0
顯示位1,2
×
×
×
×
×
0
0
1
×1
顯示位1,2,3
×
×
×
×
×
0
1
0
×2
顯示位1,2,3,4
×
×
×
×
×
0
1
1
×3
顯示位1,2,3,4,5
×
×
×
×
×
1
0
0
×4
顯示位1,2,3,4,5,6
×
×
×
×
×
1
0
1
×5
顯示位1,2,3,4,5,6,7
×
×
×
×
×
1
1
0
×6
顯示位1,2,3,4,5,6,7,8
×
×
×
×
×
1
1
1
×7
(4)停機(jī)控制寄存器(地址0CH):關(guān)斷寄存器的D0位控制MAX7219處于怎樣的顯示狀態(tài)。當(dāng)D0=0時(shí),MAX7219處于關(guān)斷狀態(tài),當(dāng)D0=1時(shí),MAX7219處于正常顯示狀態(tài)。當(dāng)處于關(guān)斷狀態(tài)時(shí),掃描振蕩器暫停,顯示器熄滅,各寄存器中的數(shù)據(jù)不變,這時(shí)總電流小于150uA,,但仍可以編程。進(jìn)入此狀態(tài)后,至少250uS才能退出。當(dāng)將D0位置1后(即0CH寫01H),即可回到正常顯示狀態(tài)。
(5)顯示測試寄存器(地址0FH):顯示測試寄存器有兩種工作方式:當(dāng)送01H時(shí),MAX7219便進(jìn)入測試工作狀態(tài),所有數(shù)碼管顯示8及小數(shù)點(diǎn),電流占空比為31/32,內(nèi)部的所有數(shù)據(jù)及控制寄存器的值都不改變。當(dāng)送00H時(shí),MAX7219進(jìn)入正常工作方式。
(6)空操作寄存器(地址00H):即寫入0000H,可允許數(shù)據(jù)通過而不對(duì)當(dāng)前的MAX7219產(chǎn)生影響,可用于兩個(gè)或多個(gè)MAX7219進(jìn)行級(jí)連。這樣只要三根信號(hào)線就可以驅(qū)動(dòng),在控制時(shí)只要把待編程的MAX7219之前的那些MAX7219設(shè)置為空操作即可。
4.典型應(yīng)用電路



典型應(yīng)用



級(jí)聯(lián)應(yīng)用連線
MAX7219PROTUES仿真電路
   
據(jù)說PROTEUS里的MAX7219模型在級(jí)連時(shí)仿真有問題,時(shí)序和實(shí)際電路的不同。
MAX7219PROTUES仿真源程序
/* 顯示12345678*/

  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #define uchar unsigned char

  4. sbit DIN=P3^1;
  5. sbit CLK=P3^3;
  6. sbit LOAD=P3^2;
  7. void send(uchar add,uchar dat)
  8. {
  9.                  uchar ADS,i,j;
  10.                  CLK=0;
  11.               LOAD=0;
  12.               DIN=0;
  13.                  i=4;
  14.                  while(i<16)
  15.                  {
  16.                    if(i<8)
  17.                               {
  18.                                             ADS=add;
  19.                             }
  20.                 else
  21.                               {
  22.                                           ADS=dat;
  23.                             }
  24.                 for(j=8;j>=1;j--)
  25.                               {

  26.                                           if((ADS&0x80)==0)
  27.                                           {              DIN=0 ;}
  28.                                           else
  29.                                           {              DIN=1;}
  30.                                               ADS=ADS<<1;
  31.                            
  32.                             CLK=1;
  33.                             CLK=0;            
  34.                             }
  35.                 i=i+8;
  36.    }
  37.    LOAD=1;
  38. }

  39. void main(void)
  40. {
  41.    send(0x0c,0x01);//正常狀態(tài)
  42.    send(0x0b,0x07);//設(shè)置掃描范圍DIG0-7
  43.               send(0x0a,0x05);//設(shè)置亮度11/32
  44.    send(0x09,0xff);//采用譯碼方式

  45.    while(1)
  46.    {
  47.    send(0x01,0x81);
  48.    send(0x02,0x82);
  49.    send(0x03,0x83);
  50.    send(0x04,0x84);
  51.    send(0x05,0x85);
  52.    send(0x06,0x86);
  53.    send(0x07,0x87);
  54.    send(0x08,0x88);

  55.    }
  56. }
復(fù)制代碼
0.png

全部資料51hei下載地址:
串行輸入輸出共陰極顯示驅(qū)動(dòng)器MAX7219應(yīng)用.zip (311.06 KB, 下載次數(shù): 112)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:98880 發(fā)表于 2019-6-19 11:05 | 顯示全部樓層
有讓他DP顯示的功能嗎?
回復(fù)

使用道具 舉報(bào)

ID:524764 發(fā)表于 2019-8-30 10:31 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:60263 發(fā)表于 2020-6-4 10:53 | 顯示全部樓層
仿真測試可用,謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:748788 發(fā)表于 2020-7-27 14:49 | 顯示全部樓層
劃重點(diǎn)了:當(dāng)采用BCD譯碼方式時(shí),譯碼器僅對(duì)寄存器中數(shù)據(jù)的低四位(D3-D0)有效,高四位(D7-D4)位無效。
回復(fù)

使用道具 舉報(bào)

ID:476623 發(fā)表于 2020-8-7 22:22 | 顯示全部樓層
有一片icm7218 驅(qū)動(dòng)8位led的板子,不會(huì)寫代碼 ,下載樓主資料學(xué)習(xí)一下看看能不能把icm7218使用起來。
回復(fù)

使用道具 舉報(bào)

ID:921493 發(fā)表于 2021-6-24 23:21 | 顯示全部樓層
while(1)
   {
   send(0x01,0x81);
   send(0x02,0x82);
   send(0x03,0x83);
   send(0x04,0x84);
   send(0x05,0x85);
   send(0x06,0x86);
   send(0x07,0x87);
   send(0x08,0x88);

   }
逗號(hào)后面的是不是字形碼啊
怎末感覺跟前面介紹的不一樣啊
回復(fù)

使用道具 舉報(bào)

ID:337808 發(fā)表于 2021-8-2 07:21 | 顯示全部樓層
必須說明這片文章質(zhì)量非常高。感謝樓主的分享。對(duì)我這個(gè)一知半解的工程師來說真的是太好了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表