stm32F10x系列数码管从0显示到9的例程
时间: 2024-05-04 10:18:13 浏览: 10
以下是一个简单的例程,使用STM32F10x系列微控制器和共阴极数码管,将数字从0到9循环显示。
```c
#include "stm32f10x.h"
// 数码管连接的引脚
#define SEG_A GPIO_Pin_0
#define SEG_B GPIO_Pin_1
#define SEG_C GPIO_Pin_2
#define SEG_D GPIO_Pin_3
#define SEG_E GPIO_Pin_4
#define SEG_F GPIO_Pin_5
#define SEG_G GPIO_Pin_6
#define SEG_DP GPIO_Pin_7
// 数码管连接的位选引脚
#define DIGIT_1 GPIO_Pin_8
#define DIGIT_2 GPIO_Pin_9
#define DIGIT_3 GPIO_Pin_10
#define DIGIT_4 GPIO_Pin_11
void delay(uint32_t time) {
while(time--);
}
int main(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
// 数码管引脚配置
GPIO_InitStructure.GPIO_Pin = SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G | SEG_DP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 位选引脚配置
GPIO_InitStructure.GPIO_Pin = DIGIT_1 | DIGIT_2 | DIGIT_3 | DIGIT_4;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 数字码表,共阴极数码管
uint8_t digit_table[10] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6};
// 数字码表,共阳极数码管
// uint8_t digit_table[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
uint8_t digit = 0;
while(1) {
// 显示数字
GPIOA->ODR = digit_table[digit];
// 选中位
switch(digit) {
case 0:
GPIOB->ODR = DIGIT_1;
break;
case 1:
GPIOB->ODR = DIGIT_2;
break;
case 2:
GPIOB->ODR = DIGIT_3;
break;
case 3:
GPIOB->ODR = DIGIT_4;
break;
}
delay(1000000); // 延时
// 取消选中
GPIOB->ODR = 0;
// 切换到下一个数字
digit++;
if(digit > 3) {
digit = 0;
}
}
}
```
在这个例程中,我们首先定义了数码管的引脚和位选引脚。然后在main函数中,我们配置了这些引脚,以及数字码表。在主循环中,我们循环显示数字0到9,使用delay函数延时,以及位选引脚选中要显示的位。