最近在做一个物联网小项目,之前用过Arduino,最近了解到ESP32开发版,成本低,配置高,还自带蓝牙和wifi,那肯定要上手试试啦。在这里做一个简单的记录吧。
数码管的型号是5161AS。
5161AS 数码管引脚排列图(顶部引脚)
10 9 8 7 6
| | | | |
+--+--+--+--+
| |
| f a |
+--+--+--+--+
| g |
+--+--+--+--+
| e d b |
+--+--+--+--+
| |
| dp c |
+--+--+--+--+
| | | | |
1 2 3 4 5
引脚分配说明
| 引脚号 | 段/功能 | ESP32 GPIO 引脚 |
|---|---|---|
| 1 | e | GPIO 19 |
| 2 | d | GPIO 18 |
| 3 | 共阴极 | GND |
| 4 | c | GPIO 5 |
| 5 | dp | GPIO 23 |
| 6 | b | GPIO 4 |
| 7 | a | GPIO 2 |
| 8 | 共阴极 | GND |
| 9 | f | GPIO 21 |
| 10 | g | GPIO 22 |
硬件连接说明
- 将数码管的各段引脚(a 到 g 及 dp)分别连接到 ESP32 的对应 GPIO 引脚。
- 将数码管的共阴极引脚(3 和 8)连接到 GND。
图示说明
以下是连接图的示意:
rust
复制代码
ESP32 GPIO 引脚 -> 数码管段引脚 -> 数码管
----------------------------------------------
GPIO 2 -> a -> 引脚 7
GPIO 4 -> b -> 引脚 6
GPIO 5 -> c -> 引脚 4
GPIO 18 -> d -> 引脚 2
GPIO 19 -> e -> 引脚 1
GPIO 21 -> f -> 引脚 9
GPIO 22 -> g -> 引脚 10
GPIO 23 -> dp -> 引脚 5
GND -> 共阴极 -> 引脚 3 和 8
示例代码
cpp
复制代码
// 定义数码管段的引脚
const int segmentA = 2;
const int segmentB = 4;
const int segmentC = 5;
const int segmentD = 18;
const int segmentE = 19;
const int segmentF = 21;
const int segmentG = 22;
const int segmentDP = 23; // 小数点段
// 数码管段的引脚数组
const int segments[] = { segmentA, segmentB, segmentC, segmentD, segmentE, segmentF, segmentG, segmentDP };
// 数字 0-9 对应的段码(共阴极)
const uint8_t digitCodes[] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
void setup() {
// 初始化所有段引脚为输出模式
for (int i = 0; i < 8; i++) {
pinMode(segments[i], OUTPUT);
digitalWrite(segments[i], LOW); // 初始化为低电平(熄灭状态)
}
// 初始化串口
Serial.begin(115200);
}
void loop() {
// 显示数字 0-9
for (int i = 0; i < 10; i++) {
displayDigit(i);
delay(1000); // 每秒切换一次
}
}
// 显示一个数字
void displayDigit(int digit) {
uint8_t code = digitCodes[digit];
for (int i = 0; i < 7; i++) { // 只控制 a 到 g 段
digitalWrite(segments[i], (code >> i) & 0x01);
}
}