stm32 定时器数码管显示程序
时间: 2023-08-03 15:09:38 浏览: 96
定时器实现码表(数码管显示)
5星 · 资源好评率100%
以下是一个基于STM32定时器和数码管的简单显示程序,你可以根据自己的需求进行修改和优化。
```c
#include "stm32f10x.h"
#include "delay.h"
#define LED0 GPIO_Pin_8
#define LED1 GPIO_Pin_9
#define LED2 GPIO_Pin_10
#define LED3 GPIO_Pin_11
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED0 | LED1 | LED2 | LED3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_InitStructure.TIM_Period = 1000;
TIM_InitStructure.TIM_Prescaler = 7199;
TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_InitStructure);
TIM_Cmd(TIM2, ENABLE);
}
void Display(int num)
{
GPIO_SetBits(GPIOB, LED0 | LED1 | LED2 | LED3);
switch(num)
{
case 0:
GPIO_ResetBits(GPIOB, LED0);
break;
case 1:
GPIO_ResetBits(GPIOB, LED1);
break;
case 2:
GPIO_ResetBits(GPIOB, LED2);
break;
case 3:
GPIO_ResetBits(GPIOB, LED3);
break;
default:
break;
}
}
int main(void)
{
GPIO_Configuration();
TIM_Configuration();
int num = 0;
while(1)
{
if(TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) == SET)
{
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
num++;
if(num > 3)
{
num = 0;
}
Display(num);
}
}
}
```
在上述代码中,我们使用了STM32的定时器TIM2来控制数码管的显示。首先,我们需要在GPIO中配置4个引脚来控制数码管的4个LED灯。然后,我们使用TIM_TimeBaseInit函数来初始化定时器,设置定时器的计数周期为1000,设置预分频值为7199,这样可以使得定时器的计数频率为1kHz。在while循环中,我们使用了定时器的更新中断来控制数码管的显示。每次定时器溢出,我们就将数码管上的数字加1,如果超过了3,就将数字归零重新开始。最后,我们使用Display函数来控制数码管上的LED灯的亮灭。
阅读全文