☰
4-1 静态数码管显示(SDCC + Notepad++ + STC-ISP/普中ISP)
2026/10/24 4:02:54 网站建设 项目流程

8段数码管

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

以3,8接低电平的共阴极数码管,且数码管显示6举例,就是让B和DP为0,其他位都是1。

DPGFEDCBA数值
011111016

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。

P2_4 (C)P2_3 (B)P2_2 (A)选中输出对应数码管
111Y0LED1
110Y1LED2
101Y2LED3
100Y3LED4
011Y4LED5
010Y5LED6
001Y6LED7
000Y7LED8

让第三个数码管显示6

sdcc -mmcs51 --model-small --iram-size 256 --xram-size 0 --code-size 8192 .\41_static_digital_tube.c

#include<mcs51/8051.h>voidmain(void){P2_4=1;P2_3=0;P2_2=1;P0=0x7D;// 0111 1101while(1){}}

效果展示

让第三个数码管显示8(函数+数组方式)

#include<mcs51/8051.h>// 共阴极数码管段码表:0~9// 每位对应 a~g 段,1 表示该段亮unsignedcharNixieTable[]={0x3F,// 0: 0011 11110x06,// 1: 0000 01100x5B,// 2: 0101 10110x4F,// 3: 0100 11110x66,// 4: 0110 01100x6D,// 5: 0110 11010x7D,// 6: 0111 11010x07,// 7: 0000 01110x7F,// 8: 0111 11110x6F// 9: 0110 1111};// 数码管显示函数// location:第几个数码管(1~8)// Number:要显示的数字(0~9)voidNixie(unsignedcharlocation,unsignedcharNumber){// 74HC138 译码器:通过 P2.4/P2.3/P2.0 选择第几个数码管switch(location){case1:P2_4=1;P2_3=1;P2_2=1;break;// 111 → Y0case2:P2_4=1;P2_3=1;P2_2=0;break;// 110 → Y1case3:P2_4=1;P2_3=0;P2_2=1;break;// 101 → Y2case4:P2_4=1;P2_3=0;P2_2=0;break;// 100 → Y3case5:P2_4=0;P2_3=1;P2_2=1;break;// 011 → Y4case6:P2_4=0;P2_3=1;P2_2=0;break;// 010 → Y5case7:P2_4=0;P2_3=0;P2_2=1;break;// 001 → Y6case8:P2_4=0;P2_3=0;P2_2=0;break;// 000 → Y7}// 输出段码,点亮对应数字P0=NixieTable[Number];}voidmain(void){// 第3个数码管显示8Nixie(3,8);while(1){}}

效果展示

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询