stm32 定时器刷新数码管显示程序
时间: 2023-08-04 22:02:44 浏览: 102
以下是一个基于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;
int refresh = 0;
while(1)
{
if(TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) == SET)
{
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
refresh++;
if(refresh > 500)
{
refresh = 0;
num++;
if(num > 3)
{
num = 0;
}
Display(num);
}
}
}
}
```
在上述代码中,我们使用了STM32的定时器TIM2来控制数码管的显示。与前面不同的是,我们在while循环中设置了一个refresh计数器,每次定时器溢出就将其加1。当refresh计数器达到500时,即500ms后,我们就将数码管上的数字加1,如果超过了3,就将数字归零重新开始,并且将refresh计数器清零,重新开始计数。最后,我们使用Display函数来控制数码管上的LED灯的亮灭。
阅读全文