【蓝桥杯】数码管和LED显示干扰问题的解决

#数码管显示
共阳数码管原理图在这里插入图片描述
数码管就是八个LED灯,针对共阳极数码管,为低电平点亮。a,b,c,d,e,f,g,dp分别对应于P0~P7。因此我们想要让数码管显示0,则让g和dp为高即可,即11000000,对应十六进制的0xc0
##数码管的控制
![[Pasted image 20220328132742.png]]
![[Pasted image 20220328132859.png]]

在蓝桥杯开发板中,数码管的状态通过两个锁存器来控制U8、U7。使能Y6C(置高)将启动位选锁存器,获取点亮数码管的位数据(0x01-0x80),拉低用Y6C(置低)锁存当前值。位数据可通过对P0赋值获得。同理,使能Y7C可以启动锁存器获取段码值(0-9),也是通过P0口输入给锁存器。
因此,假如我们想要使第一个数码管显示0,我们应该先选择数码管,再给段码值。

第一步,使能Y6C:
第二步,向P0赋值0x01,选择第一个数码管:
第三步,使能Y7C:
第四步,向P0赋值0xc0(共阳),让数码管显示0:

#LED显示
![[Pasted image 20220328135738.png]]

蓝桥杯开发板上的LED接法为阳极接高电平,阴极接锁存器的输出端。因此我们想要点亮某个LED,必须将对应的端口置低,锁存器的输出和P0的值是一一对应的。
因此,加入我们想要点亮第一个LED,我们应该先使能Y4C,然后给P0赋对应的值。

第一步,使能Y4C:
第二部,向P0赋值0xfe,即11111110,第一位为底其他为高,第一个LED将被点亮:

#锁存器的控制
![[Pasted image 20220328141501.png]]
![[Pasted image 20220328143723.png]]

上面说到,无论是显示数码管还是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的效果往往不好,

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值