求解释!先感谢!

时间:2021-08-31 04:48:22
       P2 = 0xF0;                
       scan_key = P2;              
       P2 = 0x0F;                  
       temp_c = P2;              
       scan_key ^= temp_c;

这是4*4键盘扫描函数的一部分,请问P2 = 0xF0;的具体解释,最好把P0,P1,P2详细意义说说。(有教程的最感谢了!)谢谢各位!

5 个解决方案

#1


0xF0 就是11110000

#2


P2是一个IO口,一般有八个管脚,这里定义成P2.0,P2.1.....P2.7,
P2 = 0xF0 就是给IO脚P2.0,P2.1, P2.2, P2.3 赋值1,也就是给高电平,同时把p2.4, p2.5, p2.6, p2.7 赋值0,也就是给低电平。
最好找本单片机的书看看!!

#3


ls 正解, 建议 lz 补充一点基础再学习程序

#4


先搞清楚扫描按键的原理过程就清楚了

#5


在单片机程序开发中,通常都会把单片机的管脚地址以硬件说明方式定义变量。
而定义部分通常在 reg52.h 中,当然,你也可以自己引用特定的寄存器声明文件,
如:STC12C5A60S2.h
比较常用的51单片机有 4 组I/O控制管脚,每组管脚有8个脚,每个脚可以对其
控制输出电流或输入电流的状态,也可以读取管脚当前是属于什么状态。
而这种一组一组的I/O口在原件图上被厂商定义为 (P0.0-P0.7)-(P3.0-P3.7)的
字样,而为了程序开发方便,将这些寄存器的地址命名为 P0-P3 方便记忆写代码。
具体的你可以看看这篇文章:
http://blog.csdn.net/SupermanKing/archive/2010/08/20/5826294.aspx

而你的
P2 = 0xF0;
其实是设置P2端口的8个管脚状态,而怎么说是设置8个管脚的状态而不是7个或9个呢?
因为他是用 0xF0,在16进制中,两个十六进制位表示1个字节的数据,而1个字节的数
据看成二进制就是8个二进制位,因为单片机是基于二进制操作管脚的,所以最多只能
控制8个管脚,即使是0x00,在二进制来看,也是 00000000 8个位的状态。所以是8。
可以这么看,在两个16进制的位,最小的数值是 0x00,最大的数值是 0xFF 那么,
转换成 10 进制便是 0-255 ,这么说 255 就是一个字节所能表示的最大数值,把255
转换成二进制看看,就是 11111111 ,8个二进制位。所以用一个字节来控制 8 个管
脚是相当合适的。那么 0xF0 在二进制中为 11110000,就是说 P2 口的 P2.0-P2.3
都为 0 的状态,P2.4-P2.7 都为 1 的状态如果你的 P2 口接入了8个发光二极管,
然后就会有4个是亮的,4个是灭的。

#1


0xF0 就是11110000

#2


P2是一个IO口,一般有八个管脚,这里定义成P2.0,P2.1.....P2.7,
P2 = 0xF0 就是给IO脚P2.0,P2.1, P2.2, P2.3 赋值1,也就是给高电平,同时把p2.4, p2.5, p2.6, p2.7 赋值0,也就是给低电平。
最好找本单片机的书看看!!

#3


ls 正解, 建议 lz 补充一点基础再学习程序

#4


先搞清楚扫描按键的原理过程就清楚了

#5


在单片机程序开发中,通常都会把单片机的管脚地址以硬件说明方式定义变量。
而定义部分通常在 reg52.h 中,当然,你也可以自己引用特定的寄存器声明文件,
如:STC12C5A60S2.h
比较常用的51单片机有 4 组I/O控制管脚,每组管脚有8个脚,每个脚可以对其
控制输出电流或输入电流的状态,也可以读取管脚当前是属于什么状态。
而这种一组一组的I/O口在原件图上被厂商定义为 (P0.0-P0.7)-(P3.0-P3.7)的
字样,而为了程序开发方便,将这些寄存器的地址命名为 P0-P3 方便记忆写代码。
具体的你可以看看这篇文章:
http://blog.csdn.net/SupermanKing/archive/2010/08/20/5826294.aspx

而你的
P2 = 0xF0;
其实是设置P2端口的8个管脚状态,而怎么说是设置8个管脚的状态而不是7个或9个呢?
因为他是用 0xF0,在16进制中,两个十六进制位表示1个字节的数据,而1个字节的数
据看成二进制就是8个二进制位,因为单片机是基于二进制操作管脚的,所以最多只能
控制8个管脚,即使是0x00,在二进制来看,也是 00000000 8个位的状态。所以是8。
可以这么看,在两个16进制的位,最小的数值是 0x00,最大的数值是 0xFF 那么,
转换成 10 进制便是 0-255 ,这么说 255 就是一个字节所能表示的最大数值,把255
转换成二进制看看,就是 11111111 ,8个二进制位。所以用一个字节来控制 8 个管
脚是相当合适的。那么 0xF0 在二进制中为 11110000,就是说 P2 口的 P2.0-P2.3
都为 0 的状态,P2.4-P2.7 都为 1 的状态如果你的 P2 口接入了8个发光二极管,
然后就会有4个是亮的,4个是灭的。