Il codice a dire il vero è un po' confuso...

Il problema di kbhit() lo puoi risolvere così - anche se è un metodo un po' grezzo, ma non mi viene altro in mente...
Codice:
int main(void)
{
int cycle = 1;
/* ... */
while (cycle)
{
unsigned int x;
_bios_timeofday(_TIME_GETCLOCK, &bios_time);
/* ... */
for (x = 0; x < 900; x++) {
cycle = (!kbhit());
if (!cycle)
break;
delay(10);
}
}
/* ... */
}