stm32数码管秒表
时间: 2023-11-20 19:59:04 浏览: 137
以下是基于STM32实现数码管秒表的步骤:
1. 配置GPIO口和定时器
首先需要配置GPIO口和定时器,将数码管的8个引脚分别连接到STM32的PC0~PC7引脚上,并将定时器TIM3的时钟源设置为内部时钟,并将预分频器设置为7199,这样定时器的时钟频率就为10kHz,计数器自动加1的时间间隔为0.1ms。
2. 编写中断服务函数
在定时器计数器每次自动加1时,会产生一个更新事件,可以通过编写中断服务函数来处理这个事件。在中断服务函数中,将计数器自动加1的次数累加到一个变量中,当累加到10000时,说明已经过去了1秒,此时将变量清零,并将秒表的秒数加1。
3. 显示秒表的时间
将秒表的秒数转换为数码管需要显示的数字,并将这些数字依次输出到数码管的8个引脚上,即可实现数码管秒表的功能。
以下是基于STM32实现数码管秒表的代码:
```c
#include "stm32f10x.h"
int count = 0; // 计数器自动加1的次数
int second = 0; // 秒表的秒数
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = 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_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void TIM3_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 9999;
TIM_TimeBaseStructure.TIM_Prescaler = 7199;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
void TIM3_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
count++;
if (count == 10000)
{
count = 0;
second++;
}
}
}
void Display(int num)
{
int i;
int digit[8];
for (i = 0; i < 8; i++)
{
digit[i] = num % 10;
num /= 10;
}
for (i = 0; i < 8; i++)
{
GPIO_WriteBit(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, Bit_RESET);
GPIO_WriteBit(GPIOC, 1 << i, Bit_SET);
GPIO_WriteBit(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, digit[i]);
delay_ms(1);
}
}
int main(void)
{
GPIO_Configuration();
TIM3_Configuration();
while (1)
{
Display(second);
}
}
void delay_ms(int ms)
{
int i, j;
for (i = 0; i < ms; i++)
{
for (j = 0; j < 7200; j++);
}
}
```
阅读全文