尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

ESP32实验教程:三位按键输入译码控制8路输出(替代74HC138逻辑)

ESP32实验教程:三位按键输入译码控制8路输出(替代74HC138逻辑)
📅 发布时间:2026/7/1 2:47:27

ESP32实验教程:三位按键输入译码控制8路输出(替代74HC138逻辑)## 一、前言

1. 实验意义

74HC138硬件译码器可以用软件逻辑完全模拟。本实验使用3个按键输入3位二进制数字,通过程序计算地址,单独点亮对应一路输出,实现和3-8译码器一模一样的功能。
学会本程序可以理解二进制译码原理,同时掌握按键上拉输入、IO批量控制、位运算译码,是数字逻辑与GPIO综合训练实验。

2. ESP32特性与本篇目标

ESP32自带内部上拉输入模式,无需外接下拉电阻;IO口可批量配置输出,能独立控制8路LED。
学习目标:

  1. 掌握INPUT_PULLUP按键上拉输入原理;
  2. 理解3位二进制转十进制地址译码逻辑;
  3. 实现软件版3-8译码,3按键控制8路输出;
  4. 看懂批量IO初始化、循环统一清输出的代码逻辑;
  5. 完成硬件接线、代码烧录、现象调试。

二、硬件准备

元件规格/数量作用
ESP32开发板1块主控
USB数据线1根供电、烧录
轻触按键3个输入3位二进制A/B/C
LED发光二极管8个8路输出指示
电阻1个保护LED
面包板1块电路搭建
杜邦线若干线路连接

三、核心原理简析

1. 硬件基础

  1. 按键上拉输入INPUT_PULLUP
    ESP32引脚内部自带上拉电阻,按键一端接GPIO,一端接GND:
  • 未按下:引脚为高电平1
  • 按下:引脚接地,电平为0
  1. 3位二进制译码逻辑
    C为高位(4的权重)、B中位(2权重)、A低位(1权重)
    index = c*4 + b*2 + a
    例:C=0 B=1 A=1 → 0×4+1×2+1=3 → 点亮第3路输出
  2. 输出驱动逻辑
    每次循环先把8路输出全部置低熄灭,再单独将对应index引脚置高点亮,同一时间只亮一路,等效38译码器选通效果。

2. 核心API函数解析

  1. pinMode(pin, INPUT_PULLUP)
    引脚设置为内部上拉输入,适配按键电路,省去外部电阻。
  2. digitalRead(pin)
    读取按键引脚电平,返回0(低)或1(高)。
  3. pinMode(outPin[i], OUTPUT)
    循环批量配置8路输出引脚。
  4. digitalWrite(pin, LOW/HIGH)
    控制LED亮灭,高电平点亮。
  5. delay(50)
    轻微延时消抖,稳定按键读取。

四、接线指南

1. 按键接线(3个按键)

  • 按键1(A):一端 GPIO4,一端 GND
  • 按键2(B):一端 GPIO5,一端 GND
  • 按键3©:一端 GPIO6,一端 GND

2. LED输出接线(8路)

  • GPIO9 → 220Ω电阻 → LED正极,LED负极接GND
  • GPIO10 → 220Ω电阻 → LED正极,LED负极接GND
  • GPIO11、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,组合对应点亮LED:

  • C=1 B=1 A=1(全松开)index=7 → out7亮
  • C=1 B=1 A=0(按下A)index=6 → out6亮
  • C=1 B=0 A=1(按下B)index=5 → out5亮
  • C=1 B=0 A=0(按下A+B)index=4 → out4亮
  • C=0 B=1 A=1(按下C)index=3 → out3亮
  • C=0 B=1 A=0(按下C+A)index=2 → out2亮
  • C=0 B=0 A=1(按下C+B)index=1 → out1亮
  • C=0 B=0 A=0(三个全按)index=0 → out0亮

同一时刻只会有一颗LED点亮,完全模拟74HC138译码选通逻辑。

故障排查

  1. LED全不亮:检查输出引脚接线、LED正负极是否接反;
  2. 按键无反应:确认按键一端接GND,引脚设置INPUT_PULLUP;
  3. LED常亮不灭:程序未执行全部置低循环,检查数组下标。

2. 核心知识点回顾

  1. INPUT_PULLUP内部上拉输入,按键接地触发低电平;
  2. index = c*4 + b*2 + a实现3位二进制译码,软件模拟38译码器;
  3. 使用数组批量管理多路输出,简化代码;
  4. 每次刷新前统一关闭所有输出,保证同一时间只单路点亮;
  5. 无需硬件译码芯片,纯代码即可实现地址选通功能。

相关新闻

  • 2026-06-30 后端启动异常排查记录
  • 企业做GEO内容发布,哪些做法容易出风险?
  • Vol.57|接新IM渠道还要改代码?现在填几个字段就行

最新新闻

  • ArcMap制图进阶:手把手教你搞定‘一幅多图’布局与经纬网美化(ArcGIS 10.4.1)
  • 别再手动点来点去了!用Python脚本玩转dSPACE ModelDesk与ControlDesk自动化
  • OpenCV+YOLO:快速搭建机器人视觉感知系统,实现实时目标检测
  • 导入VMware虚拟机提示“Unsupported hardware family vmx-20”?权威解读vSphere版本映射表与4种安全降级方案(附官方KB编号)
  • Python自动化方案解决B站会员购抢票难题:完整实施指南
  • 别再手动切视频了!用Python的pyscenedetect库,5分钟搞定视频自动场景分割

日新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号