流水灯不稳定闪烁是怎么回事,流水灯隔几分钟闪一下是什么原因

首页 > 经验 > 作者:YD1662022-11-14 05:32:38

​关注一下,更多精彩等着你!

上一节我们介绍了什么是总线的方法,以及如何通过十六进制来控制IO口。并把我们的之前单点操作的流水灯进行了改进,成为了一个新的更加简洁的程序。这回,就再用总线方法,来实现流水灯的更加多样化的操作。

这次,我们要实现正向流水结束后再反过来流水,如此循环。然后再间隔闪烁。然后再累积流水,最后结束。

正向流水结束,再反过来。这个如何实现呢,我们需要使用到一些运算方法。

第一个是移位指令<<。

流水灯不稳定闪烁是怎么回事,流水灯隔几分钟闪一下是什么原因(1)

由于数字对比不强,看的不是很清晰,所以把数字给换成红色了。

<<这个标志符的意思是,向左移动一位,就像下边这样:

1111 1111》1111 111_

移动完成后,会发现,最低位空出来了,此时程序会自动去填补一个0。于是就成了:

1111 1111》1111 111_》1111 1110

第一次移位1111 1110,第二次在第一次基础上移位1111 1100,第三次在第二次基础上移位1111 1000,如此循环,就可以一直把所有位都变成0。

我们在看下一句"|",这个符号是或的意思,我们知道,逻辑中的或,是说只要有其一为一,结果就是一。所以,我们把1100|0001,结果就是头两个一和最后一个一留下来,第三位因为都是0,所以就是0.结果就是1101了。当再次移位后,数据就变成1010了,我们再次跟0001取或,最后一位就再次置1,结果就是1011,从结果上看,1110》1101》1011……就是0在不断的左移。

通过这个方法,可以让每一位都会单独置零。然后再给以一定时间的延时,就会看到流水灯了。

如果我们不赋初值0xfe会出现什么情况?

就会出现,移位产生一个0,在或运算时就会被重新置1,如此循环,就进入不到第二个LED,也就不会出现流水灯了。可以自己尝试下。

流水灯不稳定闪烁是怎么回事,流水灯隔几分钟闪一下是什么原因(2)

向右流水,效果是一样的,需要注意的是初值更改为左侧为0,就是0x7f,0111 1111,然后移位符号>>,还有取或的语句需要用0x80,1000 0000.

基本上是在左移位的基础上稍作修改即可。

接下来是闪烁的。

流水灯不稳定闪烁是怎么回事,流水灯隔几分钟闪一下是什么原因(3)

闪烁,我们用的是间隔LED的方法,就是隔一个亮一个,端口输出是1010 1010。翻译成十六进制就是0xaa。这次用到的是一个取反的运算,就是把每一位的0变成1,1变成0,然后延时一段时间,再次取反,循环几个周期,就看起来像是不断闪烁。取反的操作相对好理解一些,就是这一位,现在是1,那么取反后就是0,就是0和1的变换。

最后是一个累积点亮LED。

流水灯不稳定闪烁是怎么回事,流水灯隔几分钟闪一下是什么原因(4)

这个程序就是把第一个我们向左移位的函数,进行了更改,取消了赋初值,不用取或了,这样就可以对比着理解,各个语句的作用,如果不使用,会产生什么结果。如果我们的第一个函数不用取或这一步,那最终输出结果就和这个现象一样了。

所以,我们在写程序时,需要认真,仔细分析自己需要的结果,然后对照程序进行简单的演算。保证每一段都是可以输出想要的结果,不然累积到最终,几百行的代码,看起来就会头疼的,尤其是在没有标注释的情况下,有时就会忘记自己为什么要写这一句。

好的,这篇先说到这里,有问题或建议可以留言或私信给我。

想了解更多精彩内容,快来关注小亮谈电气

更多多内容,欢迎关注百家号:小亮谈电气。*电气学苑。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.