一段程序不懂请帮我解答一下,谢谢。

2019-07-25 12:16发布

代码如下:
#define CAP_PORT_1                       GPIOA
#define CAP_Pin_1                       GPIO_Pin_12
#define CAP_CLK_1                       RCC_APB2Periph_GPIOA
#define TST_CAP_DATA1()     GPIO_ReadInputDataBit(CAP_PORT_1,CAP_Pin_1)

#define CAP_PORT_2                       GPIOA
#define CAP_Pin_2                       GPIO_Pin_11
#define CAP_CLK_2                 RCC_APB2Periph_GPIOA
#define TST_CAP_DATA2()     GPIO_ReadInputDataBit(CAP_PORT_2,CAP_Pin_2)

#define CAP_PORT_3                       GPIOB
#define CAP_Pin_3                 GPIO_Pin_15
#define CAP_CLK_3                       RCC_APB2Periph_GPIOB
#define TST_CAP_DATA3()     GPIO_ReadInputDataBit(CAP_PORT_3,CAP_Pin_3)

#define CAP_IRQ_PORT               GPIOA
#define CAP_IRQ_Pin                     GPIO_Pin_8
#define CAP_IRQ_CLK                     RCC_APB2Periph_GPIOA
#define TST_CAP_IRQ()       GPIO_ReadInputDataBit(CAP_IRQ_PORT,CAP_IRQ_Pin)

#define GET_CAP_PORT_1_NUMBER()     ((CAP_PORT_1->IDR & (CAP_Pin_1))? 1:0)
#define GET_CAP_PORT_2_NUMBER()     ((CAP_PORT_2->IDR & (CAP_Pin_2))? 1:0)
#define GET_CAP_PORT_3_NUMBER()     ((CAP_PORT_3->IDR & (CAP_Pin_3))? 1:0)
#define GET_TOUCH_NUMBER()   ((GET_CAP_PORT_3_NUMBER()<<2)+(GET_CAP_PORT_2_NUMBER()<<1)+GET_CAP_PORT_1_NUMBER())


想问一下,GET_TOUCH_NUMBER() 得到的是什么值,谢谢。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
mack13013
1楼-- · 2019-07-25 14:47
由#define GET_TOUCH_NUMBER()   ((GET_CAP_PORT_3_NUMBER()<<2)+(GET_CAP_PORT_2_NUMBER()<<1)+GET_CAP_PORT_1_NUMBER())
得出,GET_TOUCH_NUMBER()就是((GET_CAP_PORT_3_NUMBER()<<2)+(GET_CAP_PORT_2_NUMBER()<<1)+GET_CAP_PORT_1_NUMBER())

由#define GET_CAP_PORT_1_NUMBER()     ((CAP_PORT_1->IDR & (CAP_Pin_1))? 1:0)
#define GET_CAP_PORT_2_NUMBER()     ((CAP_PORT_2->IDR & (CAP_Pin_2))? 1:0)
#define GET_CAP_PORT_3_NUMBER()     ((CAP_PORT_3->IDR & (CAP_Pin_3))? 1:0) 得出,
((GET_CAP_PORT_3_NUMBER()<<2)+(GET_CAP_PORT_2_NUMBER()<<1)+GET_CAP_PORT_1_NUMBER())实际上是一个最低3位是0或者1的数。


再由其之前的宏看出,最后三位是0还是1分别由GPIOA的pin12、GPIOA的pin11、GPIOB的pin15对应决定。


DreamWaterPro
2楼-- · 2019-07-25 18:57
GET_TOUCH_NUMBER() 是一个有3bit有效位的数,从高位到低位分别为
PA12 PA11 PB15这三个引脚的电平
其余位均为0.
fengzhicheng
3楼-- · 2019-07-25 23:18
我做了仿真,值是0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,这么跟你们说的不一样啊?
jxh123
4楼-- · 2019-07-26 02:37
fengzhicheng 发表于 2017-11-9 10:31
我做了仿真,值是0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,这么跟你们说的不一样啊?

这不是一样的吗?3bits有效,得出来的结果就一定是000,001,010,011,100,101,110,111
正点原子
5楼-- · 2019-07-26 02:57
 精彩回答 2  元偷偷看……
fengzhicheng
6楼-- · 2019-07-26 04:27
谢谢大家了,我是初学者,请见谅。

一周热门 更多>