数码管的 8 个段,我们直接当成 8 个 LED 小灯来控制,那就是 a、b、c、d、e、f、g、dp 一共 8 个 LED 小灯。我们通过图 5-3 可以看出,如果点亮 b 和 c 这两个 LED 小灯,也就是数码管的 b 段和 c 段,其他的所有的段都熄灭的话,就可以让数码管显示出一个数字 1,那么这个时候实际上 P0 的值就是 0b11111001,十六进制就是 0xF9。那么我们写一个程序进去,来看一看数码管显示的效果。

#include

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

void main(){

    ENLED = 0;  //使能 U3,选择数码管 DS1

    ADDR3 = 1;

    ADDR2 = 0;

    ADDR1 = 0;

    ADDR0 = 0;

    P0 = 0xF9;  //点亮数码管段 b 和 c

    while (1);

}

#include

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

void main(){

    ENLED = 0;  //使能 U3,选择数码管 DS1

    ADDR3 = 1;

    ADDR2 = 0;

    ADDR1 = 0;

    ADDR0 = 0;

    P0 = 0xF9;  //点亮数码管段 b 和 c

    while (1);

}大家把这个程序编译一下,并下载到单片机中,就可以看到程序运行的结果是在最右侧的数码管上显示了一个数字 1。

用同样的方法,我们可以把其他的数字字符都在数码管上显示出来,而数码管显示的数字字符对应给 P0 的赋值,我们叫做数码管的真值表。我们来列一下我们这个电路图的数码管真值表,注意,这个真值表里显示的数字都不带小数点的,如表 5-7。

表 5-7 数码管真值表

 

字符 0 1 2 3 4 5 6 7
数值 0xC0 0xF9 0xA4 0xB0 0x99 0x92 0x82 0xF8
字符 8 9 A B C D E F
数值 0x80 0x90 0x88 0x83 0xC6 0xA1 0x86 0x8E

大家可以把上边那个用数码管显示数字 1 程序中的 P0 的赋值随便修改成表 5-7 真值表中的数值,看看显示的数字的效果。