MAX7219/MAX7221為緊湊的串行輸入/輸出共陰極顯示驅(qū)動(dòng)器,用于連接微處理器(μP)與8位7段LED數(shù)碼管顯示器、條形圖顯示器或64個(gè)獨(dú)立的LED。器件內(nèi)置BCD B碼譯碼器、多路復(fù)用掃描電路、段和位驅(qū)動(dòng)器以及存儲(chǔ)每位數(shù)字的8x8靜態(tài)RAM。只需一個(gè)外部電阻即可設(shè)置所有LED的段電流。MAX7221兼容于SPI?、QSPI?以及MICROWIRE?接口,段驅(qū)動(dòng)器帶有擺率限制,以降低EMI。
便利的4線串行接口可以連接所有通用μP??蓪?duì)每位數(shù)字單獨(dú)尋址和更新,無需重新寫入整個(gè)顯示器。MAX7219/MAX7221還允許用戶為每位數(shù)字選擇B碼譯碼或非譯碼方式。
器件具有150μA低功耗關(guān)斷模式、模擬和數(shù)字亮度控制、允許用戶顯示1至8位數(shù)字的掃描限制寄存器以及強(qiáng)制點(diǎn)亮所有LED的測(cè)試模式。
如需3V工作電壓或字段閃爍的應(yīng)用,請(qǐng)參考MAX6951數(shù)據(jù)資料。
MAX7219多級(jí)聯(lián)驅(qū)動(dòng)程序
在使用多個(gè)7219級(jí)聯(lián)時(shí),只要在寫入最后一片7219時(shí)作一特殊處理就可以了。
/*----------------顯示模塊----------------------*/
//級(jí)連的四個(gè)7219模塊,以引出線在右邊為準(zhǔn),自左至右為位3,2,1,0。每一個(gè)7219模塊,自上至下,為a,b,。.g,h段
// 字符表的排列為CharMap_X[a , b, c, d,e, f,g,h],
//模板的排列model_xxxx[char3[a , b, c, d,e, f,g,h],char2[a , b, c, d,e, f,g,h],char1[a , b, c, d,e, f,g,h],char0[a , b, c, d,e, f,g,h]]
//段數(shù)據(jù)的排列 Seg_data的排列與模板的排列相同。
//7219控制寄存器
#define ScanLimit 0x0b //掃描界限地址 #define ScanDigit 7 //0-7, 7全掃 #define DecodeMode 0x09 //譯碼模式地址 #define DecodeDigit 0x00 //0x00 不譯碼 0x01 只譯字0 0x0f 譯字0-3 0xff 全譯碼
#define Intensity 0x0a // 亮度地址
#define IntensityGrade 0x00 //0-f 16個(gè)檔次 #define ShutDown 0x0c //電源工作模式地址 #define NormalOperation 1 //1 正常 0 掉電 #define DisplayTest 0x0f //測(cè)試模式地址 #define TestMode 1 //0 正常 1 測(cè)試 #define TestEnd 0 //0 正常 1 測(cè)試 #define No_op 0 //無操作寄存器 #define num_7219 4
延時(shí)子程序
***********************************************************/
///////////////// 延時(shí) =6.6*x +9.6 us
void delay(unsigned int x) //22.1184Mhz x=1時(shí)16.2us ,x=2 23us, x=3 29.6us
x=150 ~~=1ms { uint i;
for(i=0;i《x;i++); }
///////////延遲Xms
void delay_xms(uchar x) //22Mhz xms {
int i,set; set=0;
for(i=0;i《x;i++) { delay(150); //150 } }
void InitMain (void) {
TMOD=0x20;
TH0=0xff; TL0=0xf4; EA=1; ES=1;
TR1=1; }
//max7219的驅(qū)動(dòng)LED顯示
/************************** ******************************** */ /*------------------------------------------------- 向MAX7219寫入字節(jié)(8位)
--------------------------------------------------*/ void SendChar7219 (uchar ch)
{
uchar i,temp;
nop;
for (i=0;
i《8;i++) {
ps7219_pin_CLK=0;
temp=ch&0x80;
ch=ch《《1;
if(temp) {
ps7219_pin_DIN=1;
}
else
{
ps7219_pin_DIN=0;
}
ps7219_pin_CLK=1;
_nop_();
}
第四片7219 ps7219_pin_LOAD=0;
//封鎖第一片鎖存操作 WriteWord7219 (Addr,Seg_data[8-Addr]);
//寫第四片 ps7219_pin_CLK=1; WriteWord7219 (No_op,0);
//跳過第一、二、三片7219 WriteWord7219 (No_op,0);
WriteWord7219 (No_op,0);
ps7219_pin_LOAD=1;
// 鎖存操作
}
/*------------------------------------------------- 寫一屏
/*-------------------------------------------------*/ void WriteOneScreen7219( )
{
char i;
for (i=7;
i》=0;
i--)
{
WriteLine7219 (i+1);
}
}
/*------------------------------------------------- MAX7219初始化
-------------------------------------------------*/
void InitDis7219 (void) {
char i; for (i=num_7219; i》=0; i--)
{
WriteWord7219(ShutDown,NormalOperation);/*設(shè)置電源工作模式*/
ps7219_pin_LOAD=1;
//鎖存操作 WriteWord7219(ScanLimit,ScanDigit);
/*設(shè)置掃描界限*/ ps7219_pin_LOAD=1;
//鎖存操作
WriteWord7219(DecodeMode,DecodeDigit);
/*設(shè)置譯碼模式*/ ps7219_pin_LOAD=1;
//鎖存操作 WriteWord7219(Intensity,IntensityGrade);
/*設(shè)置亮度*/ ps7219_pin_LOAD=1;
//鎖存操作 delay_xms(10);
//延遲10ms
WriteWord7219 (DisplayTest,TestEnd);
//正常工作 ps7219_pin_LOAD=1; //鎖存操作
}
}
void main()
{
InitDis7219 ();
delay_xms(50);
}
評(píng)論
查看更多