#数码管显示
数码管就是八个LED灯,针对共阳极数码管,为低电平点亮。a,b,c,d,e,f,g,dp分别对应于P0~P7。因此我们想要让数码管显示0,则让g和dp为高即可,即11000000
,对应十六进制的0xc0
。
##数码管的控制
在蓝桥杯开发板中,数码管的状态通过两个锁存器来控制U8、U7。使能Y6C(置高)将启动位选锁存器,获取点亮数码管的位数据(0x01-0x80),拉低用Y6C(置低)锁存当前值。位数据可通过对P0赋值获得。同理,使能Y7C可以启动锁存器获取段码值(0-9),也是通过P0口输入给锁存器。
因此,假如我们想要使第一个数码管显示0,我们应该先选择数码管,再给段码值。
第一步,使能Y6C:
第二步,向P0赋值0x01
,选择第一个数码管:
第三步,使能Y7C:
第四步,向P0赋值0xc0
(共阳),让数码管显示0:
#LED显示
蓝桥杯开发板上的LED接法为阳极接高电平,阴极接锁存器的输出端。因此我们想要点亮某个LED,必须将对应的端口置低,锁存器的输出和P0的值是一一对应的。
因此,加入我们想要点亮第一个LED,我们应该先使能Y4C,然后给P0赋对应的值。
第一步,使能Y4C:
第二部,向P0赋值0xfe
,即11111110
,第一位为底其他为高,第一个LED将被点亮:
#锁存器的控制
上面说到,无论是显示数码管还是LED,都先要使能对应的锁存器。在蓝桥杯开发板中,锁存器的控制主要通过P25~P27即P2口的高三位来实现。
如果我们想要显示LED,那么我们的第一步就是使能Y4C,如上图,WR默认接地(IO模式),接P42则为MM模式。我们想要让Y4C输出高,对于74HC02或非门来说,WR和Y4只能都为低,WR默认为低。因此我们只需要控制Y4的状态即可,而Y4的状态又通过14HC138来控制,对于38译码器,它的真值表如上。所以我们只需要让P25~P27为001,即可使Y4C为低。
因此我们了解到,如果我们想要显示LED或者数码管,我们只需要操作P2口的高三位(使能锁存器)和P0口(给数据或者段码)即可
代码示例
//第一个数码管显示0
P2 = (P2&0X1F)| 0xc0;//初始化P2口的高三位为0,然后将高三位赋值为110,使能Y6C
P0=0x01; //选择第一个数码管
P2 =(P2&0X1F)| 0xe0;//使能Y7C
P0=0xc0;
//点亮第一个LED
P2= (P2&0X1F) | 0X80; //使能Y4C
P0=0XFE; //把P0的第一位置低
同时我们应该意识到一个问题,数码的显示和LED的显示,都需要P0作为数据的输入端。那么当需要同时显示LED和数码管的时候,会不会出现他们两者互相影响的情况呢。在实际的操作中我也遇到了这种问题:当程序中数码管用中断显示的时候,显示LED的效果往往不好,