2021-06-22

蓝桥杯单片机之LED

一: 硬件连接

在这里插入图片描述
用户通过控制P25 P26 P27三个IO口来控制138译码器(138译码器如何工作,自行查阅)选通Y4端口,选通信号传送到锁存器的Y4C端口,选通锁存器。这时候就可以通过控制P0口的8个位控制LED输出了。需要注意的是八个LED的右端一起接入了高电平,那么为了使led有电流流过从而点亮led,需要在led左端接入低电平产生压差,由此可知为了使得LED点亮,P0口应该送出低电平。

二:程序书写

在这里插入图片描述
这是蓝桥杯指导书上的部分代码

函数名称(作用):led显示
入口参数: P0口的数值(注意:这里是将八个led对应的八位数据以十六进制的形式整体发送给P0口)
函数体
函数体第一行
将传入的参数取反传给P0口,这里的取反操作是为了将LED以阳码(什么是共阳,自行查询)的形式作为输入参数,再堆输入的阳码取反,变为阴码,使得LED低电平有效。(至于为啥不直接赋值阴码,我的理解是阳码更加的直观方便,如果只是在阳码上多取一次反就能使得LED低电平导通,操作起来还是挺快的)
在这里插入图片描述
根据上方硬件连接图,我们知道要操作led首先得通过138译码器选通锁存器,这里就是138译码器的选通操作。
我们知道1或0与上0都是零(所以一般&0就是强制零操作),1或者0或上1都是1(|1就是强制1操作),由此对于这个138译码器的输入端,P25 P26 P27(正好是P2的高三位),有000~111这8种状态,每种状态的数值(比如010是的数值2)对应一个通道(比如Y2C),如果我们看到(P2&0X1F)想到(&0)是强制清零,P2的高三位(P27 P26 P25)都&0(强制清零),其他位(&1)不变,强制高三位清零的作用一个通道也不打开。同样的,我们看到( |0x80)想到 (|1)是强制1操作,相当于P2清零后的结果的最高位(P27)|1(强制1),对应到000
~111状态中的100,也就是十进制的4,于是 Y4打开。

当Y4选通时,锁存器打开M7HC35这个锁存器选通,之前一送的P0口的数据就可以通过锁存器,去控制LED了。注意这里P0为啥在锁存器选通之前送数据,打个比方就是抽水机将水充满水管最后打开阀门,水冲出,要是想一开阀门就有水,那一定是先打开抽水机将水充满整个管子再打开阀门而不是先打开阀门然后再去开抽水机,同理P0口数据如果先写入,那么再打开锁存器数据就会一下子送入。其次,假设我之前抽水机抽的一直是黑墨水放入一个木桶中,我要换成清水放入另一个木桶,没了不使得之前的墨水污染,我一定会不关闭抽水机,将清水抽入来洗干净管子,然后再去抽清水,同样的,P0可能之前的其他器件也在用这条线0串传数据,那么先开阀门,管子里剩余的污水(P0脏数据)就可能影响到P0传输的效果。

在这里插入图片描述
这里就看到&就可以想到要是&0那就是强制清零,果然,P2的高三位被强制清零了,根据P2口的功能可以知道,这里清零的作用是使得所有通道都无法选通(关闭所有通道)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值