本帖最后由 jinglixixi 于 2021-7-30 19:25 编辑
串行点阵模块是一种基于控制芯片MAX7219的点阵显示模块,在单级使用的情况下,一片MAX7219可控制一块8*8点阵的显示块,若采用级联的方式,则可驱动多个点阵块,以实现多个字符的同时显示,起到点阵信息屏的显示效果。 该模块的电路原理图见图所示:
图1 模块电路图
作为开发板的控制接口, Arduino接口的引脚排列如图2所示。
图2引脚排列
为便于连接,点阵模块与开发板的引脚连接关系为: DIN-- PA2 CS--PA1 CLK-- PA0
MAX7219的初始化函数为: void Init_MAX7219(void)
{
Write_Max7219(0x0b, 0x07);
Write_Max7219(0x0c, 0x01);
Write_Max7219(0x0f, 0x00);
}
相关的辅助函数为: void Write_Max7219_byte(unsigned char DATA)
{
unsigned char i;
PA1 = 0;
for(i=8;i>=1;i--) {
PA0 = 0;
if(DATA&0x80) PA2 = 1;
else PA2 = 0;
DATA=DATA<<1;
PA0 = 1;
}
}
void Write_Max7219(char address,char dat)
{
PA1 = 0;
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
PA1 = 1;
}
相关显示的字模被存放在数组中,其结构为: 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 ... }
实现图3显示效果的主程序为: int main()
{
uint32_t i,j;
SYS_Init();
GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);
GPIO_SetMode(PA, BIT2, GPIO_MODE_OUTPUT);
GPIO_SetMode(PA, BIT1, GPIO_MODE_OUTPUT);
GPIO_SetMode(PA, BIT0, GPIO_MODE_OUTPUT);
GPIO_SetMode(PH, BIT4, GPIO_MODE_INPUT);
TIMER_Delay(TIMER0, 500);
Init_MAX7219();
PB14 = 1;
while(1)
{
for(j=0;j<38;j++)
{
for(i=1;i<9;i++)
Write_Max7219(i,disp[j][i-1]);
TIMER_Delay(TIMER0, 1000000);
}
}
}
其中,内层的循环是为了完成单个字符的显示,而外层的循环则是负责将字符库中的内容遍寻显示一轮。 在显示过程中,每显示完一个字符,板上的LED就切换一次显示状态。
图3 显示效果
|