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低功耗关断模式、vwin 和数字亮度控制、允许用户显示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);
}
评论
查看更多