esp32idf 74HC165按键扫描代码应该怎么写
时间: 2024-12-08 13:17:10 浏览: 18
ESP32-IDF平台下的74HC165是一种8位线控移位寄存器,常用于扩展GPIO输入,包括按键扫描。下面是一个基本的按键扫描示例代码:
```c++
#include <driver/shift_reg.h>
#include <string.h>
// 定义按键连接的IO口
const PinMap PinConfig[] = {
{KEY_0, D4, PullUpMode},
// 其他按键映射...
};
// 初始化按键IO口
void setupKeyPorts() {
for (const auto &pin : PinConfig) {
GPIO动态配置为输入模式,并启用中断;
pinMode(pin.pin, INPUT_PULLUP);
}
}
// 从74HC165读取并处理按键状态
void scanKeys() {
uint8_t keyStatus = shift_in(PortA, 0); // 假设PortA对应74HC165的MSB
for (int i = 0; i < sizeof(PinConfig) / sizeof(PinConfig[0]); ++i) {
if ((keyStatus >> i) & 0x01 && digitalRead(PinConfig[i].pin) == LOW) {
ESP_LOGI(TAG, "Pressed Key: %d", i + 1); // 假设第一个键是KEY_0,ID自增1
}
}
}
int main() {
setupKeyPorts();
while (true) {
scanKeys();
vTaskDelay(pdMS_TO_TICKS(10)); // 每隔10毫秒扫描一次
}
}
阅读全文