OpenEdv-开源电子网

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

STM32按键输入判断语句不同,效果也不同

[复制链接]

3

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2020-2-26
在线时间
36 小时
发表于 2020-3-14 16:24:30 | 显示全部楼层 |阅读模式
1金钱
在按键输入实验对KEY-Scan返回的值作判断来翻转LED灯或者蜂鸣器,以下两个程序有什么差别?
使用switch响应效果很好,但使用if蜂鸣器有杂音,LED响应时行时不行,求大神解答下这两个程序有什么区别?
/****************************************************************
while(1)
        {
                key=KEY_Scan(0);        //得到键值
                   if(key)
                {                                                  
                        switch(key)
                        {                                 
                                case WKUP_PRES:        //控制蜂鸣器
                                        BEEP=!BEEP;
                                        break;
                                case KEY1_PRES:        //控制LED1翻转         
                                        LED1=!LED1;
                                        break;
                                case KEY0_PRES:        //同时控制LED0,LED1翻转
                                        LED0=!LED0;
                                        LED1=!LED1;
                                        break;
                        }
                }else delay_ms(10);

/******************************************************************************

******************************************************************************
while(1)
{
                key=KEY_Scan(1);
                if(key==KEY0_PRES)
                {
                        LED0=!LED0;               
                        LED1=!LED1;                       
                }
                else if(key==KEY1_PRES)
                {
                        LED0=!LED0;
                }
                else if(key==WKUP_PRES)
                {
                        BEEP=!BEEP;
                }
                else
                {
                        delay_ms(10);
                }

*******************************************************************

最佳答案

查看完整内容[请看2#楼]

switch语句里,你用的是“不支持连按”,相当于按键按一次,LED及蜂鸣器动作只响应一次,现象当然对了; if语句里,你用的是“支持连按”,只要按键按下,每10ms就响应一次动作,当然蜂鸣器 led状态会每10ms变一次,这不就是你看到的现象
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2018-7-6
在线时间
133 小时
发表于 2020-3-14 16:24:31 | 显示全部楼层
switch语句里,你用的是“不支持连按”,相当于按键按一次,LED及蜂鸣器动作只响应一次,现象当然对了;
if语句里,你用的是“支持连按”,只要按键按下,每10ms就响应一次动作,当然蜂鸣器  led状态会每10ms变一次,这不就是你看到的现象
回复

使用道具 举报

0

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2018-7-6
在线时间
133 小时
发表于 2020-3-14 18:05:41 | 显示全部楼层
两个程序为啥取按键值的时候,一个使用“支持连按”操作?一个使用不支持连按操作?你得弄一样了两个程序才有可比性啊
回复

使用道具 举报

0

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2018-7-6
在线时间
133 小时
发表于 2020-3-14 18:17:11 | 显示全部楼层
写程序要的是仔细,如果真的以后打算干这个工作,要仔细耐心看看
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-22 10:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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