【GD32L233C-START评测】串行点阵显示模块的驱动
[复制链接]
串行点阵模块是一种以MAX7219为控制芯片的点阵显示模块,在单级使用的情况下,一片MAX7219可控制一块8*8点阵的显示块,若采用级联的方式,则可驱动多个点阵块以实现多个字符的同时显示,完成点阵信息屏的显示效果。
该模块的电路原理图如图1所示,模块的外观见图2所示。

图1 电路原理图
图2 模块外观
点阵模块与开发板的连接关系为:
CLK -- PB10
DIN --PB11
CS -- PB13
由于是以GPIO口来进行数据的传送,故对引脚输出高低电平的语句定义为:
#define SMG_CLK_Set() gpio_bit_set(GPIOB, GPIO_PIN_10)
#define SMG_CLK_Clr() gpio_bit_reset(GPIOB, GPIO_PIN_10)
#define SMG_DIN_Set() gpio_bit_set(GPIOB, GPIO_PIN_11)
#define SMG_DIN_Clr() gpio_bit_reset(GPIOB, GPIO_PIN_11)
#define SMG_CS_Set() gpio_bit_set(GPIOB, GPIO_PIN_13)
#define SMG_CS_Clr() gpio_bit_reset(GPIOB, GPIO_PIN_13)
配置相关引脚制作输出口使用的函数为:
- void gd_eval_smg_init(void)
- {
- rcu_periph_clock_enable(RCU_GPIOB);
- gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_13);
- gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_13);
- SMG_CLK_Set();
- SMG_DIN_Set();
- SMG_CS_Set();
- }
MAX7219的初始化函数为:
- void Init_MAX7219(void)
- {
- Write_Max7219(0x0b, 0x07);
- Write_Max7219(0x0c, 0x01);
- Write_Max7219(0x0f, 0x00);
- }
为显示所配置的字模被存放在数组中,其结构为:
unsigned char disp[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
...
};
实现图2所示显示效果的主程序为:
- int main(void)
- {
- uint16_t i,j;
- gd_eval_smg_init();
- Init_MAX7219();
- delay_1ms(2000);
- Write_Max7219(0x0f,0x00);
- while(1)
- {
- for(j=0;j<38;j++)
- {
- for(i=1;i<9;i++)
- Write_Max7219(i,disp[j][i-1]);
- SMG_CS_Clr();
- delay_1ms(500);
- SMG_CS_Set();
- delay_1ms(500);
- }
- }
- }
其中,内层的循环是为了完成单个字符的显示,而外层的循环则是负责将字符库中的内容遍寻显示一轮。
在显示过程中,每显示完一个字符,板上的LED就切换一次显示状态。
经程序的编译与下载,其显示效果图2所示。
图2 显示效果
|