51单片机C语言编程一学就会
上QQ阅读APP看书,第一时间看更新

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

2.5.1 逻辑运算符和位运算符

1.逻辑运算符

逻辑运算符用于操作数之间的逻辑运算,操作数可以是各个数据类型,可以是变量也可以是常量。逻辑运算符有逻辑与(符号为&&)、逻辑或(符号为||)、逻辑非(符号为!),其运算功能(真值表)详见表2-9。

2-9 逻辑运算符的运算功能

978-7-111-46996-4-Part01-75.jpg

逻辑运算法则说明:

(1)逻辑与:A、B两者同时为真(即值为1),则A&&B为真(值为1),否则A&&B为假(值为0)。例如,(3<2)&&(9>3)的值为0,因为(3<2)是不成立的,为假,值为0,而(9>3)是成立的,为真,值为1。

(2)逻辑或:A、B中只要有一个为真,则A B为真(值为1),否则A B为假(值为0)。

(3)逻辑非:若A为真,则!A为假;若A为假,则!A为真。

2.位运算符

位运算符是两个操作数中的二进制位(bit)进行的运算。C语言的位运算符详见表2-10。

2.5.2 使用移位运算符控制流水灯的编程示例

1.任务书

编程使图2-1所示的LED在上电时D7、D6、D5点亮,以0.5s的时间间隔向右流动,每次流动一位(即过0.5s后D6、D5、D4点亮…),这样不断地循环。

2-10 C语言的位运算符

978-7-111-46996-4-Part01-76.jpg

2.编程思路

一组端口(如P1)从高位到低位依次输出00011111,即P1=00011111B=0x1f(说明:B表示二进制,0x表示十六进制),则能满足上电时D7、D6、D5点亮。通过右移若干位、左移若干位,再按位或,可以实现8位数据高位与低位的交换,完成任务书的要求,详见程序及相应解释。

3.参考程序

978-7-111-46996-4-Part01-77.jpg

978-7-111-46996-4-Part01-78.jpg

4.部分程序代码详解

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

2-11 移位运算示例

978-7-111-46996-4-Part01-79.jpg