微控制器常用晶元MAX7219驅動

2021-08-01 06:13:46 字數 4127 閱讀 8516

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 電路原理圖

電路原理圖

圖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

典型應用電路:

微控制器的常用名詞

微控制器的常用名詞 匯流排 指能為多個部件服務的資訊傳送線,在微機系統中各個部件通過匯流排相互通訊。位址匯流排 它是傳送由cpu發出的用於選擇要訪問的器件或部件的位址。資料匯流排 它是用來傳送微型機系統內的各種型別的資料。彙編 是能完成一定任務的機器指令的集合。二進位制數 只有0和1兩個數碼,基數為...

微控制器常用濾波演算法

說明 假定從 8位 ad中讀取資料 如果是更高位的 ad可定義資料型別為 int 子程式為 get ad 一 限幅濾波法 又稱程式判斷濾波法 a 方法 根據經驗判斷,確定兩次取樣允許的最大偏差值 設為 a 每次檢測到新值時判斷 如果本次值與上次值之差 a,則本次值有效 如果本次值與上次值之差 a,則...

微控制器常用函式整理(一)

1 void comdatasendstr const unsigned char str 211 1 void comdatasendchar unsigned char cdbuf 2 pic微控制器中傳送字元和字串的函式功能。1 void comdatasendnumint 3bits uns...