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里面的内容注释后,按下按键又是可以响应的,这是什么原因呢,解决方法是是啥
参考GPT的内容和自己的思路:
根据你提供的代码和描述,很可能是因为在else语句中的HAL_Delay()函数延迟了程序的执行时间,导致按键状态检测失败。
在程序中使用延迟函数(如HAL_Delay())时,需要注意延迟的时间不能过长,否则会影响程序的响应能力。在你的代码中,每个else语句内部都有一个HAL_Delay(1500)的延迟,这意味着程序在这里会暂停执行1.5秒钟,如果按键在此期间被按下,它的状态就无法被检测到。
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); //减少延迟时间
}
你这个函数是放在哪里调用的?位置不对的话,可能是HAL_Delay引起的,改用自写的延迟函数试试
可能是你在else语句中调用了HAL_Delay()函数,导致程序被阻塞,无法及时读取按键状态。建议将HAL_Delay()移动到if语句的末尾,在按下按键后等待一段时间再读取按键状态,这样可以避免阻塞程序。