hc32l13x数码管点亮示例
时间: 2023-07-07 20:08:15 浏览: 54
以下是基于HC32L13X芯片的数码管点亮示例程序:
```c
#include "hc32l13x.h"
// 数码管对应的IO口定义
#define SEG_A (GPIO_PIN_0)
#define SEG_B (GPIO_PIN_1)
#define SEG_C (GPIO_PIN_2)
#define SEG_D (GPIO_PIN_3)
#define SEG_E (GPIO_PIN_4)
#define SEG_F (GPIO_PIN_5)
#define SEG_G (GPIO_PIN_6)
#define SEG_DP (GPIO_PIN_7)
// 数码管共阴极接法
#define SEG_ON (0)
#define SEG_OFF (1)
// 数码管显示的数字定义
const uint8_t SEG_NUMS[10] = {
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // 0
SEG_B | SEG_C, // 1
SEG_A | SEG_B | SEG_D | SEG_E | SEG_G, // 2
SEG_A | SEG_B | SEG_C | SEG_D | SEG_G, // 3
SEG_B | SEG_C | SEG_F | SEG_G, // 4
SEG_A | SEG_C | SEG_D | SEG_F | SEG_G, // 5
SEG_A | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G, // 6
SEG_A | SEG_B | SEG_C, // 7
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G, // 8
SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G, // 9
};
int main(void)
{
// 使能GPIO时钟
CLK_EnableModuleClock(Gpio);
// 配置数码管IO口为输出模式
GPIO_SetFunc(GPIO_PORT_0, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7, GPIO_FUNC_0_GPIO);
GPIO_SetOutput(GPIO_PORT_0, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
while (1) {
// 循环显示0~9的数字
for (uint8_t i = 0; i < 10; i++) {
// 数码管位选控制:共阴极需要将位选端口拉低
GPIO_ResetPins(GPIO_PORT_0, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
// 数码管段选控制:共阴极需要将相应的段选端口拉低
GPIO_WritePins(GPIO_PORT_0, SEG_NUMS[i], SEG_ON);
// 延时一段时间
for (volatile uint32_t j = 0; j < 100000; j++);
// 数码管段选控制:共阴极需要将相应的段选端口拉高
GPIO_WritePins(GPIO_PORT_0, SEG_NUMS[i], SEG_OFF);
// 数码管位选控制:共阴极需要将位选端口拉高
switch (i) {
case 0:
GPIO_SetPins(GPIO_PORT_0, GPIO_PIN_0);
break;
case 1:
GPIO_SetPins(GPIO_PORT_0, GPIO_PIN_1);
break;
case 2:
GPIO_SetPins(GPIO_PORT_0, GPIO_PIN_2);
break;
case 3:
GPIO_SetPins(GPIO_PORT_0, GPIO_PIN_3);
break;
default:
break;
}
}
}
}
```
上述程序中我们定义了数码管对应的IO口、共阴极接法的常量,以及数码管显示的数字数组。程序中的`CLK_EnableModuleClock(Gpio)`函数调用用于使能GPIO时钟,`GPIO_SetFunc()`和`GPIO_SetOutput()`函数则用于配置数码管IO口为输出模式。在`main()`函数中,我们使用一个循环来显示0~9的数字,每次循环中先控制数码管位选端口,再控制数码管段选端口,实现数码管的点亮。