)
8段数码管数码管, 又称LED数码管, 是由八段发光 二极管LED封装在一起组成“8”字型的器件外加一个小数点引脚遵循就近原则连接。以3,8接低电平的共阴极数码管且数码管显示6举例就是让B和DP为0其他位都是1。DPGFEDCBA数值0111110164位8段数码管12、9、8、6用于处理某个数码管亮其余引脚用于控制显示什么数值。比如只让8所属的DIG3亮其他的熄灭显示数字6。如果这时让9所属的DIG2亮那么他也只能显示6。如果修改数字其余亮的数码管也会是一样的数字。如果想显示多个数字比如DIG2显示5DIG3显示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)选中输出对应数码管111Y0LED1110Y1LED2101Y2LED3100Y3LED4011Y4LED5010Y5LED6001Y6LED7000Y7LED8让第三个数码管显示6sdcc -mmcs51 --model-small --iram-size 256 --xram-size 0 --code-size 8192 .\41_static_digital_tube.c#includemcs51/8051.hvoidmain(void){P2_41;P2_30;P2_21;P00x7D;// 0111 1101while(1){}}效果展示让第三个数码管显示8函数数组方式#includemcs51/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~9voidNixie(unsignedcharlocation,unsignedcharNumber){// 74HC138 译码器通过 P2.4/P2.3/P2.0 选择第几个数码管switch(location){case1:P2_41;P2_31;P2_21;break;// 111 → Y0case2:P2_41;P2_31;P2_20;break;// 110 → Y1case3:P2_41;P2_30;P2_21;break;// 101 → Y2case4:P2_41;P2_30;P2_20;break;// 100 → Y3case5:P2_40;P2_31;P2_21;break;// 011 → Y4case6:P2_40;P2_31;P2_20;break;// 010 → Y5case7:P2_40;P2_30;P2_21;break;// 001 → Y6case8:P2_40;P2_30;P2_20;break;// 000 → Y7}// 输出段码点亮对应数字P0NixieTable[Number];}voidmain(void){// 第3个数码管显示8Nixie(3,8);while(1){}}效果展示