[STM32F1] 这句指令为什么这么写

[复制链接]
1246|20
 楼主| pengf 发表于 2020-12-9 22:01 | 显示全部楼层 |阅读模式
在矩阵键盘显示程序中,
//读取各个管脚的状态
nP10 = P1IN & BIT0;
nP11 = (P1IN & BIT1) >> 1;
nP12 = (P1IN & BIT2) >> 2;
nP13 = (P1IN & BIT3) >> 3;
求指教 这句指令为什么这么写
zhuww 发表于 2020-12-9 22:05 | 显示全部楼层
我大概明白什么意思 BIT1什么意思 为什么还要 >> 1
huwr 发表于 2020-12-9 22:09 | 显示全部楼层
貌似c里>>是右移位数
zhuhuis 发表于 2020-12-9 22:16 | 显示全部楼层
如果(P1IN & BIT1)的值等于1010,(P1IN & BIT1) >> 1;则表示这个值1010向右移动1位,就变成了0101。nP11 = (P1IN & BIT1) >> 1;表示再将0101赋值给nP11,执行了相应指令,以此类推。
chenjunt 发表于 2020-12-9 22:19 | 显示全部楼层
如果要将其赋值给bit型变量,那么就只有该字节的最低位被赋值过去。
xxrs 发表于 2020-12-9 22:24 | 显示全部楼层
要把那个“1”右移到最低位才能正确地赋值给nP11,这就需要右移一位。
supernan 发表于 2020-12-9 22:28 | 显示全部楼层
同理P1IN&BIT2需要右移两位,以此类推。
xxmmi 发表于 2020-12-9 22:32 | 显示全部楼层
//读取各个管脚的状态
nP10 = P1IN & BIT0;
nP11 = (P1IN & BIT1) >> 1;
nP12 = (P1IN & BIT2) >> 2;
nP13 = (P1IN & BIT3) >> 3;
先读取P1管脚的状态,然后进行位操作,与完之后只保留nP1x中的x位的状态,其他位均被置0,之后再右移操作,将对应的x位右移至最低位。
xxmmi 发表于 2020-12-9 22:38 | 显示全部楼层
我比较好奇nP10,nP11,n是怎没回事
yszong 发表于 2020-12-9 22:42 | 显示全部楼层
这个是对PIO口进行初始化配置的吧?具体的看这个bit2\bit3的定义了
zhanglli 发表于 2020-12-9 22:45 | 显示全部楼层
“>>”为右移操作符,>> n表示右移n位
yufe 发表于 2020-12-9 22:49 | 显示全部楼层

转换成最低位有效而已,也就是bool型
建议用!!代替
nP11 =!! (P1IN & BIT1);
wenfen 发表于 2020-12-9 22:54 | 显示全部楼层

就是这样啊
01-->01
02-->01
04-->01
08-->01
songqian17 发表于 2020-12-9 23:03 | 显示全部楼层
移位呀 好简单
xxmmi 发表于 2020-12-9 23:06 | 显示全部楼层
就是一个移位指令啊
 楼主| pengf 发表于 2020-12-9 23:10 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家
coshi 发表于 2021-1-6 13:39 | 显示全部楼层
楼主是不明白什么?
aoyi 发表于 2021-1-6 13:40 | 显示全部楼层
楼主是想问这个语句是什么意思吗
drer 发表于 2021-1-6 13:41 | 显示全部楼层
是不是需要读取一下各个管脚的状态啊
gwsan 发表于 2021-1-6 13:41 | 显示全部楼层
也可以用别的形式表现出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

718

主题

10129

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部