OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2532|回复: 1

原子哥的key.c源文件里的KEY_Scan函数貌似有个小bug

[复制链接]

8

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2019-4-17
在线时间
34 小时
发表于 2020-3-31 16:06:30 | 显示全部楼层 |阅读模式
这个是原子哥的源代码:
u8 KEY_Scan(u8 mode)
{         
        static u8 key_up=1;//按键按松开标志
        if(mode)key_up=1;  //支持连按                  
        if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
        {
                delay_ms(10);//去抖动
                key_up=0;
                if(KEY0==0)return KEY0_PRES;
                else if(KEY1==0)return KEY1_PRES;
                else if(WK_UP==1)return WKUP_PRES;
        }else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;              
        return 0;// 无按键按下
}


里面消除抖动之后应该还要加一条判断语句才对,以下是修改过后的。
u8 KEY_Scan(u8 mode)
{
        static u8 key_up = 1;
        //连按模式下 mode = 1 软件将标志位置1
        if (mode)
        {
                key_up = 1;
        }
        //有按键按下 返回1,2,3
        if (key_up && (key0==0||key1==0||keywp==1))
        {
                delay_ms(10);
                if (key_up && (key0==0||key1==0||keywp==1))
                {
                key_up = 0;
                if(key0==0) return KEY0_PRES;
                else if (key1==0) return KEY1_PRES;
                else if (keywp==1) return KEY2_PRES;
                }       
               
        }
        //无按键按下 返回0
        else if (key0==1&&key1==1&&keywp==0)
        {
                key_up = 1;
        }
        return 0;
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-3-31 17:13:46 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-27 01:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表