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...