蓝桥杯单片机详细教程(二)选通HC573的高级写法

高级的选择HC573通道写法

前面我们介绍了基础的HC573写法,但这个写法会出现模块冲突。原因是数码管,LED,蜂鸣器继电器都由P0口来操作,给P0口赋值便可以控制他们的状态,但在赋值之前,需要选通他们对应的P2通道,如果给P0口赋值后没有关闭当前通道,而是直接打开下一个通道,那么给原先P0的数据便会锁存到其他模块里,造成混乱。所以在操作一个模块时,正确的做法是先将对应的通道打开,然后给P0口赋值,再把这个通道关闭,做到有始有终,便不会混乱,在这个逻辑下,出现了这么一套代码。

void HC138MODE(unsigned char channel,num)//channel指要选择的通道,num指赋给P0口的值
{
P2=(P2&0X1F)|0X00;
P0=num;
    switch(channel)
    {
    case 4:P2=(P2&0X1F)|0X80;break;
    case 5:P2=(P2&0X1F)|0Xa0;break;
    case 6:P2=(P2&0X1F)|0Xc0;break;
    case 7:P2=(P2&0X1F)|0Xe0;break;
    }
}

下面是这段代码的详细解释。

观察741HC38的输入端,我们知道,P27,P26,P25是P2口的高三位,所以操作是对P2的高三位进行,其他位不用管。

P2=(P2&0X1F)|0X00;这一段指的是先将P2的高三位置0,清除上一次P2所选择的通道。0x1F的二进制数为0001 1111,这样就保证只是将前三位清零而不影响后五位。

然后便是选择通道,以4通道的LED为例,若要打开它,则需要将前3位变为二进制数100,也就是十进制数4.此时的P2=(P2&0X1F)|0X80;前面的0X1F又将前三位清零,而0x80的二进制是

1000 0000,将其相与,便可将前三位置为100而后五位不变,即打开了4通道。

5通道同理,先将前三位清0,然后将0xa0(1010 0000 )与之相与,得到前三位101.

切记,一定要在每一句后加上break!!!

这样做到有始有终,便不会引起逻辑的错误,可以单独控制买个模块了。

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值