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

发布时间:2023-01-06

本文目录一览:

  1. C语言键盘内容读取
  2. c语言怎样判断键盘按键的按下、释放?
  3. 在c语言中什么函数能实现识别键盘上的按键?
  4. c语言中如何识别键盘输入的方向键?
  5. 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 ((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;
            }
        }
    }
    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。单说记录键盘动作在核心层实现的方法也是有许多种,讲都讲不完。你可以搜索:键盘驱动