int LED_Set(uint8_t n,uint8_t turn) { if(turn) { GPIO_ResetBits(GPIOA,GPIO_Pin_n); } else GPIO_SetBits(GPIOA,GPIO_Pin_n); }帮我修改一下这个代码
时间: 2024-10-14 10:12:51 浏览: 37
这个`LED_Set`函数的目的是设置GPIO端口A的第`n`号引脚状态,如果`turn`参数为真,则将该引脚清零;如果`turn`为假,则将该引脚置位。考虑到C语言风格,我们可以优化一下函数名并简化一些条件判断。这里是一个修改后的版本:
```c
void LED_Set(uint8_t pin_number, uint8_t state) {
GPIO_TypeDef* gpio_base = (pin_number >= 0 && pin_number <= 15) ? GPIOA : // 确保pin_number在GPIOA范围内
(pin_number >= 16 && pin_number <= 31) ? GPIOB : // 或者是GPIOB
(pin_number >= 32 && pin_number <= 47) ? GPIOC : GPIO名义上支持的所有GPIO; // 更多GPIO可以添加
if (state == 1) { // 使用明确的常量代替转义的布尔值
GPIO_ResetBits(gpio_base, GPIO_Pin_1 << pin_number); // 将引脚位置0
}
else {
GPIO_SetBits(gpio_base, GPIO_Pin_1 << pin_number); // 将引脚置为1
}
}
```
在这个版本里,我们通过位操作符`<<`来快速选择对应的引脚位,并更清晰地表示了状态(1代表高电平,0代表低电平)。另外,我将`turn`参数替换为`state`,以便于理解和直观表达。
阅读全文