原创 【MC3172】+8*8点阵显示模块的显示驱动

2022-10-25 23:37 1514 12 12 分类: MCU/ 嵌入式

8*8点阵显示模块是一款基于MAX7219为控制芯片的器件,在单级使用的情况下,一片MAX7219可控制一块8*8点阵的显示块,若采用级联的方式,则可驱动多个点阵块,以实现多个字符的同时显示,达到点阵信息屏的显示效果。

使用MC3172驱动该显示模块,可实现图1所示的效果。

1 显示效果

 

在该显示电路中,其引脚的连接关系为:

CLK-- PA2

DIN-- PA1

CS --PA0

2 引脚分布

显示内容的点阵字模以下面的方式来存放:

unsignedchardisp[38][8]=

{

  {0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0

  {0x10,0x30,0x50,0x10,0x10,0x10,0x10,0x10},//1

  {0x7E,0x02,0x02,0x7E,0x40,0x40,0x40,0x7E},//2

  ...

  {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

  ...

  {0x8,0x7F,0x49,0x49,0x7F,0x08,0x08,0x08},//

  {0xFE,0xBA,0x92,0xBA,0x92,0x9A,0xBA,0xFE},//

};

所配置的延时函数为:

void delay(i16 del)
  • {
  • for (u32 i = 0; i < del; ++i) {
  • for (u32var = 0; var< 5000; ++var) {
  • NOP();
  • }
  • }
  • }
  • 复制代码

    Max7219发送字节数据的函数为:

    voidWrite_Max7219_byte(unsignedchar DATA)
  • {
  • unsigned char i;
  • GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN0);
  • for(i=8;i>=1;i--)
  • {
  • GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN2);
  • if(DATA&0x80) GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN1);
  • else GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN1);
  • delay(1);
  • DATA=DATA<<1;
  • GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN2);
  • delay(1);
  • }
  • }
  • 复制代码

    Max7219指定寄存器方式数据的函数为:

    void Write_Max7219(char address,char dat)
  • {
  • GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN0);
  • Write_Max7219_byte(address);
  • Write_Max7219_byte(dat);
  • GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN0);
  • }
  • 复制代码

    MAX7219的初始化函数为:

    voidInit_MAX7219(void)
  • {
  • Write_Max7219(0x0b, 0x07);
  • Write_Max7219(0x0c, 0x01);
  • Write_Max7219(0x0f, 0x00);
  • }
  • 复制代码

    为驱动点阵模块进行显示,这里将显示程序存放到线程0中,其中包括将所用的引脚设置为输出模式及以循环的方式不断地显示字库中的内容,其程序内容如下:

    void thread0_main(void)
  • {
  • //使能了GPIOA的时钟
  • INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
  • //将PA0设置为输出模式
  • GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,(GPIO_PIN0),GPIO_SET_ENABLE);
  • GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,(GPIO_PIN1),GPIO_SET_ENABLE);
  • GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,(GPIO_PIN2),GPIO_SET_ENABLE);
  • Init_MAX7219();
  • delay(100);
  • while(1)
  • {
  • for(u32 j=0;j<38;j++)
  • {
  • for(u32 i=1;i<9;i++)
  • Write_Max7219(i,disp[j][i-1]);
  • delay(100);
  • }
  • }
  • thread_end();
  • }
  • 复制代码

    经编译与下载,其播放显示效果如图3至图5所示。

    3 显示数字

    4 显示字符

    5 显示中文

    在使用中较为不便的是,电源引脚引出的过少,对3.3V也缺少引脚输出,并且其电源功率好像也不大,需借助外部电源的辅助。





    作者: jinglixixi_457498010, 来源:面包板社区

    链接: https://mbb.eet-china.com/blog/uid-me-467667.html

    版权声明:本文为博主原创,未经本人允许,禁止转载!

    PARTNER CONTENT

    文章评论0条评论)

    登录后参与讨论
    我要评论
    0
    12
    关闭 站长推荐上一条 /3 下一条