8段数码管
数码管, 又称LED数码管, 是由八段发光 二极管(LED)封装在一起组成"8"字型的器件,外加一个小数点,引脚遵循就近原则连接。

以3,8接低电平的共阴极数码管,且数码管显示6举例,就是让B和DP为0,其他位都是1。
| DP | G | F | E | D | C | B | A | 数值 |
|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 6 |
4位8段数码管
12、9、8、6用于处理某个数码管亮,其余引脚用于控制显示什么数值。比如只让8所属的DIG3亮,其他的熄灭,显示数字6。如果这时让9所属的DIG2亮,那么他也只能显示6。如果修改数字,其余亮的数码管也会是一样的数字。
如果想显示多个数字,比如DIG2显示5,DIG3显示6,那就只让DIG2显示5其余都灭,然后很快的切换DIG3显示6其余都灭。靠人眼的视觉残留,就能显示5和6了。这就是多位数码管的动态扫描显示。

2个4位8段数码管
开发板用的就是这种数码管。其中P22-P24这3个引脚控制8个数码管的亮灭,P00-P07这8个引脚控制单个数码管的显示。
138译码器
通过控制P22-P24,来控制Y0-Y7也就是LED1到LED8的某位显示低电平,则该位置的数码管显示。
注意:理论上,如果不用 138 译码器,直接用 IO 口控制位选,确实可以让两个数码管同时亮,并且显示相同的数字。但74HC138/74LS138 是低电平有效输出,正常工作状态下同一时刻只能有一个输出为 低电平 0,其余全部为 高电平 1。

P24 (C) |
P23 (B) |
P22 (A) |
对应输出 |
|---|---|---|---|
| 0 | 0 | 0 | Y0(LED1) |
| 0 | 0 | 1 | Y1(LED2) |
| 0 | 1 | 0 | Y2(LED3) |
| 0 | 1 | 1 | Y3(LED4) |
| 1 | 0 | 0 | Y4(LED5) |
| 1 | 0 | 1 | Y5(LED6) |
| 1 | 1 | 0 | Y6(LED7) |
| 1 | 1 | 1 | Y7(LED8) |
让第三个数码管显示6
sdcc -mmcs51 --model-small --iram-size 256 --xram-size 0 --code-size 8192 .\41_static_digital_tube.c
c
#include <mcs51/8051.h>
void main(void)
{
P2_4 = 1;
P2_3 = 0;
P2_2 = 1;
P0 = 0x7D; // 0111 1101
while(1) {
}
}
效果展示
