写一段c代码,逻辑上有两个状态on和off,管理多个GPIO的开关状态
时间: 2024-03-27 11:35:52 浏览: 46
好的,以下是一段管理多个GPIO开关状态的C代码:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义GPIO开关状态的枚举类型
typedef enum {
OFF = 0,
ON = 1
} GpioState;
// 定义GPIO开关的结构体
typedef struct {
int id; // GPIO编号
GpioState state; // GPIO状态
} Gpio;
// 初始化所有GPIO开关状态为OFF
Gpio gpios[] = {
{1, OFF},
{2, OFF},
{3, OFF},
{4, OFF}
};
// 根据GPIO编号获取对应的结构体
Gpio *get_gpio(int id) {
for (int i = 0; i < sizeof(gpios) / sizeof(Gpio); i++) {
if (gpios[i].id == id) {
return &gpios[i];
}
}
return NULL;
}
// 设置GPIO状态为ON
void set_gpio_on(int id) {
Gpio *gpio = get_gpio(id);
if (gpio != NULL) {
gpio->state = ON;
printf("GPIO %d turned on.\n", id);
}
}
// 设置GPIO状态为OFF
void set_gpio_off(int id) {
Gpio *gpio = get_gpio(id);
if (gpio != NULL) {
gpio->state = OFF;
printf("GPIO %d turned off.\n", id);
}
}
int main() {
// 设置GPIO1和GPIO2的状态为ON
set_gpio_on(1);
set_gpio_on(2);
// 打印所有GPIO的状态
for (int i = 0; i < sizeof(gpios) / sizeof(Gpio); i++) {
printf("GPIO %d: %s\n", gpios[i].id, gpios[i].state == ON ? "ON" : "OFF");
}
// 设置GPIO3的状态为ON,GPIO2的状态为OFF
set_gpio_on(3);
set_gpio_off(2);
// 打印所有GPIO的状态
for (int i = 0; i < sizeof(gpios) / sizeof(Gpio); i++) {
printf("GPIO %d: %s\n", gpios[i].id, gpios[i].state == ON ? "ON" : "OFF");
}
return 0;
}
```
这段代码定义了一个Gpio结构体,包含GPIO的编号和状态。初始化所有GPIO状态为OFF,可以通过set_gpio_on和set_gpio_off函数来设置GPIO状态为ON和OFF。可以通过get_gpio函数根据GPIO编号获取对应的结构体。最后在main函数中演示了如何使用这些函数来管理多个GPIO开关状态。
阅读全文