OpenEdv-开源电子网

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

stm32按键功能出错,不能正常使用

[复制链接]

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2020-9-2
在线时间
41 小时
发表于 2021-1-12 16:11:49 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 binzhang 于 2021-1-12 16:13 编辑

我stm32库函数做按键检查,当我没有按键时但是总会出现第一个按键会识别出错。问题如图:


这个是在我按键没有按下的情况它总是出现这个状况。
u8 KEY_Scan(u8 mode)
{
        static u8 key=1;
        if(mode==1) //连续按键按下
                key=1;
        if(key==1&&(key1==0||key2==0||key3==0||key4==0||key5==0||key6==0||key7==0||key8==0)) //任意一个按键按下
        {
                delay_ms(10);  //消抖
                key=0;
                if(key1==0)
                {
                        return key1_val;
                }
                else if(key2==0)
                {
                        return key2_val;
                }
                else if(key3==0)
                {
                        return key3_val;
                }
                else if(key4==0)
                {
                        return key4_val;
                }
                else if(key5==0)
                {
                        return key5_val;
                }
                else if(key6==0)
                {
                        return key6_val;
                }
                else if(key7==0)
                {
                        return key7_val;
                }
                else if(key8==0)
                {
                        return key8_val;
                }
               
        }
        else if(key1==1&&key2==1&&key3==1&&key4==1&&key5==1&&key6==1&&key7==1&&key8==1)    //无按键按下
        {
                key=1;
        }
        
        return 0;
}


这个是按键扫描程序
//按键1,按键2控制抬杆的上升和下降
                if(key1_val==KEY_Scan(1))
                {
                        up();                        
                        return flag=1;
                }
                if(key2_val==KEY_Scan(1))
                {
                        down();                        
                        return flag=1;
                }
                //按键3和按键4用来控制视频放大和缩小
                if(key3_val==KEY_Scan(1))
                {
        
                        enlarge();
                        return flag=1;
                }
                if(key4_val==KEY_Scan(1))
                {
        
                        shrink();
                        return flag=1;
                }
                //按键5用来控制保存和不保存视频
                if(key5_val==KEY_Scan(1))
                {
                        saveVideo();               
                        return flag=1;
                }
                //按键6用与截图功能
                if(key6_val==KEY_Scan(1))
                {
                        Screenshort();                        
                        return flag=1;
                }
                //按键7用来控制led灯的开与关
                if(key7_val==KEY_Scan(1))
                {
                        ledClose();
                        return flag=1;
                }
                //米数清零
                if(key8_val==KEY_Scan(1))
                {        
                        clearCnt();
                        return flag=1;
                }
                if(0==KEY_Scan(1))
                {
                        moto_stop();
                }
                stop();
                return flag=1;


3VA%VD}WAZ)LRLI]K73{70I.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3369
金钱
3369
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-1-12 18:11:03 | 显示全部楼层
扫描程序这样子有问题吧,一次扫描获取键值然后判断比较就可以了
不需要几个键搞几次扫描。
key_val = KEY_Scan(1);
switch(key_val )
{
case key1_val:
break;
.......
.......
default:
break;
}
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4477
金钱
4477
注册时间
2013-4-22
在线时间
336 小时
发表于 2021-1-12 19:57:06 | 显示全部楼层
这写法绝对有问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 19:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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