单片机从入门到实战(视频自学版)
上QQ阅读APP看书,第一时间看更新

2.5 使用移位运算符控制流水灯

任务书:编程使图2-1所示的LED在上电时VL7、VL6、VL5点亮,以0.5s的时间间隔向右流动,每次流动一位(即过0.5s,VL6、VL5、VL4点亮……),这样不断地循环。

2.5.1 编程思路

使用2.2.10节介绍的移位运算符可以实现流水灯。单片机的一组端口(如P0)从高位到低位依次输出00011111,即P0=00011111B=0x1f(说明:B表示二进制数),则能满足上电时VL7、VL6、VL5点亮。通过右移、左移若干位,再按位或可以实现8位数据高位与低位的交换,完成任务书的要求,详见程序及相应解释。

2.5.2 使用移位运算符控制流水灯的参考程序及解释

978-7-111-66891-6-Part01-57.jpg

978-7-111-66891-6-Part01-58.jpg

部分程序代码详解

第09~15行:将D右移n位、D左移8-n位,再按位或,可以实现将向右移而移出的n位数转移到左边。下面以(D>>7)|(D<<1)为例进行说明,详见表2-11。

表2-11 移位运算示例

978-7-111-66891-6-Part01-59.jpg