【AT32F421测评】+数码管模块的显示驱动
[复制链接]
本帖最后由 jinglixixi 于 2021-4-30 08:42 编辑
上次介绍了并行传输的数码管显示模块,这次介绍另一种以串行方式传输数据的数码管显示模块,见图1所示。
该模块除电源引脚外,还有3个引脚,分别是DIN数据引脚、CLK时钟引脚及CS选控引脚。
图1 数码管模块
该数码管的显示效果如图2所示,若修改引脚连接关系,则可直接将数码管模块查到Arduino接口来使用。
图2 数码管模块
相关程序如下:
#include <stdio.h>
#include "at32f4xx.h"
#include "at32_board.h"
#define SMG_CLK_Set() GPIOB->BSRE = GPIO_Pins_9
#define SMG_CLK_Clr() GPIOB->BRE = GPIO_Pins_9
#define SMG_DIN_Set() GPIOB->BSRE = GPIO_Pins_8
#define SMG_DIN_Clr() GPIOB->BRE = GPIO_Pins_8
#define SMG_CS_Set() GPIOB->BSRE = GPIO_Pins_10
#define SMG_CS_Clr() GPIOB->BRE = GPIO_Pins_10
void AT_eval_smg_init(void)
{
GPIO_InitType GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_GPIOB, ENABLE);
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pins = GPIO_Pins_10|GPIO_Pins_8|GPIO_Pins_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OutType = GPIO_OutType_PP;
GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
SMG_CLK_Set();
SMG_DIN_Set();
SMG_CS_Set();
}
void Write_Max7219_byte(uint8_t DATA)
{
uint8_t 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 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)
{
AT32_Board_Init();
AT_eval_smg_init();
Init_MAX7219();
Delay_ms(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);
for(;;)
{
AT32_LEDn_Toggle(LED2);
Delay_ms(200);
AT32_LEDn_Toggle(LED3);
Delay_ms(200);
AT32_LEDn_Toggle(LED4);
Delay_ms(200);
}
}
图3 数码管模块
实现图3效果的引脚连接及高低电平输出设置如下:
DIN--- PA5
CS --- PA6
CLK---PA7
#define SMG_CLK_Set() GPIOA->BSRE = GPIO_Pins_7
#define SMG_CLK_Clr() GPIOA->BRE = GPIO_Pins_7
#define SMG_DIN_Set() GPIOA->BSRE = GPIO_Pins_5
#define SMG_DIN_Clr() GPIOA->BRE = GPIO_Pins_5
#define SMG_CS_Set() GPIOA->BSRE = GPIO_Pins_6
#define SMG_CS_Clr() GPIOA->BRE = GPIO_Pins_6
|