单片机数码管显示两位数字程序
时间: 2024-03-09 12:49:36 浏览: 75
51单片机6个数码管轮流显示数字程序.zip
好的,以下是一个简单的单片机数码管显示两位数字的程序,以 STM32 为例:
```c
#include "stm32f1xx_hal.h"
// 数码管引脚定义
#define SEGMENT_A_Pin GPIO_PIN_0
#define SEGMENT_A_GPIO_Port GPIOA
#define SEGMENT_B_Pin GPIO_PIN_1
#define SEGMENT_B_GPIO_Port GPIOA
#define SEGMENT_C_Pin GPIO_PIN_2
#define SEGMENT_C_GPIO_Port GPIOA
#define SEGMENT_D_Pin GPIO_PIN_3
#define SEGMENT_D_GPIO_Port GPIOA
#define SEGMENT_E_Pin GPIO_PIN_4
#define SEGMENT_E_GPIO_Port GPIOA
#define SEGMENT_F_Pin GPIO_PIN_5
#define SEGMENT_F_GPIO_Port GPIOA
#define SEGMENT_G_Pin GPIO_PIN_6
#define SEGMENT_G_GPIO_Port GPIOA
#define DIGIT_1_Pin GPIO_PIN_7
#define DIGIT_1_GPIO_Port GPIOA
#define DIGIT_2_Pin GPIO_PIN_8
#define DIGIT_2_GPIO_Port GPIOA
// 数码管数字对应的编码表
const uint8_t digit_table[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
// 显示指定的两位数字
void display_digits(uint8_t digit1, uint8_t digit2)
{
// 数码管1显示第一位数字
HAL_GPIO_WritePin(DIGIT_1_GPIO_Port, DIGIT_1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(DIGIT_2_GPIO_Port, DIGIT_2_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePort(SEGMENT_A_GPIO_Port, SEGMENT_A_Pin | SEGMENT_B_Pin | SEGMENT_C_Pin | SEGMENT_D_Pin | SEGMENT_E_Pin | SEGMENT_F_Pin | SEGMENT_G_Pin, digit_table[digit1]);
HAL_Delay(5);
// 数码管2显示第二位数字
HAL_GPIO_WritePin(DIGIT_1_GPIO_Port, DIGIT_1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(DIGIT_2_GPIO_Port, DIGIT_2_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePort(SEGMENT_A_GPIO_Port, SEGMENT_A_Pin | SEGMENT_B_Pin | SEGMENT_C_Pin | SEGMENT_D_Pin | SEGMENT_E_Pin | SEGMENT_F_Pin | SEGMENT_G_Pin, digit_table[digit2]);
HAL_Delay(5);
}
int main(void)
{
// 初始化 HAL 库
HAL_Init();
// 配置数码管引脚为输出模式
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = SEGMENT_A_Pin | SEGMENT_B_Pin | SEGMENT_C_Pin | SEGMENT_D_Pin | SEGMENT_E_Pin | SEGMENT_F_Pin | SEGMENT_G_Pin | DIGIT_1_Pin | DIGIT_2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
while (1)
{
// 显示数字 12
display_digits(1, 2);
}
}
```
该程序使用了延时函数 `HAL_Delay()` 来延时显示每个数字,实际应用中可能需要使用定时器或其他方法来实现更精确的控制。另外,具体的引脚定义和编码表可能需要根据具体的硬件平台进行修改。
阅读全文