请问这两个为什么结果不一样啊?不可以吗?

2019-07-20 05:17发布

//                        key_row &= ((GPIO_ReadInputDataBit(  GPIOB,  GPIO_Pin_12) << 0)|  //第四列
//                                        (GPIO_ReadInputDataBit(  GPIOB,  GPIO_Pin_14) << 1)|  //第三列
//                                        (GPIO_ReadInputDataBit(  GPIOD,  GPIO_Pin_8) << 2)|   //第二列
//                                        (GPIO_ReadInputDataBit(  GPIOD,  GPIO_Pin_10) << 3)); //第一列
                        key_row &= (((GPIOB->IDR &(1<<12)) << 0) |((GPIOB->IDR&(1<<14)) << 1) | ((GPIOD->IDR&(1<<8)) << 2) |((GPIOD->IDR&(1<<10)) << 3));

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
edmund1234
1楼-- · 2019-07-20 11:05
就说前面这一条, 以此类推, 就应该明白为什么不一样了
key_row &= (((GPIOB->IDR &(1<<12)) << 0) | 。。。。。。。

(GPIOB->IDR &(1<<12))有两个结果
一)是等于0
二)等于0x1000
你的预设是它等于1, 分别在这儿
把它改为
key_row &= ((GPIOB->IDR >>12)&1) |((GPIOB->IDR>>13)&2) | ((GPIOD->IDR>>6) &4) |((GPIOD->IDR>>7)& 8));
晴天qaq
2楼-- · 2019-07-20 16:18
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-20 20:27
 精彩回答 2  元偷偷看……
Electronic
4楼-- · 2019-07-20 21:24
GPIO_ReadInputDataBit是返回0或者1,GPIOB->IDR&(1<<12)要么是0x1000,要么是0x0000,你觉得两个能一样么

一周热门 更多>