Member 13184617 Ответов: 1

Могу ли я изменить _delay_ms(); для проверки нажатия клавиши? Если да, то как?


У меня есть проблема, когда _delay_ms (); встает у меня на пути. Он в основном ждет, пока он не будет завершен, а затем запускает другой код. Так есть ли какой-нибудь способ заставить меня читать клавиатуру в _delay_ms();? Я работаю в AtmelStudio.


Вот мой код:

int EndOfGame()
{
	char key; 
	int result = 1; 
	key = KBD_GetKey();
	//I initially  tried this:
        //display_msg = DSIP_END_SCORE;
	//if (key == BTN_OK) return result;
	//_delay_ms(2000);
	
	int i, countdown;
	for(i = 0; i<1000 && key==0; i++){
		countdown = 0;
		display_msg = DISP_REFRESH_ALL; //refresh screen
		display_msg = DSIP_END_SCORE; //displays end score
       
		while(countdown++ <= 1000)
			if (key == BTN_OK) return result; _delay_ms(1);
			if (key == 0) _delay_ms(9000);
		//_delay_ms(10);
		//display_msg=DSIP_END_SCORE;
		//if (key == BTN_OK) return result;
		//return result;
	}
	return result;
}


Что я уже пробовал:

Я пытался:

display_msg = DSIP_END_SCORE;
        _delay_ms(10000);
	if (key != 0){
		switch (key)
		{
			case BTN_OK:
			return result;
			break;
		}
	} 

Richard MacCutchan

Вы можете изменить время задержки или полностью удалить его.

1 Ответов

Рейтинг:
2

Daniel Pfeffer

Лучше всего написать свою собственную функцию _delay_ms_and_read_keyboard (). Псевдокод будет выглядеть примерно так:

1. значение start_time = current_time_in_ms()
2. пока (current_time_in_ms() - значение start_time &ЛТ; задержка)
2.1 если (нажатие клавиши готово), считайте и возвращайте (нажатие клавиши)
2.2 Конец в то время как
3. возврат (нажатие клавиши не найдено)

Вам нужно будет изучить определения трех необходимых функций (получить текущее время, проверить нажатие клавиши, прочитать нажатие клавиши) в вашей системе.