这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » 基于地奇星开发板的数码管模块显示技术

共10条 1/1 1 跳转至

基于地奇星开发板的数码管模块显示技术 23

菜鸟
2026-01-02 21:52:15   被打赏 30 分(兑奖)     打赏

地奇星开发板是一款以RA6E2为核心的开发板,且提供UARTSPII2C等多种通信接口,入门及项目实践的理想平台。它体型小巧,其外观见图1所示。

image.png

1 外观及功能配置

为了使其具有显示功能,这里为其配置了一个以串行方式工作的数码管模块。

该模块是以MAX7219芯片进行控制,它是一种集成化的串行输入/输出共阴极显示驱动器,它承担着连接微处理器与8位七段数码管的作用,当然它也可以点阵式显示器件。

MAX7219芯片配有BBCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存

储数据。且有一个外部寄存器用来设置各个LED的段电流。

此外,MAX7219还允许用户对每一个数据选择编码或者不编码工作方式。

image.png

2 工作原理图

为驱动数码管模块,需使用RASC进行引脚配置,见图3所示。

image.png

3 引脚配置

为便于高低高低电平的输出,相应的引脚定义如下:

#define CLK_SetLow()   R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_03_PIN_01, BSP_IO_LEVEL_LOW)

#define CLK_SetHigh()   R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_03_PIN_01, BSP_IO_LEVEL_HIGH)

#define DIN_SetLow()   R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_03_PIN_02, BSP_IO_LEVEL_LOW)

#define DIN_SetHigh()  R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_03_PIN_02, BSP_IO_LEVEL_HIGH)

#define CS_SetLow()    R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_04_PIN_07, BSP_IO_LEVEL_LOW)

#define CS_SetHigh()   R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_04_PIN_07, BSP_IO_LEVEL_HIGH) 

实现数据串行传送的函数为:

void Write_Max7219_byte(char DATA)
{   
   char i;
   CS_SetLow();
   R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS);
   for(i=8;i>=1;i--)
   {
     CLK_SetLow();
     if(DATA&0x80)
         DIN_SetHigh();     
     else
         DIN_SetLow();
     R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS);     
     DATA=DATA<<1;
     CLK_SetHigh();
     R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS);
   }
}

向指定地址发送数据的函数为:

void Write_Max7219(char address,char dat)
{     
    CS_SetLow();
    Write_Max7219_byte(address);
    Write_Max7219_byte(dat);
    CS_SetHigh();
}

在解码工作模式下,各数据位与显示笔段的对应关系如图4所示。

image.png

4 编码关系

在解码工作模式下,对MAX7219初始化的程序为:

void Init_MAX7219P(void)
{
   Write_Max7219(0x09,0xff);
   Write_Max7219(0x0a,0x02);
   Write_Max7219(0x0b,0x07);
   Write_Max7219(0x0c,0x01);
   Write_Max7219(0x0f,0x00);
}

其实现数据显示的测试主程序为:

void hal_entry(void)
{
  Init_MAX7219P();
  Write_Max7219(1,0x8);
  Write_Max7219(2,0x7);
  Write_Max7219(3,0x6);
  Write_Max7219(4,0x5);
  Write_Max7219(5,0x4);
  Write_Max7219(6,0x3;
  Write_Max7219(7,0x2);
  Write_Max7219(8,0x1); 
  while(1);
}

经程序的编译和下载,其执行效果如图5所示。

image.png

5显示效果

由此可见,其显示的内容还仅限于数字0~9之间。

那么如何才能使其显示出小数点呢?

这就要借助非编码方式的帮助,此时MAX7219的初始化程序应改为:

void Init_MAX7219P(void)
{
    Write_Max7219(0x0b,0x07);
    Write_Max7219(0x0c,0x01);
    Write_Max7219(0x0f,0x00);
}

为此,对要显示的数符需自行编码来显示。此时笔段与各数位间的对应关系如图6所示。

image.png

6 编码关系  

有鉴于此,实现带小数位数据显示的测试主程序为:

void hal_entry(void)
{
  Init_MAX7219P();
  Write_Max7219(1,0x70);
  Write_Max7219(2,0x5f);
  Write_Max7219(3,0x5b);
  Write_Max7219(4,0x33);
  Write_Max7219(5,0x79);
  Write_Max7219(6,0x6d);
  Write_Max7219(7,0x30);
  Write_Max7219(8,0xfe); 
  while(1);
}

image.png

7 显示效果

除此之外,在非译码方式下还能显示些啥内容呢?

其实它所能显示的内容与笔段式液晶屏所显示的内容使十分相近的,对于26个英文字符它可以显示绝大部分的内容,其显示内容见图8所示。

 经程序的编译和下载,其执行效果如图7所示。

image.png

8 可显示内容 

至此,就较为全面地介绍了该MAX7219数码管显示模块的使用方法。















关键词: 数码管模块    

院士
2026-01-03 08:20:37     打赏
2楼

我最早接触的同款芯片是周立功的7219。



专家
2026-01-03 09:06:02     打赏
3楼

谢谢分享


院士
2026-01-05 16:12:48     打赏
4楼

学习了,谢谢分享。


专家
2026-01-07 09:27:57     打赏
5楼

谢谢分享!


高工
2026-01-07 15:00:53     打赏
6楼

几个IO就能控制这几个数码关显示 真是节省资源


专家
2026-01-07 21:05:52     打赏
7楼

数码管,好熟悉的元件。当年数电实验常用


高工
2026-01-08 08:37:03     打赏
8楼

这个好像使用595也可以驱动,感觉原理是一样的


工程师
2026-01-08 09:04:19     打赏
9楼

这个还是蛮简单的,之前参加那个立创的电流电压表活动,他们做的那个是直接IO扫描的


高工
2026-01-08 23:24:26     打赏
10楼

看到这,忽然想到刚毕业时那会就是玩这个。不过用的是国产的驱动数码管的芯片,功耗贼高。


共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]