一、硬件介绍
1、MAX7219是一种集成化的串行输入/输出共阴极显示驱动器(通过读时序图写程序是重要的步骤)
2、整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存 器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。
二、引脚连接
1、本次不使用级联,只需要接DIN一排引脚即可
2、CLK是时钟序列输入端。最大速率为 10MHz.在时钟的上升 沿,数据移入内部移位寄存器。下降沿时,数据从 DOUT 端输出。对 MAX7221 来说,只有当cs 端为低电平时时 钟输入才有效。
3、DIN是串行数据输入端口。在时钟上升沿时数据被载入内部 的 16 位寄存器。
4、DIN接PA1,CLK接PA3,CS接PA2。
三、使用说明
1、
由图可见,首先要先将CS线拉低,再重复将CLK线拉低再拉高重复8次,在CLK线变化的过程中DIN引脚依次得到8位数据的高位。重复以上时序,即可点亮点阵屏。
2、点阵字符工具可以自行网上搜索
四、代码编写(c文件中的延时函数自行查找)
1、MAX7219.c
#include "stm32f10x.h"
#include "DELAY.H"
#include "MAX7219.H"
#define MAX7219_CLK GPIO_Pin_3
#define MAX7219_CS GPIO_Pin_2
#define MAX7219_DIN GPIO_Pin_1
void MAX7219_GPIO_Init(void)
{
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA,ENABLE);//参数:选择外设,选择新状态
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;//通用推挽输出
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void Write_MAX7219_byte(uint8_t Data)
{
uint8_t i;
GPIO_ResetBits(GPIOA,MAX7219_CS);
for(i=8;i>=1;i--)
{
Delay_ms(3);
GPIO_ResetBits(GPIOA,MAX7219_CLK);
if(Data&0x80)//高位先行,Data把最高位复制给MAX7219_DIN引脚
{
GPIO_SetBits(GPIOA,MAX7219_DIN);
}
else
{
GPIO_ResetBits(GPIOA,MAX7219_DIN);
}
Data=Data<<1;//向左移1位
GPIO_SetBits(GPIOA,MAX7219_CLK);
}
}
void MAX7219_Write_Command(uint8_t Address,uint8_t Data)
{
GPIO_ResetBits(GPIOA,MAX7219_CS);
Write_MAX7219_byte(Address);
Write_MAX7219_byte(Data);
GPIO_SetBits(GPIOA,MAX7219_CS);
}
void MAX7219_Init(void)
{
MAX7219_GPIO_Init();
MAX7219_Write_Command(0x09,0x00);//编码格式
MAX7219_Write_Command(0x0A,0x15);//亮度控制,可自行更改
MAX7219_Write_Command(0x0B,0x07);//扫描控制,需扫描一个字节(8位)
MAX7219_Write_Command(0x0C,0x01);//掉电模式
MAX7219_Write_Command(0x0F,0x00);//显示检测
}
2、MAX7219_ArrCartoon.h
#ifndef __MAX7219_ARRCARTOON_H__
#define __MAX7219_ARRCARTOON_H__
unsigned char Arr_Cartoon[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xfe,0x10,0x10,0x10,0xfe,0x00,0x38,0x44,
0x82,0xA2,0x44,0xB8,0x00,0xF2,0x92,0x92,
0x92,0x9E,0x00,0x02,0x02,0xFE,0x02,0x02,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};//滚动动画
unsigned char Arr_Char[][8]={
0x00,0x00,0x80,0x82,0xFF,0x80,0x80,0x00,//数字1
0x00,0xF2,0x92,0x92,0x92,0x92,0x9E,0x00,//数字2
0x00,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,//数字3
0x00,0x30,0x28,0x24,0xFE,0x20,0x00,0x00,//数字4
};//单个字符
#endif
3、main.c
#include "stm32f10x.h"
#include "DELAY.H"
#include "MAX7219.H"
#include "MAX7219_ARRCARTOON.H"
int main(void)
{
MAX7219_Init();
int i,j;
while(1)
{
//滚动显示
for(i=1;i<9;i++)
{
MAX7219_Write_Command(i,Arr_Cartoon[i-1+j]);
}
Delay_ms(50);
j++;
if(j>=32)
j=0;
}
}
五、例程
video_20240712_151408