单片机C语言方面逻辑运算的问题

2025-03-01 05:37:24
推荐回答(5个)
回答1:

你现在是只想对P2^1至P2^5的端口进行操作,但是不改变P2^0和P2^7的端口值是吧
教你一个简单的方法,给你写一个实例吧.
例如:
/********************************
实验:
对端口P3中P3^1,P3^2,P3^3置1或清0
********************************/
#include
void main(void)
{
P3 = 0;
//看明白了吧,这里的(1<<1)后面这个1就是对应的8位端口的1号端口,如果要对P3^5置1,改成5就行了
P3 |= (1<<1)|(1<<2)|(1<<3); //对P3^1,P3^2,P3^3置1
P3 &= ~((1<<1)|(1<<2)|(1<<3)); //对P3^1,P3^2,P3^3清0
while(1);
}

回答2:

这就要看你要把bit1-bit5变成1还是0了啊,比如,你只想保留bit1-5,可以这样,data & 0x6E,6E的二进制是(00111110),bit1-5原来是1的话,与完仍然是1,原来是0的话,与完就是0.

回答3:

例如 从低到高 0-7位 假设数字为A

(1) 第n位 置0
A & (~(0000 0001 << n))

(2) 第n位 置1
A | (0000 00001 << n)

原理就是 置0时 与操作 n位为0 其他位为1 的数字
置1时 或操作 n位为1 其他位为0 的数字

<< n 表示 左移 n位

回答4:

其实就是与或非的那些东西吧,最好先看看数电,那里面讲的很详细

回答5:

嗯,简单,我可以帮你~不过需要知道你用什么单片机,程序我可以帮你编写~