摘要
本文章主要基于国信长天蓝桥杯嵌入式开发板及其扩展板,介绍了扩展板上数码管的使用方法。
硬件原理图
通过上图可以看出,三个数码管分别由三个75LS595锁存器驱动,采用共阴极的方式连接。
75LS595的三个控制引脚RCLK
,SCK
,SER
与主控板连接,连接方式如下:
PA1
<-----> SER
PA2
<-----> RCLK
PA3
<-----> SCK
数码管使用步骤
① 复制数码管驱动代码
复制下面的代码,粘贴到main.c
文件 main()
函数上面空白处
unsigned char LEDS[17] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00};
static void LEDS_Init(void) //初始化数码管
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化PA1,2,3脚为输入模式
}
static void LEDS_Display(int data) //数码管显示数字
{
int i,j;
unsigned char tem = 0;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, 0);
for(j = 0; j < 3; j++)
{
tem = LEDS[data%10];
if((data == 0) && (j > 0))tem = LEDS[16];
data/=10;
for(i = 0; i < 8; i++)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, 0);
if(tem & 0x80)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, 1);
}
else
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, 0);
}
tem = tem << 1;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, 1);
}
}
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, 1);
}
② 初始化数码管并显示数字
如下图所示,在main()
函数中LCD_Init();
下面调用 LEDS_Init();
在while(1)里面直接调用 LEDS_Display();
即可在数码管上显示数字,注意最多只能显示三位数。
作者:我是鹏老师