所以按键检测电路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; } 复制代码
复制代码