当前位置: 首页 > news >正文

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

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. 无需硬件译码芯片,纯代码即可实现地址选通功能。
http://www.jsqmd.com/news/1099753/

相关文章:

  • python: Fail-Fast Pattern
  • AI优化mRNA翻译效率:从密码子优化到深度学习驱动的序列设计
  • AI工具集
  • 【计算机毕业设计案例】基于 SpringBoot 的高校外卖配送调度监控系统的设计与实现 基于 SpringBoot 的校园餐饮消费配送管理系统(程序+文档+讲解+定制)
  • JAVA注解(简单版)
  • 2026-06-30 后端启动异常排查记录
  • Java毕设项目:基于 SpringBoot 的电竞周边用品交易管理系统的设计与实现 基于 SpringBoot 的小众游戏周边购物服务系统 (源码+文档,讲解、调试运行,定制等)
  • 基于FFmpeg的直播视频录制工具StreamCap
  • 【毕业设计】基于 SpringBoot 的高校学生心理预警干预系统的设计与实现 基于 SpringBoot 的大学生心理状态跟踪管理系统(源码+文档+远程调试,全bao定制等)
  • 企业做GEO内容发布,哪些做法容易出风险?
  • CPT Markets:把多语言支持做扎实,注重效率的使用者更容易感受到的框架
  • Vol.57|接新IM渠道还要改代码?现在填几个字段就行
  • 无人机视角航拍违建违章建筑识别数据集labelme格式245张2类别
  • CAD 图纸批量处理:用 OpenClaw 实现图纸格式转换、批量打印、版本号自动标注
  • Spring Cloud分布式事务快速上手(基于Seata AT模式,集成Nacos)--学习版
  • Manim 节奏控制指南 (Rate Functions)
  • Java计算机毕设之基于 SpringBoot 的学生心理咨询预约管理系统的设计与实现 基于 SpringBoot 的高校心理健康信息管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 按照这个方法真的领到了8元,千问新用户专属220372
  • YOLO-World实战:零样本目标检测,一句话实现开放词汇检测
  • AI 建议用 Redis `SETNX` 防重复提交,为什么锁过期后仍可能创建两条记录
  • CPT Markets:把外汇投教内容建设做到位——标准观察与提示整理
  • 6G网络中大模型技术与多模态感知通信的融合应用
  • Java毕业设计-基于 SpringBoot 的农机 4S 店综合管理系统的设计与实现 基于 SpringBoot 的农作物机械管理系统的设计与实源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 数值优化方法:信任域与无导数技术详解
  • 注解的基本语法
  • FreeRTOS学习笔记(二)
  • [对比学习LangChain和MAF-16]基于Checkpoint的持久化
  • C中单向链表之增删改查
  • 导入Seata-server所需SQL
  • 四川大学《微积分I-1》期末试卷及答案2016-2025学年PDF