乐观的悲观主义者909 2023-03-08 11:14 采纳率: 50%
浏览 50

关于#stm32#的问题:按键状态一直没被检测到按下,但是我把下面else里面的内容注释后(语言-c语言)


parseGpsBuffer();//获取gps位置信息
        Key_Statu_Read();//读取按键状态
        
        if(k_sta.key1==1)//按下
        {
            
            printf("{ \"GPS\":\"%s%s %s%s\", \"warning\":%d}",Save_Data.latitude,Save_Data.N_S,Save_Data.longitude,Save_Data.E_W,1);    //往串口打印位置信息和报警信息1
              L_LED_D_ON;
              HAL_Delay(1500);
              L_LED_D_OFF;
              k_sta.key1=0;    
        }
        else{           //没按下
                        HAL_Delay(1500);
            printf("{ \"GPS\":\"%s%s %s%s\", \"warning\":%d}",Save_Data.latitude,Save_Data.N_S,Save_Data.longitude,Save_Data.E_W,0);//发送位置信息和报警信息0
                        HAL_Delay(1500);
        }

上面这段代码运行后,按下按键,按键状态一直没被检测到按下,怎么按都没有用,一直输出的是下面没按下的信息,但是我把下面else里面的内容注释后,按下按键又是可以响应的,这是什么原因呢,解决方法是是啥

  • 写回答

4条回答 默认 最新

  • Web Security Loop 2023-03-08 11:24
    关注
    • 参考GPT的内容和自己的思路:

    • 根据你提供的代码和描述,很可能是因为在else语句中的HAL_Delay()函数延迟了程序的执行时间,导致按键状态检测失败。

    • 在程序中使用延迟函数(如HAL_Delay())时,需要注意延迟的时间不能过长,否则会影响程序的响应能力。在你的代码中,每个else语句内部都有一个HAL_Delay(1500)的延迟,这意味着程序在这里会暂停执行1.5秒钟,如果按键在此期间被按下,它的状态就无法被检测到。

    • 要解决这个问题,可以尝试在else语句中移除HAL_Delay()函数,或将延迟的时间减少到可以接受的范围内。另外,如果你需要在按键按下时延迟一段时间再进行其他操作,可以使用定时器来实现,而不是使用延迟函数。
    • 根据你的描述,你可以尝试修改代码,将else语句中的延迟函数去掉或者减少时间,或者使用定时器来实现延迟功能。下面是一个示例代码,你可以参考一下:
    parseGpsBuffer(); //获取gps位置信息
    Key_Statu_Read();  //读取按键状态
    
    if (k_sta.key1 == 1) //按下
    {
        printf("{ \"GPS\":\"%s%s %s%s\", \"warning\":%d}", Save_Data.latitude, Save_Data.N_S, Save_Data.longitude, Save_Data.E_W, 1); //往串口打印位置信息和报警信息1
        L_LED_D_ON;
        HAL_Delay(1500);
        L_LED_D_OFF;
        k_sta.key1 = 0;
    }
    else
    { //没按下
        printf("{ \"GPS\":\"%s%s %s%s\", \"warning\":%d}", Save_Data.latitude, Save_Data.N_S, Save_Data.longitude, Save_Data.E_W, 0); //发送位置信息和报警信息0
        HAL_Delay(500); //减少延迟时间
    }
    
    
    
    • 在上述代码中,我将else语句中的延迟时间从1500毫秒减少到了500毫秒。如果还是会影响到按键状态的检测,你可以将延迟时间进一步减少,或者使用定时器来代替延迟函数,具体实现可以参考单片机的定时器模块使用手册。
    评论

报告相同问题?

问题事件

  • 创建了问题 3月8日

悬赏问题

  • ¥50 求大神教题,这个代码和讲解思路都怎么写呀,完全卡住了
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument