找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7740|回復: 7
收起左側

串行輸入輸出共陰極顯示驅動器MAX7219應用(單片機代碼+仿真)

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

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



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



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

發(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個內(nèi)部寄存器的地址。D7---D0位(8位)為送入的指定寄存器的數(shù)據(jù)(包括顯示數(shù)據(jù)和控制數(shù)據(jù))。
3.寄存器功能及說明
MAX7219內(nèi)部共有14個可尋址的數(shù)字、控制寄存器和空操作寄存器。數(shù)字寄存器由一個片內(nèi)8×8靜態(tài)RAM組成?刂萍拇嫫靼ㄗg碼方式、亮度控制、掃描數(shù)量、停機模式、測試模式等寄存器組成,如下表所示:
寄存器名稱
十六進制數(shù)地址
寄存器名稱
十六進制數(shù)地址
空操作
00H
DIG6
07H
DIG0
01H
DIG7
08H
DIG1
02H
譯碼控制
09H
DIG2
03H
亮度控制
0AH
DIG3
04H
掃描控制
0BH
DIG4
05H
停機控制
0CH
DIG5
06H
顯示測試控制
0FH
下面從使用的角度,對MAX7219內(nèi)部控制器的功能加以說明:
(1)譯碼控制寄存器(地址09H):譯碼方式寄存器可以對每個數(shù)進行設置,使其為BCD譯碼方式或不譯碼方式。寄存器的每一位和一個數(shù)位相對應。為“1”時,選擇BCD譯碼方式,為“0”選擇不譯碼方式。例如,0---7位不譯碼,則給譯碼寄存器09H送00H。第一位譯碼,其余位不譯碼,則給譯碼寄存器09H送01H。
譯碼方式控制寄存器舉例(地址09H):

寄存器數(shù)據(jù)
16進制代碼(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
* 當采用BCD譯碼方式時,譯碼器僅對寄存器中數(shù)據(jù)的低四位(D3-D0)有效,高四位(D7-D4)位無效。BCD碼的字形為:當數(shù)據(jù)為00-09H時,顯示為0-9;當數(shù)據(jù)為0AH-0EH時,顯示為-,E,H,L,P。當數(shù)據(jù)為0FH時,數(shù)據(jù)被消隱,處于不顯示狀態(tài)。
代碼BCD字形表:
顯示字符
寄存器數(shù)據(jù)
段碼點亮=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ù)點由D7設置,D7=1亮,D7=0不亮。
* 當采用不譯碼方式時,數(shù)據(jù)位D7-D0和字段的對應關系如圖3所示:



需要說明的是:不管對MAX7219設置的是譯碼方式還是非譯碼方式,D7位始終和數(shù)碼位的小數(shù)點DP相連,當D7=1時,小數(shù)點亮,當D7=0時,小數(shù)點滅。
(2)亮度控制寄存器(地址0AH):MAX7219的亮度控制有兩種方式:即模擬法和數(shù)字法。
* 模擬法:在引腳ISET和VCC之間接電阻RSET,各段驅動峰電流約為RSET中電流(Iset)的100倍,RSET的最小阻值為9.53KΩ,這時數(shù)碼顯示處于最亮狀態(tài)。RSET可用電位器代替,放到面板上用來調(diào)節(jié)數(shù)碼顯示的亮度。
* 數(shù)字法:將數(shù)據(jù)寫入到亮度控制寄存器中,即可按16各等級控制亮度。數(shù)值為00H,對應電流1/32Iset(最暗);數(shù)值為0FH,對應電流31/32Iset(最亮)。此數(shù)值加1,電流增大1/16。
亮度寄存器格式(地址0AH)
占空比
寄存器數(shù)據(jù)
16進制代碼(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ù)位處于顯示態(tài),范圍為1到8。MAX7219的各個數(shù)位按1300Hz的掃描頻率分路驅動,輪流點亮8各顯示器。若需要顯示的數(shù)位少,可降低掃描數(shù)量,以提高掃速和亮度。該寄存器的低3位指定要掃描的數(shù)位,即00-07H分別對應1-8個數(shù)位。但此值最好不要小于4,否則需要改變RSET的值。
掃描位數(shù)寄存器(地址0BH)的格式:

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



典型應用



級聯(lián)應用連線
MAX7219PROTUES仿真電路
   
據(jù)說PROTEUS里的MAX7219模型在級連時仿真有問題,時序和實際電路的不同。
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);//設置掃描范圍DIG0-7
  43.               send(0x0a,0x05);//設置亮度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. }
復制代碼
0.png

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

評分

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

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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);

   }
逗號后面的是不是字形碼啊
怎末感覺跟前面介紹的不一樣啊
回復

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表