历史上的今天
今天是:2025年08月11日(星期一)
2020年08月11日 | STM8单片机按键检测电路设计
2020-08-11 来源:elecfans
硬件环境采用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口的一端接地。
软件配置不能使用悬浮输入方式,这种方式电压可能会不稳定。
史海拾趣
|
关于这个移植到问题好像pm了版主好多次,于是我决定还是发帖一记吧,谢谢之前daichen版主的帮助的。但还有问题。 移植完毕后,在测试OSStartHighRdy函数是否成功时,出现很多警告信息: 1)单步调试进入OS_CORE.C中的指令ptcb = OSTCBFreeList;&n ...… 查看全部问答> |
|
很多朋友都在学习单片机或是想学单片机,但在看了一些资料后,要么感到不知道学的什么,要么找不到下一步的学习方法,这都很正常,因为单片机的学习是一项综全性知识的结果。那么怎样学习单片机,怎么样学好单片机是我们关心的,通过我本人的学习过 ...… 查看全部问答> |
|
我写的一个驱动程序,是一个流驱动,其他没什么问题,就驱动入口函数上提示被重复加载,奇怪了,麻烦大家帮忙解决一下。感激! error C2731: \'DllMain\' : function cannot be overloaded DllMain就是驱动的入口函数。… 查看全部问答> |
|
当EBOOT正常时, 部分显示信息如下: Download BIN file information: ----------------------------------------------------- [0]: Base Address=0x80038000 Length=0x19f40 ------------------------------------------------ ...… 查看全部问答> |
|
楼主说2812允许中断嵌套,是不是可以这样理解: 比如说,程序正在执行EVA的周期中断ISR,而CPU定时器的周期中断时间到了,就会先去跳转 执行CPU的ISR,执行完再回来执行EVA的ISR。 问题: 而我在上述两个中断都打开的情况下,单步调试,在EVA中 ...… 查看全部问答> |




