打印
[STM32F1]

这句指令为什么这么写

[复制链接]
313|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pengf|  楼主 | 2023-1-13 23:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在矩阵键盘显示程序中,
//读取各个管脚的状态
nP10 = P1IN & BIT0;
nP11 = (P1IN & BIT1) >> 1;
nP12 = (P1IN & BIT2) >> 2;
nP13 = (P1IN & BIT3) >> 3;
求指教 这句指令为什么这么写

使用特权

评论回复
沙发
jiajs| | 2023-1-13 23:50 | 只看该作者
我大概明白什么意思 BIT1什么意思 为什么还要 >> 1

使用特权

评论回复
板凳
chuxh| | 2023-1-13 23:53 | 只看该作者
貌似c里>>是右移位数

使用特权

评论回复
地板
renyaq| | 2023-1-13 23:55 | 只看该作者
如果(P1IN & BIT1)的值等于1010,(P1IN & BIT1) >> 1;则表示这个值1010向右移动1位,就变成了0101。nP11 = (P1IN & BIT1) >> 1;表示再将0101赋值给nP11,执行了相应指令,以此类推。

使用特权

评论回复
5
jiajs| | 2023-1-13 23:57 | 只看该作者
如果要将其赋值给bit型变量,那么就只有该字节的最低位被赋值过去。

使用特权

评论回复
6
yinxiangh| | 2023-1-13 23:59 | 只看该作者
要把那个“1”右移到最低位才能正确地赋值给nP11,这就需要右移一位。

使用特权

评论回复
7
xxmmi| | 2023-1-14 08:02 | 只看该作者
同理P1IN&BIT2需要右移两位,以此类推。

使用特权

评论回复
8
kangzj| | 2023-1-14 08:02 | 只看该作者
大多数项目都要考虑扩展、升级、移植等一系列问题

使用特权

评论回复
9
pengf|  楼主 | 2023-1-14 08:05 | 只看该作者
//读取各个管脚的状态
nP10 = P1IN & BIT0;
nP11 = (P1IN & BIT1) >> 1;
nP12 = (P1IN & BIT2) >> 2;
nP13 = (P1IN & BIT3) >> 3;
先读取P1管脚的状态,然后进行位操作,与完之后只保留nP1x中的x位的状态,其他位均被置0,之后再右移操作,将对应的x位右移至最低位。

使用特权

评论回复
10
heweibig| | 2023-1-14 08:07 | 只看该作者
我比较好奇nP10,nP11,n是怎没回事

使用特权

评论回复
11
yszong| | 2023-1-14 08:09 | 只看该作者
这个是对PIO口进行初始化配置的吧?具体的看这个bit2\bit3的定义了

使用特权

评论回复
12
bqyj| | 2023-1-14 08:11 | 只看该作者
“>>”为右移操作符,>> n表示右移n位

使用特权

评论回复
13
juventus9554| | 2023-1-14 08:14 | 只看该作者

转换成最低位有效而已,也就是bool型
建议用!!代替
nP11 =!! (P1IN & BIT1);

使用特权

评论回复
14
dengdc| | 2023-1-14 08:16 | 只看该作者

就是这样啊
01-->01
02-->01
04-->01
08-->01

使用特权

评论回复
15
spark周| | 2023-1-14 08:18 | 只看该作者
移位呀 好简单

使用特权

评论回复
16
zhanghqi| | 2023-1-14 08:20 | 只看该作者
就是一个移位指令啊

使用特权

评论回复
17
renyaq| | 2023-1-14 08:22 | 只看该作者
楼主是想问这个语句是什么意思吗

使用特权

评论回复
18
wuhany| | 2023-1-14 08:24 | 只看该作者
是不是需要读取一下各个管脚的状态啊

使用特权

评论回复
19
chuxh| | 2023-1-14 08:26 | 只看该作者
也可以用别的形式表现出来

使用特权

评论回复
20
renyaq| | 2023-1-14 08:30 | 只看该作者
当然要右移了 因为是要读取各个管脚的状态啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

718

主题

10129

帖子

3

粉丝