本帖最后由 jinglixixi 于 2021-7-11 08:22 编辑
前文介绍了一种串行数码管的显示驱动方法,其控制芯片是MAX7219,其实基于MAX7219的应用并不止这一个,利用它还可以控制串行点阵块。在单级使用的情况下,一片MAX7219可控制一块8*8点阵的显示块,若采用级联的方式,则可驱动多个点阵块,实现多个字符同时显示,从而达到点阵信息屏的输出效果。 8*8点阵显示块的引脚排列方式如图1所示,共分为8条行线和8条列线,当行线和列线分别提供相应的高低电平时,行与列交叉位置处的LED即被点亮。 图1 点阵显示块引脚排列
基于MAX7219的串行点阵显示块,其原理图如图2所示。 图2 串行点阵显示块原理图
该模块分为输入端和级联输出端,在单独使用时,只需连接输入端的5个引脚,除2个电源引脚外,另3个引脚为:串行数据输入端DIN、串行时钟输入端CLK及片选引脚CS。 若多片级联,看将前一级的级联输出端与后一级的输入端对应引脚相连。 在使用过程中,串行数码管引脚与开发板的连接关系为: VCC---5V GND---GND DIN---RC4 CLK--- RC6 CS --- RC7 MCC的引脚配置如图3所示,相应的引脚命名如图4所示。 图3 引脚配置
图4 引脚命名
此外,为便于编程还调用了系统的延时函数,见图5所示。 图5 启用延时函数
支持显示的字模被存放在数组中,其格式如下: char disp[38][8]={ {0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0 {0x10,0x18,0x14,0x10,0x10,0x10,0x10,0x10},//1 … {0x3E,0x22,0x22,0x3E,0x2,0x2,0x2,0x3E},//9 {0x8,0x14,0x22,0x3E,0x22,0x22,0x22,0x22},//A {0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C,0x0},//B {0x3C,0x40,0x40,0x40,0x40,0x40,0x3C,0x0},//C … {0x0,0x41,0x22,0x14,0x8,0x14,0x22,0x41},//X {0x41,0x22,0x14,0x8,0x8,0x8,0x8,0x8},//Y {0x0,0x7F,0x2,0x4,0x8,0x10,0x20,0x7F},//Z {0x8,0x7F,0x49,0x49,0x7F,0x8,0x8,0x8},//中 {0xFE,0xBA,0x92,0xBA,0x92,0x9A,0xBA,0xFE},//国 };
Max7219发送字节数据的函数为: void Write_Max7219_byte(char DATA) { char i; CS_SetLow(); for(i=8;i>=1;i--) { CLK_SetLow(); if(DATA&0x80) DIN_SetHigh(); else DIN_SetLow(); DATA=DATA<<1; CLK_SetHigh(); } }
其设计思想是将一个字节的8位数据,在时钟脉冲CLK的配合下,一位位的由DIN引脚串行输送出去。所发送的顺序为高位在先,低位在后。 向寄存器写入数据的函数为: 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); //扫描界限;8个数码管显示 Write_Max7219(0x0c, 0x01); //掉电模式:0,普通模式:1 Write_Max7219(0x0f, 0x00); //显示测试:1;测试结束,正常显示:0 }
显示显示效果的主程序为: void main(void) { char i,j; SYSTEM_Initialize(); DELAY_milliseconds(500); Init_MAX7219(); while(1) { for(j=0;j<38;j++) { for(i=1;i<9;i++) Write_Max7219(i,disp[j][i-1]); DELAY_milliseconds(1000); IO_RC1_Toggle(); } } }
其中的内层循环是为了完成单个字符的显示,而外层的循环则是负责将字符库中的内容遍寻显示一轮。 在显示过程中,每显示完一个字符,板上的LED就切换一次状态。
在完成程序编译和下载的情况下,其演示效果如图6至图8所示。
在该点阵块的驱动中,是采用GPIO口来模拟SPI接口来驱动。由于MAX7219内部的设计很有特色,故在显示过程中并无抖动和闪烁现象。像PIC18F16Q40这样的下板卡,能驱动串行点阵模块来动态显示信息,若与前面介绍的串行数码管显示来比的话,还是比较有特色的,也具有较高的实际应用价值。
点阵块动画演示:
|