【GD32L233C-START评测】串行数码管显示模块的驱动
[复制链接]
串行数码管显示模块是以MAX7219芯片来控制8位的7段数码管,它在芯片内部集成了一个B型的BCD码编码多路扫描回路、段字驱动器。而且还含有一个8*8的静态RAM来存储显示数据,且有一个外部寄存器用来设置各LED的段电流。它也同样允许用户对每个数据选择编码或是不编码。在显示过程中,它没有抖动和闪烁现象,支持级联方式进行显示位数的扩展。
该模块的外观如图1所示,在使用时只需3个GPIO口即可驱动其显示。
图1 8位串行数码管模块
要使用GD32L233C来驱动串行数码管模块,其首要要确定开发板与显示模块的连接关系,其引脚使用情况如下:
DIN--- PB10
CLK--- PB11
CS --- PB13
其中:DIN为串行数据输入端、CLK为串行时钟输入端、CS为片选引脚。
图2 电路连接
由于是以GPIO口来模拟串行数据发送,其串行数据发送的函数为:
void Write_Max7219_byte(char DATA)
{
char i;
SMG_CS_Clr();
for(i=8;i>=1;i--)
{
SMG_CLK_Clr();
if(DATA&0x80)
{
SMG_DIN_Set();
}
else
{
SMG_DIN_Clr();
}
DATA=DATA<<1;
SMG_CLK_Set();
}
}
向寄存器写入数据的函数为:
void Write_Max7219(char address,char dat)
{
SMG_CS_Clr();
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
SMG_CS_Set();
}
该模块的初始化函数为:
void Init_MAX7219(void)
{
Write_Max7219(0x09, 0xff);
Write_Max7219(0x0a, 0x03);
Write_Max7219(0x0b, 0x07);
Write_Max7219(0x0c, 0x01);
Write_Max7219(0x0f, 0x01);
}
利用串行数码管显示模块实现计时器模拟显示的主程序为:
int main(void)
{
int i;
systick_config();
gd_eval_smg_init();
Init_MAX7219();
delay_1ms(2000);
Write_Max7219(0x0f,0x00);
i=0;
while(1)
{
Write_Max7219(1,i%10);
Write_Max7219(2,i/10%10);
Write_Max7219(3,i/100%10);
Write_Max7219(4,i/1000%100);
Write_Max7219(5,0x0f);
Write_Max7219(6,0x0f);
Write_Max7219(7,0x0f);
Write_Max7219(8,0x0f);
delay_1ms(500);
i++;
}
}
经程序的编译和下载,其运行效果如图3至图5所示。
图3 清零状态
图4 开始计数
图5 计数过程中
相较于常规的数码管显示,该显示方式具有占用引脚资源少,显示亮度高的特点,故适用于工业控制方面。
|