所以按键检测电路IO口一端需要接地,而不是外接上拉。悬浮方式下IO仍然会有0.89V左右电压,读取对应的IO寄存器IDR,仍然处于逻辑高电平状态。
代码如下:
- //初始化只需要设置IO口模式即可。
- GPIO_Init(KEY2_PORT,KEY2_PIN,GPIO_MODE_IN_PU_NO_IT);//上拉输入,不产生中断
- //按键检测部分
- /*
- #defineKEY10
- #defineKEY1_PORT(GPIOD)
- #defineKEY1_PIN(GPIO_PIN_4)
- #defineKEY21
- #defineKEY2_PORT(GPIOC)
- #defineKEY2_PIN(GPIO_PIN_1)
- */
- u8CheckKey(u8key)
- {
- if(key==KEY1)
- {
- if(KEY1_PORT->IDR&KEY1_PIN)//检测到有按键了,IO口电压会被拉低
- {
- delay_5ms();
- if(KEY1_PORT->IDR&KEY1_PIN)//仍然存在低电平
- {
- while(!(KEY1_PORT->IDR&KEY1_PIN));//等待放开
- returnKEY1;
- }
- }
- return0;
- }elseif(key==KEY2)
- {
- if(!(KEY2_PORT->IDR&KEY2_PIN))//检测到有按键了
- {
- delay_5ms();
- if(!(KEY2_PORT->IDR&KEY2_PIN))//仍然存在低电平
- {
- while(KEY2_PORT->IDR&KEY2_PIN);//等待放开
- returnKEY2;
- }
- }
- return0;
- }
- return0;
- }
- 复制代码