发新帖本帖赏金 40.00元(功能说明)我要提问
返回列表
[应用方案]

以NuMaker--PFM--M487 实现MAX7219显示模块驱动显示

[复制链接]
790|20
手机看帖
扫描二维码
随时随地手机跟帖
jinglixixi|  楼主 | 2022-4-17 13:20 | 显示全部楼层 |阅读模式
#申请原创#

MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,其片内配有一个B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储数据。有一个外部寄存器用来设置各个LED的段电流。同时它有限制回转电流的段驱动以减少EMI(电磁干扰)。
一个方便的四线串行接口可以联接所有通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219允许用户对每一个数据选择编码或者不编码。
芯片包含一个150μA的低功耗模式控制器,可进行模拟或数字式亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。
它只需3个GPIO口就可驱动8位数码管或8x8点阵模块,因此它相较于传统的并联式驱动基于硬件资源消耗少的特点。
本篇主要介绍以NuMaker--PFM--M487开发板来驱动MAX7219显示模块,并通过RT_Thread软件来实现。
1. 串行数码管显示模块
串行数码管显示模块的外观如图1所示,它具有输入端和输出端可多个模块级联起来使用,以显示更多位的数码值。
1.jpg
图1 串行数码管模块
串行数码管显示模块的电路原理图见图2所示,该模块采用5V电压来工作。
2.jpg
图2 原理图
在使用NuMaker--PFM--M487开发板驱动的情况下,其显示效果如图3所示。
3.jpg
图3 显示效果
该显示模块与开发板的连接关系为:
CLK-- PA2
DIN-- PA1
CS --PA0
MAX7219模拟串行数据发送的函数为:
void Write_Max7219_byte(unsigned char DATA)

{

  unsigned char i;

  rt_pin_write(CS_PIN, PIN_LOW);

  for(i=8;i>=1;i--)

  {

       rt_pin_write(CLK_PIN, PIN_LOW);

       if(DATA&0x80)  rt_pin_write(DIN_PIN, PIN_HIGH);

       else  rt_pin_write(DIN_PIN, PIN_LOW);

       DATA=DATA<<1;

       rt_pin_write(CLK_PIN, PIN_HIGH);

  }

}

MAX7219向芯片寄存器写入数据的函数为:
void Write_Max7219(char address,char dat)

{

   rt_pin_write(CS_PIN, PIN_LOW);

   Write_Max7219_byte(address);

   Write_Max7219_byte(dat);

   rt_pin_write(CS_PIN, PIN_HIGH);

}

MAX7219的初始化函数为:
void Init_MAX7219(void)

{

Write_Max7219(0x09, 0xff);       //译码方式:BCD码

Write_Max7219(0x0a, 0x03);       //亮度

Write_Max7219(0x0b, 0x07);       //扫描界限;4个数码管显示

Write_Max7219(0x0c, 0x01);       //掉电模式:0,普通模式:1

Write_Max7219(0x0f, 0x01);       //显示测试:1;测试结束,正常显示:0

}

实现显示功能的主程序为:
void main(void)

{

    rt_pin_mode(CLK_PIN , PIN_MODE_OUTPUT);

    rt_pin_mode(DIN_PIN, PIN_MODE_OUTPUT);

    rt_pin_mode(CS_PIN, PIN_MODE_OUTPUT);

    rt_thread_mdelay(50);

    Init_MAX7219();

    rt_thread_mdelay(2000);

    Write_Max7219(0x0f, 0x00);

    Write_Max7219(1,8);

    Write_Max7219(2,7);

    Write_Max7219(3,6);

    Write_Max7219(4,5);

    Write_Max7219(5,4);

    Write_Max7219(6,3);

    Write_Max7219(7,2);

    Write_Max7219(8,1);

    while(1);

}

经编译处理,其编译结果如图5所示。
a.jpg
由此可见,串行数码管显示模块的驱动是很容易实现的,也是十分方便。由于数码管基于亮度高的特点,故适于在工业现场来使用。
2. 串行点阵显示模块
串行点阵显示模块也是以MAX7219为控制芯片,在单级使用的情况下,一片MAX7219可控制一块8*8点阵的显示块,若采用级联的方式,则可驱动多个点阵块,以实现多个字符的同时显示,可达到点阵信息屏的显示效果。
该模块的电路原理图如图4所示,为节省空间,它是将MAX7219芯片置于点阵块的下方。
4.jpg
图4   模块电路图
点阵显示模块与开发板的连接关系为:
CLK-- PA2
DIN-- PA1
CS --PA0
在使用NuMaker--PFM--M487开发板驱动的情况下,其显示效果如图5所示。
5.jpg
图5 显示效果
相较于串行数码管显示模块,该显示模块所显示的信息量要更丰富,故需要为它配置一个显示字模数组,其结构及内容如下:
unsigned chardisp[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
...
{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,0x8,0x8,0x8},//中
{0xFE,0xBA,0x92,0xBA,0x92,0x9A,0xBA,0xFE},//国
}
对于点阵显示模块的驱动,同样需要2个辅助函数Write_Max7219_byte()和Write_Max7219()的支持,其内容同前面的函数相一致,故从略。
但在MAX7219的初始化方面,由于2种功能模块有着较大的差异,故其初始化函数是不同的,其内容为:
void Init_MAX7219(void)

{

  Write_Max7219(0x0b, 0x07);

  Write_Max7219(0x0c, 0x01);

  Write_Max7219(0x0f, 0x00);

}

实现图5显示效果的主程序为:
void main(void)

{

    uint32_t i,j;

    rt_pin_mode(CLK_PIN , PIN_MODE_OUTPUT);

    rt_pin_mode(DIN_PIN, PIN_MODE_OUTPUT);

    rt_pin_mode(CS_PIN, PIN_MODE_OUTPUT);

    Init_MAX7219();

    while(1)

    {

        for(j=0;j<38;j++)

        {

            for(i=1;i<9;i++)

            Write_Max7219(i,disp[j][i-1]);

            rt_thread_mdelay(1000);

        }

    }

}

其中,内层的循环是为了完成单个字符的显示,而外层的循环则是负责将字符库中的内容遍寻显示一轮。
在显示过程中,每显示完一个字符。
经编译下载,其显示如图6至图8所示。
6.jpg
图6 显示“0”
7.jpg
图7显示“1”
8.jpg
图8显示“2”

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 40.00 元 2022-04-21
理由:恭喜通过原创文章审核!请多多加油哦!

评论
21小跑堂 2022-4-21 16:43 回复TA
RT_Thread+NuMaker-PFM-M487强强联合,点亮串行数码管,有一定实际意义。 
antusheng| | 2022-4-18 18:55 | 显示全部楼层
基本上算是SPI接口吧

使用特权

评论回复
jinglixixi|  楼主 | 2022-4-18 21:15 | 显示全部楼层
antusheng 发表于 2022-4-18 18:55
基本上算是SPI接口吧

介于2者之间,比I2C多CS,比SPI少RST和DC。

使用特权

评论回复
gouguoccc| | 2022-4-19 08:17 | 显示全部楼层
新唐的板子怎么都喜欢大红色啊

使用特权

评论回复
jinglixixi|  楼主 | 2022-4-19 11:01 | 显示全部楼层
gouguoccc 发表于 2022-4-19 08:17
新唐的板子怎么都喜欢大红色啊

是不是图喜庆呀!

使用特权

评论回复
jackcat| | 2022-6-20 15:35 | 显示全部楼层
不用刷新了,还可以的。   

使用特权

评论回复
elsaflower| | 2022-6-20 18:26 | 显示全部楼层
这个模块驱动还可以?  

使用特权

评论回复
janewood| | 2022-6-20 18:50 | 显示全部楼层
MAX7219有模块资料吗?

使用特权

评论回复
gouguoccc| | 2022-6-20 19:37 | 显示全部楼层
谢谢分享,学习了。

使用特权

评论回复
jinglixixi|  楼主 | 2022-6-21 07:57 | 显示全部楼层
janewood 发表于 2022-6-20 18:50
MAX7219有模块资料吗?

某宝可以找到!

使用特权

评论回复
typeof| | 2022-6-21 20:13 | 显示全部楼层
这个板子很棒呢。   

使用特权

评论回复
mmbs| | 2022-6-22 21:26 | 显示全部楼层
MAX7219不错的芯片。   

使用特权

评论回复
zerorobert| | 2022-6-23 21:40 | 显示全部楼层
有原理图吗MAX7219

使用特权

评论回复
juliestephen| | 2022-6-24 09:46 | 显示全部楼层
可以配置dma输出吗

使用特权

评论回复
deliahouse887| | 2022-6-24 10:36 | 显示全部楼层
MAX7219点阵用过了吗  

使用特权

评论回复
sparrow054| | 2022-7-12 20:58 | 显示全部楼层
别说,之前还真用过这个片子

使用特权

评论回复
andygirl| | 2022-8-6 14:42 | 显示全部楼层
这个片子很好用

使用特权

评论回复
tail066| | 2022-8-11 21:14 | 显示全部楼层
学习了,感谢讲解

使用特权

评论回复
jinglixixi|  楼主 | 2022-8-12 10:52 | 显示全部楼层
tail066 发表于 2022-8-11 21:14
学习了,感谢讲解

使用特权

评论回复
海滨消消| | 2022-8-15 16:09 | 显示全部楼层
很不错的板子,学习了

使用特权

评论回复
发新帖 本帖赏金 40.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2675

帖子

36

粉丝