OpenEdv-开源电子网

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

战舰V3按键输入实验按键扫描函数C语言问题

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-3-1
在线时间
1 小时
发表于 2018-3-1 14:11:51 | 显示全部楼层 |阅读模式
按键扫描函数中“return 0;”不应该与“key_up=1;” 放一块用{}括起来吗?这样无按键按下时返回0。如果不括起来无论按键是否被按下都会返回0啊,这是怎么回事,请大神指教。谢谢!
按键扫描函数:
u8 KEY_Scan(u8 mode)
{         
        static u8 key_up=1;//按键按松开标志
        if(mode)key_up=1;  //支持连按                  
        if(key_up&&(KEY0==0||KEY1==0||KEY2==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(KEY2==0)return KEY2_PRES;
                        else if(WK_UP==1)return WKUP_PRES;
                }
        else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)
                key_up=1;             
        return 0;// 无按键按下
}

主函数部分程序:
while(1)
        {
                key=KEY_Scan(0);        //得到键值
                   if(key)
                                {                                                  
                                        switch(key)
                                        {                                 
                                                case WKUP_PRES:        //控制蜂鸣器
                                                        BEEP=!BEEP;
                                                        break;
                                                case KEY2_PRES:        //控制LED0翻转
                                                        LED0=!LED0;
                                                        break;
                                                case KEY1_PRES:        //控制LED1翻转         
                                                        LED1=!LED1;
                                                        break;
                                                case KEY0_PRES:        //同时控制LED0,LED1翻转
                                                        LED0=!LED0;
                                                        LED1=!LED1;
                                                        break;
                                        }
                                }
                else delay_ms(10);
        }         




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

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2018-3-1 14:19:26 | 显示全部楼层
有按键按下不是能返回其他三个键值吗
回复 支持 反对

使用道具 举报

2

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2017-12-12
在线时间
81 小时
发表于 2018-3-1 17:22:30 | 显示全部楼层
在这里要不要括号效果一样的吧,再说有按键按下上面已经有返回值了,就不执行下面代码了,你可以通过修改下载验证一下
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-3-1
在线时间
1 小时
 楼主| 发表于 2018-3-2 09:48:04 | 显示全部楼层
a5820736 发表于 2018-3-1 14:19
有按键按下不是能返回其他三个键值吗

是可以返回上面的四个键值,但returne 0不会返回吗?
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-3-1
在线时间
1 小时
 楼主| 发表于 2018-3-2 10:03:50 | 显示全部楼层
新手起航 发表于 2018-3-1 17:22
在这里要不要括号效果一样的吧,再说有按键按下上面已经有返回值了,就不执行下面代码了,你可以通过修改下 ...

验证过了,加括号之后WK_UP被按下时会错误控制LED0和LED1的反转,不加括号才对,只要有返回值就直接退出这个函数了吗?
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-3-1
在线时间
1 小时
 楼主| 发表于 2018-3-2 10:14:24 | 显示全部楼层
新手起航 发表于 2018-3-1 17:22
在这里要不要括号效果一样的吧,再说有按键按下上面已经有返回值了,就不执行下面代码了,你可以通过修改下 ...

加括号之后会有一个警告,warning:  #940-D: missing return statement at end of non-void function "KEY_Scan"。如果括起来之后在后面再加一个return 0警告消除一切正常。也就是说这个return 0必须要加。
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2018-6-18
在线时间
25 小时
发表于 2018-7-3 13:06:48 | 显示全部楼层
return 有返回值后 if语句就截止进行其它操作了
回复 支持 反对

使用道具 举报

19

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
466
金钱
466
注册时间
2018-6-8
在线时间
114 小时
发表于 2018-7-3 14:04:52 | 显示全部楼层
函数执行return 以后 后面的代码就不执行 直接跳出去了
回复 支持 反对

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2018-7-19 09:38:58 | 显示全部楼层
if( if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1)))这个条件如果不满足
并且
if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)这个条件也不满足,
即key_up=0,WK_UP=1,的时候这个函数就没有返回值,所以程序会报警告
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 12:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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