Stm32 103F4R6,用GPIO_SetBits和ResetBitS用switch循环 实现0~9的循环 用的是GPIOC引脚
时间: 2024-10-25 19:10:51 浏览: 23
STM32 103F4R6是一款基于ARM Cortex-M4内核的微控制器,它包含GPIOC端口,可以用于数字输入/输出操作。如果你想要通过GPIO_SetBits和GPIO_ResetBits函数以及switch循环来实现0到9的LED数码管显示,你可以按照以下步骤:
首先,你需要配置GPIOC的Pin映射到LED数码管的段驱动(例如,PA7-GPB5对应共阳极数码管的abcdefg)。确保相应的GPIO配置为推挽输出模式(GPIO_MODE_OUTPUT_PP)。
```c
#include "stm32f1xx_hal.h"
// 定义GPIOC引脚
GPIO_TypeDef *GPIOC = GPIOC;
GPIO_PIN_TypeDef GPIO_Pin[] = {GPIO_Pin_7, GPIO_Pin_6, GPIO_Pin_5, GPIO_Pin_4, GPIO_Pin_3, GPIO_Pin_2, GPIO_Pin_1, GPIO_Pin_0}; // LED数码管的段
void init_GPIOC(void) {
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_Pin[0] | GPIO_Pin[1] | ... | GPIO_Pin[7]; // 组合所有LED段
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 非上拉/下拉
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
// 切换LED显示数值
void display_number(uint8_t number) {
uint16_t mask = 1 << (number % 8); // 计算对应的位掩码
// 如果当前数字显示是0,清零该位置
if (number == 0) {
GPIO_ResetBits(GPIOC, mask);
}
// 否则设置该位置
else {
GPIO_SetBits(GPIOC, mask);
}
}
int main(void) {
init_GPIOC();
while (1) {
for (uint8_t i = 0; i <= 9; i++) {
display_number(i);
// 等待一段时间让每个数字显示出来
delay_ms(200);
}
}
return 0;
}
```
阅读全文