求教stm32的按键扫描程序

2019-10-15 21:47发布

求教大神一个按键扫描程序的编程思路,按键要实现的功能是按住后松开才算一次触发,目前我设置标志位可以实现一个按键的触发,但在原来基础上加上两个按键按下就没反应了,连原来的第一个按键也没反应,有关部分程序如下:
u8 key_up=1;   //按键标志位,松开1,按下0
#define KEY1  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)//读取按键1


u8 KEY_Scan(void)
{         
        u8 key=0;
        /* 按键1扫描 */
        if(key_up && KEY1==0)
                  {
                          delay_ms(10);
                          key_up=0;
                  }
        else if(key_up==0 && KEY1==1)
                {
                        delay_ms(10);
                        key_up=1;
                        if(KEY1==1 )
                              return key=KEY1_PRES;
                }

       else if(KEY==1)


                 key_up=1;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
feilusia
1楼-- · 2019-10-16 00:30
参考我个性签签名档的博客地址,《STM8L之自定义长短按键》。
我的驱动是独立的,你需要多个按键可以简单地多添加几个驱动文件来改。
yangkefeng
2楼-- · 2019-10-16 05:21
本帖最后由 yangkefeng 于 2016-12-26 13:00 编辑

参考原子哥按键例程,在key_scan里边修改,一般按键为按下触发,假设按键一端接地,if(KEY==0)   
delay_ms(10);
if(KEY==0)
{
    //按键响应
}
如果你想要松开触发
if(KEY==0)   
delay_ms(10);
if(KEY==0)//按键已经按下
{
    while(KEY!=0)//等待按键松开
    {
        delay_ms(10);
    }
    //按键已松开
    //按键响应
}

这是我的思路,你可以试一下,多个按键把KEY改成KEY1,KEY2...就可以了
密耳
3楼-- · 2019-10-16 07:43
 精彩回答 2  元偷偷看……
qwerjj
4楼-- · 2019-10-16 12:22
feilusia 发表于 2016-12-26 12:34
参考我个性签签名档的博客地址,《STM8L之自定义长短按键》。
我的驱动是独立的,你需要多个按键可以简单 ...

谢了,问题已解决,里面程序实现的功能虽然跟我所需要的有所不同,但也确实为我开拓了按键扫描方式。
qwerjj
5楼-- · 2019-10-16 17:05
yangkefeng 发表于 2016-12-26 12:55
参考原子哥按键例程,在key_scan里边修改,一般按键为按下触发,假设按键一端接地,if(KEY==0)   
delay_m ...

谢谢,问题已解决,额。。我提个疑问,你的程序里while(KEY!=0)这句,如果满足条件也就是松开不就会一直在delay_ms(10)这里循环直到不是松开状态才跳出循环吗?我的这个理解有错吗?
qwerjj
6楼-- · 2019-10-16 19:18
密耳 发表于 2016-12-26 13:03
这种还是用定时器来决定++,吧,别用delay.再加上while,程序不用干别的了

怎么用定时器决定?你的意思是定时器每到一次更新事件才执行按键扫描?

一周热门 更多>