永发信息网

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

答案:5  悬赏:30  手机版
解决时间 2021-11-17 23:56
C语言 如何在一段时间内检测键盘是否按下
最佳答案
C语言实现的键盘检测:


int JR_AnyKeys(void);


int JR_GetKeyNum(void);


int JR_IsKeyDown(const int key);

BUG:在一次检测中多次调用函数JR_GetKeyNum()就会出错了。
FIX:把JR_KeyBoard.c文件中的JR_GetKeyNum()函数里面的第一句“JR_AnyKeys();”注释掉就可以了。
全部回答
先获取时间,比较过期时间,以秒为单位,
#include
#include
main()
{
int key;
for(;;){
key=bioskey(0);
if (key==0x11b)
break;
else
printf("0x%x\n",key);
}
}
int key=0,i=0;
while(key==0&&i<100)
{
key=bioskey(0);
printf("%d\n",i);
++i;
}
#include
#include
main()
{
int key;
for(;;)
{
if (bioskey(1))
key=bioskey(0);
else
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.将已读取的键盘输入从缓冲区删除
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
北京西到安康的261次列车经过哪些站
甲乙丙三辆车共运货物115吨,其中甲车与乙车
急求N0Baby的舞蹈视频完整高清版下载
梅拉奇珠宝怎么样,标价15980的吊坠实际价格
内地学生拥有台胞证高考待遇问题
迈阿密大学世界排名高不高
哪些学校适合用校宝收银宝来收学费?
刚新办的社保卡,初始密码是多少
浙江省宁波市江东区明东社区居家养老服务中心
班里有个很贱的男生骂人,我就说你怎么能骂人
走出一段感情需要多长时间
换香炉有什么讲究
求问gtx980m用哪个版本的驱动好一点
拔网线黑屏,怎么实现?
2005年的宝马z43.0的跑了22万公里要多少钱
推荐资讯
福田履带收割机升降太快
仁和酒业53℃茅台原浆酒价格查询
翻译一个NOR开头的倒装长难句
浙成网络科技有限公司是个骗子
以前京剧收徒弟的时候要什么样的条件。
求火爆天王的绿帽改编版 有的私信我
空气制水机是把空气转化成水了吗?
娉娉袅袅十三余,豆蔻梢头二月初。打一成语
如何在redis配置masterName
为什么有时候一个人的心理年龄一年就可以长十
想去汤乐泉泡澡,需要自备什么东西吗
乙醛与新制的氢氧化铜反应的现象是什么?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?