硬件环境采用STM8SF103,电压为3.3V。
电路需要注意的是STM8SF103这系列的IO作为输入口时只能是上拉输入和悬浮输入,虽然是弱上拉,在VCC为3.3V电压时,仍然能够被拉升至3.0V左右。
所以按键检测电路IO口一端需要接地,而不是外接上拉。悬浮方式下IO仍然会有0.89V左右电压,读取对应的IO寄存器IDR,仍然处于逻辑高电平状态。
软件代码相对很简单,只需要将IO口设置成上拉输入即可。采用轮询代码如下:
//初始化只需要设置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;
}
总结:
硬件电路将按键IO口的一端接地。
软件配置不能使用悬浮输入方式,这种方式电压可能会不稳定。
设计资源 培训 开发板 精华推荐
- 电赛简易电路特性测试仪
- UIC1WGEVB:低成本通用交流输入 LED 电路评估板
- MB3771低压过压检测典型应用电路(VCC = 5V)
- LT1764AEFE-2.5 SCR 预稳压器的典型应用可提供跨线路变化的效率
- LTC1538CG-AUX高效低噪声5V/3A、3.3V/3A、2.9V/2.6A、12V/200mA、5V/20mA笔记本电脑电源典型应用电路
- 适用于STM32F030R8 MCU的STM32 Nucleo-64开发板,支持Arduino和ST morpho连接
- STEVAL-ILL084V1,基于 LED6000 0.5A 浮动升压 LED 驱动器的评估板
- 智能、炫酷的音乐花形灯
- SY58032U,用于 GB 以太网交换机的时钟缓冲器的评估板
- FRDM-KE04Z: 面向Kinetis® KE04 MCU的恩智浦Freedom开发平台