当前位置:首页 » 编程语言 » c语言判断按下按键
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言判断按下按键

发布时间: 2023-01-15 18:48:09

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

#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.将已读取的键盘输入从缓冲区删除

❷ C语言如何检测是否按下功能键

有独立键盘和距阵键盘的独立键盘的很简单我就不写了距阵的我给你写一个//键盘扫描ucharKeys_Scan(){ucharsCode,kCode,i,k;//低4位置0,放入4行P1=0xf0;//若高4位出现0,则有键按下if((P1&0xf0)!=0xf0){DelayMS(2);if((P1&0xf0)!=0xf0){sCode=0xfe;//行扫描码初值for(k=0;k<4;k++)//对4行分别进行扫描{P1=sCode;if((P1&0xf0)!=0xf0){kCode=~P1;for(i=0;i<16;i++)//查表得到按键序号并返回if(kCode==KeyCodeTable[i])return(i);}elsesCode=_crol_(sCode,1);}}}return(-1);

❸ C语言如何实现判断2个键同时按下

如果是操作系统下,判断按键,需要调用相关操作系统的相关函数。

如果是单片机矩阵键盘,需要自己写循环延时判断按钮的电平状态。

我以window为例子,写了简单的判断W和A键同时按下的程序。

两个按键先后按下,之间存在间隔,我定义的常量,默认10毫秒,你需要自己改。

#include<stdio.h>
#include<windows.h>
#definedelayT10//两个按键先后按下的最大间隔,毫秒
intkeyDU(charkey);//判断按键是否按下,是返回1,否返回0
intmain()
{
intkw=0,kwl=0,ka=0,kal=0;

while(1)
{
kw=keyDU('W');
ka=keyDU('A');
if((kw==1&&kwl!=kw)||(ka==1&&kal!=ka))
{
while(delayT)//当其中一个键按下,每一毫秒检查一次两个键有没有同时按下
{
kw=keyDU('W');
ka=keyDU('A');
if(kw==0)
kwl=kw;
if(ka==0)
kal=ka;
if(kw==1&&kwl!=kw&&ka==1&&kal!=ka)
{
printf("W、A键同时被按下 ");
kwl=kw;
kal=ka;
break;
}
Sleep(1);
}
}

if(kw==0)
kwl=kw;
if(ka==0)
kal=ka;
}
return0;
}
intkeyDU(charkey)//判断按键是否按下,是返回1,否返回0
{
intdown=0;
down=GetKeyState(key);
if(down<0)
return1;
if(down>0)
return0;
return-1;
}

❹ c语言怎样判断键盘按键的按下、释放


C语言判断键盘按下和释放,是通过检测该键的状态来实现的。如果是单一的一个按键,那么直接检测该键是“1”还是“0”,就可以确定是按下还是释放。如果是矩阵键盘,那么需要发送扫描码,再检测输入值,来判断键盘中键的状态。以下举例说明:

bitkeychk()//单一按键检测

{

if(P1.0==0)//如果键按下

{

delay();//延时去抖

if(P1.0==0)return(1);//返回键状态


}

return(0);

}

unsignedcharkbscan(void)//矩阵扫描按键检测

{

unsignedcharsccode,recode;

P1=0x0f;//发0扫描,列线输入

if((P2&0x0f)!=0x0f)//有键按下

{

delay(20);//延时去抖动

if((P1&0x0f)!=0x0f)

{

sccode=0xef;//逐行扫描初值

while((sccode&0x01)!=0)

{

P1=sccode;

if((P1&0x0f)!=0x0f)

{

recode=(P1&0x0f)|0xf0;

while((P1&0x0f)!=0x0f);//等待键抬起

return((~sccode)+(~recode));

}

else

sccode=(sccode<<1)|0x01;

}

}

}

return0;//无键按下,返回0

}