MAX7219/MAX7221為緊湊的串行輸入/輸出共陰極顯示驅動器,用于連接微處理器(μP)與8位7段LED數碼管顯示器、條形圖顯示器或64個獨立的LED。器件內置BCD B碼譯碼器、多路復用掃描電路、段和位驅動器以及存儲每位數字的8x8靜態RAM。只需一個外部電阻即可設置所有LED的段電流。MAX7221兼容于SPI?、QSPI?以及MICROWIRE?接口,段驅動器帶有擺率限制,以降低EMI。
便利的4線串行接口可以連接所有通用μP。可對每位數字單獨尋址和更新,無需重新寫入整個顯示器。MAX7219/MAX7221還允許用戶為每位數字選擇B碼譯碼或非譯碼方式。
器件具有150μA低功耗關斷模式、模擬和數字亮度控制、允許用戶顯示1至8位數字的掃描限制寄存器以及強制點亮所有LED的測試模式。
如需3V工作電壓或字段閃爍的應用,請參考MAX6951數據資料。
MAX7219多級聯驅動程序
在使用多個7219級聯時,只要在寫入最后一片7219時作一特殊處理就可以了。
/*----------------顯示模塊----------------------*/
//級連的四個7219模塊,以引出線在右邊為準,自左至右為位3,2,1,0。每一個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]]
//段數據的排列 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個檔次 #define ShutDown 0x0c //電源工作模式地址 #define NormalOperation 1 //1 正常 0 掉電 #define DisplayTest 0x0f //測試模式地址 #define TestMode 1 //0 正常 1 測試 #define TestEnd 0 //0 正常 1 測試 #define No_op 0 //無操作寄存器 #define num_7219 4
延時子程序
***********************************************************/
///////////////// 延時 =6.6*x +9.6 us
void delay(unsigned int x) //22.1184Mhz x=1時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的驅動LED顯示
/************************** ******************************** */ /*------------------------------------------------- 向MAX7219寫入字節(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);/*設置電源工作模式*/
ps7219_pin_LOAD=1;
//鎖存操作 WriteWord7219(ScanLimit,ScanDigit);
/*設置掃描界限*/ ps7219_pin_LOAD=1;
//鎖存操作
WriteWord7219(DecodeMode,DecodeDigit);
/*設置譯碼模式*/ ps7219_pin_LOAD=1;
//鎖存操作 WriteWord7219(Intensity,IntensityGrade);
/*設置亮度*/ ps7219_pin_LOAD=1;
//鎖存操作 delay_xms(10);
//延遲10ms
WriteWord7219 (DisplayTest,TestEnd);
//正常工作 ps7219_pin_LOAD=1; //鎖存操作
}
}
void main()
{
InitDis7219 ();
delay_xms(50);
}
評論
查看更多