本帖最后由 jinglixixi_457498010 于 2023-10-19 12:43 编辑

串行数码管显示模块是一种以串行方式发送数据,以并行方式输出数据的显示模块,其特点是输入引脚少,可较好地节省引脚资源。此外,在数据不需要刷新的情况下,它无需MCU的干预即可维持显示。
image.png
1 串行数码管显示模块

该串行数码管显示模块与开发板的连接关系为:
SCL---PA9
SDA--- PA8
CS --- PA3

对所用引脚进行配置的函数为:
void MAX7219_Configure(void)
  • {
  •     GPIO_InitTypeDefGPIO_InitStruct;
  •     RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
  •     GPIO_StructInit(&GPIO_InitStruct);
  •     GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_3 | GPIO_Pin_8 | GPIO_Pin_9;
  •     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  •     GPIO_InitStruct.GPIO_Mode  =GPIO_Mode_Out_PP;
  •     GPIO_Init(GPIOA, &GPIO_InitStruct);
  • }
  • 复制代码
    为便于所用引脚的高低电平输出,所作的语句定义为:
    #define DIN_SetHigh()   GPIO_WriteBit(GPIOA, GPIO_Pin_8 ,1)
    #define DIN_SetLow()    GPIO_WriteBit(GPIOA, GPIO_Pin_8 ,0)
    #define CLK_SetHigh()   GPIO_WriteBit(GPIOA, GPIO_Pin_9 ,1)
    #define CLK_SetLow()    GPIO_WriteBit(GPIOA, GPIO_Pin_9 ,0)
    #define CS_SetHigh()    GPIO_WriteBit(GPIOA, GPIO_Pin_3 ,1)
    #define CS_SetLow()     GPIO_WriteBit(GPIOA, GPIO_Pin_3 ,0)


    由于该显示模块所使用的芯片为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();
  •    }
  • }
  • 复制代码
    以函数Write_Max7219_byte()为基础,向指定地址发送数据的函数为:
    void Write_Max7219(char address,chardat)
  • {
  •      CS_SetLow();
  •      Write_Max7219_byte(address);
  •      Write_Max7219_byte(dat);
  •      CS_SetHigh();
  • }
  • 复制代码
    对于串行数码管显示模块,其初始化函数为:
    void Init_MAX7219(void)
  • {
  •    Write_Max7219(0x09, 0xff);
  •    Write_Max7219(0x0a, 0x02);
  •    Write_Max7219(0x0b, 0x07);
  •    Write_Max7219(0x0c, 0x01);
  •    Write_Max7219(0x0f, 0x00);
  • }
  • 复制代码
    要实现串行数码管显示模块的测试,相应的设置函数和循环函数为:
    int main(void)
  • {
  •     chari,j;
  •     unsignedint k;
  •     PLATFORM_Init();
  •         MAX7219_Configure();
  •         Init_MAX7219();
  •     Write_Max7219(1,1);
  •     Write_Max7219(2,2);
  •     Write_Max7219(3,3);
  •     Write_Max7219(4,4);
  •     Write_Max7219(5,5);
  •     Write_Max7219(6,6);
  •     Write_Max7219(7,7);
  • Write_Max7219(8,8);
  • while (1)
  •     {
  •     }
  • }
  • 复制代码

    经程序的上传,其测试效果如图2所示。

    image.png
    2  显示效果