怎么用C语言给一个字节的低四位赋值,而不影响高四位?

例如用单片机P2口编写4*4矩阵键盘的扫描程序,行线P20-P23全置0,列线P24-P27全置1,当有键按下时,键所在列变0,再分别依次给某一行置0,来确定键的位置。

第1个回答  2012-05-13
char c;
c&=0xf0;
c|=0x08; //这里的8就是要给低四位赋得值。[0-f]追问

请问可不可以直接这样写:
char c;
c&=0xf8;
或者直接这样写:
char c;
c|=0x08;
是不是都可以直接给低四位赋1000,而高四位状态不变?谢谢!

追答

不行

追问

为什么不行啊?必须先给低四位置零?

追答

本回答被提问者采纳
第2个回答  2012-05-14
赋值0用&,赋值1用 | 。
例如:P2=XXXXXXXX. X表示二进制0或1.
若 P2=P2&0xf0;则P2=XXXX0000;
若 P2=P2| 0xf0;则P2=1111XXXX;追问

哦,懂了!可这还是解释不了书上这段键盘扫描程序,高手帮看看吧。非常感谢!
uchar cord_h,cord_l;
P2=0x0f;
cord_h=P2&0x0f;
if(cord_h!=0x0f)
{
delay(100);
if(cord_h!=0x0f)
{
cord_h=P2&0x0f;
P2=cord_h|0xf0;
cord_l=P2&0xf0;
return(cord_h+cord_l);
}
return(0xff);
}

第3个回答  2012-05-12
char c = 255;
8位全是1 要使后四位变零,最简单的方式就是 c &= 0xf0;追问

请问为什么要这样赋值啊?char c = 255;
谢谢你!

怎么用C语言给一个字节的低四位赋值,而不影响高四位?
c|=0x08; \/\/这里的8就是要给低四位赋得值。[0-f]

怎么用C语言给一个字节的低四位赋值,而不影响高四位
把那个数和 0xf0相与 那个数高四位不变 底四位被清零 然后和你想要的底四位的数相或 比如 0x05 那个数高四位不变 底四位变成了 5

如何将单片机20h到2fh低四位清零高四位不变 用c语言编程
void main(){ unsigned char i;for(i=0;i<=20;i++){ bitaddr+=i;bitaddr&=0xf0;} } \/\/ 没调试,自己用keil调试一下

单片机C语言编程
P1>>4是往右移4位,temp=P1>>4;就是说把P1的值右移4位并赋给temp temp | 0xf0中 | 是表示或的意思,就是temp或0xf0 temp=temp | 0xf0;整句就是说如果上面P1右移后temp得到是0xf0那么此时temp就是0xf0,如果上面P1右移后不是0xf0那么此时temp为oxf0 ...

c语言中怎样将一个变量高低4位交换
\/*默认是八位的数吧, short是16位的~还是用char吧*\/ \/*这个函数的功能是传一个8位的数进来,返回一个经过高低4位交换的数*\/ char exchange(char source){ char up = source << 4;\/*将source右移取高四位,低四位补0赋值给up,*\/ char low = source >> 4;\/*将source左移取低四位...

用C语言写一个使单片机P3口高四位LED和低四位LED轮流点亮的程序。
LZ 的所谓 高4位 与 低4位 轮流点亮,是指 高4位 一起亮,然后换 低4位 一起亮吗?如果是,那主函数应该是:void main(){ P3=0x0f;while(1){ P3=~P3;delay();} } 至于LZ出现的问题,那是因为 LZ 的每一行 赋值,都改变了原来的灯,导致到最后(延时函数之前)只有一个灯是亮的,2...

使p1口的低四位输出1 高四位输出0的c51命令是什么
这条命令可以将P1口的低4位输出为1,高4位输出为0。具体来说,0x01是一个16进制数,它的二进制表示为0000 0001,将这个数赋值给P1口,就会使低4位输出1,高4位输出0。P1口的8位分别对应P1.0~P1.7,因此只有P1.0输出为1,其余7位输出为0。注意,在使用这条命令之前,需要先将P1口设置为...

在单片机里什么叫低四位,低八位和高八位?
低四位,意味着还高四位,就是说有1个字节,比如说ACC占据1个字节,它是01100011,高四位是0110,低四位是0011 高八位,低八位,就是说这个寄存器有2个字节,比如说DPTR,如果它是01111101 10111110,高八位就是01111101,就是DPH,低八位是10111110,是DPL ...

高四位向左移,低四位向右移的程序
直接用查表就可以了 uchar table={0x18,0x24,0x52,0x81};void main(){ for(i=0;i<4;i++){ P1=table[i];} }

...编可以吗?编程将A中的低四位传到P0,P0高四位不变。A=AAH,P0=BBH...
想法有创意,但第1、2句的错误先修改一下:ANL A,#0FH,ANL P0,#0F0H 如果能满足一下条件的话完全可以这样做:1,P0低4位允许清0,不影响外部电路;2,P0低4位逻辑电平不被外部电路限制;3,P0低4位清0后又赋值,期间的电平变化能被外部电路的时序所适应。

相似回答