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

图1 外观及功能配置
为了使其具有显示功能,这里为其配置了一个以串行方式工作的数码管模块。
该模块是以MAX7219芯片进行控制,它是一种集成化的串行输入/输出共阴极显示驱动器,它承担着连接微处理器与8位七段数码管的作用,当然它也可以点阵式显示器件。
MAX7219芯片配有B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存
储数据。且有一个外部寄存器用来设置各个LED的段电流。
此外,MAX7219还允许用户对每一个数据选择编码或者不编码工作方式。

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

图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所示。

图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所示。

图5显示效果
由此可见,其显示的内容还仅限于数字0~9之间。
那么如何才能使其显示出小数点呢?
这就要借助非编码方式的帮助,此时MAX7219的初始化程序应改为:
void Init_MAX7219P(void)
{
Write_Max7219(0x0b,0x07);
Write_Max7219(0x0c,0x01);
Write_Max7219(0x0f,0x00);
}为此,对要显示的数符需自行编码来显示。此时笔段与各数位间的对应关系如图6所示。

图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);
}
图7 显示效果
除此之外,在非译码方式下还能显示些啥内容呢?
其实它所能显示的内容与笔段式液晶屏所显示的内容使十分相近的,对于26个英文字符它可以显示绝大部分的内容,其显示内容见图8所示。
经程序的编译和下载,其执行效果如图7所示。

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

