stm32f103数码管动态显示驱动代码
时间: 2023-08-28 15:07:53 浏览: 147
STM32F103单片机核心板实验例程源码- 数码管显示实验.zip
以下是一个基本的 STM32F103 数码管动态显示驱动代码:
```c
#include "stm32f10x.h"
int main(void)
{
uint8_t digit[4] = {0}; // 数码管的4位数码值
uint8_t digit_pos = 0; // 当前数码管位数
// 使能 GPIO 时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
// 配置数码管位选引脚为推挽输出
GPIOA->CRL &= ~(GPIO_CRL_MODE0 | GPIO_CRL_CNF0);
GPIOA->CRL |= GPIO_CRL_MODE0_0;
// 配置数码管段选引脚为推挽输出
GPIOA->CRL &= ~(GPIO_CRL_MODE1 | GPIO_CRL_CNF1);
GPIOA->CRL |= GPIO_CRL_MODE1_0;
// 无限循环
while (1)
{
// 设置当前数码管段选
switch (digit_pos)
{
case 0:
GPIOA->ODR = (GPIOA->ODR & ~GPIO_ODR_ODR1) | (digit[0] << 1);
break;
case 1:
GPIOA->ODR = (GPIOA->ODR & ~GPIO_ODR_ODR1) | (digit[1] << 1);
break;
case 2:
GPIOA->ODR = (GPIOA->ODR & ~GPIO_ODR_ODR1) | (digit[2] << 1);
break;
case 3:
GPIOA->ODR = (GPIOA->ODR & ~GPIO_ODR_ODR1) | (digit[3] << 1);
break;
}
// 切换到下一个数码管位数
digit_pos = (digit_pos + 1) % 4;
// 延时一段时间,控制数码管显示刷新速率
for (int i = 0; i < 5000; i++);
}
}
```
以上代码实现了一个简单的数码管动态显示,具体实现根据硬件电路连接和数码管型号可能会有所不同。
阅读全文