普中STM32-PZ6806L开发板(HAL库函数实现-7段共阳数码管数字显示)

简介

通过操作GPIO输出电平实现驱动单个共阳数码管 0 ~ F的显示。

电路原理图

数码管电路原理图
普中STM32-PZ6806L开发板(HAL库函数实现-7段共阳数码管数字显示)_第1张图片
数码管与主芯片电路原理图
普中STM32-PZ6806L开发板(HAL库函数实现-7段共阳数码管数字显示)_第2张图片

其他知识

1. 由原理图可知, 共阳极已接VCC, 所以只需要控制GPIO输出低电平就可以点亮7 + . 的数码管了.
2. 驱动管与主芯片引脚对应关系
	A -> PC0、B->PC1 .... DP->PC7, 下图是驱动的每一段示意图

普中STM32-PZ6806L开发板(HAL库函数实现-7段共阳数码管数字显示)_第3张图片
3. 共阳数码管段码
通过下面的表我们能看出来从0 ~ F显示需要点亮的数码管,共阳数码管, 低电平点亮, 0就是点亮,1是熄灭, 也看出来为什么要有些字母小写, 因为跟数字段码重复了, 例如b跟d的大写字母段码与8和0段码重复

A B C D E F G DP HEX
0 0 0 0 0 0 0 1 1 0xC0
1 1 0 0 1 1 1 1 1 0xF9
2 0 0 1 0 0 1 0 1 0xA4
3 0 0 0 0 1 1 0 1 0xB0
4 1 0 0 1 1 0 0 1 0x99
5 0 1 0 0 1 0 0 1 0x92
6 0 1 0 0 0 0 0 1 0x82
7 0 0 0 1 1 1 1 1 0xF8
8 0 0 0 0 0 0 0 1 0x80
9 0 0 0 1 1 0 0 1 0x98
A 0 0 0 1 0 0 0 1 0x88
b 1 1 0 0 0 0 0 1 0x83
C 0 1 1 0 0 0 1 1 0xC6
d 1 0 0 0 0 1 0 1 0xA1
E 0 1 1 0 0 0 0 1 0x86
F 0 1 1 1 0 0 0 1 0x8E

实现步骤

创建项目

与上篇讲到的8个LED的电路一致, 初始化参考 普中STM32-PZ6806L开发板(HAL库函数实现-批量操作GPIO引脚实现跑马灯)

添加用户代码

segment_display.c

#define SEG_PORT GPIOC

#define SEG_MAX_NUMBER 15  // 显示最大数字
#define SEG_MANY_NUMBER_COUNT 16 // 显示数字个数
#define SEG_ALL_SEG_CODE 0xFF // 全段选择的码
uint8_t seg_code[SEG_MANY_NUMBER_COUNT] = 
										{ 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
											0x80, 0x98, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E };

void Seg_ClearDisplay()
{
	HAL_GPIO_WritePin(SEG_PORT, SEG_ALL_SEG_CODE, GPIO_PIN_SET);
}
											
void Seg_NumberDisplay(uint16_t num)
{
	if (num > SEG_MAX_NUMBER)
	{
		return;
	}
	Seg_ClearDisplay();
	
	HAL_GPIO_WritePin(SEG_PORT, ~seg_code[num], GPIO_PIN_RESET);
}

void Seg_DoForeachNumberAction(uint32_t delay_ms, uint16_t time)
{
	int i = 0;
	while (time--)
	{
		for (i = 0; i < SEG_MANY_NUMBER_COUNT; ++i)
		{
			Seg_NumberDisplay(i);
			HAL_Delay(delay_ms);
		}
	}
}

main.c

int main()
{
...
while(1)
{
	Seg_DoForeachNumberAction(1000, 1);
}
...
}

代码解读

HAL_GPIO_WritePin(SEG_PORT, ~seg_code[num], GPIO_PIN_RESET);
GPIO_PIN_RESET : 低电平点亮, GPIO_PIN_RESET就是点亮
~seg_code[num] : 段码是按照引脚输出进行取值的, 而现在是选择引脚, 所以与逻辑刚好相反, 所以要按位取反

共赏

普中STM32-PZ6806L开发板(HAL库函数实现-7段共阳数码管数字显示)

代码

不需要下载, 基本代码上面都提供了

参考

普中STM32-PZ6806L开发板(HAL库函数实现-批量操作GPIO引脚实现跑马灯)

你可能感兴趣的:(普中STM32-PZ6806L,stm32,嵌入式硬件,单片机)