代码如下:
#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() 得到的是什么值,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
得出,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对应决定。
PA12 PA11 PB15这三个引脚的电平
其余位均为0.
这不是一样的吗?3bits有效,得出来的结果就一定是000,001,010,011,100,101,110,111
一周热门 更多>