C语言 如何在一段时间内检测键盘是否按下

如题,就像俄罗斯方块一样,如何做到在一段时间内,若有键按下则做相应的动作,没按下就自由下落.
我是用VC 6.0的,刚学编程,很多东西不懂,希望各位指教.
1楼的只是等待输入,然后检测键盘按键,没有限制时间,
我想要的是如果一段时间都没按的话就做别的事.

#include <bios.h>
#include <stdio.h>
main()
{
int key;
for(;;)
{
if (bioskey(1)) /*有键按下,读取键值*/
key=bioskey(0);
else /*无键按下,返回0*/
key=0;
switch(key)
{case 0: ...../*无按键,执行该操作*/
case 0xXXXXH:..../*不同键值,做不同处理*/
。。。。。
}
}
}

该程序段功能:
判断是否有键按下,若有进行不同操作,若无进行其他操作。

相关原理:
函数名: bioskey
功 能: 直接使用BIOS服务的键盘接口
函数原型:int bioskey (int cmd)
说明:bioskey()的函数原型在bios.h中
bioskey()完成直接键盘操作,cmd的值决定执行什么操作。

cmd = 1:
当cmd是1,bioskey()查询是否按下一个键,若按下一个键则返回非零值,否则返回0。

键盘有按键时,会把键值(扫描码)存入缓冲区,当需要判断是否有键按下时,扫描缓冲区,为空则无键按下,不为空则有键按下。注意:该功能并不清空缓冲区。

cmd = 0:
当cmd是0,bioskey()返回键盘键入的值。它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的低8位数存放该字符的ASCII码,高8位存放该键的扫描码;对于特殊键(如方向键、F1~F12等等),低8位为0,高8位字节存放该键的扫描码。

其操作步骤为:
1.检测缓冲区是否有数据;
2.没有则继续第一步;
3.读取缓冲区第一个单元中的键盘输入
4.读取的扫描码
5.将已读取的键盘输入从缓冲区删除
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-20
C语言实现的键盘检测:

/* 检测当前是否有键盘输入,并更新键值JR_KeyValue */
int JR_AnyKeys(void);

/* 返回键值ASCII码 或 对应自定义键值 */
int JR_GetKeyNum(void);

/* 检测指定键是否有按下 */
int JR_IsKeyDown(const int key);

BUG:在一次检测中多次调用函数JR_GetKeyNum()就会出错了。
FIX:把JR_KeyBoard.c文件中的JR_GetKeyNum()函数里面的第一句“JR_AnyKeys();”注释掉就可以了。
第2个回答  2009-12-23
先获取时间,比较过期时间,以秒为单位,
第3个回答  2009-12-17
#include <bios.h>
#include <stdio.h>
main()
{
int key;
for(;;){
key=bioskey(0);
if (key==0x11b) /*按了ESC键*/
break;
else
printf("0x%x\n",key); /*打印出各键对对应的键值*/
}
}
第4个回答  2009-12-19
int key=0,i=0;
while(key==0&&i<100)
{
key=bioskey(0);
printf("%d\n",i);
++i;
}

C语言 如何在一段时间内检测键盘是否按下
1.检测缓冲区是否有数据;2.没有则继续第一步;3.读取缓冲区第一个单元中的键盘输入 4.读取的扫描码 5.将已读取的键盘输入从缓冲区删除

如何获分辨键盘是输入了方向键,用的是C语言!
1、一般是使用getch获取方向键(←): 0xe04b方向键(↑): 0xe048方向键(→): 0xe04d方向键(↓): 0xe050一个方向键要用两个getch才能把它的数据获取完.然后对应着两个字符数据, 一个当高位, 一个当低位, 就可以判断按下的是什么键, 如:char ch = getch();if(ch == 0xe000) \/\/如...

求C语言程序(获联键盘输入的内容,并保存下来)
cmd);当cmd为1时,bioskey()检测是否有键按下。没有键按下时返回0;有键按下时返回按键码(任何按键码都不为0),但此时并不将检测到的按键码从键盘缓冲队列中清除。当cmd为0时,bioskey()返回键盘缓冲队列中的按键码,并将此按键码从键盘缓冲队列中清除。如果键盘缓冲队列为空,则一直等到有键按...

C语言问题解答。为什么这样可以说检测按键是否松开?
所以,是检测按键在500ms(50*10ms)内,按键是否松开。

用c语言编写程序,如何实现获取键盘按下的字符?
代码如下:include<stdio.h> include<ctype.h> int main(void){ char ch;int index;ch = getchar(); \/\/读入一个字符存入ch ch = tolower(ch); \/\/转换为小写字母 index = ch - 'a' + 1; \/\/计算序号 printf("%d\\n", index);return 0;} ...

C语言,4X4矩阵键盘怎么判断有再次按键发生?
你在程序检测到按键后,加个延时去抖,不要加松手检测。然后执行第一个按键相对应的程序。然后继续按键扫描。注意这里说的是继续,也就是继续往下检测。否则你的程序就只能执行第一个按键所对应的程序了。这样,就能检测到你第二次按键的键值了。当然,这个扫描是循环的。也就是说即使你第二次按的按键...

请写出程序当键盘按键被按下和放开按键时的扫描码程序,能显示出来...
commonVariable);\/\/这里根据需要看是否显示按下时的键值,添加显示代码 Disp_KeyValue(keyValue);P1 = 0xff;\/\/再次配置输入口 while( P1 != 0xff ) { \/\/这里可以添加按键时间长短检测代码,分析长短按键 ;} \/\/到这里,按键已松开,按键扫描和处理结束 } 额,这个就不知道了...不好意思...

如何用C语言实现按键功能?
然后你在Main函数里编写循环,检测按键然后做你想做的事情。。。while(1){ key=TestKey();\/\/调用键盘扫描,switch(key){ case 0x7e:P4=0xa1;break;\/\/0 按下相应的键显示相对应的码值 case 0x7d:Show1Menu();break;\/\/1 case 0x7b:P4=0x83;break;\/\/2 case 0x77:P4=0x88;break;\/\/3 ...

c语言怎么按方向键控制程序 ? c = getchar(); 我按了上 但是没有...
在C代码中可设置如下自编的intokey( )函数,用以接收方向键值。库函数kbhit( )是检测是否有按键被按下,库函数getch( )是读取键盘按键值的,不需按回车,也不回显。dir是代表方向的变量,根据不同的方向键值,让dir取1到4这四个不同的值。其它的程序段就可根据dir的值让东西朝某个方向移动。...

c语言用哪些语句能实现时间暂停?比方说按某一个键使时间暂停,再按一次...
时间是不能暂停的,计算机时钟一直在走,关机后靠电池还在走。如果你指让计算程序暂停,是可以的。按某一个键使程序暂停, 用 _kbhit() , 检查是否 按了指定的暂停键:include <conio.h> include <stdio.h> void main( void ){ int p;Lab:while( !_kbhit() ){ _cputs( "Please Hit me...

相似回答