ESP32实验教程三位按键输入译码控制8路输出替代74HC138逻辑## 一、前言1. 实验意义74HC138硬件译码器可以用软件逻辑完全模拟。本实验使用3个按键输入3位二进制数字通过程序计算地址单独点亮对应一路输出实现和3-8译码器一模一样的功能。学会本程序可以理解二进制译码原理同时掌握按键上拉输入、IO批量控制、位运算译码是数字逻辑与GPIO综合训练实验。2. ESP32特性与本篇目标ESP32自带内部上拉输入模式无需外接下拉电阻IO口可批量配置输出能独立控制8路LED。学习目标掌握INPUT_PULLUP按键上拉输入原理理解3位二进制转十进制地址译码逻辑实现软件版3-8译码3按键控制8路输出看懂批量IO初始化、循环统一清输出的代码逻辑完成硬件接线、代码烧录、现象调试。二、硬件准备元件规格/数量作用ESP32开发板1块主控USB数据线1根供电、烧录轻触按键3个输入3位二进制A/B/CLED发光二极管8个8路输出指示电阻1个保护LED面包板1块电路搭建杜邦线若干线路连接三、核心原理简析1. 硬件基础按键上拉输入INPUT_PULLUPESP32引脚内部自带上拉电阻按键一端接GPIO一端接GND未按下引脚为高电平1按下引脚接地电平为03位二进制译码逻辑C为高位4的权重、B中位2权重、A低位1权重index c*4 b*2 a例C0 B1 A1 → 0×41×213 → 点亮第3路输出输出驱动逻辑每次循环先把8路输出全部置低熄灭再单独将对应index引脚置高点亮同一时间只亮一路等效38译码器选通效果。2. 核心API函数解析pinMode(pin, INPUT_PULLUP)引脚设置为内部上拉输入适配按键电路省去外部电阻。digitalRead(pin)读取按键引脚电平返回0(低)或1(高)。pinMode(outPin[i], OUTPUT)循环批量配置8路输出引脚。digitalWrite(pin, LOW/HIGH)控制LED亮灭高电平点亮。delay(50)轻微延时消抖稳定按键读取。四、接线指南1. 按键接线3个按键按键1(A)一端 GPIO4一端 GND按键2(B)一端 GPIO5一端 GND按键3©一端 GPIO6一端 GND2. LED输出接线8路GPIO9 → 220Ω电阻 → LED正极LED负极接GNDGPIO10 → 220Ω电阻 → LED正极LED负极接GNDGPIO11、GPIO12、GPIO13、GPIO14、GPIO15、GPIO16 依次接剩余7颗LED接法同上接线框图按键A ↔ GPIO4 GND 按键B ↔ GPIO5 GND 按键C ↔ GPIO6 GND GPIO9~GPIO16 → 220Ω电阻 → LED() LED(-) → ESP32 GND!![按钮接线五、代码实现原代码完整注释//定义三个二进制输入按键引脚 C B A const int pinA 4; //最低位 2^0 const int pinB 5; //中间位 2^1 const int pinC 6; //最高位 2^2 //8路LED输出引脚数组 out[0]~out[7] int outPin[8] {9,10,11,12,13,14,15,16}; void setup() { //配置按键为内部上拉输入模式 pinMode(pinA, INPUT_PULLUP); pinMode(pinB, INPUT_PULLUP); pinMode(pinC, INPUT_PULLUP); //循环初始化8路输出引脚默认全部熄灭(低电平) for(int i 0; i 8; i){ pinMode(outPin[i], OUTPUT); digitalWrite(outPin[i], LOW); } } void loop() { //读取三个按键电平1松开0按下 int a digitalRead(pinA); int b digitalRead(pinB); int c digitalRead(pinC); //二进制转十进制地址C B A int index c * 4 b * 2 a; //先关闭所有LED for(int i 0; i 8; i){ digitalWrite(outPin[i], LOW); } //点亮对应序号LED digitalWrite(outPin[index], HIGH); }六、实验现象与总结1. 预期实验现象按键松开为1按下为0组合对应点亮LEDC1 B1 A1全松开index7 → out7亮C1 B1 A0按下Aindex6 → out6亮C1 B0 A1按下Bindex5 → out5亮C1 B0 A0按下ABindex4 → out4亮C0 B1 A1按下Cindex3 → out3亮C0 B1 A0按下CAindex2 → out2亮C0 B0 A1按下CBindex1 → out1亮C0 B0 A0三个全按index0 → out0亮同一时刻只会有一颗LED点亮完全模拟74HC138译码选通逻辑。故障排查LED全不亮检查输出引脚接线、LED正负极是否接反按键无反应确认按键一端接GND引脚设置INPUT_PULLUPLED常亮不灭程序未执行全部置低循环检查数组下标。2. 核心知识点回顾INPUT_PULLUP内部上拉输入按键接地触发低电平index c*4 b*2 a实现3位二进制译码软件模拟38译码器使用数组批量管理多路输出简化代码每次刷新前统一关闭所有输出保证同一时间只单路点亮无需硬件译码芯片纯代码即可实现地址选通功能。