您的位置:

c语言识别键盘,c语言从键盘输入是什么意思

本文目录一览:

C语言键盘内容读取

综观TC提供的键盘输入函数,以bioskey函数为最合适选择。

int bioskey(int cmd);

使用BIOS中断0x16执行各种键盘操作。参数cmd确定实际得操作。

bioskey的返回值由cmd决定:

0:低8位非0,返回在队列中等待的下一输入键的ascii字符或键盘的下一次按键输入的ascii字符。低8位为0,则高8位为扩展键盘码。

1:测试是否有可读的输入键,为0,则没有。Ctrl_break 返回0xffff(-1)。否则,返回下一个输入键。键值还保存,供下次cmd=0时bioskey调用返回。

2:请求当前换档键状态。状态值由下列值相或(or)得到:

位7 0x80 Insert ON

6 0x40 Caps ON

5 0x20 Numlock ON

4 0x10 Scroll Lock ON

3 0x08 ALT

2 0x04 CTRL

1 0x02 - SHIFT

0 0x01 - SHIFT

为了方便起见,我们首先定义一些常用功能键的键值。

#define ReturnKey 0x0d

#define ESC 0x1b

#define Back 0x08

#define LeftArrow 0x4b00

#define RightArrow 0x4d00

#define UpArrow 0x4800

#define DownArrow 0x5000

#define PageUp 0x4900

#define PageDown 0x5100

#define Home 0x4700

#define End 0x4f00

#define F1 0x3b00

#define F2 0x3c00

#define F3 0x3d00

#define F4 0x3e00

#define F5 0x3f00

#define F6 0x4000

#define F7 0x4100

#define F8 0x4200

#define F9 0x4300

#define F10 0x4400

int GetKey(void)

{

int tKey;

while(bioskey(1)==0)

;

tKey=bioskey(0);

if ((tKey 0xff)!=0)

tKey=tKey 0xff;

return tKey;

}

以上代码,可基本完成常用程序键盘读取操作。

但我们必须注意到,对于函数GetKey的定义中,bioskey函数的使用,我们只是对cmd=0,1的情况进行了处理,而对于cmd=2,也即换档键状态没有进行处理,因而诸如ctrl-home等等GetKey不能进行相应的接收,如果确实需要,须继续扩充GetKey函数。

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

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

bit keychk()    //单一按键检测

{

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

{

delay();     //延时去抖

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

}

return(0);

}

unsigned char kbscan(void)    //矩阵扫描按键检测

{

unsigned char sccode,recode;

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

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

{

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

if ((P10x0f)!= 0x0f)

{

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

while((sccode0x01)!=0)

{

P1=sccode;

if((P10x0f)!=0x0f)

{

recode=(P10x0f)|0xf0;

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

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

}

else

sccode=(sccode1)|0x01;

}

}

}

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

}

在c语言中什么函数能实现识别键盘上的按键?

添加WM_KEYDOWN函数。在函数体中case WM_KEYDOWN: if (wParam==VK_LEFT)//方向键左 { rect1.left-=10; rect1.right-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_RIGHT)//方向键右 { rect1.left+=10; rect1.right+=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_UP)//方向键上 { rect1.top-=10; rect1.bottom-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_DOWN)//方向键下 { rect1.top+=10; rect1.bottom+=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_PRIOR)//PG UP { rect1.top-=10; rect1.bottom-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_NEXT)//PG DN { rect1.top+=10; rect1.bottom+=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_HOME)//HOME { rect1.left-=10; rect1.right-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_END)//END { rect1.left+=10; rect1.right+=10; InvalidateRect (hWnd,NULL,TRUE); } break;

c语言中如何识别键盘输入的方向键?

用windows API里面有一个LRESULT CALLBACK WndProc( HWND hWnd, // 窗口的句柄

UINT uMsg, // 窗口的消息

WPARAM wParam, // 附加的消息内容

LPARAM lParam) // 附加的消息内容

这个消息响应函数,然后用switch语句对于 case WM_KEYDOWN:即键盘按下时的消息响应,这个时候再判断传进来的参数wParam的值,方向键对应键值分别为VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT,下面是一个例子,你自己看看:

LRESULT CALLBACK WndProc( HWND hWnd, // 窗口的句柄

UINT uMsg, // 窗口的消息

WPARAM wParam, // 附加的消息内容

LPARAM lParam) // 附加的消息内容

{

switch (uMsg) // 检查Windows消息

{

case WM_ACTIVATE: // 监视窗口激活消息

{

if (!HIWORD(wParam)) // 检查最小化状态 HIWORD取后面参数的高16位

{

active=TRUE; // 程序处于激活状态

}

else

{

active=FALSE; // 程序不再激活

}

return 0; // 返回消息循环

}

case WM_SYSCOMMAND: // 系统中断命令

{

switch (wParam) // 检查系统调用

{

case SC_SCREENSAVE: // 屏保要运行?

case SC_MONITORPOWER: // 显示器要进入节电模式?

return 0; // 阻止发生

}

break; // 退出

}

case WM_CLOSE: // 收到Close消息?

{

PostQuitMessage(0); // 发出退出消息

return 0; // 返回

}

case WM_KEYDOWN: // 有键按下么?

{

switch (wParam)

{

case VK_UP:

MOVEUP();

return 0;

}

}

case WM_KEYUP: // 有键放开么?

{

keys[wParam] = FALSE; // 如果是,设为FALSE

return 0; // 返回

}

case WM_SIZE: // 调整OpenGL窗口大小

{

ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); // LoWord=Width,HiWord=Height

return 0; // 返回

}

}

return DefWindowProc(hWnd,uMsg,wParam,lParam);

}

希望对你有所帮助。

c语言如何识别键盘按键的长按与抬起动作,求助

在应用层实现应该用到windows.h;而在核心层可以不必用到bios.h和windows.h.单说记录键盘动作在核心层实现的方法也是有许多种,讲都讲不完.你可以搜索:键盘驱动