单片机C语言怎么能对P2口的1,2,3,4,5位进行清零或者置一,而不影响其他位的数字?

大哥帮我教下,单片机C语言怎么能对P2口的1,2,3,4,5位进行清零或者置一,而不影响其他位的数字??

如果单独对单片机的P2^1赋值,会导致程序出错吗?我对几个数码管编程,其中片选信号和位选信号都是单独对位赋值的,结果放在硬件上实施起来的话,有几个数码管不能正常显示,后来听别人说要直接对口操作,也就是直接对P2赋值。只对1,2,3,4,5位进行操作,其他位的数字不能动,应该怎么写程序?
最新回答
颓废美堕落情

2024-09-06 07:41:21

这种单独对指定I/O口赋值而不改变其他位的操作在430单片机用的很多的。
比如:你要给P2.1和P2.2赋1,但不想改变其他位,那么你可以这样写:P2=P2 | 0x06(
51单片机
的写法)P2OUT|=0x06(430单片机的写法)。
要给指定端口置0,而不影响其他位。比如要求P2^1=0,其他位不变。P2=P2&0xFD(即要置0 的那一位与0,其他位与1)这样就能保证不影响其他位了。
追问
这种方法貌似很简便,是什么原理啊?我菜鸟没太看明白??求解释?谢谢
追答
这个其实一点都不难的,原理就是:在二进制位中任何位与1相或,都是1;任何位与0相或都是不变的(因为0和0相或还是0,1和0相或还是1)所以要对某一位置1 的话,只要把那一位与1相或就行了,而其他不想改变的位与0相或就可以保持不变。其他的以此类推.
这个其实一点都不难的,原理就是:在二进制位中任何位与1相或,都是1;任何位与0相或都是不变的(因为0和0相或还是0,1和0相或还是1)所以要对某一位置1 的话,只要把那一位与1相或就行了,而其他不想改变的位与0相或就可以保持不变。其他的以此类推.
敲击岁月

2024-09-06 06:52:13

首先明确一点,单操作一个引脚和操作一排引脚效果是一样的,只要你操作的时候没有改变其他引脚的值就ok了。

其次,单独改动一个引脚的值你可以定义如下:
sbit P2_0 = P2 ^ 0;
这就是只操作P2的第0个引脚。

最后如果你想一次性修改P2的某几个引脚,可以用位与或者位或(& |)来进行操作。如:
P2 = P2 & 0xff;
具体的用法就要因你自己的需要来定了。
陌生De自我ヾ忘却

2024-09-06 06:50:42

P2口有8位 若只对1,2,3,4,5位进行操作,其他位的数字动 让P2&11*****1
就能实现了
晴时不见荷

2024-09-06 15:04:50

跟0取异或为保持原来信号,跟1取异或为取反,所以取P2的异或,需要改变的位对应的取1的异或~