stm32f103数码管动态显示4位数,代码
时间: 2024-11-27 13:13:54 浏览: 45
3.0-STM32F103-驱动数码管(595)显示时间.rar_74hc595_couldxaj_stm32f103 数码管_
5星 · 资源好评率100%
在STM32F103微控制器上实现四位数字数码管动态显示,通常需要以下几个步骤:
1. **配置GPIO**:
首先,你需要配置一组GPIO作为数码管的数据线(例如PA8-PB11),并设置它们为推挽输出模式。
```c
// GPIO初始化
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_Init(GPIOA, &GPIO_InitStructure);
```
2. **配置定时器中断**:
可以使用定时器控制数据的交替输出,以便轮流点亮每个段码。比如使用TIM2定时器的溢出中断。
```c
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseStructure.TIM_Period = (uint16_t)(10000 / 4); // 设置周期,假设1秒更新4次
TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t)((SystemCoreClock / 1000000) - 1);
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_COUNTERMODE_UP;
HAL_TIM_TimeBaseInit(&htim2, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OutputState = ENABLE;
TIM_OCInitStructure.TIM_Pin = GPIO_PIN_8; // 数据线8对应位选信号
HAL_TIM_OCInit(&htim2, &TIM_OCInitStructure);
HAL_NVIC_EnableIRQ(TIM2_IRQn); // 开启定时器中断
```
3. **编写显示函数**:
创建一个函数,用于发送四位数到数码管,并通过定时中断交替改变各段码。
```c
void DisplayNumber(uint8_t num)
{
static uint8_t segment[4] = {0x3F, 0x06, 0x5B, 0x4F}; // 数码管段码表
for (int i = 0; i < 4; i++) {
GPIO_SetBits(GPIOA, (segment[num % 10] >> i) & 0b00000001);
num /= 10;
}
}
```
4. **定时中断服务程序**:
这里处理计时器溢出事件,每次触发都会调用`DisplayNumber`函数。
```c
void TIM2_IRQHandler(void)
{
if (__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_UPDATE) != RESET) {
__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE);
DisplayNumber(current_number++);
if (current_number > 9) current_number = 0; // 循环显示
}
}
// ...其他必要的全局变量和初始化...
```
阅读全文