ESP32教程10/55 - 使用七段数码管74HC595的数字计数器 - ESP32物联网学习套件
在本教程中,我们将使用ESP32微控制器控制七段数码管,创建一个数字计数器。计数器将从0递增到9,然后再递减回0,清晰地展示计数过程。我们还将探讨如何点亮单个段以及在七段数码管上显示字母。
ESP32_Animte7Segment-segments
本项目利用74HC595移位寄存器来控制显示,使我们能够高效地管理各段,而无需占用ESP32过多的GPIO引脚。通过向移位寄存器发送二进制值,我们可以点亮相应的段来表示数字和字母。如需更深入地了解该过程,可参考视频(视频中03:15处)。
ESP32_Animte7Segment-letters
硬件说明
本项目的主要组件包括ESP32微控制器、74HC595移位寄存器和七段数码管。ESP32是一款功能强大的微控制器,内置Wi-Fi和蓝牙功能,非常适合物联网项目。74HC595是一种移位寄存器,允许我们仅使用少量输入引脚即可控制多个输出。它的工作原理是将串行数据转换为并行输出,非常适合驱动七段数码管。
七段数码管由七个独立的LED组成,排列成“8”字形。通过向移位寄存器发送适当的二进制值,可以点亮或熄灭每个段。例如,要显示数字0,需要点亮除中间段(G)以外的所有段。
ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-counter-1
数据手册详情
| 制造商 |
德州仪器 |
| 零件编号 |
74HC595 |
| 逻辑/IO电压 |
2 V至6 V |
| 电源电压 |
2 V至6 V |
| 输出电流(每通道) |
6 mA |
| 峰值电流(每通道) |
35 mA |
| PWM频率指导 |
最高1 kHz |
| 输入逻辑阈值 |
0.3 VCC至0.7 VCC |
| 压降/RDS(on)/饱和电压 |
最大0.2 V |
| 热限制 |
125 °C |
| 封装 |
DIP-16 |
| 备注/变体 |
有多种封装可选 |
- 确保电源电压正确(2 V至6 V)。
- 限制输出电流以防止过热。
- 为每个段使用单独的电阻,以获得最佳亮度。
- 注意接线,避免短路和错误连接。
- 仔细遵循引脚排列,避免配置错误。
接线说明
ESP32-10-seven-segment-wiring
首先设置面包板。连接接地轨(蓝色线)和电源轨(红色线)。接地应连接到面包板一侧的蓝色线,而电源应连接到另一侧的红色线。使用黑色线将ESP32的接地连接到接地轨,使用红色线将ESP32的3.3V引脚连接到电源轨。
接下来,将74HC595移位寄存器插入面包板,确保凹口方向正确。将引脚11(DS)连接到ESP32的引脚25,引脚12(SH_CP)连接到引脚26,引脚14(ST_CP)连接到引脚27。将移位寄存器的接地(引脚8)连接到接地轨,并将引脚10(MR)连接到电源轨以激活。
对于七段数码管,将对应各段(a-g)的引脚连接到移位寄存器的输出引脚。为每个段串联一个电阻(220欧姆)以限制电流。确保公共引脚的连接正确,根据您的数码管类型,公共引脚可以是共阳极或共阴极。
代码示例与讲解
在setup函数中,我们首先将连接到移位寄存器的引脚定义为输出。这确保我们的ESP32能够控制发送到显示器的数据。
void setup ()
{
//将引脚设置为输出
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
在这里,我们将STcp、SHcp和DS定义为分别连接到移位寄存器ST_CP、SH_CP和DS的引脚。将这些引脚设置为输出,使我们能够控制移位寄存器。
程序的主循环从0计数到9,使用shiftOut函数将相应的值发送到显示器。
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); //将ST_CP接地并保持低电平,以便在传输期间持续发送
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); //拉高ST_CP以保存数据
delay(1000);
}
此循环递增num变量,每秒将datArray中对应的值发送到显示器。shiftOut函数将数据传输到移位寄存器,从而点亮相应的段。
演示/预期效果
接线完成并上传代码后,您应该会看到七段显示器从0计数到9,短暂暂停后再递减回0。每个数字将显示一秒钟。如果您想加快计数速度,可以调整循环中的延迟(视频中15:30处)。
单独操作各段时,请记住发送正确的二进制值以显示字母或特定段。如果显示器看起来较暗,请考虑为每个段添加单独的电阻,以确保整个显示器的亮度一致。
视频时间戳
- 00:00 开始
- 1:53 七段显示器介绍
- 4:38 接线说明
- 13:15 Arduino代码-1
- 17:01 选择COM端口和ESP32开发板
- 18:43 演示-1
- 20:13 仅显示一位数字
- 21:38 上下计数器
- 23:07 逐个打开/关闭每个段
- 24:53 显示A、B、C、D、E和F
图像
ESP32_Animte7Segment-counter-1
ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-letters
ESP32_Animte7Segment-segments
ESP32-10-seven-segment-schematic
ESP32-10-seven-segment-wiring
ESP32_Animte7Segment-counter-1
ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-letters
ESP32_Animte7Segment-segments
ESP32-10-seven-segment-schematic
ESP32-10-seven-segment-wiring
809-ESP32 Tutorial 10/55 - Arduino code for 2.5 7 segment
语言: C++
const int STcp = 27; // ST_CP
const int SHcp = 26; // SH_CP
const int DS = 25; // DS
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void setup ()
{
// 将引脚设置为输出
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
void loop()
{
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); // 将 ST_CP 接地,并在传输时保持低电平。
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); // 将 ST_CPST_CP 拉动以保存数据。
delay(1000);
}
}