4. 数码管静态显示
任务目标
驱动一位共阴极数码管,循环显示数字0~9。通过本案例掌握数码管段码表的推导方法,理解静态显示(锁存输出)与动态扫描的区别。
硬件连接与原理
一位共阴极数码管有8个段引脚(a~g、dp)和1个公共阴极。将段引脚通过限流电阻(220Ω)连接到单片机P0口(需上拉电阻)或P2口,公共阴极接地。本例使用P0口,段码表中对应位为1时该段点亮。
段码表推导
共阴极数码管段码 = 该数字点亮段的二进制值,按 dp g f e d c b a 顺序排列(P0.7~P0.0)。例如数字“0”点亮a、b、c、d、e、f,熄灭g和dp,二进制为 0011 1111 = 0x3F。
完整代码(C语言,Keil/STC)
#include <reg51.h>
// 共阴极数码管段码表:0~9
unsigned char code segCode[10] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
void delay(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 120; j++);
}
void main() {
unsigned char i;
while (1) {
for (i = 0; i < 10; i++) {
P0 = segCode[i]; // 输出段码,静态显示
delay(500); // 保持500ms
}
}
}
编译与烧录
- 使用Keil uVision创建工程,选择对应单片机型号(如AT89C52或STC89C52)。
- 将上述代码保存为
main.c并添加到工程。 - 编译生成HEX文件(需在Options for Target → Output中勾选Create HEX File)。
- 使用STC-ISP或USB转TTL烧录器将HEX文件下载到单片机。
验证方法
上电后观察数码管:应依次显示0、1、2、3、4、5、6、7、8、9,每个数字停留约0.5秒,然后循环。若显示数字缺笔画或乱码,检查段码表与硬件接线是否一致(尤其确认是共阴极而非共阳极)。
常见问题
- 数码管不亮:检查公共阴极是否接地,P0口是否加上拉电阻(10kΩ排阻)。
- 显示数字错误:确认段码表位序与硬件接线对应关系,可先单独点亮某一段验证。
- 亮度偏低:P0口驱动能力有限,可改用P2口或增加三极管驱动。
静态显示原理说明
静态显示指每个数码管的段码由单片机持续输出,直到更新新数据。本案例只有一位数码管,无需锁存器或扫描,代码直接对P0口赋值即可保持显示。若多位数码管使用静态显示,每个数码管需独立I/O口或锁存芯片(如74HC573),硬件成本较高,因此多位显示通常采用动态扫描。