在通常的情况下,我们所所用的显示器件多是数码管、液晶屏、OLED屏及TFT屏。但在公共场合要显示信息,就要有较大尺寸以便观察。
这里是以Start_DSC28034PNT湖人开发板来驱动一个8*8点阵的显示模块,当然在级联的情况下它能显示更多的内容。
该显示模块,有8*8点阵显示块和芯片MAX7219等组成,整个模块除电源引脚外,只有3个输入引脚,故它占用引脚资源比较少。
图1 8*8点阵显示块
图2 MAX7219及接口
所用的芯片MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,由它连接微处理器与88点阵显示块。其内部包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个88的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219同样允许用户对每一个数据选择编码或者不编码。
整个芯片包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。
点阵模块与开发板的具体连接关系为:
DIN---GPIO32
CS ---GPIO33
CLK---GPIO34
图3 所用接口
为输出高低电平,所作的定义为:
#define CLK_SetHigh() GpioDataRegs.GPBSET.bit.GPIO33= 1
#defineCLK_SetLow() GpioDataRegs.GPBCLEAR.bit.GPIO33= 1
#define DIN_SetHigh() GpioDataRegs.GPBSET.bit.GPIO32= 1
#define DIN_SetLow() GpioDataRegs.GPBCLEAR.bit.GPIO32 = 1
#define CS_SetHigh() GpioDataRegs.GPBSET.bit.GPIO34= 1
#define CS_SetLow() GpioDataRegs.GPBCLEAR.bit.GPIO34
= 1
对所用引脚的配置函数为:
void Init_dzmk(void)
{
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO33= 1; //CLK
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1; //DIN
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; //CS
EDIS;
}
以GPIO口方式串行发送字节数据的函数为:
void Write_Max7219_byte(char DATA)
{
char i;
CS_SetLow();
DELY();
for(i=8;i>=1;i--)
{
CLK_SetLow();
if(DATA&0x80)
DIN_SetHigh();
else
DIN_SetLow();
DELY();
DATA=DATA<<1;
CLK_SetHigh();
DELY();
}
}
Max7219向指定地址发送控制字的函数为:
void Write_Max7219(char address,char dat)
{
CS_SetLow();
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
CS_SetHigh();
}
对Max7219进行初始化的函数为:
void Init_MAX7219 (void)
{
Write_Max7219(0x0b, 0x07);
Write_Max7219(0x0c, 0x01);
Write_Max7219(0x0f, 0x00);
}
为了进行显示,所配置的字库结构为:
unsigned char
disp[38][8]={
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0
{0x10,0x30,0x50,0x10,0x10,0x10,0x10,0x10},//1
{0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E},//2
...
}
实现点阵模块显示测试的主程序为:
int main(void)
{
char i,j;
unsigned int k;
InitSysCtrl();
InitKEY();
Init_dzmk();
Init_MAX7219();
while(1)
{
for(j=0;j<38;j++)
{
for(i=1;i<9;i++)
{
Write_Max7219(i,disp[j][i-1]);
delay_1ms(1);
}
delay_1ms(600);
}
}
}
经程序的编译与下载,其显示效果如图2至图4所示。
图2 显示效果1
图3 显示效果2
图4 显示效果3
视频演示: