stm32f103c8t6数码管代码
时间: 2023-07-28 21:08:50 浏览: 88
以下是一个简单的示例代码,用于在STM32F103C8T6上控制4位共阳数码管显示数字0-9循环计数:
```c
#include "stm32f10x.h"
// 数码管共阳极引脚连接到GPIOC的0-3引脚
#define SEGMENT_A GPIO_Pin_0
#define SEGMENT_B GPIO_Pin_1
#define SEGMENT_C GPIO_Pin_2
#define SEGMENT_D GPIO_Pin_3
// 数码管位选引脚连接到GPIOC的4-7引脚
#define DIGIT_1 GPIO_Pin_4
#define DIGIT_2 GPIO_Pin_5
#define DIGIT_3 GPIO_Pin_6
#define DIGIT_4 GPIO_Pin_7
// 数码管显示的数字0-9的编码
const uint8_t digitCode[10] = {
SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D, // 0
SEGMENT_B | SEGMENT_C, // 1
SEGMENT_A | SEGMENT_B | SEGMENT_G | SEGMENT_E | SEGMENT_D, // 2
// ...
};
int main(void) {
// 初始化GPIOC和相关引脚为输出模式
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D |
DIGIT_1 | DIGIT_2 | DIGIT_3 | DIGIT_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
while (1) {
for (int i = 0; i < 10; i++) {
// 数码管位选,只有一个数码管点亮,其余数码管熄灭
GPIO_Write(GPIOC, DIGIT_1 | DIGIT_2 | DIGIT_3 | DIGIT_4);
switch (i) {
case 0:
GPIO_ResetBits(GPIOC, DIGIT_1);
break;
case 1:
GPIO_ResetBits(GPIOC, DIGIT_2);
break;
case 2:
GPIO_ResetBits(GPIOC, DIGIT_3);
break;
case 3:
GPIO_ResetBits(GPIOC, DIGIT_4);
break;
default:
break;
}
// 数码管段选,根据数字编码点亮对应的LED
GPIO_Write(GPIOC, digitCode[i]);
// 延时一段时间,控制数码管刷新速度
delay_ms(1000);
}
}
}
```
请注意,以上代码仅为示例,具体的引脚连接和编码方式可能会因为不同的硬件设计而有所变化。在实际应用中,需要根据具体的数码管和硬件连接进行相应的修改。
阅读全文